Fairly large scale cleanup (little modification to functionality)
[dasher.git] / Src / Gtk2 / Menu.cc
blob1e756f336d4187e953ed262d405532b1ff24d03d
1 #include "../Common/Common.h"
3 #include "Menu.h"
4 #include "dasher.h"
5 #include "DasherTypes.h"
6 #include "GtkDasherControl.h"
8 #include <glib/gi18n.h>
9 #ifdef GNOME_LIBS
10 #include <libgnomeui/libgnomeui.h>
11 #include <libgnome/libgnome.h>
12 #endif
14 #include <iostream>
16 //extern GladeXML *widgets;
18 extern GtkWidget *open_filesel;
19 extern GtkWidget *save_filesel;
20 extern GtkWidget *save_and_quit_filesel;
21 extern GtkWidget *import_filesel;
22 extern GtkWidget *append_filesel;
23 static GtkWidget *window = NULL; // TODO: fix
24 extern GtkWidget *file_selector;
26 static gchar *filename = "foo"; // TODO: fix
28 DasherEditor *g_pEditor = NULL; // TODO: fix
30 extern "C" void select_save_file_as(GtkWidget * widget, gpointer user_data);
32 // 'File' Menu
34 #if GTK_CHECK_VERSION(2,3,0)
36 // extern "C" void select_new_file(GtkWidget *widget, gpointer user_data) {
37 // //FIXME - confirm this. We should check whether the user wants to lose their work.
39 // // TODO: Should just call a 'new' method in DasherEditor
40 // dasher_editor_generate_filename(g_pEditor);
41 // dasher_editor_clear(g_pEditor, false);
43 // // TODO: Reimplement
45 // // // Tell the widget we have a new buffer, and set the offset to 0
46 // // gtk_dasher_control_set_buffer(GTK_DASHER_CONTROL(pDasherWidget), 0);
48 // // // Starting a new file indicates a new user trial in detailed logging
49 // // gtk_dasher_user_log_new_trial(GTK_DASHER_CONTROL(pDasherWidget));
51 // }
53 #endif
55 // #if GTK_CHECK_VERSION(2,3,0)
57 // extern "C" void select_open_file(GtkWidget *widget, gpointer user_data) {
58 // GtkWidget *filesel = gtk_file_chooser_dialog_new(_("Select File"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
60 // #ifdef GNOME_LIBS
61 // gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(filesel), FALSE);
62 // #endif
64 // if(gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
65 // #ifdef GNOME_LIBS
66 // char *filename = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(filesel));
67 // #else
68 // char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filesel));
69 // #endif
70 // dasher_editor_open(g_pEditor, filename);
71 // g_free(filename);
72 // }
73 // gtk_widget_destroy(filesel);
74 // }
76 // #else
78 // extern "C" void filesel_hide(GtkWidget *widget, gpointer user_data) {
79 // // FIXME - uh. Yes. This works, but is it in any way guaranteed to?
80 // // Of course, if glade let us set user_data stuff properly, this would
81 // // be a lot easier
82 // gtk_widget_hide(gtk_widget_get_parent(gtk_widget_get_parent(gtk_widget_get_parent(widget))));
83 // }
85 // extern "C" void open_file_from_filesel(GtkWidget *selector2, GtkFileSelection *selector) {
86 // filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(selector));
87 // filesel_hide(GTK_WIDGET(selector->ok_button), NULL);
88 // dasher_editor_open(g_pEditor, filename);
89 // }
91 // extern "C" void select_open_file(GtkWidget *widget, gpointer user_data) {
92 // if(open_filesel == NULL) {
93 // open_filesel = glade_xml_get_widget(widgets, "open_fileselector");
94 // g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(open_filesel)->ok_button), "clicked", G_CALLBACK(open_file_from_filesel), (gpointer) open_filesel);
95 // }
96 // gtk_window_set_transient_for(GTK_WINDOW(open_filesel), GTK_WINDOW(window));
97 // gtk_window_present(GTK_WINDOW(open_filesel));
98 // }
100 // #endif
102 extern "C" void save_file(GtkWidget *widget, gpointer user_data) {
103 if(filename != NULL) {
104 dasher_editor_save_as(g_pEditor, filename,FALSE); // FIXME - REIMPLEMENT
106 else {
107 select_save_file_as(NULL, NULL);
111 #if GTK_CHECK_VERSION(2,3,0)
113 extern "C" void select_save_file_as(GtkWidget *widget, gpointer user_data) {
114 GtkWidget *filesel = gtk_file_chooser_dialog_new(_("Select File"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
116 #ifdef GNOME_LIBS
117 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(filesel), FALSE);
118 #endif
120 if(gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
121 #ifdef GNOME_LIBS
122 char *filename = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(filesel));
123 #else
124 char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filesel));
125 #endif
126 dasher_editor_save_as(g_pEditor, filename,FALSE);
127 g_free(filename);
129 gtk_widget_destroy(filesel);
132 #else
134 extern "C" void save_file_from_filesel_and_quit(GtkWidget *selector2, GtkFileSelection *selector) {
135 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(selector));
136 if(dasher_editor_save_as(g_pEditor, filename, FALSE) == false) {
138 // FIXME - do we really just want to fail silently if the save operation fails?
140 return;
142 else {
143 exiting = TRUE;
144 gtk_main_quit();
146 return;
149 extern "C" void save_file_from_filesel(GtkWidget *selector2, GtkFileSelection *selector) {
150 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(selector));
151 filesel_hide(GTK_WIDGET(selector->ok_button), NULL);
152 dasher_editor_save_as(g_pEditor, filename, FALSE);
155 extern "C" void select_save_file_as(GtkWidget *widget, gpointer user_data) {
156 if(save_filesel == NULL) {
157 save_filesel = glade_xml_get_widget(widgets, "save_fileselector");
158 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(save_filesel)->ok_button), "clicked", G_CALLBACK(save_file_from_filesel), (gpointer) save_filesel);
161 if(filename != NULL)
162 gtk_file_selection_set_filename(GTK_FILE_SELECTION(save_filesel), filename);
163 gtk_window_set_transient_for(GTK_WINDOW(save_filesel), GTK_WINDOW(window));
164 gtk_window_present(GTK_WINDOW(save_filesel));
167 #endif
169 #if GTK_CHECK_VERSION(2,3,0)
171 extern "C" void select_append_file(GtkWidget *widget, gpointer user_data) {
172 GtkWidget *filesel = gtk_file_chooser_dialog_new(_("Select File"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
174 #ifdef GNOME_LIBS
175 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(filesel), FALSE);
176 #endif
178 if(gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
179 #ifdef GNOME_LIBS
180 char *filename = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(filesel));
181 #else
182 char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filesel));
183 #endif
184 // dasher_editor_save_as(g_pEditor, filename,TRUE);// FIXME - REIMPLEMENT
185 g_free(filename);
187 gtk_widget_destroy(filesel);
190 #else
192 extern "C" void append_file_from_filesel(GtkWidget *selector2, GtkFileSelection *selector) {
193 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(selector));
195 dasher_editor_save_as(g_pEditor, filename, TRUE);
197 filesel_hide(GTK_WIDGET(selector->ok_button), NULL);
200 extern "C" void select_append_file(GtkWidget *widget, gpointer user_data) {
201 if(append_filesel == NULL) {
202 append_filesel = glade_xml_get_widget(widgets, "append_fileselector");
203 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(append_filesel)->ok_button), "clicked", G_CALLBACK(append_file_from_filesel), (gpointer) append_filesel);
206 gtk_window_set_transient_for(GTK_WINDOW(append_filesel), GTK_WINDOW(window));
207 gtk_window_present(GTK_WINDOW(append_filesel));
210 #endif
212 #if GTK_CHECK_VERSION(2,3,0)
214 extern "C" void select_import_file(GtkWidget *widget, gpointer user_data) {
215 // Moved elsewhere
218 #else
220 // Minimu GTK 2.4 now required
222 // extern "C" void import_file_from_filesel(GtkWidget *selector2, GtkFileSelection *selector) {
223 // filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(selector));
224 // // TODO: Reimplement
225 // // gtk_dasher_control_train(GTK_DASHER_CONTROL(pDasherWidget), filename);
226 // filesel_hide(GTK_WIDGET(selector->ok_button), NULL);
227 // }
229 // extern "C" void select_import_file(GtkWidget *widget, gpointer user_data) {
230 // if(import_filesel == NULL) {
231 // import_filesel = glade_xml_get_widget(widgets, "import_fileselector");
233 // g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(import_filesel)->ok_button), "clicked", G_CALLBACK(import_file_from_filesel), (gpointer) import_filesel);
234 // }
236 // gtk_window_set_transient_for(GTK_WINDOW(import_filesel), GTK_WINDOW(window));
237 // gtk_window_present(GTK_WINDOW(import_filesel));
238 // }
240 #endif
242 #if !GTK_CHECK_VERSION(2,3,0)
244 // FIXME - I believe that this doesn't ever get called
246 extern "C" void select_save_file_as_and_quit(GtkWidget *widget, gpointer user_data) {
247 if(save_and_quit_filesel == NULL) {
248 save_and_quit_filesel = glade_xml_get_widget(widgets, "save_and_quit_fileselector");
249 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(save_and_quit_filesel)->ok_button), "clicked", G_CALLBACK(save_file_from_filesel_and_quit), (gpointer) save_and_quit_filesel);
252 if(filename != NULL)
253 gtk_file_selection_set_filename(GTK_FILE_SELECTION(save_and_quit_filesel), filename);
254 gtk_window_set_transient_for(GTK_WINDOW(save_and_quit_filesel), GTK_WINDOW(window));
255 gtk_window_present(GTK_WINDOW(save_and_quit_filesel));
258 #endif
260 extern "C" void save_file_and_quit(GtkWidget *widget, gpointer user_data) {
261 if(filename != NULL) {
262 if (dasher_editor_save_as(g_pEditor, filename,FALSE)==true) {
263 // exiting=TRUE;
264 gtk_main_quit();
265 } else {
266 return;
269 else {
270 select_save_file_as(NULL, NULL);
271 gtk_main_quit();
275 extern "C" bool ask_save_before_exit(GtkWidget *widget, gpointer data) {
276 // Moved elsewhere
279 // 'Edit' menu
281 // extern "C" void clipboard_cut(void) {
282 // dasher_editor_clipboard(g_pEditor, CLIPBOARD_CUT); // FIXME - give this a better name
283 // }
285 // extern "C" void clipboard_copy(void) {
286 // dasher_editor_clipboard(g_pEditor, CLIPBOARD_COPY);
287 // }
289 // extern "C" void clipboard_paste(void) {
290 // dasher_editor_clipboard(g_pEditor, CLIPBOARD_PASTE);
291 // }
293 // extern "C" void clipboard_copy_all(void) {
294 // dasher_editor_clipboard(g_pEditor, CLIPBOARD_COPYALL);
295 // }
297 extern "C" void on_menututorial_activate() {
298 dasher_editor_start_tutorial(g_pEditor);
301 // Not actually on the menu, but should be?
303 // extern "C" void clipboard_select_all(void) {
304 // dasher_editor_clipboard(g_pEditor, CLIPBOARD_SELECTALL);
305 // }
307 // 'Options' Menu
309 // 'Preferences' item is in Preferences.cpp
311 // Font selector options will be in their own file
313 // extern "C" void set_dasher_fontsize(GtkWidget *widget, gpointer user_data) {
314 // // if(GTK_TOGGLE_BUTTON(widget)->active == TRUE) {
315 // // if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "fontsizenormal")) {
316 // // gtk_dasher_control_set_parameter_long(GTK_DASHER_CONTROL(pDasherWidget), LP_DASHER_FONTSIZE, Dasher::Opts::Normal);
317 // // }
318 // // else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "fontsizelarge")) {
319 // // gtk_dasher_control_set_parameter_long(GTK_DASHER_CONTROL(pDasherWidget), LP_DASHER_FONTSIZE, Dasher::Opts::Big);
320 // // }
321 // // else if(!strcmp(gtk_widget_get_name(GTK_WIDGET(widget)), "fontsizevlarge")) {
322 // // gtk_dasher_control_set_parameter_long(GTK_DASHER_CONTROL(pDasherWidget), LP_DASHER_FONTSIZE, Dasher::Opts::VBig);
323 // // }
324 // // }
325 // }
327 // extern "C" void reset_fonts(GtkWidget *widget, gpointer user_data) {
328 // dasher_app_settings_reset(g_pDasherAppSettings, SP_DASHER_FONT);
329 // dasher_app_settings_reset(g_pDasherAppSettings, APP_SP_EDIT_FONT);
330 // }
332 // 'Help' Menu
334 // extern "C" void about_dasher(GtkWidget *widget, gpointer user_data) {
335 // // Moved elsewhere
336 // }
338 // // TODO: Need to hide menu item if GNOME_LIBS not defined
339 // extern "C" void show_help(GtkWidget *widget, gpointer user_data) {
340 // // Moved elsewhere
341 // }