aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/options_playlist.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/options_playlist.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/options_playlist.cpp')
-rw-r--r--Src/Winamp/options_playlist.cpp268
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