5 #include <glib/gi18n.h>
10 #include "../Common/Common.h"
11 #include "DasherTypes.h"
12 //#include "FontDialogues.h"
13 #include "Preferences.h"
14 #include "Parameters.h"
15 #include "module_settings_window.h"
16 #include "dasher_main_private.h"
18 #define DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf) (DasherPreferencesDialoguePrivate *)(pSelf->private_data);
20 using namespace Dasher
;
22 /* Static global member - use to deal with callbacks */
23 static DasherPreferencesDialogue
*g_pPreferencesDialogue
= NULL
;
25 // TODO: Reintroduce advanced settings and start on mouse position offset
27 typedef struct _BoolTranslation BoolTranslation
;
29 struct _BoolTranslation
{
31 const gchar
*szWidgetName
;
35 // Checkbox widgets which map directly to boolean parameters
39 BoolTranslation sBoolTranslationTable
[] = {
40 {BP_DRAW_MOUSE_LINE
, "showmouselinebutton", NULL
},
41 {BP_DRAW_MOUSE
, "showmousebutton", NULL
},
42 { APP_BP_SHOW_STATUSBAR
, "speedsliderbutton", NULL
},
43 {APP_BP_SHOW_TOOLBAR
, "toolbarbutton", NULL
},
44 {BP_CONTROL_MODE
, "control_controlmode", NULL
},
45 {APP_BP_TIME_STAMP
, "timestampbutton", NULL
},
46 {BP_START_MOUSE
, "leftbutton", NULL
},
47 {BP_START_SPACE
, "spacebutton", NULL
},
48 {BP_STOP_OUTSIDE
, "winpausebutton", NULL
},
49 {BP_AUTO_SPEEDCONTROL
, "adaptivebutton", NULL
},
50 {BP_LM_ADAPTIVE
, "cb_adaptive", NULL
},
51 {BP_COPY_ALL_ON_STOP
,"copy_all_on_stop",NULL
},
52 {BP_SPEAK_ALL_ON_STOP
,"speak_all_on_stop",NULL
},
53 {BP_SPEAK_WORDS
,"speak_words",NULL
},
54 {APP_BP_CONFIRM_UNSAVED
, "confirm_unsaved_files", NULL
}
59 // List widgets which map directly to string parameters
61 typedef struct _StringTranslation StringTranslation
;
63 struct _StringTranslation
{
65 const gchar
*szWidgetName
;
67 const gchar
*szHelperName
;
73 StringTranslation sStringTranslationTable
[] = {
74 {SP_ALPHABET_ID
, "AlphabetTree", NULL
, NULL
, NULL
},
75 {SP_COLOUR_ID
, "ColorTree", NULL
, NULL
, NULL
},
80 StringTranslation sStringTranslationTable
[] = {
81 {SP_ALPHABET_ID
, "AlphabetTree", NULL
, NULL
, NULL
},
82 {SP_COLOUR_ID
, "ColorTree", NULL
, NULL
, NULL
},
83 {SP_INPUT_FILTER
, "input_filter_tree_view", NULL
, "button13", NULL
},
84 {SP_INPUT_DEVICE
, "input_tree_view", NULL
, "button25", NULL
}
89 // TODO: Look at coding convention stuff for gobjets
91 /// Newer, object based stuff
93 struct _DasherPreferencesDialoguePrivate
{
94 GtkWindow
*pPreferencesWindow
;
95 DasherEditor
*pEditor
;
96 DasherAppSettings
*pAppSettings
;
97 GtkWindow
*pMainWindow
;
99 // TODO: it really would be nice not to have to keep this arround
102 // TODO: check all of these are really needed
103 GtkListStore
*pListStore
;
104 GtkToggleButton
*pAlphOrient
;
105 GtkToggleButton
*pLRButton
;
106 GtkToggleButton
*pRLButton
;
107 GtkToggleButton
*pTBButton
;
108 GtkToggleButton
*pBTButton
;
109 GtkRange
*pSpeedSlider
;
110 GtkToggleButton
*pMousePosButton
;
111 GtkComboBox
*pMousePosStyle
;
112 GtkNotebook
*pNotebook
;
114 // Set this to ignore signals (ie loops coming back from setting widgets in response to parameters having changed)
118 typedef struct _DasherPreferencesDialoguePrivate DasherPreferencesDialoguePrivate
;
120 // Private member functions
121 static void dasher_preferences_dialogue_class_init(DasherPreferencesDialogueClass
*pClass
);
122 static void dasher_preferences_dialogue_init(DasherPreferencesDialogue
*pMain
);
123 static void dasher_preferences_dialogue_destroy(GObject
*pObject
);
125 static void dasher_preferences_dialogue_initialise_tables(DasherPreferencesDialogue
*pSelf
);
126 static void dasher_preferences_dialogue_refresh_widget(DasherPreferencesDialogue
*pSelf
, gint iParameter
);
127 static void dasher_preferences_dialogue_populate_list(DasherPreferencesDialogue
*pSelf
, GtkTreeView
*pView
, int iParameter
, GtkWidget
*pHelper
);
128 static void dasher_preferences_dialogue_update_special(DasherPreferencesDialogue
*pSelf
, int iID
);
129 static void dasher_preferences_dialogue_refresh_parameter(DasherPreferencesDialogue
*pSelf
, GtkWidget
*pWidget
, gpointer pUserData
);
131 /* Special private members called via table (see below) */
132 static void dasher_preferences_dialogue_populate_special_speed(DasherPreferencesDialogue
*pSelf
);
133 static void dasher_preferences_dialogue_populate_special_mouse_start(DasherPreferencesDialogue
*pSelf
);
134 static void dasher_preferences_dialogue_populate_special_orientation(DasherPreferencesDialogue
*pSelf
);
135 static void dasher_preferences_dialogue_populate_special_appstyle(DasherPreferencesDialogue
*pSelf
);
136 static void dasher_preferences_dialogue_populate_special_linewidth(DasherPreferencesDialogue
*pSelf
);
137 static void dasher_preferences_dialogue_populate_special_lm(DasherPreferencesDialogue
*pSelf
);
138 static void dasher_preferences_dialogue_populate_special_uniform(DasherPreferencesDialogue
*pSelf
);
139 static void dasher_preferences_dialogue_populate_special_colour(DasherPreferencesDialogue
*pSelf
);
140 static void dasher_preferences_dialogue_populate_special_dasher_font(DasherPreferencesDialogue
*pSelf
);
141 static void dasher_preferences_dialogue_populate_special_edit_font(DasherPreferencesDialogue
*pSelf
);
142 static void dasher_preferences_dialogue_populate_special_fontsize(DasherPreferencesDialogue
*pSelf
);
144 typedef struct _SpecialControl SpecialControl
;
146 struct _SpecialControl
{
148 void (*pPopulate
)(DasherPreferencesDialogue
*);
152 SpecialControl sSpecialControlTable
[] = {
153 {LP_MAX_BITRATE
, dasher_preferences_dialogue_populate_special_speed
, true},
154 {BP_MOUSEPOS_MODE
, dasher_preferences_dialogue_populate_special_mouse_start
, true},
155 {BP_CIRCLE_START
, dasher_preferences_dialogue_populate_special_mouse_start
, false},
156 {LP_ORIENTATION
, dasher_preferences_dialogue_populate_special_orientation
, true},
157 {APP_LP_STYLE
, dasher_preferences_dialogue_populate_special_appstyle
, true},
158 {LP_LINE_WIDTH
, dasher_preferences_dialogue_populate_special_linewidth
, true},
159 {LP_LANGUAGE_MODEL_ID
, dasher_preferences_dialogue_populate_special_lm
, true},
160 {LP_UNIFORM
, dasher_preferences_dialogue_populate_special_uniform
, true},
161 {BP_PALETTE_CHANGE
, dasher_preferences_dialogue_populate_special_colour
, true},
162 {SP_DASHER_FONT
, dasher_preferences_dialogue_populate_special_dasher_font
, true},
163 {APP_SP_EDIT_FONT
, dasher_preferences_dialogue_populate_special_edit_font
, true},
164 {LP_DASHER_FONTSIZE
, dasher_preferences_dialogue_populate_special_fontsize
, true}
167 // Callback functions
168 extern "C" void on_list_selection(GtkTreeSelection
*pSelection
, gpointer pUserData
);
169 extern "C" void on_widget_realize(GtkWidget
*pWidget
, gpointer pUserData
);
170 extern "C" gboolean
show_helper_window(GtkWidget
*pWidget
, gpointer
*pUserData
);
171 extern "C" gboolean
dasher_preferences_refresh_foreach_function(GtkTreeModel
*pModel
, GtkTreePath
*pPath
, GtkTreeIter
*pIter
, gpointer pUserData
);
174 /* Start definitions */
177 GType
dasher_preferences_dialogue_get_type() {
179 static GType dasher_preferences_dialogue_type
= 0;
181 if(!dasher_preferences_dialogue_type
) {
182 static const GTypeInfo dasher_preferences_dialogue_info
= {
183 sizeof(DasherPreferencesDialogueClass
),
186 (GClassInitFunc
) dasher_preferences_dialogue_class_init
,
189 sizeof(DasherPreferencesDialogue
),
191 (GInstanceInitFunc
) dasher_preferences_dialogue_init
,
195 dasher_preferences_dialogue_type
= g_type_register_static(G_TYPE_OBJECT
, "DasherPreferencesDialogue", &dasher_preferences_dialogue_info
, static_cast < GTypeFlags
> (0));
198 return dasher_preferences_dialogue_type
;
201 static void dasher_preferences_dialogue_class_init(DasherPreferencesDialogueClass
*pClass
) {
202 GObjectClass
*pObjectClass
= (GObjectClass
*) pClass
;
203 pObjectClass
->finalize
= dasher_preferences_dialogue_destroy
;
206 static void dasher_preferences_dialogue_init(DasherPreferencesDialogue
*pDasherControl
) {
207 pDasherControl
->private_data
= new DasherPreferencesDialoguePrivate
;
210 static void dasher_preferences_dialogue_destroy(GObject
*pObject
) {
211 DasherPreferencesDialogue
*pSelf
= (DasherPreferencesDialogue
*)pObject
;
212 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
214 g_object_unref(pPrivate
->pXML
);
216 // FIXME - I think we need to chain up through the finalize methods
217 // of the parent classes here...
223 DasherPreferencesDialogue
*dasher_preferences_dialogue_new(GtkBuilder
*pXML
, DasherEditor
*pEditor
, DasherAppSettings
*pAppSettings
, GtkWindow
*pMainWindow
) {
224 DasherPreferencesDialogue
*pDasherPref
;
225 pDasherPref
= (DasherPreferencesDialogue
*)(g_object_new(dasher_preferences_dialogue_get_type(), NULL
));
227 g_pPreferencesDialogue
= pDasherPref
;
229 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pDasherPref
);
231 pPrivate
->bIgnoreSignals
= false;
233 pPrivate
->pEditor
= pEditor
;
234 pPrivate
->pAppSettings
= pAppSettings
;
236 pPrivate
->pXML
= (GtkBuilder
*)g_object_ref(pXML
);
238 pPrivate
->pPreferencesWindow
= GTK_WINDOW(gtk_builder_get_object(pXML
, "preferences"));
240 pPrivate
->pNotebook
= GTK_NOTEBOOK(gtk_builder_get_object(pXML
, "notebook1"));
242 gtk_window_set_transient_for(pPrivate
->pPreferencesWindow
, pMainWindow
);
244 pPrivate
->pMainWindow
= pMainWindow
;
246 pPrivate
->pSpeedSlider
= GTK_RANGE(gtk_builder_get_object(pXML
, "hscale1"));
247 dasher_preferences_dialogue_initialise_tables(pDasherPref
);
248 dasher_preferences_dialogue_refresh_widget(pDasherPref
, -1);
249 dasher_preferences_dialogue_update_special(pDasherPref
, -1);
252 #ifndef WITH_MAEMOFULLSCREEN
253 gtk_widget_hide(gtk_builder_get_object(pXML
, "displaysizebox"));
258 gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(pXML
, "radiobutton9")));
261 // InitialiseFontDialogues(pXML, pAppSettings);
266 void dasher_preferences_dialogue_show(DasherPreferencesDialogue
*pSelf
, gint iPage
) {
267 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
268 // FIXME - REIMPLEMENT
270 // Keep the preferences window in the correct position relative to the
271 // main Dasher window
273 // gtk_window_set_transient_for(pPrivate->pPreferencesWindow,pPrivate->pMainWindow);
275 #ifndef WITH_MAEMOFULLSCREEN
276 // gtk_window_set_keep_above(pPrivate->pPreferencesWindow, true);
280 // gtk_window_set_keep_above(pPrivate->pPreferencesWindow, dasher_main_topmost(g_pDasherMain));
283 gtk_notebook_set_current_page(pPrivate
->pNotebook
, iPage
- 1);
286 gtk_window_present(pPrivate
->pPreferencesWindow
);
290 void dasher_preferences_dialogue_handle_parameter_change(DasherPreferencesDialogue
*pSelf
, int iParameter
) {
291 dasher_preferences_dialogue_refresh_widget(pSelf
, iParameter
);
292 dasher_preferences_dialogue_update_special(pSelf
, iParameter
);
296 // --- Generic Options ---
298 void dasher_preferences_dialogue_initialise_tables(DasherPreferencesDialogue
*pSelf
) {
299 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
303 int iNumBoolEntries
= sizeof(sBoolTranslationTable
) / sizeof(BoolTranslation
);
304 for(int i(0); i
< iNumBoolEntries
; ++i
) {
305 sBoolTranslationTable
[i
].pWidget
= GTK_WIDGET(gtk_builder_get_object(pPrivate
->pXML
, sBoolTranslationTable
[i
].szWidgetName
));
309 int iNumStringEntries
= sizeof(sStringTranslationTable
) / sizeof(StringTranslation
);
310 for(int i(0); i
< iNumStringEntries
; ++i
) {
311 sStringTranslationTable
[i
].pWidget
= GTK_WIDGET(gtk_builder_get_object(pPrivate
->pXML
, sStringTranslationTable
[i
].szWidgetName
));
312 if(sStringTranslationTable
[i
].szHelperName
)
313 sStringTranslationTable
[i
].pHelper
= GTK_WIDGET(gtk_builder_get_object(pPrivate
->pXML
, sStringTranslationTable
[i
].szHelperName
));
315 dasher_preferences_dialogue_populate_list(pSelf
, GTK_TREE_VIEW(sStringTranslationTable
[i
].pWidget
), sStringTranslationTable
[i
].iParameter
, sStringTranslationTable
[i
].pHelper
);
316 g_signal_connect(sStringTranslationTable
[i
].pWidget
, "realize", (GCallback
)on_widget_realize
, &sStringTranslationTable
[i
].iParameter
);
320 extern "C" gboolean
dasher_preferences_refresh_foreach_function(GtkTreeModel
*pModel
, GtkTreePath
*pPath
, GtkTreeIter
*pIter
, gpointer pUserData
) {
321 gpointer
*pPointers
= (gpointer
*)pUserData
;
323 gchar
*szTarget
= (gchar
*)pPointers
[0];
326 gtk_tree_model_get(pModel
, pIter
, 2, &szComparison
, -1);
328 if(!strcmp(szTarget
, szComparison
)) {
329 g_free(szComparison
);
330 // Todo: set selection here?
331 gtk_tree_view_set_cursor((GtkTreeView
*)pPointers
[1], pPath
, NULL
, false);
333 gtk_tree_view_scroll_to_cell((GtkTreeView
*)pPointers
[1], pPath
, NULL
, true, 0.5, 0.0);
338 g_free(szComparison
);
344 void dasher_preferences_dialogue_refresh_widget(DasherPreferencesDialogue
*pSelf
, gint iParameter
) {
345 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
348 int iNumBoolEntries
= sizeof(sBoolTranslationTable
) / sizeof(BoolTranslation
);
349 for(int i(0); i
< iNumBoolEntries
; ++i
) {
350 if((iParameter
== -1) || (sBoolTranslationTable
[i
].iParameter
== iParameter
)) {
351 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sBoolTranslationTable
[i
].pWidget
), pPrivate
->pAppSettings
->GetBool(sBoolTranslationTable
[i
].iParameter
));
356 // TODO: I believe that this is being called initially before the
357 // widgets are realised, so the selection isn't being correctly
359 int iNumStringEntries
= sizeof(sStringTranslationTable
) / sizeof(StringTranslation
);
360 for(int i(0); i
< iNumStringEntries
; ++i
) {
361 if((iParameter
== -1) || (sStringTranslationTable
[i
].iParameter
== iParameter
)) {
362 GtkTreeModel
*pModel
= gtk_tree_view_get_model(GTK_TREE_VIEW(sStringTranslationTable
[i
].pWidget
));
364 // TODO: tidy up in a struct
365 const void *pUserData
[3];
366 pUserData
[0] = pPrivate
->pAppSettings
->GetString(sStringTranslationTable
[i
].iParameter
).c_str();
367 pUserData
[1] = GTK_TREE_VIEW(sStringTranslationTable
[i
].pWidget
);
368 pUserData
[2] = pSelf
;
370 #if GTK_CHECK_VERSION (2,20,0)
371 if(sStringTranslationTable
[i
].pWidget
&& gtk_widget_get_realized(sStringTranslationTable
[i
].pWidget
))
373 if(sStringTranslationTable
[i
].pWidget
&& GTK_WIDGET_REALIZED(sStringTranslationTable
[i
].pWidget
))
375 gtk_tree_model_foreach(pModel
, dasher_preferences_refresh_foreach_function
, pUserData
);
380 static void dasher_preferences_dialogue_refresh_parameter(DasherPreferencesDialogue
*pSelf
, GtkWidget
*pWidget
, gpointer pUserData
) {
382 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
384 int iNumBoolEntries
= sizeof(sBoolTranslationTable
) / sizeof(BoolTranslation
);
386 for(int i(0); i
< iNumBoolEntries
; ++i
) {
387 if((pWidget
== NULL
) || (sBoolTranslationTable
[i
].pWidget
== pWidget
)) {
389 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sBoolTranslationTable
[i
].pWidget
)) != pPrivate
->pAppSettings
->GetBool(sBoolTranslationTable
[i
].iParameter
)) {
391 pPrivate
->pAppSettings
->SetBool(sBoolTranslationTable
[i
].iParameter
, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sBoolTranslationTable
[i
].pWidget
)));
398 // TODO: Is this function actually useful? (conversely, is the other call to RefreshFoo elsewhere any use?)
399 extern "C" void on_widget_realize(GtkWidget
*pWidget
, gpointer pUserData
) {
400 gint
*pParameter
= (gint
*)pUserData
;
401 dasher_preferences_dialogue_refresh_widget(g_pPreferencesDialogue
, *pParameter
); // TODO: Fix NULL pointer
404 // --- Generic boolean options ---
406 extern "C" void generic_bool_changed(GtkWidget
*widget
, gpointer user_data
) {
407 dasher_preferences_dialogue_refresh_parameter(g_pPreferencesDialogue
, widget
, user_data
);// TODO: fix NULL
410 extern "C" void outline_button_toggled(GtkWidget
*widget
, gpointer user_data
) {
411 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
);
412 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
))) {
413 pPrivate
->pAppSettings
->SetLong(LP_OUTLINE_WIDTH
, 1);
415 pPrivate
->pAppSettings
->SetLong(LP_OUTLINE_WIDTH
, 0);
419 // --- Generic string options ---
420 //pHelper, if provided, is a button to open a module settings dialog
421 // for parameters specific to the item selected in the list (i.e. GtkTreeView), if any.
422 void dasher_preferences_dialogue_populate_list(DasherPreferencesDialogue
*pSelf
, GtkTreeView
*pView
, int iParameter
, GtkWidget
*pHelper
) {
423 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
425 const gchar
*szCurrentValue(pPrivate
->pAppSettings
->GetString(iParameter
).c_str());
427 GArray
*pFilterArray
= pPrivate
->pAppSettings
->GetAllowedValues(iParameter
);
429 //for each item in the list: the dasher Parameters.h number (i.e. same for all items); the "helper" button (as above, also the same for all items);
430 // the text to display (and perhaps pass to SetStringParameter).
431 GtkListStore
*pStore
= gtk_list_store_new(3, G_TYPE_INT
, G_TYPE_POINTER
, G_TYPE_STRING
);
432 gtk_tree_view_set_model(pView
, GTK_TREE_MODEL(pStore
));
434 GtkCellRenderer
*pRenderer
;
435 GtkTreeViewColumn
*pColumn
;
437 pRenderer
= gtk_cell_renderer_text_new();
438 pColumn
= gtk_tree_view_column_new_with_attributes(_("Action"), pRenderer
, "text", 2, NULL
);
439 gtk_tree_view_append_column(pView
, pColumn
);
442 //doing this before we add the items, means the callback will be invoked when we set
443 // the selection (below), which'll enable/disable the pHelper button appropriately
444 GtkTreeSelection
*pSelection
= gtk_tree_view_get_selection(pView
);
445 g_signal_connect(pSelection
, "changed", (GCallback
)on_list_selection
, 0);
447 for(unsigned int i(0); i
< pFilterArray
->len
; ++i
) {
448 const gchar
*szCurrentFilter
= g_array_index(pFilterArray
, gchar
*, i
);
449 gchar
*szName
= new gchar
[strlen(szCurrentFilter
) + 1];
450 strcpy(szName
, szCurrentFilter
);
452 gtk_list_store_append(pStore
, &oIter
);
454 gtk_list_store_set(pStore
, &oIter
, 0, iParameter
, 1, pHelper
, 2, szName
, -1);
458 if(!strcmp(szCurrentFilter
, szCurrentValue
)) {
459 gtk_tree_selection_select_iter(pSelection
, &oIter
);
464 g_signal_connect(G_OBJECT(pHelper
), "clicked", G_CALLBACK(show_helper_window
), pView
);
469 extern "C" void on_list_selection(GtkTreeSelection
*pSelection
, gpointer pUserData
) {
470 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
471 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix null
474 GtkTreeModel
*pModel
;
476 if(gtk_tree_selection_get_selected(pSelection
, &pModel
, &oIter
)) {
480 gtk_tree_model_get(pModel
, &oIter
, 0, &iParameter
, 1, &pHelper
, 2, &szValue
, -1);
482 pPrivate
->pAppSettings
->SetString(iParameter
, szValue
);
485 //check if input filter/device has any settings...
486 SModuleSettings
*pSettings
;
488 bool bHasSettings
= pPrivate
->pAppSettings
->GetModuleSettings(szValue
, &pSettings
, &iCount
);
489 gtk_widget_set_sensitive(GTK_WIDGET(pHelper
), bHasSettings
);
496 // --- Special Cases ---
498 static void dasher_preferences_dialogue_populate_special_speed(DasherPreferencesDialogue
*pSelf
) {
499 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
501 double dNewValue
= pPrivate
->pAppSettings
->GetLong(LP_MAX_BITRATE
) / 100.0;
502 gtk_range_set_value(pPrivate
->pSpeedSlider
, dNewValue
);
505 static void dasher_preferences_dialogue_populate_special_mouse_start(DasherPreferencesDialogue
*pSelf
) {
507 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
509 pPrivate
->pMousePosButton
= GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "mouseposbutton"));
510 pPrivate
->pMousePosStyle
= GTK_COMBO_BOX(gtk_builder_get_object(pPrivate
->pXML
, "MousePosStyle"));
512 if(pPrivate
->pAppSettings
->GetBool(BP_MOUSEPOS_MODE
)) {
513 gtk_combo_box_set_active(pPrivate
->pMousePosStyle
, 1);
514 gtk_toggle_button_set_active(pPrivate
->pMousePosButton
, true);
516 else if(pPrivate
->pAppSettings
->GetBool(BP_CIRCLE_START
)) {
517 gtk_combo_box_set_active(pPrivate
->pMousePosStyle
, 0);
518 gtk_toggle_button_set_active(pPrivate
->pMousePosButton
, true);
521 gtk_toggle_button_set_active(pPrivate
->pMousePosButton
, false);
526 static void dasher_preferences_dialogue_populate_special_orientation(DasherPreferencesDialogue
*pSelf
) {
527 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
529 pPrivate
->pAlphOrient
= GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton1"));
530 pPrivate
->pLRButton
= GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton2"));
531 pPrivate
->pRLButton
= GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton3"));
532 pPrivate
->pTBButton
= GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton4"));
533 pPrivate
->pBTButton
= GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton5"));
534 GtkToggleButton
*pButton
;
535 switch (pPrivate
->pAppSettings
->GetLong(LP_ORIENTATION
)) {
536 case Dasher::Opts::AlphabetDefault
:
537 pButton
= pPrivate
->pAlphOrient
; break;
539 case Dasher::Opts::LeftToRight
:
540 pButton
= pPrivate
->pLRButton
; break;
542 case Dasher::Opts::RightToLeft
:
543 pButton
= pPrivate
->pRLButton
; break;
545 case Dasher::Opts::TopToBottom
:
546 pButton
= pPrivate
->pTBButton
; break;
548 case Dasher::Opts::BottomToTop
:
549 pButton
= pPrivate
->pBTButton
; break;
555 if(gtk_toggle_button_get_active(pButton
) != TRUE
)
556 gtk_toggle_button_set_active(pButton
, TRUE
);
559 static void dasher_preferences_dialogue_populate_special_appstyle(DasherPreferencesDialogue
*pSelf
) {
561 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
563 switch(pPrivate
->pAppSettings
->GetLong(APP_LP_STYLE
)) {
565 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "appstyle_classic")), TRUE
);
568 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "appstyle_compose")), TRUE
);
571 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "appstyle_direct")), TRUE
);
574 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "appstyle_fullscreen")), TRUE
);
580 static void dasher_preferences_dialogue_populate_special_linewidth(DasherPreferencesDialogue
*pSelf
) {
582 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
584 if(pPrivate
->pAppSettings
->GetLong(LP_LINE_WIDTH
) > 1)
585 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "thicklinebutton")), true);
587 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "thicklinebutton")), false);
592 static void dasher_preferences_dialogue_populate_special_lm(DasherPreferencesDialogue
*pSelf
) {
593 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
595 switch( pPrivate
->pAppSettings
->GetLong(LP_LANGUAGE_MODEL_ID
)) {
597 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton6"))) != TRUE
)
598 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton6")), TRUE
);
601 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton7"))) != TRUE
)
602 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton7")), TRUE
);
605 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton8"))) != TRUE
)
606 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton8")), TRUE
);
609 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton9"))) != TRUE
)
610 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "radiobutton9")), TRUE
);
617 static void dasher_preferences_dialogue_populate_special_uniform(DasherPreferencesDialogue
*pSelf
) {
618 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
620 gtk_range_set_value( GTK_RANGE(gtk_builder_get_object(pPrivate
->pXML
, "uniformhscale")), pPrivate
->pAppSettings
->GetLong(LP_UNIFORM
)/10.0);
623 static void dasher_preferences_dialogue_populate_special_colour(DasherPreferencesDialogue
*pSelf
) {
624 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
626 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "manual_colour")), !pPrivate
->pAppSettings
->GetBool(BP_PALETTE_CHANGE
));
627 gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(pPrivate
->pXML
, "ColorTree")), !pPrivate
->pAppSettings
->GetBool(BP_PALETTE_CHANGE
));
630 static void dasher_preferences_dialogue_populate_special_dasher_font(DasherPreferencesDialogue
*pSelf
) {
631 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
633 GObject
*pDasherFontButton
= gtk_builder_get_object(pPrivate
->pXML
, "dasher_fontbutton");
635 gtk_font_button_set_font_name(GTK_FONT_BUTTON(pDasherFontButton
),
636 pPrivate
->pAppSettings
->GetString(SP_DASHER_FONT
).c_str());
639 static void dasher_preferences_dialogue_populate_special_edit_font(DasherPreferencesDialogue
*pSelf
) {
640 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
642 GObject
*pEditFontButton
= gtk_builder_get_object(pPrivate
->pXML
, "edit_fontbutton");
644 gtk_font_button_set_font_name(GTK_FONT_BUTTON(pEditFontButton
),
645 pPrivate
->pAppSettings
->GetString(APP_SP_EDIT_FONT
).c_str());
648 static void dasher_preferences_dialogue_populate_special_fontsize(DasherPreferencesDialogue
*pSelf
) {
649 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf
);
651 int iValue
= pPrivate
->pAppSettings
->GetLong(LP_DASHER_FONTSIZE
);
652 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "fontsizenormal")), iValue
== Opts::Normal
);
653 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "fontsizelarge")), iValue
== Opts::Big
);
654 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "fontsizevlarge")), iValue
== Opts::VBig
);
657 static void dasher_preferences_dialogue_update_special(DasherPreferencesDialogue
*pSelf
, int iID
) {
658 for(unsigned int i(0); i
< (sizeof(sSpecialControlTable
) / sizeof(SpecialControl
)); ++i
) {
659 if(((iID
== -1) && sSpecialControlTable
[i
].bPrimary
) || (sSpecialControlTable
[i
].iID
== iID
)) {
660 (sSpecialControlTable
[i
].pPopulate
)(pSelf
);
665 // --- Callbacks for 'special case' controls ---
667 // TODO: Give these a systematic naming convention
669 extern "C" void OnMousePosChanged(GtkWidget
*widget
, gpointer user_data
) {
670 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
671 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
673 bool bActive
= gtk_toggle_button_get_active(pPrivate
->pMousePosButton
);
675 gtk_widget_set_sensitive(GTK_WIDGET(pPrivate
->pMousePosStyle
),bActive
);
679 iIndex
=gtk_combo_box_get_active(pPrivate
->pMousePosStyle
);
680 if ((iIndex
| 1) != 1) {
681 //neither 0 or 1 => neither Circle nor Two-Box is actually selected
682 // (i.e. combo box is empty) => forcibly select Circle
683 gtk_combo_box_set_active(pPrivate
->pMousePosStyle
, iIndex
=0);
687 pPrivate
->pAppSettings
->SetBool(BP_MOUSEPOS_MODE
, iIndex
==1);
688 pPrivate
->pAppSettings
->SetBool(BP_CIRCLE_START
, iIndex
==0);
692 extern "C" void PrefsSpeedSliderChanged(GtkHScale
*hscale
, gpointer user_data
) {
693 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
694 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
696 long iNewValue
= long(round(gtk_range_get_value(GTK_RANGE(hscale
)) * 100));
697 pPrivate
->pAppSettings
->SetLong(LP_MAX_BITRATE
, iNewValue
);
700 extern "C" void orientation(GtkRadioButton
*widget
, gpointer user_data
) {
701 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
702 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
704 if(pPrivate
->bIgnoreSignals
)
707 GtkToggleButton
*pButton
= GTK_TOGGLE_BUTTON(widget
);
708 Dasher::Opts::ScreenOrientations orient
= Dasher::Opts::AlphabetDefault
;
709 if (pButton
== pPrivate
->pAlphOrient
) {
710 orient
= Dasher::Opts::AlphabetDefault
;
711 } else if (pButton
== pPrivate
->pLRButton
) {
712 orient
= Dasher::Opts::LeftToRight
;
713 } else if (pButton
== pPrivate
->pRLButton
) {
714 orient
= Dasher::Opts::RightToLeft
;
715 } else if (pButton
== pPrivate
->pTBButton
) {
716 orient
= Dasher::Opts::TopToBottom
;
717 } else if (pButton
== pPrivate
->pBTButton
) {
718 orient
= Dasher::Opts::BottomToTop
;
720 pPrivate
->pAppSettings
->SetLong(LP_ORIENTATION
, orient
);
724 extern "C" void ThickLineClicked(GtkWidget
*widget
, gpointer user_data
) {
725 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
726 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
728 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
)))
729 pPrivate
->pAppSettings
->SetLong(LP_LINE_WIDTH
, 3);
731 pPrivate
->pAppSettings
->SetLong(LP_LINE_WIDTH
, 1);
734 extern "C" void autocolour_clicked(GtkWidget
*widget
, gpointer user_data
) {
735 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
736 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
738 pPrivate
->pAppSettings
->SetLong(BP_PALETTE_CHANGE
, !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
)));
741 extern "C" void mouseposstart_y_changed(GtkRange
*widget
, gpointer user_data
) {
742 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
743 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
745 int mouseposstartdist
=int(gtk_adjustment_get_value(gtk_range_get_adjustment(widget
)));
746 pPrivate
->pAppSettings
->SetLong(LP_MOUSEPOSDIST
, mouseposstartdist
);
749 extern "C" void languagemodel(GtkRadioButton
*widget
, gpointer user_data
) {
750 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
751 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
753 #if GTK_CHECK_VERSION (2,20,0)
754 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
))==TRUE
) {
755 if( !strcmp( gtk_buildable_get_name( GTK_BUILDABLE(widget
) ), "radiobutton6" ) ) {
756 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 0 );
757 } else if (!strcmp( gtk_buildable_get_name( GTK_BUILDABLE(widget
) ), "radiobutton7" )) {
758 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 2 );
759 } else if (!strcmp( gtk_buildable_get_name( GTK_BUILDABLE(widget
) ), "radiobutton8" )) {
760 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 3 );
761 } else if (!strcmp( gtk_buildable_get_name( GTK_BUILDABLE(widget
) ), "radiobutton9" )) {
762 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 4 );
766 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
))==TRUE
) {
767 if( !strcmp( gtk_widget_get_name( GTK_WIDGET(widget
) ), "radiobutton6" ) ) {
768 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 0 );
769 } else if (!strcmp( gtk_widget_get_name( GTK_WIDGET(widget
) ), "radiobutton7" )) {
770 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 2 );
771 } else if (!strcmp( gtk_widget_get_name( GTK_WIDGET(widget
) ), "radiobutton8" )) {
772 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 3 );
773 } else if (!strcmp( gtk_widget_get_name( GTK_WIDGET(widget
) ), "radiobutton9" )) {
774 pPrivate
->pAppSettings
->SetLong(LP_LANGUAGE_MODEL_ID
, 4 );
780 extern "C" void uniform_changed(GtkHScale
*hscale
) {
781 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
782 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
785 int iValue
= (int)(gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(hscale
))) * 10);
789 gtk_range_set_value(GTK_RANGE(gtk_builder_get_object(pPrivate
->pXML
, "uniformhscale")), 5.0);
792 pPrivate
->pAppSettings
->SetLong(LP_UNIFORM
, iValue
);
795 extern "C" gboolean
show_helper_window(GtkWidget
*pWidget
, gpointer
*pUserData
) {
796 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
);
797 GtkTreeView
*pView
= GTK_TREE_VIEW(pUserData
);
798 GtkTreeSelection
*pSelection
= gtk_tree_view_get_selection(pView
);
801 GtkTreeModel
*pModel
;
803 if(!gtk_tree_selection_get_selected(pSelection
, &pModel
, &oIter
))
804 DASHER_ASSERT(false); //button should not be sensitive if nothing selected
808 gtk_tree_model_get(pModel
, &oIter
, 0, &iParameter
, 2, &szValue
, -1);
810 SModuleSettings
*pSettings
;
812 if (!pPrivate
->pAppSettings
->GetModuleSettings(szValue
, &pSettings
, &iCount
))
813 DASHER_ASSERT(false); //button should only be sensitive if item has settings
815 GtkWidget
*pWindow
= module_settings_window_new(pPrivate
->pAppSettings
, szValue
, pSettings
, iCount
);
818 gtk_window_present(GTK_WINDOW(pWindow
));
823 extern "C" void on_appstyle_changed(GtkWidget
*widget
, gpointer user_data
) {
824 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
825 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
827 #if GTK_CHECK_VERSION (2,20,0)
828 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
))) {
829 if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget
)), "appstyle_classic"))
830 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 0);
831 else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget
)), "appstyle_compose"))
832 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 1);
833 else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget
)), "appstyle_direct"))
834 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 2);
835 else if(!strcmp(gtk_buildable_get_name(GTK_BUILDABLE(widget
)), "appstyle_fullscreen"))
836 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 3);
839 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget
))) {
840 if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget
)), "appstyle_classic"))
841 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 0);
842 else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget
)), "appstyle_compose"))
843 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 1);
844 else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget
)), "appstyle_direct"))
845 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 2);
846 else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget
)), "appstyle_fullscreen"))
847 pPrivate
->pAppSettings
->SetLong(APP_LP_STYLE
, 3);
852 extern "C" void on_dasher_font_changed(GtkFontButton
*pButton
, gpointer pUserData
) {
853 DasherMainPrivate
*pMainPrivate
= DASHER_MAIN_GET_PRIVATE(pUserData
);
854 pMainPrivate
->pAppSettings
->SetString(
856 gtk_font_button_get_font_name(pButton
));
859 extern "C" void on_edit_font_changed(GtkFontButton
*pButton
, gpointer pUserData
) {
860 DasherMainPrivate
*pMainPrivate
= DASHER_MAIN_GET_PRIVATE(pUserData
);
861 pMainPrivate
->pAppSettings
->SetString(
863 gtk_font_button_get_font_name(pButton
));
866 extern "C" void set_dasher_fontsize(GtkWidget
*pWidget
, gboolean pUserData
) {
867 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
);
869 int iValue
= pPrivate
->pAppSettings
->GetLong(LP_DASHER_FONTSIZE
);
871 if((iValue
!= Opts::Normal
) && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "fontsizenormal"))))
872 pPrivate
->pAppSettings
->SetLong(LP_DASHER_FONTSIZE
, Opts::Normal
);
873 else if((iValue
!= Opts::Big
) && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "fontsizelarge"))))
874 pPrivate
->pAppSettings
->SetLong(LP_DASHER_FONTSIZE
, Opts::Big
);
875 else if((iValue
!= Opts::VBig
) && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate
->pXML
, "fontsizevlarge"))))
876 pPrivate
->pAppSettings
->SetLong(LP_DASHER_FONTSIZE
, Opts::VBig
);
880 // --- General Callbacks ---
882 // For general purpose operation of the dialogue, rather than dealing
883 // with changing specific options
885 extern "C" gboolean
preferences_hide(GtkWidget
*widget
, gpointer user_data
) {
886 // DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
887 DasherPreferencesDialoguePrivate
*pPrivate
= DASHER_PREFERENCES_DIALOGUE_PRIVATE(g_pPreferencesDialogue
); // TODO: Fix NULL
889 gtk_widget_hide(GTK_WIDGET(pPrivate
->pPreferencesWindow
));
897 extern "C" void on_window_size_changed(GtkWidget
*widget
, gpointer user_data
) {
898 if(GTK_TOGGLE_BUTTON(widget
)->active
)
899 dasher_app_settings_set_long(pPrivate
->pAppSettings
, APP_LP_MAEMO_SIZE
, 1);
901 dasher_app_settings_set_long(pPrivate
->pAppSettings
, APP_LP_MAEMO_SIZE
, 0);