2010-05-21 03:13:36 +02:00
// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
// $Id$
/// @file preferences.cpp
/// @brief Preferences dialogue
/// @ingroup configuration_ui
2012-01-08 02:04:50 +01:00
# include "config.h"
2010-05-21 03:13:36 +02:00
# ifndef AGI_PRE
2010-08-02 08:31:38 +02:00
# include <iterator>
2010-06-14 21:26:27 +02:00
# include <wx/checkbox.h>
# include <wx/combobox.h>
2011-10-11 02:06:44 +02:00
# include <wx/event.h>
2010-05-21 03:13:36 +02:00
# include <wx/filefn.h>
2011-10-11 02:06:44 +02:00
# include <wx/listctrl.h>
2012-04-12 17:40:25 +02:00
# include <wx/msgdlg.h>
2011-10-28 22:40:43 +02:00
# include <wx/srchctrl.h>
2010-06-14 21:26:27 +02:00
# include <wx/sizer.h>
2010-05-21 03:13:36 +02:00
# include <wx/spinctrl.h>
2010-06-14 21:26:27 +02:00
# include <wx/stattext.h>
2010-05-21 03:13:36 +02:00
# include <wx/stdpaths.h>
# include <wx/treebook.h>
2011-10-11 02:06:44 +02:00
# include <wx/treebook.h>
2010-05-21 03:13:36 +02:00
# endif
# include <libaegisub/exception.h>
2012-04-11 05:43:08 +02:00
# include <libaegisub/hotkey.h>
2010-05-21 03:13:36 +02:00
2011-10-11 02:06:44 +02:00
# include "preferences.h"
2011-12-22 22:19:21 +01:00
# include "audio_renderer_waveform.h"
2010-05-21 03:13:36 +02:00
# include "colour_button.h"
2011-10-28 22:40:43 +02:00
# include "command/command.h"
2010-06-03 22:32:25 +02:00
# include "compat.h"
2012-04-01 04:43:01 +02:00
# include "help_button.h"
2011-10-28 22:40:43 +02:00
# include "hotkey_data_view_model.h"
2010-08-02 08:31:38 +02:00
# include "include/aegisub/audio_player.h"
# include "include/aegisub/audio_provider.h"
2011-10-28 22:40:43 +02:00
# include "include/aegisub/hotkey.h"
2010-08-02 08:31:38 +02:00
# include "include/aegisub/subtitles_provider.h"
2011-10-11 02:06:44 +02:00
# include "libresrc/libresrc.h"
# include "main.h"
2010-07-19 19:53:29 +02:00
# include "preferences_base.h"
2011-10-11 02:06:44 +02:00
# include "video_provider_manager.h"
2010-05-21 03:13:36 +02:00
2011-11-28 21:01:58 +01:00
# ifdef WITH_PORTAUDIO
# include "audio_player_portaudio.h"
# endif
2012-03-07 05:25:46 +01:00
# ifdef WITH_FFMS2
# include <ffms.h>
# endif
2011-11-30 22:04:28 +01:00
static wxArrayString vec_to_arrstr ( std : : vector < std : : string > const & vec ) {
wxArrayString arrstr ;
2012-01-17 04:03:13 +01:00
transform ( vec . begin ( ) , vec . end ( ) , std : : back_inserter ( arrstr ) , & lagi_wxString ) ;
2011-11-30 22:04:28 +01:00
return arrstr ;
}
2011-10-28 22:40:43 +02:00
# define CLASS_PAGE(name) \
class name : public OptionPage { \
public : \
name ( wxTreebook * book , Preferences * parent ) ; \
} ;
CLASS_PAGE ( General )
CLASS_PAGE ( Audio )
CLASS_PAGE ( Video )
CLASS_PAGE ( Interface )
CLASS_PAGE ( Interface_Colours )
CLASS_PAGE ( Backup )
CLASS_PAGE ( Automation )
CLASS_PAGE ( Advanced )
CLASS_PAGE ( Advanced_Audio )
CLASS_PAGE ( Advanced_Video )
class Interface_Hotkeys : public OptionPage {
wxDataViewCtrl * dvc ;
wxObjectDataPtr < HotkeyDataViewModel > model ;
wxSearchCtrl * quick_search ;
void OnNewButton ( wxCommandEvent & ) ;
void OnEditButton ( wxCommandEvent & ) ;
void OnDeleteButton ( wxCommandEvent & ) ;
void OnUpdateFilter ( wxCommandEvent & ) ;
void OnClearFilter ( wxCommandEvent & ) ;
public :
Interface_Hotkeys ( wxTreebook * book , Preferences * parent ) ;
} ;
2010-07-19 14:25:53 +02:00
/// General preferences page
2010-08-26 20:38:20 +02:00
General : : General ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " General " ) ) {
2011-12-06 20:59:04 +01:00
wxFlexGridSizer * general = PageSizer ( _ ( " General " ) ) ;
OptionAdd ( general , _ ( " Check for updates on startup " ) , " App/Auto/Check For Updates " ) ;
2012-01-23 00:44:24 +01:00
OptionAdd ( general , _ ( " Show main toolbar " ) , " App/Show Toolbar " ) ;
2011-12-06 20:59:04 +01:00
2012-01-23 00:44:24 +01:00
OptionAdd ( general , _ ( " Toolbar Icon Size " ) , " App/Toolbar Icon Size " ) ;
2011-12-06 20:59:04 +01:00
wxString autoload_modes [ ] = { _ ( " Never " ) , _ ( " Always " ) , _ ( " Ask " ) } ;
wxArrayString autoload_modes_arr ( 3 , autoload_modes ) ;
OptionChoice ( general , _ ( " Automatically load linked files " ) , autoload_modes_arr , " App/Auto/Load Linked Files " ) ;
2012-01-19 20:45:49 +01:00
OptionAdd ( general , _ ( " Undo Levels " ) , " Limits/Undo Levels " , 2 ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * recent = PageSizer ( _ ( " Recently Used Lists " ) ) ;
2012-10-11 18:19:16 +02:00
OptionAdd ( recent , _ ( " Files " ) , " Limits/MRU " , 0 , 16 ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( recent , _ ( " Find/Replace " ) , " Limits/Find Replace " ) ;
2011-07-15 06:06:23 +02:00
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Audio preferences page
2010-08-26 20:38:20 +02:00
Audio : : Audio ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Audio " ) ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * general = PageSizer ( _ ( " Options " ) ) ;
OptionAdd ( general , _ ( " Default mouse wheel to zoom " ) , " Audio/Wheel Default to Zoom " ) ;
OptionAdd ( general , _ ( " Lock scroll on cursor " ) , " Audio/Lock Scroll on Cursor " ) ;
2011-12-28 02:22:59 +01:00
OptionAdd ( general , _ ( " Snap markers by default " ) , " Audio/Snap/Enable " ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( general , _ ( " Auto-focus on mouse over " ) , " Audio/Auto/Focus " ) ;
OptionAdd ( general , _ ( " Play audio when stepping in video " ) , " Audio/Plays When Stepping Video " ) ;
2012-04-12 02:04:31 +02:00
OptionAdd ( general , _ ( " Left-click-drag moves end marker " ) , " Audio/Drag Timing " ) ;
2012-03-31 19:38:27 +02:00
OptionAdd ( general , _ ( " Default timing length (ms) " ) , " Timing/Default Duration " , 0 , 36000 ) ;
OptionAdd ( general , _ ( " Default lead-in length (ms) " ) , " Audio/Lead/IN " , 0 , 36000 ) ;
OptionAdd ( general , _ ( " Default lead-out length (ms) " ) , " Audio/Lead/OUT " , 0 , 36000 ) ;
2010-07-19 19:53:29 +02:00
2012-04-12 02:04:36 +02:00
OptionAdd ( general , _ ( " Marker drag-start sensitivity (px) " ) , " Audio/Start Drag Sensitivity " , 1 , 15 ) ;
2012-03-31 19:38:27 +02:00
OptionAdd ( general , _ ( " Line boundary thickness (px) " ) , " Audio/Line Boundaries Thickness " , 1 , 5 ) ;
OptionAdd ( general , _ ( " Maximum snap distance (px) " ) , " Audio/Snap/Distance " , 0 , 25 ) ;
2010-07-19 19:53:29 +02:00
2012-01-10 21:03:31 +01:00
const wxString dtl_arr [ ] = { _ ( " Don't show " ) , _ ( " Show previous " ) , _ ( " Show previous and next " ) , _ ( " Show all " ) } ;
wxArrayString choice_dtl ( 4 , dtl_arr ) ;
OptionChoice ( general , _ ( " Show inactive lines " ) , choice_dtl , " Audio/Inactive Lines Display Mode " ) ;
CellSkip ( general ) ;
2012-02-28 02:22:40 +01:00
OptionAdd ( general , _ ( " Include commented inactive lines " ) , " Audio/Display/Draw/Inactive Comments " ) ;
2012-01-10 21:03:31 +01:00
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * display = PageSizer ( _ ( " Display Visual Options " ) ) ;
2012-03-31 19:38:27 +02:00
OptionAdd ( display , _ ( " Keyframes in dialogue mode " ) , " Audio/Display/Draw/Keyframes in Dialogue Mode " ) ;
OptionAdd ( display , _ ( " Keyframes in karaoke mode " ) , " Audio/Display/Draw/Keyframes in Karaoke Mode " ) ;
2012-03-27 06:23:54 +02:00
OptionAdd ( display , _ ( " Cursor time " ) , " Audio/Display/Draw/Cursor Time " ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( display , _ ( " Video position " ) , " Audio/Display/Draw/Video Position " ) ;
2012-04-27 21:07:29 +02:00
OptionAdd ( display , _ ( " Seconds boundaries " ) , " Audio/Display/Draw/Seconds " ) ;
CellSkip ( display ) ;
2011-12-22 22:19:21 +01:00
OptionChoice ( display , _ ( " Waveform Style " ) , AudioWaveformRenderer : : GetWaveformStyles ( ) , " Audio/Display/Waveform Style " ) ;
2010-07-19 19:53:29 +02:00
2012-01-23 20:02:15 +01:00
wxFlexGridSizer * label = PageSizer ( _ ( " Audio labels " ) ) ;
OptionFont ( label , " Audio/Karaoke/ " ) ;
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Video preferences page
2010-08-26 20:38:20 +02:00
Video : : Video ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Video " ) ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * general = PageSizer ( _ ( " Options " ) ) ;
OptionAdd ( general , _ ( " Show keyframes in slider " ) , " Video/Slider/Show Keyframes " ) ;
2012-05-05 04:11:15 +02:00
CellSkip ( general ) ;
OptionAdd ( general , _ ( " Only show visual tools when mouse is over video " ) , " Tool/Visual/Autohide " ) ;
CellSkip ( general ) ;
2011-11-16 22:59:31 +01:00
OptionAdd ( general , _ ( " Seek video to line start on selection change " ) , " Video/Subtitle Sync " ) ;
2012-05-05 04:11:15 +02:00
CellSkip ( general ) ;
2012-01-08 02:33:47 +01:00
OptionAdd ( general , _ ( " Automatically open audio when opening video " ) , " Video/Open Audio " ) ;
2012-05-05 04:11:15 +02:00
CellSkip ( general ) ;
2010-05-21 03:13:36 +02:00
2011-09-28 21:43:11 +02:00
const wxString czoom_arr [ 24 ] = { " 12.5% " , " 25% " , " 37.5% " , " 50% " , " 62.5% " , " 75% " , " 87.5% " , " 100% " , " 112.5% " , " 125% " , " 137.5% " , " 150% " , " 162.5% " , " 175% " , " 187.5% " , " 200% " , " 212.5% " , " 225% " , " 237.5% " , " 250% " , " 262.5% " , " 275% " , " 287.5% " , " 300% " } ;
2010-07-19 19:53:29 +02:00
wxArrayString choice_zoom ( 24 , czoom_arr ) ;
OptionChoice ( general , _ ( " Default Zoom " ) , choice_zoom , " Video/Default Zoom " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
OptionAdd ( general , _ ( " Fast jump step in frames " ) , " Video/Slider/Fast Jump Step " ) ;
2010-05-21 03:13:36 +02:00
2012-02-07 02:22:42 +01:00
const wxString cscr_arr [ 3 ] = { " ?video " , " ?script " , " . " } ;
2010-07-19 19:53:29 +02:00
wxArrayString scr_res ( 3 , cscr_arr ) ;
OptionChoice ( general , _ ( " Screenshot save path " ) , scr_res , " Path/Screenshot " ) ;
2010-05-21 03:13:36 +02:00
2012-01-08 02:04:37 +01:00
wxFlexGridSizer * resolution = PageSizer ( _ ( " Script Resolution " ) ) ;
2012-02-28 02:22:40 +01:00
wxControl * autocb = OptionAdd ( resolution , _ ( " Use resolution of first video opened " ) , " Subtitle/Default Resolution/Auto " ) ;
2012-01-08 02:04:37 +01:00
CellSkip ( resolution ) ;
2012-02-28 02:22:40 +01:00
DisableIfChecked ( autocb ,
OptionAdd ( resolution , _ ( " Default width " ) , " Subtitle/Default Resolution/Width " ) ) ;
DisableIfChecked ( autocb ,
OptionAdd ( resolution , _ ( " Default height " ) , " Subtitle/Default Resolution/Height " ) ) ;
2012-01-08 02:04:37 +01:00
const wxString cres_arr [ 3 ] = { _ ( " Never " ) , _ ( " Ask " ) , _ ( " Always " ) } ;
wxArrayString choice_res ( 3 , cres_arr ) ;
OptionChoice ( resolution , _ ( " Match video resolution on open " ) , choice_res , " Video/Check Script Res " ) ;
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Interface preferences page
2010-08-26 20:38:20 +02:00
Interface : : Interface ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Interface " ) ) {
2011-10-01 20:35:19 +02:00
wxFlexGridSizer * edit_box = PageSizer ( _ ( " Edit Box " ) ) ;
2012-02-28 02:22:49 +01:00
OptionAdd ( edit_box , _ ( " Enable call tips " ) , " App/Call Tips " ) ;
2012-03-31 19:38:27 +02:00
OptionAdd ( edit_box , _ ( " Overwrite in time boxes " ) , " Subtitle/Time Edit/Insert Mode " ) ;
2012-02-28 02:22:49 +01:00
CellSkip ( edit_box ) ;
OptionAdd ( edit_box , _ ( " Enable syntax highlighting " ) , " Subtitle/Highlight/Syntax " ) ;
OptionBrowse ( edit_box , _ ( " Dictionaries path " ) , " Path/Dictionary " ) ;
2011-10-11 02:06:44 +02:00
OptionFont ( edit_box , " Subtitle/Edit Box/ " ) ;
2011-10-01 20:35:19 +02:00
2012-02-28 02:22:49 +01:00
wxFlexGridSizer * grid = PageSizer ( _ ( " Grid " ) ) ;
OptionAdd ( grid , _ ( " Allow grid to take focus " ) , " Subtitle/Grid/Focus Allow " ) ;
OptionAdd ( grid , _ ( " Highlight visible subtitles " ) , " Subtitle/Grid/Highlight Subtitles in Frame " ) ;
OptionAdd ( grid , _ ( " Hide overrides symbol " ) , " Subtitle/Grid/Hide Overrides Char " ) ;
OptionFont ( grid , " Subtitle/Grid/ " ) ;
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Interface Colours preferences subpage
2012-04-03 19:38:50 +02:00
Interface_Colours : : Interface_Colours ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Colors " ) , PAGE_SCROLL | PAGE_SUB ) {
2010-08-26 20:38:14 +02:00
delete sizer ;
2012-03-31 19:38:33 +02:00
wxSizer * main_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
sizer = new wxBoxSizer ( wxVERTICAL ) ;
2012-05-15 16:06:29 +02:00
main_sizer - > Add ( sizer , wxEXPAND ) ;
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * audio = PageSizer ( _ ( " Audio Display " ) ) ;
OptionAdd ( audio , _ ( " Play cursor " ) , " Colour/Audio Display/Play Cursor " ) ;
OptionAdd ( audio , _ ( " Line boundary start " ) , " Colour/Audio Display/Line boundary Start " ) ;
OptionAdd ( audio , _ ( " Line boundary end " ) , " Colour/Audio Display/Line boundary End " ) ;
OptionAdd ( audio , _ ( " Line boundary inactive line " ) , " Colour/Audio Display/Line Boundary Inactive Line " ) ;
OptionAdd ( audio , _ ( " Syllable boundaries " ) , " Colour/Audio Display/Syllable Boundaries " ) ;
2012-04-27 21:07:29 +02:00
OptionAdd ( audio , _ ( " Seconds boundaries " ) , " Colour/Audio Display/Seconds Line " ) ;
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * syntax = PageSizer ( _ ( " Syntax Highlighting " ) ) ;
OptionAdd ( syntax , _ ( " Normal " ) , " Colour/Subtitle/Syntax/Normal " ) ;
OptionAdd ( syntax , _ ( " Brackets " ) , " Colour/Subtitle/Syntax/Brackets " ) ;
OptionAdd ( syntax , _ ( " Slashes and Parentheses " ) , " Colour/Subtitle/Syntax/Slashes " ) ;
2011-09-29 22:27:40 +02:00
OptionAdd ( syntax , _ ( " Tags " ) , " Colour/Subtitle/Syntax/Tags " ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( syntax , _ ( " Parameters " ) , " Colour/Subtitle/Syntax/Parameters " ) ;
OptionAdd ( syntax , _ ( " Error " ) , " Colour/Subtitle/Syntax/Error " ) ;
OptionAdd ( syntax , _ ( " Error Background " ) , " Colour/Subtitle/Syntax/Background/Error " ) ;
OptionAdd ( syntax , _ ( " Line Break " ) , " Colour/Subtitle/Syntax/Line Break " ) ;
OptionAdd ( syntax , _ ( " Karaoke templates " ) , " Colour/Subtitle/Syntax/Karaoke Template " ) ;
2012-05-15 16:06:24 +02:00
sizer = new wxBoxSizer ( wxVERTICAL ) ;
main_sizer - > AddSpacer ( 5 ) ;
2012-05-15 16:06:29 +02:00
main_sizer - > Add ( sizer , wxEXPAND ) ;
2012-05-15 16:06:24 +02:00
wxFlexGridSizer * color_schemes = PageSizer ( _ ( " Audio Color Schemes " ) ) ;
wxArrayString schemes = vec_to_arrstr ( OPT_GET ( " Audio/Colour Schemes " ) - > GetListString ( ) ) ;
OptionChoice ( color_schemes , _ ( " Spectrum " ) , schemes , " Colour/Audio Display/Spectrum " ) ;
OptionChoice ( color_schemes , _ ( " Waveform " ) , schemes , " Colour/Audio Display/Waveform " ) ;
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * grid = PageSizer ( _ ( " Subtitle Grid " ) ) ;
OptionAdd ( grid , _ ( " Standard foreground " ) , " Colour/Subtitle Grid/Standard " ) ;
OptionAdd ( grid , _ ( " Standard background " ) , " Colour/Subtitle Grid/Background/Background " ) ;
OptionAdd ( grid , _ ( " Selection foreground " ) , " Colour/Subtitle Grid/Selection " ) ;
OptionAdd ( grid , _ ( " Selection background " ) , " Colour/Subtitle Grid/Background/Selection " ) ;
2011-09-30 22:40:58 +02:00
OptionAdd ( grid , _ ( " Collision foreground " ) , " Colour/Subtitle Grid/Collision " ) ;
OptionAdd ( grid , _ ( " In frame background " ) , " Colour/Subtitle Grid/Background/Inframe " ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( grid , _ ( " Comment background " ) , " Colour/Subtitle Grid/Background/Comment " ) ;
OptionAdd ( grid , _ ( " Selected comment background " ) , " Colour/Subtitle Grid/Background/Selected Comment " ) ;
2012-04-27 21:06:58 +02:00
OptionAdd ( grid , _ ( " Header background " ) , " Colour/Subtitle Grid/Header " ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( grid , _ ( " Left Column " ) , " Colour/Subtitle Grid/Left Column " ) ;
OptionAdd ( grid , _ ( " Active Line Border " ) , " Colour/Subtitle Grid/Active Border " ) ;
OptionAdd ( grid , _ ( " Lines " ) , " Colour/Subtitle Grid/Lines " ) ;
2010-08-26 20:38:14 +02:00
sizer = main_sizer ;
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2011-10-28 22:40:43 +02:00
/// wxDataViewIconTextRenderer with command name autocompletion
2012-01-17 03:47:25 +01:00
class CommandRenderer : public wxDataViewCustomRenderer {
2011-10-28 22:40:43 +02:00
wxArrayString autocomplete ;
2012-01-17 03:47:25 +01:00
wxDataViewIconText value ;
2012-02-20 06:41:54 +01:00
static const int icon_width = 20 ;
2012-01-17 03:47:25 +01:00
2011-10-28 22:40:43 +02:00
public :
CommandRenderer ( )
2012-01-17 03:47:25 +01:00
: wxDataViewCustomRenderer ( " wxDataViewIconText " , wxDATAVIEW_CELL_EDITABLE )
2011-10-28 22:40:43 +02:00
{
std : : vector < std : : string > cmd_names = cmd : : get_registered_commands ( ) ;
autocomplete . reserve ( cmd_names . size ( ) ) ;
copy ( cmd_names . begin ( ) , cmd_names . end ( ) , std : : back_inserter ( autocomplete ) ) ;
}
wxWindow * CreateEditorCtrl ( wxWindow * parent , wxRect label_rect , wxVariant const & value ) {
2012-01-17 03:47:25 +01:00
wxDataViewIconText iconText ;
iconText < < value ;
wxString text = iconText . GetText ( ) ;
// adjust the label rect to take the width of the icon into account
2012-02-20 06:41:54 +01:00
label_rect . x + = icon_width ;
label_rect . width - = icon_width ;
2012-01-17 03:47:25 +01:00
wxTextCtrl * ctrl = new wxTextCtrl ( parent , - 1 , text , label_rect . GetPosition ( ) , label_rect . GetSize ( ) , wxTE_PROCESS_ENTER ) ;
ctrl - > SetInsertionPointEnd ( ) ;
ctrl - > SelectAll ( ) ;
2011-10-28 22:40:43 +02:00
ctrl - > AutoComplete ( autocomplete ) ;
return ctrl ;
}
2012-01-17 03:47:25 +01:00
bool SetValue ( wxVariant const & var ) {
value < < var ;
return true ;
}
bool Render ( wxRect rect , wxDC * dc , int state ) {
wxIcon const & icon = value . GetIcon ( ) ;
2012-02-20 06:41:54 +01:00
if ( icon . IsOk ( ) )
2012-01-17 03:47:25 +01:00
dc - > DrawIcon ( icon , rect . x , rect . y + ( rect . height - icon . GetHeight ( ) ) / 2 ) ;
2012-02-20 06:41:54 +01:00
RenderText ( value . GetText ( ) , icon_width , rect , dc , state ) ;
2012-01-17 03:47:25 +01:00
return true ;
}
wxSize GetSize ( ) const {
if ( ! value . GetText ( ) . empty ( ) ) {
wxSize size = GetTextExtent ( value . GetText ( ) ) ;
2012-02-20 06:41:54 +01:00
size . x + = icon_width ;
2012-01-17 03:47:25 +01:00
return size ;
}
return wxSize ( 80 , 20 ) ;
}
bool GetValueFromEditorCtrl ( wxWindow * editor , wxVariant & var ) {
wxTextCtrl * text = static_cast < wxTextCtrl * > ( editor ) ;
wxDataViewIconText iconText ( text - > GetValue ( ) , value . GetIcon ( ) ) ;
var < < iconText ;
return true ;
}
bool GetValue ( wxVariant & ) const { return false ; }
bool HasEditorCtrl ( ) const { return true ; }
2011-10-28 22:40:43 +02:00
} ;
2012-01-17 03:47:25 +01:00
class HotkeyRenderer : public wxDataViewCustomRenderer {
wxString value ;
2011-10-28 22:40:43 +02:00
wxTextCtrl * ctrl ;
2012-01-17 03:47:25 +01:00
2011-10-28 22:40:43 +02:00
public :
2012-01-17 03:47:25 +01:00
HotkeyRenderer ( ) : wxDataViewCustomRenderer ( " string " , wxDATAVIEW_CELL_EDITABLE ) { }
2011-10-28 22:40:43 +02:00
2012-01-17 03:47:25 +01:00
wxWindow * CreateEditorCtrl ( wxWindow * parent , wxRect label_rect , wxVariant const & var ) {
ctrl = new wxTextCtrl ( parent , - 1 , var . GetString ( ) , label_rect . GetPosition ( ) , label_rect . GetSize ( ) , wxTE_PROCESS_ENTER ) ;
ctrl - > SetInsertionPointEnd ( ) ;
ctrl - > SelectAll ( ) ;
2012-04-14 00:27:56 +02:00
ctrl - > Bind ( wxEVT_CHAR_HOOK , & HotkeyRenderer : : OnKeyDown , this ) ;
2011-10-28 22:40:43 +02:00
return ctrl ;
}
void OnKeyDown ( wxKeyEvent & evt ) {
ctrl - > ChangeValue ( lagi_wxString ( hotkey : : keypress_to_str ( evt . GetKeyCode ( ) , evt . GetUnicodeKey ( ) , evt . GetModifiers ( ) ) ) ) ;
}
2012-01-17 03:47:25 +01:00
bool SetValue ( wxVariant const & var ) {
value = var . GetString ( ) ;
return true ;
}
bool Render ( wxRect rect , wxDC * dc , int state ) {
RenderText ( value , 0 , rect , dc , state ) ;
return true ;
}
bool GetValueFromEditorCtrl ( wxWindow * , wxVariant & var ) {
var = ctrl - > GetValue ( ) ;
return true ;
}
bool GetValue ( wxVariant & ) const { return false ; }
wxSize GetSize ( ) const { return ! value ? wxSize ( 80 , 20 ) : GetTextExtent ( value ) ; }
bool HasEditorCtrl ( ) const { return true ; }
2011-10-28 22:40:43 +02:00
} ;
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Interface Hotkeys preferences subpage
2011-10-28 22:40:43 +02:00
Interface_Hotkeys : : Interface_Hotkeys ( wxTreebook * book , Preferences * parent )
: OptionPage ( book , parent , _ ( " Hotkeys " ) , PAGE_SUB )
, model ( new HotkeyDataViewModel ( parent ) )
{
quick_search = new wxSearchCtrl ( this , - 1 ) ;
2011-11-18 19:49:09 +01:00
wxButton * new_button = new wxButton ( this , - 1 , _ ( " &New " ) ) ;
wxButton * edit_button = new wxButton ( this , - 1 , _ ( " &Edit " ) ) ;
wxButton * delete_button = new wxButton ( this , - 1 , _ ( " &Delete " ) ) ;
2011-10-28 22:40:43 +02:00
new_button - > Bind ( wxEVT_COMMAND_BUTTON_CLICKED , & Interface_Hotkeys : : OnNewButton , this ) ;
edit_button - > Bind ( wxEVT_COMMAND_BUTTON_CLICKED , & Interface_Hotkeys : : OnEditButton , this ) ;
delete_button - > Bind ( wxEVT_COMMAND_BUTTON_CLICKED , & Interface_Hotkeys : : OnDeleteButton , this ) ;
quick_search - > Bind ( wxEVT_COMMAND_TEXT_UPDATED , & Interface_Hotkeys : : OnUpdateFilter , this ) ;
quick_search - > Bind ( wxEVT_COMMAND_SEARCHCTRL_CANCEL_BTN , & Interface_Hotkeys : : OnClearFilter , this ) ;
dvc = new wxDataViewCtrl ( this , - 1 ) ;
dvc - > AssociateModel ( model . get ( ) ) ;
dvc - > AppendColumn ( new wxDataViewColumn ( " Hotkey " , new HotkeyRenderer , 0 , 125 , wxALIGN_LEFT , wxCOL_SORTABLE | wxCOL_RESIZABLE ) ) ;
dvc - > AppendColumn ( new wxDataViewColumn ( " Command " , new CommandRenderer , 1 , 250 , wxALIGN_LEFT , wxCOL_SORTABLE | wxCOL_RESIZABLE ) ) ;
dvc - > AppendTextColumn ( " Description " , 2 , wxDATAVIEW_CELL_INERT , 300 , wxALIGN_LEFT , wxCOL_SORTABLE | wxCOL_RESIZABLE ) ;
wxSizer * buttons = new wxBoxSizer ( wxHORIZONTAL ) ;
buttons - > Add ( quick_search , wxSizerFlags ( ) . Border ( ) ) ;
buttons - > AddStretchSpacer ( 1 ) ;
buttons - > Add ( new_button , wxSizerFlags ( ) . Border ( ) . Right ( ) ) ;
buttons - > Add ( edit_button , wxSizerFlags ( ) . Border ( ) . Right ( ) ) ;
buttons - > Add ( delete_button , wxSizerFlags ( ) . Border ( ) . Right ( ) ) ;
sizer - > Add ( buttons , wxSizerFlags ( ) . Expand ( ) ) ;
sizer - > Add ( dvc , wxSizerFlags ( 1 ) . Expand ( ) . Border ( wxLEFT | wxRIGHT ) ) ;
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2012-02-01 19:47:00 +01:00
static void edit_item ( wxDataViewCtrl * dvc , wxDataViewItem item ) {
# if wxCHECK_VERSION(2, 9, 4)
dvc - > EditItem ( item , dvc - > GetColumn ( 0 ) ) ;
# else
dvc - > StartEditor ( item , 0 ) ;
# endif
}
2011-10-28 22:40:43 +02:00
void Interface_Hotkeys : : OnNewButton ( wxCommandEvent & ) {
2012-02-01 19:47:00 +01:00
wxDataViewItem sel = dvc - > GetSelection ( ) ;
dvc - > ExpandAncestors ( sel ) ;
dvc - > Expand ( sel ) ;
wxDataViewItem new_item = model - > New ( sel ) ;
if ( new_item . IsOk ( ) ) {
dvc - > Select ( new_item ) ;
dvc - > EnsureVisible ( new_item ) ;
edit_item ( dvc , new_item ) ;
}
2011-10-28 22:40:43 +02:00
}
2010-05-21 03:13:36 +02:00
2011-10-28 22:40:43 +02:00
void Interface_Hotkeys : : OnEditButton ( wxCommandEvent & ) {
2012-02-01 19:47:00 +01:00
edit_item ( dvc , dvc - > GetSelection ( ) ) ;
2011-10-28 22:40:43 +02:00
}
void Interface_Hotkeys : : OnDeleteButton ( wxCommandEvent & ) {
model - > Delete ( dvc - > GetSelection ( ) ) ;
}
void Interface_Hotkeys : : OnUpdateFilter ( wxCommandEvent & ) {
model - > SetFilter ( quick_search - > GetValue ( ) ) ;
2010-05-21 03:13:36 +02:00
2011-10-28 22:40:43 +02:00
if ( ! quick_search - > GetValue ( ) . empty ( ) ) {
wxDataViewItemArray contexts ;
model - > GetChildren ( wxDataViewItem ( 0 ) , contexts ) ;
for ( size_t i = 0 ; i < contexts . size ( ) ; + + i )
dvc - > Expand ( contexts [ i ] ) ;
}
}
2011-12-22 22:09:31 +01:00
void Interface_Hotkeys : : OnClearFilter ( wxCommandEvent & ) {
2011-10-28 22:40:43 +02:00
quick_search - > SetValue ( " " ) ;
}
2010-07-19 14:25:53 +02:00
/// Backup preferences page
2010-08-26 20:38:20 +02:00
Backup : : Backup ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Backup " ) ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * save = PageSizer ( _ ( " Automatic Save " ) ) ;
2012-02-28 02:22:40 +01:00
wxControl * cb = OptionAdd ( save , _ ( " Enable " ) , " App/Auto/Save " ) ;
2010-07-19 19:53:29 +02:00
CellSkip ( save ) ;
2012-02-28 02:22:40 +01:00
EnableIfChecked ( cb ,
OptionAdd ( save , _ ( " Interval in seconds " ) , " App/Auto/Save Every Seconds " , 1 ) ) ;
OptionBrowse ( save , _ ( " Path " ) , " Path/Auto/Save " , cb , true ) ;
2011-11-16 22:59:31 +01:00
OptionAdd ( save , _ ( " Autosave after every change " ) , " App/Auto/Save on Every Change " ) ;
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * backup = PageSizer ( _ ( " Automatic Backup " ) ) ;
2012-02-28 02:22:40 +01:00
cb = OptionAdd ( backup , _ ( " Enable " ) , " App/Auto/Backup " ) ;
2011-10-11 02:06:44 +02:00
CellSkip ( backup ) ;
2012-02-28 02:22:40 +01:00
OptionBrowse ( backup , _ ( " Path " ) , " Path/Auto/Backup " , cb , true ) ;
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Automation preferences page
2010-08-26 20:38:20 +02:00
Automation : : Automation ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Automation " ) ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * general = PageSizer ( _ ( " General " ) ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
OptionAdd ( general , _ ( " Base path " ) , " Path/Automation/Base " ) ;
OptionAdd ( general , _ ( " Include path " ) , " Path/Automation/Include " ) ;
OptionAdd ( general , _ ( " Auto-load path " ) , " Path/Automation/Autoload " ) ;
2010-05-21 03:13:36 +02:00
2012-04-10 22:40:20 +02:00
const wxString tl_arr [ 6 ] = { _ ( " 0: Fatal " ) , _ ( " 1: Error " ) , _ ( " 2: Warning " ) , _ ( " 3: Hint " ) , _ ( " 4: Debug " ) , _ ( " 5: Trace " ) } ;
2010-07-19 19:53:29 +02:00
wxArrayString tl_choice ( 6 , tl_arr ) ;
OptionChoice ( general , _ ( " Trace level " ) , tl_choice , " Automation/Trace Level " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
const wxString tp_arr [ 3 ] = { _ ( " Normal " ) , _ ( " Below Normal (recommended) " ) , _ ( " Lowest " ) } ;
wxArrayString tp_choice ( 3 , tp_arr ) ;
2011-09-28 21:47:40 +02:00
OptionChoice ( general , _ ( " Thread priority " ) , tp_choice , " Automation/Thread Priority " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
const wxString ar_arr [ 4 ] = { _ ( " No scripts " ) , _ ( " Subtitle-local scripts " ) , _ ( " Global autoload scripts " ) , _ ( " All scripts " ) } ;
wxArrayString ar_choice ( 4 , ar_arr ) ;
OptionChoice ( general , _ ( " Autoreload on Export " ) , ar_choice , " Automation/Autoreload Mode " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Advanced preferences page
2010-08-26 20:38:20 +02:00
Advanced : : Advanced ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Advanced " ) ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * general = PageSizer ( _ ( " General " ) ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
wxStaticText * warning = new wxStaticText ( this , wxID_ANY , _ ( " Changing these settings might result in bugs and/or crashes. Do not touch these unless you know what you're doing. " ) ) ;
warning - > SetFont ( wxFont ( 12 , wxFONTFAMILY_SWISS , wxFONTSTYLE_NORMAL , wxFONTWEIGHT_BOLD ) ) ;
sizer - > Fit ( this ) ;
warning - > Wrap ( 400 ) ;
general - > Add ( warning , 0 , wxALL , 5 ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Advanced Audio preferences subpage
2010-08-26 20:38:20 +02:00
Advanced_Audio : : Advanced_Audio ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Audio " ) , PAGE_SUB ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * expert = PageSizer ( _ ( " Expert " ) ) ;
2010-05-21 03:13:36 +02:00
2010-08-02 08:31:38 +02:00
wxArrayString ap_choice = vec_to_arrstr ( AudioProviderFactory : : GetClasses ( ) ) ;
2010-07-19 19:53:29 +02:00
OptionChoice ( expert , _ ( " Audio provider " ) , ap_choice , " Audio/Provider " ) ;
2010-05-21 03:13:36 +02:00
2010-08-02 08:31:38 +02:00
wxArrayString apl_choice = vec_to_arrstr ( AudioPlayerFactory : : GetClasses ( ) ) ;
2010-07-19 19:53:29 +02:00
OptionChoice ( expert , _ ( " Audio player " ) , apl_choice , " Audio/Player " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * cache = PageSizer ( _ ( " Cache " ) ) ;
const wxString ct_arr [ 3 ] = { _ ( " None (NOT RECOMMENDED) " ) , _ ( " RAM " ) , _ ( " Hard Disk " ) } ;
wxArrayString ct_choice ( 3 , ct_arr ) ;
OptionChoice ( cache , _ ( " Cache type " ) , ct_choice , " Audio/Cache/Type " ) ;
2010-05-21 03:13:36 +02:00
2011-10-11 02:06:44 +02:00
OptionBrowse ( cache , _ ( " Path " ) , " Audio/Cache/HD/Location " ) ;
2010-07-19 19:53:29 +02:00
OptionAdd ( cache , _ ( " File name " ) , " Audio/Cache/HD/Name " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * spectrum = PageSizer ( _ ( " Spectrum " ) ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
const wxString sq_arr [ 4 ] = { _ ( " Regular quality " ) , _ ( " Better quality " ) , _ ( " High quality " ) , _ ( " Insane quality " ) } ;
wxArrayString sq_choice ( 4 , sq_arr ) ;
OptionChoice ( spectrum , _ ( " Quality " ) , sq_choice , " Audio/Renderer/Spectrum/Quality " ) ;
2010-05-21 03:13:36 +02:00
2010-07-19 19:53:29 +02:00
OptionAdd ( spectrum , _ ( " Cache memory max (MB) " ) , " Audio/Renderer/Spectrum/Memory Max " , 2 , 1024 ) ;
2010-05-21 03:13:36 +02:00
2012-01-08 02:35:37 +01:00
# ifdef WITH_AVISYNTH
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * avisynth = PageSizer ( " Avisynth " ) ;
2011-09-28 21:43:11 +02:00
const wxString adm_arr [ 3 ] = { " ConvertToMono " , " GetLeftChannel " , " GetRightChannel " } ;
2010-07-19 19:53:29 +02:00
wxArrayString adm_choice ( 3 , adm_arr ) ;
2012-01-08 02:35:37 +01:00
OptionChoice ( avisynth , _ ( " Avisynth down-mixer " ) , adm_choice , " Audio/Downmixer " ) ;
2012-01-23 20:02:15 +01:00
OptionAdd ( avisynth , _ ( " Force sample rate " ) , " Provider/Audio/AVS/Sample Rate " ) ;
2011-11-28 21:01:58 +01:00
# endif
2012-01-10 23:10:57 +01:00
# ifdef WITH_FFMS2
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * ffms = PageSizer ( " FFmpegSource " ) ;
2012-01-10 23:10:57 +01:00
const wxString error_modes [ ] = { _ ( " Ignore " ) , _ ( " Clear " ) , _ ( " Stop " ) , _ ( " Abort " ) } ;
wxArrayString error_modes_choice ( 4 , error_modes ) ;
OptionChoice ( ffms , _ ( " Audio indexing error handling mode " ) , error_modes_choice , " Provider/Audio/FFmpegSource/Decode Error Handling " ) ;
OptionAdd ( ffms , _ ( " Always index all audio tracks " ) , " Provider/FFmpegSource/Index All Tracks " ) ;
# endif
2012-01-23 20:02:15 +01:00
# ifdef WITH_PORTAUDIO
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * portaudio = PageSizer ( " Portaudio " ) ;
2012-01-23 20:02:15 +01:00
OptionChoice ( portaudio , _ ( " Portaudio device " ) , PortAudioPlayer : : GetOutputDevices ( ) , " Player/Audio/PortAudio/Device Name " ) ;
# endif
# ifdef WITH_OSS
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * oss = PageSizer ( " OSS " ) ;
2012-01-23 20:02:15 +01:00
OptionBrowse ( oss , _ ( " OSS Device " ) , " Player/Audio/OSS/Device " ) ;
# endif
# ifdef WITH_DIRECTSOUND
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * dsound = PageSizer ( " DirectSound " ) ;
2012-01-23 20:02:15 +01:00
OptionAdd ( dsound , _ ( " Buffer latency " ) , " Player/Audio/DirectSound/Buffer Latency " , 1 , 1000 ) ;
OptionAdd ( dsound , _ ( " Buffer length " ) , " Player/Audio/DirectSound/Buffer Length " , 1 , 100 ) ;
# endif
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
}
2010-05-21 03:13:36 +02:00
2010-07-19 14:25:53 +02:00
/// Advanced Video preferences subpage
2010-08-26 20:38:20 +02:00
Advanced_Video : : Advanced_Video ( wxTreebook * book , Preferences * parent ) : OptionPage ( book , parent , _ ( " Video " ) , PAGE_SUB ) {
2010-07-19 19:53:29 +02:00
wxFlexGridSizer * expert = PageSizer ( _ ( " Expert " ) ) ;
2010-05-21 03:13:36 +02:00
2010-08-02 08:31:38 +02:00
wxArrayString vp_choice = vec_to_arrstr ( VideoProviderFactory : : GetClasses ( ) ) ;
2010-07-19 19:53:29 +02:00
OptionChoice ( expert , _ ( " Video provider " ) , vp_choice , " Video/Provider " ) ;
2010-05-21 03:13:36 +02:00
2010-08-02 08:31:38 +02:00
wxArrayString sp_choice = vec_to_arrstr ( SubtitlesProviderFactory : : GetClasses ( ) ) ;
2012-04-10 22:40:32 +02:00
OptionChoice ( expert , _ ( " Subtitles provider " ) , sp_choice , " Subtitle/Provider " ) ;
2010-05-21 03:13:36 +02:00
2012-04-17 01:55:21 +02:00
CellSkip ( expert ) ;
OptionAdd ( expert , _ ( " Force BT.601 " ) , " Video/Force BT.601 " ) ;
2010-05-21 03:13:36 +02:00
2012-01-08 02:35:37 +01:00
# ifdef WITH_AVISYNTH
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * avisynth = PageSizer ( " Avisynth " ) ;
2012-01-08 02:35:37 +01:00
OptionAdd ( avisynth , _ ( " Allow pre-2.56a Avisynth " ) , " Provider/Avisynth/Allow Ancient " ) ;
CellSkip ( avisynth ) ;
OptionAdd ( avisynth , _ ( " Avisynth memory limit " ) , " Provider/Avisynth/Memory Max " ) ;
2010-05-21 03:13:36 +02:00
# endif
2012-01-23 20:02:15 +01:00
# ifdef WITH_FFMS2
2012-04-10 22:40:26 +02:00
wxFlexGridSizer * ffms = PageSizer ( " FFmpegSource " ) ;
2012-01-23 20:02:15 +01:00
const wxString log_levels [ ] = { " Quiet " , " Panic " , " Fatal " , " Error " , " Warning " , " Info " , " Verbose " , " Debug " } ;
wxArrayString log_levels_choice ( 8 , log_levels ) ;
OptionChoice ( ffms , _ ( " Debug log verbosity " ) , log_levels_choice , " Provider/FFmpegSource/Log Level " ) ;
2012-03-31 19:38:22 +02:00
OptionAdd ( ffms , _ ( " Decoding threads " ) , " Provider/Video/FFmpegSource/Decoding Threads " , - 1 ) ;
2012-01-23 20:02:15 +01:00
OptionAdd ( ffms , _ ( " Enable unsafe seeking " ) , " Provider/Video/FFmpegSource/Unsafe Seeking " ) ;
# endif
2010-07-19 19:53:29 +02:00
SetSizerAndFit ( sizer ) ;
2010-07-18 18:33:32 +02:00
}
2011-10-28 22:40:43 +02:00
2011-12-24 01:36:19 +01:00
void Preferences : : SetOption ( agi : : OptionValue * new_value ) {
std : : string name = new_value - > GetName ( ) ;
if ( pending_changes . count ( name ) )
delete pending_changes [ name ] ;
pending_changes [ name ] = new_value ;
2011-10-28 22:40:43 +02:00
if ( IsEnabled ( ) )
applyButton - > Enable ( true ) ;
}
void Preferences : : AddPendingChange ( Thunk const & callback ) {
pending_callbacks . push_back ( callback ) ;
if ( IsEnabled ( ) )
applyButton - > Enable ( true ) ;
}
2012-04-11 05:43:08 +02:00
void Preferences : : AddChangeableOption ( std : : string const & name ) {
option_names . push_back ( name ) ;
}
2011-10-28 22:40:43 +02:00
void Preferences : : OnOK ( wxCommandEvent & event ) {
OnApply ( event ) ;
EndModal ( 0 ) ;
}
2011-12-22 22:09:31 +01:00
void Preferences : : OnApply ( wxCommandEvent & ) {
2011-12-24 01:36:19 +01:00
for ( std : : map < std : : string , agi : : OptionValue * > : : iterator cur = pending_changes . begin ( ) ; cur ! = pending_changes . end ( ) ; + + cur ) {
2012-04-12 17:40:25 +02:00
OPT_SET ( cur - > first ) - > Set ( cur - > second ) ;
2011-12-24 01:36:19 +01:00
delete cur - > second ;
2011-10-28 22:40:43 +02:00
}
pending_changes . clear ( ) ;
for ( std : : deque < Thunk > : : iterator it = pending_callbacks . begin ( ) ; it ! = pending_callbacks . end ( ) ; + + it )
( * it ) ( ) ;
pending_callbacks . clear ( ) ;
applyButton - > Enable ( false ) ;
config : : opt - > Flush ( ) ;
}
2012-04-11 05:43:08 +02:00
void Preferences : : OnResetDefault ( wxCommandEvent & ) {
if ( wxYES ! = wxMessageBox ( _ ( " Are you sure that you want to restore the defaults? All your settings will be overridden. " ) , _ ( " Restore defaults? " ) , wxYES_NO ) )
return ;
for ( std : : deque < std : : string > : : iterator it = option_names . begin ( ) ; it ! = option_names . end ( ) ; + + it ) {
agi : : OptionValue * opt = OPT_SET ( * it ) ;
if ( ! opt - > IsDefault ( ) )
opt - > Reset ( ) ;
}
config : : opt - > Flush ( ) ;
agi : : hotkey : : Hotkey def_hotkeys ( " " , GET_DEFAULT_CONFIG ( default_hotkey ) ) ;
hotkey : : inst - > SetHotkeyMap ( def_hotkeys . GetHotkeyMap ( ) ) ;
// Close and reopen the dialog to update all the controls with the new values
OPT_SET ( " Tool/Preferences/Page " ) - > SetInt ( book - > GetSelection ( ) ) ;
EndModal ( - 1 ) ;
}
2011-10-28 22:40:43 +02:00
static void PageChanged ( wxBookCtrlEvent & evt ) {
OPT_SET ( " Tool/Preferences/Page " ) - > SetInt ( evt . GetSelection ( ) ) ;
}
2012-05-13 02:58:16 +02:00
Preferences : : Preferences ( wxWindow * parent ) : wxDialog ( parent , - 1 , _ ( " Preferences " ) , wxDefaultPosition , wxSize ( - 1 , - 1 ) , wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ) {
2012-04-03 22:40:33 +02:00
SetIcon ( GETICON ( options_button_16 ) ) ;
2011-10-28 22:40:43 +02:00
book = new wxTreebook ( this , - 1 , wxDefaultPosition , wxDefaultSize ) ;
new General ( book , this ) ;
new Audio ( book , this ) ;
new Video ( book , this ) ;
new Interface ( book , this ) ;
new Interface_Colours ( book , this ) ;
new Interface_Hotkeys ( book , this ) ;
new Backup ( book , this ) ;
new Automation ( book , this ) ;
new Advanced ( book , this ) ;
new Advanced_Audio ( book , this ) ;
new Advanced_Video ( book , this ) ;
book - > Fit ( ) ;
book - > ChangeSelection ( OPT_GET ( " Tool/Preferences/Page " ) - > GetInt ( ) ) ;
book - > Bind ( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED , & PageChanged ) ;
// Bottom Buttons
2012-04-01 04:43:01 +02:00
wxStdDialogButtonSizer * stdButtonSizer = CreateStdDialogButtonSizer ( wxOK | wxCANCEL | wxAPPLY | wxHELP ) ;
2011-10-28 22:40:43 +02:00
applyButton = stdButtonSizer - > GetApplyButton ( ) ;
2012-04-11 05:43:08 +02:00
wxSizer * buttonSizer = new wxBoxSizer ( wxHORIZONTAL ) ;
wxButton * defaultButton = new wxButton ( this , - 1 , _ ( " &Restore Defaults " ) ) ;
buttonSizer - > Add ( defaultButton , wxSizerFlags ( 0 ) . Expand ( ) ) ;
buttonSizer - > AddStretchSpacer ( 1 ) ;
buttonSizer - > Add ( stdButtonSizer , wxSizerFlags ( 0 ) . Expand ( ) ) ;
2011-10-28 22:40:43 +02:00
// Main Sizer
wxSizer * mainSizer = new wxBoxSizer ( wxVERTICAL ) ;
mainSizer - > Add ( book , wxSizerFlags ( 1 ) . Expand ( ) . Border ( ) ) ;
2012-04-11 05:43:08 +02:00
mainSizer - > Add ( buttonSizer , wxSizerFlags ( 0 ) . Expand ( ) . Border ( wxALL & ~ wxTOP ) ) ;
2011-10-28 22:40:43 +02:00
SetSizerAndFit ( mainSizer ) ;
CenterOnParent ( ) ;
applyButton - > Enable ( false ) ;
Bind ( wxEVT_COMMAND_BUTTON_CLICKED , & Preferences : : OnOK , this , wxID_OK ) ;
Bind ( wxEVT_COMMAND_BUTTON_CLICKED , & Preferences : : OnApply , this , wxID_APPLY ) ;
2012-04-01 04:43:01 +02:00
Bind ( wxEVT_COMMAND_BUTTON_CLICKED , std : : tr1 : : bind ( & HelpButton : : OpenPage , " Options " ) , wxID_HELP ) ;
2012-04-11 05:43:08 +02:00
defaultButton - > Bind ( wxEVT_COMMAND_BUTTON_CLICKED , & Preferences : : OnResetDefault , this ) ;
2011-10-28 22:40:43 +02:00
}
Preferences : : ~ Preferences ( ) {
2011-12-24 01:36:19 +01:00
for ( std : : map < std : : string , agi : : OptionValue * > : : iterator cur = pending_changes . begin ( ) ; cur ! = pending_changes . end ( ) ; + + cur ) {
delete cur - > second ;
}
2011-10-28 22:40:43 +02:00
}