summaryrefslogtreecommitdiffstats
path: root/gui/win32/preferences.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/win32/preferences.c')
-rw-r--r--gui/win32/preferences.c722
1 files changed, 722 insertions, 0 deletions
diff --git a/gui/win32/preferences.c b/gui/win32/preferences.c
new file mode 100644
index 0000000000..0063a6ac13
--- /dev/null
+++ b/gui/win32/preferences.c
@@ -0,0 +1,722 @@
+/*
+ MPlayer Gui for win32
+ Copyright (c) 2003 Sascha Sommer <saschasommer@freenet.de>
+ Copyright (c) 2006 Erik Augustson <erik_27can@yahoo.com>
+ Copyright (c) 2006 Gianluigi Tiesi <sherpya@netfarm.it>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA
+*/
+
+#include <windows.h>
+#include <commctrl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libvo/video_out.h>
+#include <libao2/audio_out.h>
+#include <mixer.h>
+#include "interface.h"
+#include "gui.h"
+#include "mp_msg.h"
+#include "help_mp.h"
+#include "dialogs.h"
+#include "wincfg.h"
+
+extern int vo_doublebuffering;
+extern int vo_directrendering;
+extern int frame_dropping;
+extern int soft_vol;
+extern float audio_delay;
+extern int osd_level;
+extern char *dvd_device, *cdrom_device;
+extern char *proc_priority;
+
+static void set_defaults(void);
+
+static LRESULT CALLBACK PrefsWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+ HWND btn, label, edit1, edit2, edit3, updown1, updown2, track1, track2;
+ static HWND vo_driver, ao_driver, prio;
+ int i = 0, j = 0;
+ char dvddevice[MAX_PATH];
+ char cdromdevice[MAX_PATH];
+ char procprio[11];
+ float x = 10.0, y = 100.0, stereopos, delaypos;
+ stereopos = gtkAOExtraStereoMul * x;
+ delaypos = audio_delay * y;
+
+ switch (iMsg)
+ {
+ case WM_CREATE:
+ {
+ /* video and audio drivers */
+ label = CreateWindow("static", "Video Driver:",
+ WS_CHILD | WS_VISIBLE,
+ 10, 13, 70, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "Audio Driver:",
+ WS_CHILD | WS_VISIBLE,
+ 190, 13, 70, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "Extra stereo coefficient:",
+ WS_CHILD | WS_VISIBLE,
+ 10, 126, 115, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "Audio delay:",
+ WS_CHILD | WS_VISIBLE,
+ 36, 165, 115, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "OSD level:",
+ WS_CHILD | WS_VISIBLE,
+ 10, 264, 115, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "DVD device:",
+ WS_CHILD | WS_VISIBLE,
+ 80, 363, 115, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "CD device:",
+ WS_CHILD | WS_VISIBLE,
+ 202, 363, 115, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ label = CreateWindow("static", "Priority:",
+ WS_CHILD | WS_VISIBLE,
+ 217, 264, 115, 15, hwnd,
+ NULL, ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(label, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ vo_driver = CreateWindow("combobox", NULL,
+ CBS_DROPDOWNLIST | CB_SHOWDROPDOWN |
+ CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
+ WS_CHILD | WS_VISIBLE |
+ WS_VSCROLL | WS_TABSTOP,
+ 80, 10, 100, 160, hwnd,
+ (HMENU) ID_VO_DRIVER,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+
+ ao_driver = CreateWindow("combobox", NULL,
+ CBS_DROPDOWNLIST | CB_SHOWDROPDOWN |
+ CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
+ WS_CHILD | WS_VISIBLE |
+ WS_VSCROLL | WS_TABSTOP,
+ 260, 10, 100, 160, hwnd,
+ (HMENU) ID_AO_DRIVER,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+
+ prio = CreateWindow("combobox", NULL,
+ CBS_DROPDOWNLIST | CB_SHOWDROPDOWN |
+ CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS |
+ WS_CHILD | WS_VISIBLE |
+ WS_VSCROLL | WS_TABSTOP,
+ 260, 260, 100, 160, hwnd,
+ (HMENU) ID_PRIO,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+
+ /* checkboxes */
+ btn = CreateWindow("button", "Enable double buffering",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 25, 35, 150, 25,
+ hwnd, (HMENU) ID_DOUBLE,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Enable direct rendering",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 25, 57, 150, 25,
+ hwnd, (HMENU) ID_DIRECT,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Enable framedropping",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 25, 79, 150, 25,
+ hwnd, (HMENU) ID_FRAMEDROP,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Normalize sound",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 205, 35, 150, 25,
+ hwnd, (HMENU) ID_NORMALIZE,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Enable software mixer",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 205, 57, 150, 25,
+ hwnd, (HMENU) ID_SOFTMIX,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Enable extra stereo",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 205, 79, 150, 25,
+ hwnd, (HMENU) ID_EXTRASTEREO,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Enable cache",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 10, 200, 90, 25,
+ hwnd, (HMENU) ID_CACHE,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Enable autosync",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 192, 200, 100, 25, hwnd,
+ (HMENU) ID_AUTOSYNC,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Display videos in the sub window",
+ WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
+ 85, 227, 250, 25,
+ hwnd, (HMENU) ID_SUBWINDOW,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ /* osd level */
+ btn = CreateWindow("button", "None",
+ WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
+ 95, 260, 100, 25, hwnd,
+ (HMENU) ID_NONE,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Timer and indicators",
+ WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
+ 95, 280, 180, 25, hwnd,
+ (HMENU) ID_OSD1,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Progress bar only",
+ WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
+ 95, 300, 180, 25, hwnd,
+ (HMENU) ID_OSD2,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Timer, percentage, and total time",
+ WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
+ 95, 320, 180, 25, hwnd,
+ (HMENU) ID_OSD3,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Apply",
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+ 199, 395, 80, 25, hwnd,
+ (HMENU) ID_APPLY,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Cancel",
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+ 285, 395, 80, 25, hwnd,
+ (HMENU) ID_CANCEL,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ btn = CreateWindow("button", "Defaults",
+ WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+ 4, 395, 80, 25, hwnd,
+ (HMENU) ID_DEFAULTS,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(btn, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ /* extra stereo coefficient trackbar */
+ track1 = CreateWindow(TRACKBAR_CLASS, "Coefficient",
+ WS_CHILD | WS_VISIBLE | WS_TABSTOP |
+ WS_DISABLED | TBS_HORZ |
+ TBS_BOTTOM | TBS_NOTICKS,
+ 120, 120, 245, 35, hwnd,
+ (HMENU) ID_TRACKBAR1,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETRANGE, 1, MAKELONG(-100, 100));
+
+ /* audio delay */
+ track2 = CreateWindow(TRACKBAR_CLASS, "Audio delay",
+ WS_CHILD | WS_VISIBLE | WS_TABSTOP |
+ WS_DISABLED | TBS_HORZ |
+ TBS_BOTTOM | TBS_NOTICKS,
+ 120, 160, 245, 35, hwnd,
+ (HMENU) ID_TRACKBAR2,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETRANGE, 1, MAKELONG(-1000, 1000));
+
+ /* cache */
+ edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "cache",
+ WS_CHILD | WS_VISIBLE | WS_DISABLED |
+ ES_LEFT | ES_AUTOHSCROLL,
+ 105, 203, 40, 20, hwnd,
+ (HMENU) ID_EDIT1,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(edit1, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ updown1 = CreateUpDownControl(WS_CHILD | WS_VISIBLE |
+ WS_DISABLED | UDS_SETBUDDYINT |
+ UDS_ARROWKEYS | UDS_NOTHOUSANDS,
+ 145, 203, 20, 20, hwnd,
+ ID_UPDOWN1,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ (HWND)edit1, 0, 0, 0);
+ SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETRANGE32, (WPARAM)0, (LPARAM)65535);
+
+ /* autosync */
+ edit2 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "autosync",
+ WS_CHILD | WS_VISIBLE | WS_DISABLED |
+ ES_LEFT | ES_AUTOHSCROLL,
+ 300, 203, 40, 20, hwnd,
+ (HMENU) ID_EDIT2,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(edit2, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ updown2 = CreateUpDownControl(WS_CHILD | WS_VISIBLE |
+ WS_DISABLED | UDS_SETBUDDYINT |
+ UDS_ARROWKEYS | UDS_NOTHOUSANDS,
+ 340, 203, 20, 20, hwnd,
+ ID_UPDOWN2,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ (HWND)edit2, 0, 0, 0);
+ SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETRANGE32, (WPARAM)0, (LPARAM)10000);
+
+ /* dvd and cd devices */
+ edit3 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL,
+ WS_CHILD | WS_VISIBLE |
+ ES_LEFT | ES_AUTOHSCROLL,
+ 145, 360, 20, 20, hwnd,
+ (HMENU) ID_DVDDEVICE,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(edit3, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ edit3 = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL,
+ WS_CHILD | WS_VISIBLE |
+ ES_LEFT| ES_AUTOHSCROLL,
+ 260, 360, 20, 20, hwnd,
+ (HMENU) ID_CDDEVICE,
+ ((LPCREATESTRUCT) lParam) -> hInstance,
+ NULL);
+ SendMessage(edit3, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ while(video_out_drivers[i])
+ {
+ const vo_info_t *info = video_out_drivers[i++]->info;
+ if(!video_driver_list) gaddlist(&video_driver_list, (char *)info->short_name);
+ SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_ADDSTRING, 0, (LPARAM) info->short_name);
+ }
+ /* Special case for directx:noaccel */
+ SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_ADDSTRING, 0, (LPARAM) "directx:noaccel");
+ SendMessage(vo_driver, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ while(audio_out_drivers[j])
+ {
+ const ao_info_t *info = audio_out_drivers[j++]->info;
+ if(!audio_driver_list)
+ {
+ // FIXME: default priority (i.e. order in audio_out_drivers) should be fixed instead
+ // if win32 as default is really desirable
+ gaddlist(&audio_driver_list, "win32"/*(char *)info->short_name*/);
+ }
+ SendDlgItemMessage(hwnd, ID_AO_DRIVER, CB_ADDSTRING, 0, (LPARAM) info->short_name);
+ }
+ SendMessage(ao_driver, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ /* priority list, i'm leaving out realtime for safety's sake */
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "low");
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "belownormal");
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "normal");
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "abovenormal");
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_INSERTSTRING, 0, (LPARAM) "high");
+ SendMessage(prio, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ /* set our preferences on what we already have */
+ if(video_driver_list)
+ SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_SETCURSEL,
+ (WPARAM)SendMessage(vo_driver, CB_FINDSTRING, -1,
+ (LPARAM)video_driver_list[0]), 0);
+
+ if(audio_driver_list)
+ SendDlgItemMessage(hwnd, ID_AO_DRIVER, CB_SETCURSEL,
+ (WPARAM)SendMessage(ao_driver, CB_FINDSTRING, -1,
+ (LPARAM)audio_driver_list[0]), 0);
+
+ if(vo_doublebuffering)
+ SendDlgItemMessage(hwnd, ID_DOUBLE, BM_SETCHECK, 1, 0);
+ if(vo_directrendering)
+ SendDlgItemMessage(hwnd, ID_DIRECT, BM_SETCHECK, 1, 0);
+ if(frame_dropping)
+ SendDlgItemMessage(hwnd, ID_FRAMEDROP, BM_SETCHECK, 1, 0);
+ if(gtkAONorm)
+ SendDlgItemMessage(hwnd, ID_NORMALIZE, BM_SETCHECK, 1, 0);
+ if(soft_vol)
+ SendDlgItemMessage(hwnd, ID_SOFTMIX, BM_SETCHECK, 1, 0);
+ if(gtkAOExtraStereo)
+ {
+ SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_SETCHECK, 1, 0);
+ if(!guiIntfStruct.Playing)
+ {
+ EnableWindow(track1, 1);
+ EnableWindow(track2, 1);
+ }
+ }
+ else gtkAOExtraStereoMul = 1.0;
+ SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETPOS, 1, (LPARAM)stereopos);
+
+ if(audio_delay)
+ SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETPOS, 1, (LPARAM)delaypos);
+
+ if(gtkCacheOn) {
+ SendDlgItemMessage(hwnd, ID_CACHE, BM_SETCHECK, 1, 0);
+ EnableWindow(edit1, 1);
+ EnableWindow(updown1, 1);
+ }
+ else gtkCacheSize = 2048;
+ SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETPOS32, 0, (LPARAM)gtkCacheSize);
+
+ if(gtkAutoSyncOn) {
+ SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_SETCHECK, 1, 0);
+ EnableWindow(edit2, 1);
+ EnableWindow(updown2, 1);
+ }
+ else gtkAutoSync = 0;
+ SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETPOS32, 0, (LPARAM)gtkAutoSync);
+
+ if(sub_window)
+ SendDlgItemMessage(hwnd, ID_SUBWINDOW, BM_SETCHECK, 1, 0);
+
+ if(!osd_level)
+ SendDlgItemMessage(hwnd, ID_NONE, BM_SETCHECK, 1, 0);
+ else if(osd_level == 1)
+ SendDlgItemMessage(hwnd, ID_OSD1, BM_SETCHECK, 1, 0);
+ else if(osd_level == 2)
+ SendDlgItemMessage(hwnd, ID_OSD2, BM_SETCHECK, 1, 0);
+ else if(osd_level == 3)
+ SendDlgItemMessage(hwnd, ID_OSD3, BM_SETCHECK, 1, 0);
+
+ if(dvd_device)
+ SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_SETTEXT, 0, (LPARAM)dvd_device);
+ else SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
+
+ if(cdrom_device)
+ SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_SETTEXT, 0, (LPARAM)cdrom_device);
+ else SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
+
+ if(proc_priority)
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL,
+ (WPARAM)SendMessage(prio, CB_FINDSTRING, -1,
+ (LPARAM)proc_priority), 0);
+
+ else SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL, 2, 0);
+
+ break;
+ }
+ case WM_CTLCOLORDLG:
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORBTN:
+ case WM_CTLCOLORSTATIC:
+ {
+ HDC hdc = (HDC)wParam;
+ SetBkMode(hdc, TRANSPARENT);
+ return (INT_PTR)SOLID_GREY;
+ }
+ break;
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case ID_EXTRASTEREO:
+ {
+ if(SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ {
+ EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR1), 1);
+ EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR2), 1);
+ } else {
+ EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR1), 0);
+ EnableWindow(GetDlgItem(hwnd, ID_TRACKBAR2), 0);
+ SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETPOS, 1, (LPARAM)10.0);
+ SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETPOS, 1, (LPARAM)0);
+ }
+ break;
+ }
+ case ID_CACHE:
+ {
+ if(SendDlgItemMessage(hwnd, ID_CACHE, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ {
+ EnableWindow(GetDlgItem(hwnd, ID_EDIT1), 1);
+ EnableWindow(GetDlgItem(hwnd, ID_UPDOWN1), 1);
+ } else {
+ EnableWindow(GetDlgItem(hwnd, ID_EDIT1), 0);
+ EnableWindow(GetDlgItem(hwnd, ID_UPDOWN1), 0);
+ SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETPOS32, 1, (LPARAM)2048);
+ }
+ break;
+ }
+ case ID_AUTOSYNC:
+ {
+ if(SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ {
+ EnableWindow(GetDlgItem(hwnd, ID_EDIT2), 1);
+ EnableWindow(GetDlgItem(hwnd, ID_UPDOWN2), 1);
+ } else {
+ EnableWindow(GetDlgItem(hwnd, ID_EDIT2), 0);
+ EnableWindow(GetDlgItem(hwnd, ID_UPDOWN2), 0);
+ SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETPOS32, 1, (LPARAM)0);
+ }
+ break;
+ }
+ case ID_DEFAULTS:
+ {
+ set_defaults();
+ SendDlgItemMessage(hwnd, ID_VO_DRIVER, CB_SETCURSEL,
+ (WPARAM)SendMessage(vo_driver, CB_FINDSTRING, -1, (LPARAM)"directx"), 0);
+
+ SendDlgItemMessage(hwnd, ID_AO_DRIVER, CB_SETCURSEL,
+ (WPARAM)SendMessage(ao_driver, CB_FINDSTRING, -1, (LPARAM)"dsound"), 0);
+
+ SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL,
+ (WPARAM)SendMessage(prio, CB_FINDSTRING, -1, (LPARAM)proc_priority), 0);
+
+ SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_SETPOS, 1, (LPARAM)10.0);
+ SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_SETPOS, 1, (LPARAM)0.0);
+ SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_SETPOS32, 0, (LPARAM)gtkCacheSize);
+ SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_SETPOS32, 0, (LPARAM)gtkAutoSync);
+ SendDlgItemMessage(hwnd, ID_DOUBLE, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_DIRECT, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_FRAMEDROP, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_NORMALIZE, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_SOFTMIX, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_CACHE, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_SUBWINDOW, BM_SETCHECK, 1, 0);
+ SendDlgItemMessage(hwnd, ID_NONE, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_OSD1, BM_SETCHECK, 1, 0);
+ SendDlgItemMessage(hwnd, ID_OSD2, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_OSD3, BM_SETCHECK, 0, 0);
+ SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
+ SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_SETTEXT, 0, (LPARAM)"D:");
+ SendMessage(hwnd, WM_COMMAND, (WPARAM)ID_APPLY, 0);
+ break;
+ }
+ case ID_CANCEL:
+ DestroyWindow(hwnd);
+ return 0;
+ case ID_APPLY:
+ {
+ int strl;
+ if(guiIntfStruct.Playing) guiGetEvent(guiCEvent, (void *)guiSetStop);
+
+ /* Set the video driver */
+ gfree(video_driver_list[0]);
+ strl = SendMessage(vo_driver, CB_GETCURSEL, 0, 0);
+ video_driver_list[0] = malloc(strl);
+ SendMessage(vo_driver, CB_GETLBTEXT, (WPARAM)strl,
+ (LPARAM)video_driver_list[0]);
+
+ /* Set the audio driver */
+ gfree(audio_driver_list[0]);
+ strl = SendMessage(ao_driver, CB_GETCURSEL, 0, 0);
+ audio_driver_list[0] = malloc(strl);
+ SendMessage(ao_driver, CB_GETLBTEXT, (WPARAM)strl,
+ (LPARAM)audio_driver_list[0]);
+
+ /* Set the priority level */
+ SendMessage(prio, CB_GETLBTEXT, (WPARAM)SendMessage(prio, CB_GETCURSEL, 0, 0), (LPARAM)procprio);
+ proc_priority = strdup(procprio);
+
+ /* double buffering */
+ if(SendDlgItemMessage(hwnd, ID_DOUBLE, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ vo_doublebuffering = 1;
+ else vo_doublebuffering = 0;
+
+ /* direct rendering */
+ if(SendDlgItemMessage(hwnd, ID_DIRECT, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ vo_directrendering = 1;
+ else vo_directrendering = 0;
+
+ /* frame dropping */
+ if(SendDlgItemMessage(hwnd, ID_FRAMEDROP, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ frame_dropping = 1;
+ else frame_dropping = 0;
+
+ /* normalize */
+ if(SendDlgItemMessage(hwnd, ID_NORMALIZE, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ gtkAONorm = 1;
+ else gtkAONorm = 0;
+
+ /* software mixer */
+ if(SendDlgItemMessage(hwnd, ID_SOFTMIX, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ soft_vol = 1;
+ else soft_vol = 0;
+
+ /* extra stereo */
+ if(SendDlgItemMessage(hwnd, ID_EXTRASTEREO, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ gtkAOExtraStereo = 1;
+ else {
+ gtkAOExtraStereo = 0;
+ gtkAOExtraStereoMul = 10.0;
+ }
+ gtkAOExtraStereoMul = SendDlgItemMessage(hwnd, ID_TRACKBAR1, TBM_GETPOS, 0, 0) / 10.0;
+
+ /* audio delay */
+ audio_delay = SendDlgItemMessage(hwnd, ID_TRACKBAR2, TBM_GETPOS, 0, 0) / 100.0;
+
+ /* cache */
+ if(SendDlgItemMessage(hwnd, ID_CACHE, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ gtkCacheOn = 1;
+ else gtkCacheOn = 0;
+ gtkCacheSize = SendDlgItemMessage(hwnd, ID_UPDOWN1, UDM_GETPOS32, 0, 0);
+
+ /* autosync */
+ if(SendDlgItemMessage(hwnd, ID_AUTOSYNC, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ gtkAutoSyncOn = 1;
+ else gtkAutoSyncOn = 0;
+ gtkAutoSync = SendDlgItemMessage(hwnd, ID_UPDOWN2, UDM_GETPOS32, 0, 0);
+
+ /* sub window */
+ if(SendDlgItemMessage(hwnd, ID_SUBWINDOW, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ sub_window = 1;
+ else sub_window = 0;
+
+ /* osd level */
+ if(SendDlgItemMessage(hwnd, ID_NONE, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ osd_level = 0;
+ else if(SendDlgItemMessage(hwnd, ID_OSD1, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ osd_level = 1;
+ else if(SendDlgItemMessage(hwnd, ID_OSD2, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ osd_level = 2;
+ else if(SendDlgItemMessage(hwnd, ID_OSD3, BM_GETCHECK, 0, 0) == BST_CHECKED)
+ osd_level = 3;
+
+ /* dvd and cd devices */
+ SendDlgItemMessage(hwnd, ID_DVDDEVICE, WM_GETTEXT, MAX_PATH, (LPARAM)dvddevice);
+ dvd_device = strdup(dvddevice);
+ SendDlgItemMessage(hwnd, ID_CDDEVICE, WM_GETTEXT, MAX_PATH, (LPARAM)cdromdevice);
+ cdrom_device = strdup(cdromdevice);
+
+ MessageBox(hwnd, "You must restart MPlayer for the changes to take effect.", "MPlayer - Info:", MB_OK);
+ DestroyWindow(hwnd);
+ break;
+ }
+ }
+ return 0;
+ }
+ case WM_DESTROY:
+ PostQuitMessage (0);
+ return 0;
+ }
+ return DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+
+void display_prefswindow(gui_t *gui)
+{
+ HWND hWnd;
+ HINSTANCE hInstance = GetModuleHandle(NULL);
+ WNDCLASS wc;
+ int x, y;
+ if(FindWindow(NULL, "MPlayer - Preferences")) return;
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = PrefsWndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hCursor = LoadCursor(NULL,IDC_ARROW);
+ wc.hIcon = gui->icon;
+ wc.hbrBackground = SOLID_GREY;
+ wc.lpszClassName = "MPlayer - Preferences";
+ wc.lpszMenuName = NULL;
+ RegisterClass(&wc);
+ x = (GetSystemMetrics(SM_CXSCREEN) / 2) - (375 / 2);
+ y = (GetSystemMetrics(SM_CYSCREEN) / 2) - (452 / 2);
+ hWnd = CreateWindow("MPlayer - Preferences",
+ "MPlayer - Preferences",
+ WS_POPUPWINDOW | WS_CAPTION,
+ x,
+ y,
+ 375,
+ 452,
+ NULL,
+ NULL,
+ hInstance,
+ NULL);
+ SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD) gui);
+ ShowWindow(hWnd, SW_SHOW);
+ UpdateWindow(hWnd);
+}
+
+static void set_defaults(void)
+{
+ proc_priority = "normal";
+ vo_doublebuffering = 1;
+ vo_directrendering = 0;
+ frame_dropping = 0;
+ soft_vol = 0;
+ gtkAONorm = 0;
+ gtkAOExtraStereo = 0;
+ gtkAOExtraStereoMul = 1.0;
+ audio_delay = 0.0;
+ sub_window = 1;
+ gtkCacheOn = 0;
+ gtkCacheSize = 2048;
+ gtkAutoSyncOn = 0;
+ gtkAutoSync = 0;
+}