diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/options_playlist.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Winamp/options_playlist.cpp')
-rw-r--r-- | Src/Winamp/options_playlist.cpp | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/Src/Winamp/options_playlist.cpp b/Src/Winamp/options_playlist.cpp new file mode 100644 index 00000000..1e03a5db --- /dev/null +++ b/Src/Winamp/options_playlist.cpp @@ -0,0 +1,268 @@ +/** (c) Nullsoft, Inc. C O N F I D E N T I A L + ** Filename: + ** Project: + ** Description: + ** Author: + ** Created: + **/ + +#include <windowsx.h> + +#include "Main.h" +#include "resource.h" +#include "Options.h" +#include "SkinCOM.h" +#include "ExternalCOM.h" +#include "../nu/combobox.h" +#include "../nu/ns_wc.h" +#include <malloc.h> + +static int CALLBACK EnumFontsProc( LOGFONT *lplf, TEXTMETRIC *lptm, DWORD dwType, LPARAM lpData ) +{ + ComboBox_AddString( (HWND)lpData, lplf->lfFaceName ); + return TRUE; +} + + +void UpdatePlaylistFontSizeText( void ) +{ + HWND plpref = GetDlgItem( prefs_hwnd, IDC_RECT ); + plpref = GetWindow( plpref, GW_HWNDNEXT ); + if ( IsWindow( plpref ) ) + SetDlgItemInt( plpref, IDC_PLFONTSIZE, config_pe_fontsize, 0 ); +} + +void UpdateManualAdvanceState( void ) +{ + HWND plpref = GetDlgItem( prefs_hwnd, IDC_RECT ); + plpref = GetWindow( plpref, GW_HWNDNEXT ); + if ( IsWindow( plpref ) ) + CheckDlgButton( plpref, IDC_MANUALPLAYLISTADVANCE, config_pladv ? 0 : 1 ); +} + +// shuffle tab procedure +INT_PTR CALLBACK PlaybackOptionsProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + static int pl_prefs_init; + hi helpinfo[] = { + {IDC_PREFS_SHUFFLE_MORPH_RATE,IDS_P_O_SMS}, + {IDC_DEFEXT,IDS_P_O_DEFEXT}, + {IDC_RFL,IDS_P_O_RFL}, + + {IDC_MANUALPLAYLISTADVANCE,IDS_P_O_MPA}, + {IDC_PLNUMS,IDS_P_DISP_TNUMS}, + {IDC_PLFONTSIZE,IDS_P_DISP_PLFONT}, + }; + + DO_HELP(); + + if ( uMsg == WM_INITDIALOG ) + { + pl_prefs_init = 0; + SetDlgItemTextA( hwndDlg, IDC_DEFEXT, config_defext ); + SendDlgItemMessage( hwndDlg, IDC_DEFEXT, EM_LIMITTEXT, sizeof( config_defext ), 0 ); + + CheckDlgButton( hwndDlg, IDC_RFL, ( config_rofiob & 1 ) ? 1 : 0 ); + CheckDlgButton( hwndDlg, IDC_MANUALPLAYLISTADVANCE, config_pladv ? 0 : 1 ); + SendMessageW( GetDlgItem( hwndDlg, IDC_PREFS_SHUFFLE_MORPH_RATE ), TBM_SETRANGEMAX, 0, 50 ); + SendMessageW( GetDlgItem( hwndDlg, IDC_PREFS_SHUFFLE_MORPH_RATE ), TBM_SETRANGEMIN, 0, 0 ); + SendMessageW( GetDlgItem( hwndDlg, IDC_PREFS_SHUFFLE_MORPH_RATE ), TBM_SETPOS, 1, config_shuffle_morph_rate ); + CheckDlgButton( hwndDlg, IDC_PLNUMS, config_shownumsinpl ? 1 : 0 ); + CheckDlgButton( hwndDlg, IDC_PLZEROPAD, config_zeropadplnum ? 1 : 0 ); + EnableWindow( GetDlgItem( hwndDlg, IDC_PLZEROPAD ), config_shownumsinpl ); + + SendDlgItemMessage( hwndDlg, IDC_SPIN1, UDM_SETRANGE, 0, MAKELONG( 999, 1 ) ); + SetDlgItemInt( hwndDlg, IDC_PLFONTSIZE, config_pe_fontsize, 0 ); + + SendDlgItemMessageW( hwndDlg, IDC_PLDIRECTION, CB_ADDSTRING, 0, (LPARAM)getStringW( IDS_P_PLDIRECTION_AUTO, NULL, 0 ) ); + SendDlgItemMessageW( hwndDlg, IDC_PLDIRECTION, CB_ADDSTRING, 0, (LPARAM)getStringW( IDS_P_PLDIRECTION_L2R, NULL, 0 ) ); + SendDlgItemMessageW( hwndDlg, IDC_PLDIRECTION, CB_ADDSTRING, 0, (LPARAM)getStringW( IDS_P_PLDIRECTION_R2L, NULL, 0 ) ); + + SendDlgItemMessage( hwndDlg, IDC_PLDIRECTION, CB_SETCURSEL, config_pe_direction, 0 ); + + HWND fontcombo = GetDlgItem( hwndDlg, IDC_CUSTOMFONT ); + HDC dc = GetDC( NULL ); + EnumFonts( dc, NULL, (FONTENUMPROC)EnumFontsProc, (LPARAM)fontcombo ); + ReleaseDC( NULL, dc ); + + // select the font, but fall back to Arial if it doesn't exist + ComboBox combobox( fontcombo ); + if ( combobox.SelectString( playlist_custom_fontW ) == CB_ERR ) + { + StringCbCopyW( playlist_custom_fontW, sizeof( playlist_custom_fontW ), FALLBACK_FONT ); + combobox.SelectString( playlist_custom_fontW ); + } + CheckDlgButton( hwndDlg, IDC_NOCUSTOMFONT, config_custom_plfont ? 0 : 1 ); + if ( !config_custom_plfont ) + { + EnableWindow( GetDlgItem( hwndDlg, IDC_CUSTOMFONT ), FALSE ); + EnableWindow( GetDlgItem( hwndDlg, IDC_STATIC_CUSTOMFONT ), FALSE ); + } + + //WI(plscrollsize); + //WI(plmw2xscroll); + SetDlgItemInt( hwndDlg, IDC_PLSCROLL, config_plscrollsize, 0 ); + SendDlgItemMessage( hwndDlg, IDC_SPIN3, UDM_SETRANGE, 0, MAKELONG( 100, 1 ) ); + CheckDlgButton( hwndDlg, IDC_MOUSE_SCROLL_DOUBLE_LINES, config_plmw2xscroll ? 1 : 0 ); + pl_prefs_init = 1; + } + else if ( uMsg == WM_COMMAND ) + switch ( LOWORD( wParam ) ) + { + case IDC_PLDIRECTION: + if ( HIWORD( wParam ) == CBN_SELCHANGE ) + { + int l = SendDlgItemMessage( hwndDlg, IDC_PLDIRECTION, CB_GETCURSEL, 0, 0 ); + if ( l != CB_ERR ) + config_pe_direction = l; + + InvalidateRect( hPLWindow, NULL, FALSE ); + } + return 0; + + case IDC_NOCUSTOMFONT: + config_custom_plfont = !IsDlgButtonChecked( hwndDlg, IDC_NOCUSTOMFONT ); + EnableWindow( GetDlgItem( hwndDlg, IDC_CUSTOMFONT ), IsDlgButtonChecked( hwndDlg, IDC_NOCUSTOMFONT ) ? 0 : 1 ); + EnableWindow( GetDlgItem( hwndDlg, IDC_STATIC_CUSTOMFONT ), IsDlgButtonChecked( hwndDlg, IDC_NOCUSTOMFONT ) ? 0 : 1 ); + draw_reinit_plfont( 1 ); + InvalidateRect( hPLWindow, NULL, FALSE ); + JSAPI1_SkinChanged(); + break; + + case IDC_CUSTOMFONT: + if ( HIWORD( wParam ) == CBN_SELCHANGE ) + { + HWND fontcombo; + int idx, len; + wchar_t *t; + fontcombo = GetDlgItem( hwndDlg, IDC_CUSTOMFONT ); + ComboBox combobox( fontcombo ); + idx = combobox.GetSelection(); + len = combobox.GetTextLen( idx ); + t = (wchar_t *)_malloca( ( len + 1 ) * sizeof( wchar_t ) ); + combobox.GetText( idx, t ); + t[ len ] = 0; + StringCbCopyW( playlist_custom_fontW, sizeof( playlist_custom_fontW ), t ); + WideCharToMultiByteSZ( CP_ACP, 0, playlist_custom_fontW, -1, playlist_custom_font, 128, 0, 0 ); + _freea( t ); + draw_reinit_plfont( 1 ); + InvalidateRect( hPLWindow, NULL, FALSE ); + JSAPI1_SkinChanged(); + } + break; + + case IDC_PLNUMS: + { + int t = config_shownumsinpl; + config_shownumsinpl = IsDlgButtonChecked( hwndDlg, IDC_PLNUMS ) ? 1 : 0; + if ( config_shownumsinpl != t ) + { + _w_i( "shownumsinpl", config_shownumsinpl ); + draw_reinit_plfont( 1 ); + if ( config_pe_open ) + InvalidateRect( hPLWindow, NULL, FALSE ); + } + + EnableWindow( GetDlgItem( hwndDlg, IDC_PLZEROPAD ), config_shownumsinpl ); + } + break; + + case IDC_PLZEROPAD: + { + config_zeropadplnum = IsDlgButtonChecked( hwndDlg, IDC_PLZEROPAD ) ? 1 : 0; + InvalidateRect( hPLWindow, NULL, FALSE ); + } + break; + + case IDC_PLFONTSIZE: + if ( HIWORD( wParam ) == EN_CHANGE && pl_prefs_init ) + { + int s = 0, t = GetDlgItemInt( hwndDlg, IDC_PLFONTSIZE, &s, 0 ); + if ( t < 2 ) + t = 11; + + if ( t != config_pe_fontsize && s ) + { + config_pe_fontsize = t; + if ( hMainWindow ) + { + draw_reinit_plfont( 1 ); + InvalidateRect( hPLWindow, NULL, FALSE ); + } + + JSAPI1_SkinChanged(); + } + } + break; + + case IDC_DEFEXT: + if ( HIWORD( wParam ) == EN_CHANGE ) + { + GetWindowTextA( GetDlgItem( hwndDlg, IDC_DEFEXT ), config_defext, sizeof( config_defext ) ); + } + break; + + case IDC_RFL: + config_rofiob &= ~1; + config_rofiob |= IsDlgButtonChecked( hwndDlg, IDC_RFL ) ? 1 : 0; + break; + + case IDC_MANUALPLAYLISTADVANCE: + { + int manadv = IsDlgButtonChecked( hwndDlg, IDC_MANUALPLAYLISTADVANCE ) ? 0 : 1; + if ( manadv != config_pladv ) + SendMessageW( hMainWindow, WM_COMMAND, WINAMP_FILE_MANUALPLADVANCE, 0 ); + + break; + } + + case IDC_MOUSE_SCROLL_DOUBLE_LINES: + config_plmw2xscroll = IsDlgButtonChecked( hwndDlg, IDC_MOUSE_SCROLL_DOUBLE_LINES ) ? 1 : 0; + break; + + case IDC_PLSCROLL: + if ( HIWORD( wParam ) == EN_CHANGE && pl_prefs_init ) + { + int s = 0, t = GetDlgItemInt( hwndDlg, IDC_PLSCROLL, &s, 0 ); + if ( t < 1 ) + t = 1; + + if ( t > 16 ) + t = 16; + + if ( t != config_plscrollsize && s ) + config_plscrollsize = t; + } + break; + + case IDC_SHUFFLE_HELP: + { + wchar_t title[ 64 ] = { 0 }; + MessageBoxW( hwndDlg, getStringW( IDS_SHUFFLE_MORPH_INFO, NULL, 0 ), + getStringW( IDS_SHUFFLE_MORPH_RATE, title, 64 ), 0 ); + } + break; + } + else if ( uMsg == WM_HSCROLL ) + { + HWND swnd = (HWND)lParam; + if ( swnd == GetDlgItem( hwndDlg, IDC_PREFS_SHUFFLE_MORPH_RATE ) ) + { + config_shuffle_morph_rate = (unsigned char)SendMessageW( GetDlgItem( hwndDlg, IDC_PREFS_SHUFFLE_MORPH_RATE ), TBM_GETPOS, 0, 0 ); + } + } + else if ( uMsg == WM_DESTROY ) + { + pl_prefs_init = 0; + } + + const int controls[] = + { + IDC_PREFS_SHUFFLE_MORPH_RATE, + }; + + if ( FALSE != DirectMouseWheel_ProcessDialogMessage( hwndDlg, uMsg, wParam, lParam, controls, ARRAYSIZE( controls ) ) ) + return TRUE; + + return FALSE; +} //shuffle
\ No newline at end of file |