Update Turkish translation
[dasher.git] / Src / Gtk2 / Preferences.cpp
blob9c8d240aaab0ec9e1c22c390b292ddf383530938
1 #ifdef HAVE_CONFIG_H
2 #include <config.h>
3 #endif
5 #include <glib/gi18n.h>
6 #include <libintl.h>
7 #include <cstring>
8 #include <cmath>
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 {
30 gint iParameter;
31 const gchar *szWidgetName;
32 GtkWidget *pWidget;
35 // Checkbox widgets which map directly to boolean parameters
37 #ifndef WITH_MAEMO
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}
57 #endif
59 // List widgets which map directly to string parameters
61 typedef struct _StringTranslation StringTranslation;
63 struct _StringTranslation {
64 gint iParameter;
65 const gchar *szWidgetName;
66 GtkWidget *pWidget;
67 const gchar *szHelperName;
68 GtkWidget *pHelper;
71 #ifdef WITH_MAEMO
73 StringTranslation sStringTranslationTable[] = {
74 {SP_ALPHABET_ID, "AlphabetTree", NULL, NULL, NULL},
75 {SP_COLOUR_ID, "ColorTree", NULL, NULL, NULL},
78 #else
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}
87 #endif
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
100 GtkBuilder *pXML;
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)
115 bool bIgnoreSignals;
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 {
147 int iID;
148 void (*pPopulate)(DasherPreferencesDialogue *);
149 gboolean bPrimary;
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),
184 NULL,
185 NULL,
186 (GClassInitFunc) dasher_preferences_dialogue_class_init,
187 NULL,
188 NULL,
189 sizeof(DasherPreferencesDialogue),
191 (GInstanceInitFunc) dasher_preferences_dialogue_init,
192 NULL
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...
218 delete pPrivate;
221 // Public methods
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);
251 #ifdef WITH_MAEMO
252 #ifndef WITH_MAEMOFULLSCREEN
253 gtk_widget_hide(gtk_builder_get_object(pXML, "displaysizebox"));
254 #endif
255 #endif
257 #ifndef JAPANESE
258 gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(pXML, "radiobutton9")));
259 #endif
261 // InitialiseFontDialogues(pXML, pAppSettings);
263 return pDasherPref;
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);
274 #ifdef WITH_MAEMO
275 #ifndef WITH_MAEMOFULLSCREEN
276 // gtk_window_set_keep_above(pPrivate->pPreferencesWindow, true);
277 #endif
278 #endif
279 // TODO: reimplement
280 // gtk_window_set_keep_above(pPrivate->pPreferencesWindow, dasher_main_topmost(g_pDasherMain));
282 if(iPage > 0) {
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);
302 #ifndef WITH_MAEMO
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));
307 #endif
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];
324 gchar *szComparison;
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);
335 return true;
338 g_free(szComparison);
340 return false;
344 void dasher_preferences_dialogue_refresh_widget(DasherPreferencesDialogue *pSelf, gint iParameter) {
345 DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
347 #ifndef WITH_MAEMO
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));
354 #endif
356 // TODO: I believe that this is being called initially before the
357 // widgets are realised, so the selection isn't being correctly
358 // brought into view
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))
372 #else
373 if(sStringTranslationTable[i].pWidget && GTK_WIDGET_REALIZED(sStringTranslationTable[i].pWidget))
374 #endif
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) {
381 #ifndef WITH_MAEMO
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)));
395 #endif
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);
414 } else {
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);
441 GtkTreeIter oIter;
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);
456 delete[] szName;
458 if(!strcmp(szCurrentFilter, szCurrentValue)) {
459 gtk_tree_selection_select_iter(pSelection, &oIter);
463 if(pHelper) {
464 g_signal_connect(G_OBJECT(pHelper), "clicked", G_CALLBACK(show_helper_window), pView);
468 // TODO: In class
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
473 GtkTreeIter oIter;
474 GtkTreeModel *pModel;
476 if(gtk_tree_selection_get_selected(pSelection, &pModel, &oIter)) {
477 int iParameter;
478 gpointer pHelper;
479 gchar *szValue;
480 gtk_tree_model_get(pModel, &oIter, 0, &iParameter, 1, &pHelper, 2, &szValue, -1);
482 pPrivate->pAppSettings->SetString(iParameter, szValue);
484 if(pHelper) {
485 //check if input filter/device has any settings...
486 SModuleSettings *pSettings;
487 int iCount;
488 bool bHasSettings = pPrivate->pAppSettings->GetModuleSettings(szValue, &pSettings, &iCount);
489 gtk_widget_set_sensitive(GTK_WIDGET(pHelper), bHasSettings);
492 g_free(szValue);
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) {
506 #ifndef WITH_MAEMO
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);
520 else {
521 gtk_toggle_button_set_active(pPrivate->pMousePosButton, false);
523 #endif
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;
551 default:
552 return;
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) {
560 #ifndef WITH_MAEMO
561 DasherPreferencesDialoguePrivate *pPrivate = DASHER_PREFERENCES_DIALOGUE_PRIVATE(pSelf);
563 switch(pPrivate->pAppSettings->GetLong(APP_LP_STYLE)) {
564 case 0:
565 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "appstyle_classic")), TRUE);
566 break;
567 case 1:
568 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "appstyle_compose")), TRUE);
569 break;
570 case 2:
571 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "appstyle_direct")), TRUE);
572 break;
573 case 3:
574 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "appstyle_fullscreen")), TRUE);
575 break;
577 #endif
580 static void dasher_preferences_dialogue_populate_special_linewidth(DasherPreferencesDialogue *pSelf) {
581 #ifndef WITH_MAEMO
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);
586 else
587 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(pPrivate->pXML, "thicklinebutton")), false);
588 #endif
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 )) {
596 case 0:
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);
599 break;
600 case 2:
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);
603 break;
604 case 3:
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);
607 break;
608 case 4:
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);
611 break;
612 default:
613 break;
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);
677 int iIndex;
678 if (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);
685 } else iIndex=-1;
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)
705 return;
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);
730 else
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 );
765 #else
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 );
777 #endif
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);
787 if(iValue < 50) {
788 iValue = 50;
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);
800 GtkTreeIter oIter;
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
806 int iParameter;
807 gchar *szValue;
808 gtk_tree_model_get(pModel, &oIter, 0, &iParameter, 2, &szValue, -1);
810 SModuleSettings *pSettings;
811 int iCount;
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);
816 g_free(szValue);
818 gtk_window_present(GTK_WINDOW(pWindow));
820 return FALSE;
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);
838 #else
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);
849 #endif
852 extern "C" void on_dasher_font_changed(GtkFontButton *pButton, gpointer pUserData) {
853 DasherMainPrivate *pMainPrivate = DASHER_MAIN_GET_PRIVATE(pUserData);
854 pMainPrivate->pAppSettings->SetString(
855 SP_DASHER_FONT,
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(
862 APP_SP_EDIT_FONT,
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));
890 return TRUE;
894 // --- TODOS:
896 #ifdef WITH_MAEMO
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);
900 else
901 dasher_app_settings_set_long(pPrivate->pAppSettings, APP_LP_MAEMO_SIZE, 0);
903 #endif