1
////////////////////////////////////////////////////////////////////////////
2
// NoteCase notes manager project <http://notecase.sf.net>
4
// This code is licensed under BSD license.See "license.txt" for more details.
6
// File: Main application window implementation
7
////////////////////////////////////////////////////////////////////////////
11
#include <gdk/gdkkeysyms.h>
18
#include "callbacks.h"
19
#include "lib/debug.h"
20
#include "lib/NoteDocument.h"
21
#include "lib/IniFile.h"
22
#include "PortableTrayIcon.h"
23
#include "PasswordDialog.h"
24
#include "../res/notecase.xpm"
26
void ShowBusyCursor();
27
void HideBusyCursor();
29
extern NoteDocument g_doc;
31
extern GtkWidget *window1;
32
extern GtkWidget *g_menuitem5;
33
extern TreeView g_tree;
34
extern TextView g_text;
35
extern bool g_bMinimizeToTray;
36
extern MainWindow g_wnd;
38
PortableTrayIcon g_tray;
39
int g_nTitleBarTextSize = 10; //default size
41
void register_extensions_check();
42
static GtkWidget* create_main_win ();
43
static GtkWidget* create_toolbar ();
44
static void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group);
45
static gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event);
46
static const char *PasswordCallback(const char *szFile);
47
static gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data);
49
MainWindow::MainWindow()
54
MainWindow::~MainWindow()
58
void MainWindow::Create()
60
m_pWidget = create_main_win();
64
void MainWindow::OnCreate()
66
//check startup options
68
file.Load(MRU::getfilename());
70
window1 = g_wnd.m_pWidget;
71
g_signal_connect (window1, "destroy", G_CALLBACK (on_quit1_activate), NULL);
72
g_signal_connect (window1, "delete_event", G_CALLBACK (on_window_delete_event), NULL);
74
GtkWidget *treeview = lookup_widget(window1, "treeview1");
75
GtkWidget *textview = lookup_widget(window1, "textview1");
76
GtkWidget *label1 = lookup_widget(window1, "label1");
80
file.GetValue("Display", "TreeFont", strFont1, "");
81
if(!strFont1.empty()){
82
PangoFontDescription *desc1 = pango_font_description_from_string(strFont1.c_str());
83
gtk_widget_modify_font(treeview, desc1);
84
pango_font_description_free(desc1);
88
file.GetValue("Display", "TextFont", strFont2, "");
89
if(!strFont2.empty()){
90
PangoFontDescription *desc1 = pango_font_description_from_string(strFont2.c_str());
91
gtk_widget_modify_font(textview, desc1);
92
//calculate text size for node title bar as 1.5 the size of other text
93
g_nTitleBarTextSize = (pango_font_description_get_size(desc1) * 15)/10;
94
pango_font_description_free(desc1);
97
//set font size for node title bar (1.5 times of node text font)
98
PangoContext *context = gtk_widget_get_pango_context (label1);
99
PangoFontDescription *desc2 = pango_context_get_font_description(context);
100
PangoFontDescription *desc3 = pango_font_description_copy(desc2);
101
#if GTK_CHECK_VERSION(2,6,0) //minimal version for pango_font_description_set_absolute_size
102
pango_font_description_set_absolute_size(desc3, g_nTitleBarTextSize);
104
pango_font_description_set_size (desc3, (8*g_nTitleBarTextSize)/10); //TOFIX convert from pixels to fractions?
106
gtk_widget_modify_font(label1, desc3);
107
pango_font_description_free(desc3);
108
TRACE("Node title bar: Font size=%d\n", g_nTitleBarTextSize);
112
if(file.GetValue("Startup", "Maximize", bMaximize))
114
gtk_window_maximize(GTK_WINDOW(window1));
116
//on demand check if we need to register file formats
117
bool bRegisterFormats;
118
if(file.GetValue("Startup", "RegisterFormats", bRegisterFormats))
120
register_extensions_check();
122
//restore text wrapping option
124
if(file.GetValue("Display", "WrapText", bWrapText))
126
set_wrap_activated(true);
128
//restore "toolbar visible" option
130
file.GetValue("Display", "ShowToolBar", bShowToolbar, 1);
132
set_show_toolbar(true);
134
//restore "node title visible" option
136
if(file.GetValue("Display", "NodeTitleBar", bShowTitle))
138
set_show_node_title(true);
140
//restore "status bar visible" option
142
file.GetValue("Display", "ShowStatusBar", bShowStatBar, 1);
143
if(bShowStatBar) // default is true, change only if false
144
set_show_status_bar(true);
146
//restore last position
147
bool bRestoreLastPos;
148
file.GetValue("Startup", "RestoreLastPosition", bRestoreLastPos, 1);
151
gint nPosLeft, nPosTop, nPosWidth, nPosHeight, nPosDivider;
152
nPosLeft = nPosTop = nPosWidth = nPosHeight = nPosDivider = 0;
154
file.GetValue("Startup", "LastPos_Left", nPosLeft);
155
file.GetValue("Startup", "LastPos_Top", nPosTop);
156
file.GetValue("Startup", "LastPos_Width", nPosWidth);
157
file.GetValue("Startup", "LastPos_Height", nPosHeight);
158
file.GetValue("Startup", "LastPos_Divider", nPosDivider);
160
//apply some common sense checks/fixes
161
if(nPosWidth <= 0) nPosWidth = 500;
162
if(nPosHeight <= 0) nPosHeight = 350;
163
if(nPosLeft <= 0) nPosLeft = 0;
164
if(nPosTop <= 0) nPosTop = 0;
165
if(nPosDivider<= 0) nPosDivider = 150;
167
gtk_window_move(GTK_WINDOW(window1), nPosLeft, nPosTop);
168
gtk_window_set_default_size(GTK_WINDOW(window1), nPosWidth, nPosHeight);
169
gtk_window_resize(GTK_WINDOW(window1), nPosWidth, nPosHeight);
170
GtkWidget *divider = lookup_widget(window1, "hbox1");
171
gtk_paned_set_position(GTK_PANED(divider), nPosDivider);
175
gtk_window_set_default_size (GTK_WINDOW (window1), 500, 350);
176
GtkWidget *divider = lookup_widget(window1, "hbox1");
177
gtk_paned_set_position (GTK_PANED(divider), 150);
179
gtk_widget_show (window1);
182
file.GetValue("Display", "MinimizeToTray", g_bMinimizeToTray);
186
//TOFIX make class member RefreshTitle()
187
void RefreshMainTitle()
189
std::string strTitle(APP_NAME_STR);
191
strTitle += APP_VER_STR;
193
if(g_doc.GetPath().size()>0)
196
if(g_doc.IsModified())
198
strTitle += g_doc.GetPath();
202
gtk_window_set_title (GTK_WINDOW (window1), strTitle.c_str());
205
GtkWidget* create_main_win ()
211
GtkWidget *scrolledwindow1;
212
GtkWidget *treeview1;
213
GtkWidget *scrolledwindow2;
214
GtkWidget *textview1;
215
GtkWidget *statusbar1;
218
GtkAccelGroup *accel_group;
221
accel_group = gtk_accel_group_new ();
223
//prepare version string
224
std::string strApp(APP_NAME_STR);
226
strApp += APP_VER_STR;
228
window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
229
gtk_window_set_title (GTK_WINDOW (window1), strApp.c_str());
231
vbox1 = gtk_vbox_new (FALSE, 0);
232
gtk_widget_show (vbox1);
233
gtk_container_add (GTK_CONTAINER (window1), vbox1);
235
menubar1 = gtk_menu_bar_new ();
236
gtk_widget_show (menubar1);
237
gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
239
create_menu(window1, menubar1, accel_group);
242
toolbar1 = create_toolbar();
243
gtk_box_pack_start (GTK_BOX (vbox1), toolbar1, FALSE, FALSE, 0);
246
hbox1 = gtk_hpaned_new ();
247
gtk_widget_show (hbox1);
248
gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
249
gtk_paned_set_position (GTK_PANED (hbox1), 0);
251
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
252
gtk_widget_show (scrolledwindow1);
253
gtk_paned_pack1(GTK_PANED(hbox1), scrolledwindow1, FALSE, TRUE);
254
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
258
treeview1 = g_tree.m_pWidget;
259
gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview1);
261
vbox2 = gtk_vbox_new (FALSE, 0);
262
gtk_widget_show (vbox2);
263
gtk_paned_pack2 (GTK_PANED (hbox1), vbox2, TRUE, TRUE);
265
label1 = gtk_label_new (_("Untitled"));
266
gtk_misc_set_alignment(GTK_MISC(label1), 0.0f, 0.7f); // horizontal: left aligned, vertically centered
267
gtk_misc_set_padding(GTK_MISC(label1), 0, 2);
268
gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
270
scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
271
gtk_widget_show (scrolledwindow2);
272
gtk_box_pack_start (GTK_BOX (vbox2), scrolledwindow2, TRUE, TRUE, 0);
273
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
277
textview1 = g_text.m_pWidget;
278
gtk_container_add (GTK_CONTAINER (scrolledwindow2), textview1);
280
statusbar1 = gtk_statusbar_new ();
281
gtk_box_pack_start (GTK_BOX (vbox1), statusbar1, FALSE, FALSE, 0);
283
g_signal_connect (GTK_OBJECT (window1), "window_state_event", GTK_SIGNAL_FUNC (window_state_event), NULL);
285
// Store pointers to all widgets, for use by lookup_widget()
286
GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
287
GLADE_HOOKUP_OBJECT (window1, vbox1, "vbox1");
288
GLADE_HOOKUP_OBJECT (window1, menubar1, "menubar1");
289
GLADE_HOOKUP_OBJECT (window1, hbox1, "hbox1");
290
GLADE_HOOKUP_OBJECT (window1, scrolledwindow1, "scrolledwindow1");
291
GLADE_HOOKUP_OBJECT (window1, treeview1, "treeview1");
292
GLADE_HOOKUP_OBJECT (window1, scrolledwindow2, "scrolledwindow2");
293
GLADE_HOOKUP_OBJECT (window1, textview1, "textview1");
294
GLADE_HOOKUP_OBJECT (window1, statusbar1, "statusbar1");
295
GLADE_HOOKUP_OBJECT (window1, vbox2, "vbox2");
296
GLADE_HOOKUP_OBJECT (window1, label1, "label1");
297
GLADE_HOOKUP_OBJECT (window1, toolbar1, "toolbar1");
299
//attach accelerators
302
closure = g_cclosure_new (G_CALLBACK (on_help1_activate), NULL, NULL);
303
gtk_accel_group_connect (accel_group, GDK_F1, (GdkModifierType)0, GTK_ACCEL_VISIBLE, closure);
304
g_closure_unref (closure);
306
closure = g_cclosure_new (G_CALLBACK (on_find1_activate), NULL, NULL);
307
gtk_accel_group_connect (accel_group, GDK_F, (GdkModifierType)GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, closure);
308
g_closure_unref (closure);
310
closure = g_cclosure_new (G_CALLBACK (on_wrap_activate), NULL, NULL);
311
gtk_accel_group_connect (accel_group, GDK_W, (GdkModifierType)GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, closure);
312
g_closure_unref (closure);
314
closure = g_cclosure_new (G_CALLBACK (on_find2_activate), NULL, NULL);
315
gtk_accel_group_connect (accel_group, GDK_F3, (GdkModifierType)0, GTK_ACCEL_VISIBLE, closure);
316
g_closure_unref (closure);
318
closure = g_cclosure_new (G_CALLBACK (on_options1_activate), NULL, NULL);
319
gtk_accel_group_connect (accel_group, GDK_F7, (GdkModifierType)0, GTK_ACCEL_VISIBLE, closure);
320
g_closure_unref (closure);
322
gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);
324
g_doc.SetPassCallback( PasswordCallback );
329
//set window/application icon
330
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)¬ecase_xpm);
331
gtk_window_set_icon(GTK_WINDOW(window1), pixbuf);
332
g_object_unref(pixbuf);
338
GtkWidget* create_toolbar()
340
GtkWidget *toolitem1;
342
GtkIconSize tmp_toolbar_icon_size;
344
GtkWidget *toolbar1 = gtk_toolbar_new ();
345
//gtk_widget_show (toolbar1); //initialy invisible (set by .ini value)
347
gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_ICONS);
348
gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar1), GTK_ICON_SIZE_SMALL_TOOLBAR);
349
tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar1));
351
g_signal_connect (GTK_OBJECT (toolbar1), "focus", GTK_SIGNAL_FUNC (on_focus_event), NULL);
353
gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar1), TRUE );
354
GtkTooltips *tips = gtk_tooltips_new ();
356
button3 = gtk_image_new_from_stock (GTK_STOCK_NEW, tmp_toolbar_icon_size);
357
gtk_widget_show (button3);
359
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("New"));
360
gtk_widget_show (toolitem1);
361
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
362
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("New"), NULL);
363
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_new1_activate), NULL);
366
button3 = gtk_image_new_from_stock (GTK_STOCK_OPEN, tmp_toolbar_icon_size);
367
gtk_widget_show (button3);
369
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Open"));
370
gtk_widget_show (toolitem1);
371
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
372
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Open"), NULL);
373
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_open1_activate), NULL);
376
button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE, tmp_toolbar_icon_size);
377
gtk_widget_show (button3);
379
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Save"));
380
gtk_widget_show (toolitem1);
381
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
382
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Save"), NULL);
383
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_save1_activate), NULL);
386
button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, tmp_toolbar_icon_size);
387
gtk_widget_show (button3);
389
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Save As"));
390
gtk_widget_show (toolitem1);
391
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
392
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Save As"), NULL);
393
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_save_as1_activate), NULL);
396
toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
397
gtk_widget_show (toolitem1);
398
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
401
button3 = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, tmp_toolbar_icon_size);
402
gtk_widget_show (button3);
404
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Undo"));
405
gtk_widget_show (toolitem1);
406
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
407
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Undo"), NULL);
408
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_undo_activate), NULL);
409
gtk_widget_set_sensitive(toolitem1, FALSE);
410
//GLADE_HOOKUP_OBJECT (toolbar1, button3, "tbr_undo");
413
button3 = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, tmp_toolbar_icon_size);
414
gtk_widget_show (button3);
416
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Redo"));
417
gtk_widget_show (toolitem1);
418
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
419
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Redo"), NULL);
420
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_redo_activate), NULL);
421
gtk_widget_set_sensitive(toolitem1, FALSE);
422
//GLADE_HOOKUP_OBJECT (toolbar1, button3, "tbr_redo");
425
button3 = gtk_image_new_from_stock (GTK_STOCK_CUT, tmp_toolbar_icon_size);
426
gtk_widget_show (button3);
428
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Cut"));
429
gtk_widget_show (toolitem1);
430
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
431
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Cut"), NULL);
432
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_cut1_activate), NULL);
435
button3 = gtk_image_new_from_stock (GTK_STOCK_COPY, tmp_toolbar_icon_size);
436
gtk_widget_show (button3);
438
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Copy"));
439
gtk_widget_show (toolitem1);
440
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
441
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Copy"), NULL);
442
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_copy1_activate), NULL);
445
button3 = gtk_image_new_from_stock (GTK_STOCK_PASTE, tmp_toolbar_icon_size);
446
gtk_widget_show (button3);
448
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Paste"));
449
gtk_widget_show (toolitem1);
450
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
451
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Paste"), NULL);
452
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_paste1_activate), NULL);
455
button3 = gtk_image_new_from_stock (GTK_STOCK_DELETE, tmp_toolbar_icon_size);
456
gtk_widget_show (button3);
458
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Delete"));
459
gtk_widget_show (toolitem1);
460
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
461
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Delete"), NULL);
462
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_delete1_activate), NULL);
465
toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
466
gtk_widget_show (toolitem1);
467
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
469
button3 = gtk_image_new_from_stock (GTK_STOCK_HELP, tmp_toolbar_icon_size);
470
gtk_widget_show (button3);
472
toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Help"));
473
gtk_widget_show (toolitem1);
474
gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
475
gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Help"), NULL);
476
g_signal_connect (GTK_OBJECT (toolitem1), "clicked", GTK_SIGNAL_FUNC (on_help1_activate), NULL);
482
gboolean window_state_event (GtkWidget *widget,
483
GdkEventWindowState *event)
485
if(event->changed_mask & GDK_WINDOW_STATE_ICONIFIED)
487
if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
489
//on window minimized, show tray icon
490
if(g_bMinimizeToTray)
493
g_tray.SetTooltip("NoteCase"); //important: call this after Show
494
gtk_widget_hide(window1);
501
const char *PasswordCallback(const char *szFile)
503
static char szPass[1024] = "";
506
HideBusyCursor(); //restore the normal cursor for the moment
508
//ask user for password
512
std::string strLabel = _("Please enter the password for file\n");
514
dlg.SetLabel(strLabel.c_str());
516
gtk_grab_add( dlg.GetDialog() ); //block all other widgets in the app
518
if(GTK_RESPONSE_OK == dlg.ShowModal())
521
GtkWidget *entry1 = lookup_widget(dlg.GetDialog(), "entry1");
522
const char *szText = gtk_entry_get_text (GTK_ENTRY(entry1));
524
strcpy(szPass, szText);
527
gtk_grab_remove(dlg.GetDialog()); //unblock
528
gtk_widget_destroy (dlg.GetDialog());
530
ShowBusyCursor(); //keep showing busy
538
void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group)
540
GtkWidget *menuitem1;
547
GtkWidget *separatormenuitem1;
549
GtkWidget *menuitem2;
559
GtkWidget *menutool1;
564
GtkWidget *menuitem3;
566
GtkWidget *menuitem4;
571
GtkWidget *menu_item;
573
menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File"));
574
gtk_widget_show (menuitem1);
575
gtk_container_add (GTK_CONTAINER (menubar1), menuitem1);
577
menu1 = gtk_menu_new ();
578
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menu1);
580
new1 = gtk_image_menu_item_new_with_mnemonic (_("_New"));
581
gtk_widget_show (new1);
582
gtk_widget_add_accelerator (new1, "activate", accel_group, 'N', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
583
gtk_container_add (GTK_CONTAINER (menu1), new1);
584
icon = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
585
gtk_widget_show (icon);
586
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new1), icon);
588
open1 = gtk_image_menu_item_new_with_mnemonic (_("_Open"));
589
gtk_widget_show (open1);
590
gtk_widget_add_accelerator (open1, "activate", accel_group, 'O', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
591
gtk_container_add (GTK_CONTAINER (menu1), open1);
592
icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
593
gtk_widget_show (icon);
594
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open1), icon);
596
save1 = gtk_image_menu_item_new_with_mnemonic (_("_Save"));
597
gtk_widget_show (save1);
598
gtk_widget_add_accelerator (save1, "activate", accel_group, 'S', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
599
gtk_container_add (GTK_CONTAINER (menu1), save1);
600
icon = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
601
gtk_widget_show (icon);
602
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save1), icon);
604
save_as1 = gtk_image_menu_item_new_with_mnemonic (_("Save _As"));
605
gtk_widget_show (save_as1);
606
gtk_container_add (GTK_CONTAINER (menu1), save_as1);
607
icon = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_MENU);
608
gtk_widget_show (icon);
609
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save_as1), icon);
611
reload1 = gtk_menu_item_new_with_mnemonic (_("Re_load"));
612
gtk_widget_show (reload1);
613
gtk_widget_add_accelerator (reload1, "activate", accel_group, 'R', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
614
gtk_container_add (GTK_CONTAINER (menu1), reload1);
616
separatormenuitem1 = gtk_separator_menu_item_new ();
617
gtk_widget_show (separatormenuitem1);
618
gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
619
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
621
menu_item = gtk_menu_item_new_with_label(_("Import"));
622
gtk_widget_show (menu_item); // Show the widget
623
gtk_widget_add_accelerator (menu_item, "activate", accel_group, 'I', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
624
g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_import), NULL);
625
gtk_menu_append(menu1, menu_item);
627
menu_item = gtk_menu_item_new_with_label(_("Export"));
628
gtk_widget_show (menu_item); // Show the widget
629
gtk_widget_add_accelerator (menu_item, "activate", accel_group, 'E', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
630
g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_export), NULL);
631
gtk_menu_append(menu1, menu_item);
633
separatormenuitem1 = gtk_separator_menu_item_new ();
634
gtk_widget_show (separatormenuitem1);
635
gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
636
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
639
// MRU (most recently used) list
643
g_menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Recent"));
644
gtk_widget_show (g_menuitem5);
645
gtk_container_add (GTK_CONTAINER (menu1), g_menuitem5);
648
g_objMRU.RebuildMenu();
651
separatormenuitem1 = gtk_separator_menu_item_new ();
652
gtk_widget_show (separatormenuitem1);
653
gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
654
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
656
//continue creating menus
657
quit1 = gtk_image_menu_item_new_with_mnemonic (_("_Quit"));
658
gtk_widget_show (quit1);
659
gtk_widget_add_accelerator (quit1, "activate", accel_group, 'Q', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
660
gtk_container_add (GTK_CONTAINER (menu1), quit1);
661
icon = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);
662
gtk_widget_show (icon);
663
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit1), icon);
665
menuitem2 = gtk_menu_item_new_with_mnemonic (_("_Edit"));
666
gtk_widget_show (menuitem2);
667
gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);
669
menu2 = gtk_menu_new ();
670
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);
672
undo1 = gtk_image_menu_item_new_with_mnemonic (_("_Undo"));
673
gtk_widget_show (undo1);
674
gtk_widget_set_sensitive(undo1, FALSE);
675
gtk_widget_add_accelerator (undo1, "activate", accel_group, 'Z', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
676
gtk_container_add (GTK_CONTAINER (menu2), undo1);
677
icon = gtk_image_new_from_stock (GTK_STOCK_UNDO, GTK_ICON_SIZE_MENU);
678
gtk_widget_show (icon);
679
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (undo1), icon);
681
redo1 = gtk_image_menu_item_new_with_mnemonic (_("_Redo"));
682
gtk_widget_show (redo1);
683
gtk_widget_set_sensitive(redo1, FALSE);
684
gtk_widget_add_accelerator (redo1, "activate", accel_group, 'Y', (GdkModifierType)(GDK_CONTROL_MASK), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
685
gtk_container_add (GTK_CONTAINER (menu2), redo1);
686
icon = gtk_image_new_from_stock (GTK_STOCK_REDO, GTK_ICON_SIZE_MENU);
687
gtk_widget_show (icon);
688
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (redo1), icon);
690
separatormenuitem1 = gtk_separator_menu_item_new ();
691
gtk_widget_show (separatormenuitem1);
692
gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
693
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
695
cut1 = gtk_image_menu_item_new_with_mnemonic (_("Cu_t"));
696
gtk_widget_show (cut1);
697
gtk_widget_add_accelerator (cut1, "activate", accel_group, 'X', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
698
gtk_container_add (GTK_CONTAINER (menu2), cut1);
699
icon = gtk_image_new_from_stock (GTK_STOCK_CUT, GTK_ICON_SIZE_MENU);
700
gtk_widget_show (icon);
701
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (cut1), icon);
703
copy1 = gtk_image_menu_item_new_with_mnemonic (_("_Copy"));
704
gtk_widget_show (copy1);
705
gtk_widget_add_accelerator (copy1, "activate", accel_group, 'C', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
706
gtk_container_add (GTK_CONTAINER (menu2), copy1);
707
icon = gtk_image_new_from_stock (GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
708
gtk_widget_show (icon);
709
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (copy1), icon);
711
paste1 = gtk_image_menu_item_new_with_mnemonic (_("_Paste"));
712
gtk_widget_show (paste1);
713
gtk_widget_add_accelerator (paste1, "activate", accel_group, 'V', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
714
gtk_container_add (GTK_CONTAINER (menu2), paste1);
715
icon = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
716
gtk_widget_show (icon);
717
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (paste1), icon);
719
delete1 = gtk_image_menu_item_new_with_mnemonic (_("_Delete"));
720
gtk_widget_show (delete1);
721
gtk_container_add (GTK_CONTAINER (menu2), delete1);
722
icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
723
gtk_widget_show (icon);
724
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (delete1), icon);
726
separatormenuitem1 = gtk_separator_menu_item_new ();
727
gtk_widget_show (separatormenuitem1);
728
gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
729
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
731
find1 = gtk_image_menu_item_new_with_mnemonic (_("_Find"));
732
gtk_widget_show (find1);
733
gtk_widget_add_accelerator (find1, "activate", accel_group, 'F', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
734
gtk_container_add (GTK_CONTAINER (menu2), find1);
735
icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
736
gtk_widget_show (icon);
737
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find1), icon);
739
find2 = gtk_menu_item_new_with_mnemonic (_("Find _Next"));
740
gtk_widget_show (find2);
741
gtk_widget_add_accelerator (find2, "activate", accel_group, GDK_F3, (GdkModifierType)0, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
742
gtk_container_add (GTK_CONTAINER (menu2), find2);
744
options1 = gtk_image_menu_item_new_with_mnemonic (_("_Options"));
745
gtk_widget_show (options1);
746
gtk_widget_add_accelerator (options1, "activate", accel_group, GDK_F7, (GdkModifierType)0, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
747
gtk_container_add (GTK_CONTAINER (menu2), options1);
748
icon = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
749
gtk_widget_show (icon);
750
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (options1), icon);
752
menuitem3 = gtk_menu_item_new_with_mnemonic (_("_View"));
753
gtk_widget_show (menuitem3);
754
gtk_container_add (GTK_CONTAINER (menubar1), menuitem3);
756
menu3 = gtk_menu_new ();
757
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menu3);
759
menutool1 = gtk_check_menu_item_new_with_label (_("Tool Bar"));
760
gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(menutool1), TRUE); //show check mark always
761
gtk_widget_show (menutool1);
762
gtk_container_add (GTK_CONTAINER (menu3), menutool1);
764
title1 = gtk_check_menu_item_new_with_label (_("Node Title Bar"));
765
gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(title1), TRUE); //show check mark always
766
gtk_widget_show (title1);
767
gtk_container_add (GTK_CONTAINER (menu3), title1);
769
statbar1 = gtk_check_menu_item_new_with_label (_("Status Bar"));
770
gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(statbar1), TRUE); //show check mark always
771
gtk_widget_show (statbar1);
772
gtk_container_add (GTK_CONTAINER (menu3), statbar1);
774
wrap1 = gtk_check_menu_item_new_with_label (_("Wrap"));
775
gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(wrap1), TRUE); //show check mark always
776
gtk_widget_show (wrap1);
777
gtk_widget_add_accelerator (wrap1, "activate", accel_group, 'W', (GdkModifierType)GDK_CONTROL_MASK, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
778
gtk_container_add (GTK_CONTAINER (menu3), wrap1);
780
menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help"));
781
gtk_widget_show (menuitem4);
782
gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);
784
menu4 = gtk_menu_new ();
785
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);
787
help1 = gtk_image_menu_item_new_with_mnemonic (_("_Show help"));
788
gtk_widget_show (help1);
789
gtk_widget_add_accelerator (help1, "activate", accel_group, GDK_F1, (GdkModifierType)0, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
790
gtk_container_add (GTK_CONTAINER (menu4), help1);
791
icon = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
792
gtk_widget_show (icon);
793
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), icon);
795
separatormenuitem1 = gtk_separator_menu_item_new ();
796
gtk_widget_show (separatormenuitem1);
797
gtk_container_add (GTK_CONTAINER (menu4), separatormenuitem1);
798
gtk_widget_set_sensitive (separatormenuitem1, FALSE);
800
about1 = gtk_menu_item_new_with_mnemonic (_("_About"));
801
gtk_widget_show (about1);
802
gtk_container_add (GTK_CONTAINER (menu4), about1);
804
g_signal_connect (GTK_OBJECT (new1), "activate", GTK_SIGNAL_FUNC (on_new1_activate), NULL);
805
g_signal_connect (GTK_OBJECT (open1), "activate", GTK_SIGNAL_FUNC (on_open1_activate), NULL);
806
g_signal_connect (GTK_OBJECT (save1), "activate", GTK_SIGNAL_FUNC (on_save1_activate), NULL);
807
g_signal_connect (GTK_OBJECT (save_as1),"activate", GTK_SIGNAL_FUNC (on_save_as1_activate), NULL);
808
g_signal_connect (GTK_OBJECT (reload1), "activate", GTK_SIGNAL_FUNC (on_reload1_activate), NULL);
809
g_signal_connect (GTK_OBJECT (quit1), "activate", GTK_SIGNAL_FUNC (on_quit1_activate), NULL);
810
g_signal_connect (GTK_OBJECT (cut1), "activate", GTK_SIGNAL_FUNC (on_cut1_activate), NULL);
811
g_signal_connect (GTK_OBJECT (copy1), "activate", GTK_SIGNAL_FUNC (on_copy1_activate), NULL);
812
g_signal_connect (GTK_OBJECT (paste1), "activate", GTK_SIGNAL_FUNC (on_paste1_activate), NULL);
813
g_signal_connect (GTK_OBJECT (delete1), "activate", GTK_SIGNAL_FUNC (on_delete1_activate), NULL);
814
g_signal_connect (GTK_OBJECT (about1), "activate", GTK_SIGNAL_FUNC (on_about1_activate), NULL);
815
g_signal_connect (GTK_OBJECT (help1), "activate", GTK_SIGNAL_FUNC (on_help1_activate), NULL);
816
g_signal_connect (GTK_OBJECT (options1),"activate", GTK_SIGNAL_FUNC (on_options1_activate), NULL);
817
g_signal_connect (GTK_OBJECT (find1), "activate", GTK_SIGNAL_FUNC (on_find1_activate), NULL);
818
g_signal_connect (GTK_OBJECT (find2), "activate", GTK_SIGNAL_FUNC (on_find2_activate), NULL);
819
g_signal_connect (GTK_OBJECT (wrap1), "activate", GTK_SIGNAL_FUNC (on_wrap_activate), NULL);
820
g_signal_connect (GTK_OBJECT (title1), "activate", GTK_SIGNAL_FUNC (on_show_node_titlebar_activate), NULL);
821
g_signal_connect (GTK_OBJECT (statbar1),"activate", GTK_SIGNAL_FUNC (on_show_status_bar_activate), NULL);
822
g_signal_connect (GTK_OBJECT (menutool1),"activate", GTK_SIGNAL_FUNC (on_show_toolbar_activate), NULL);
823
g_signal_connect (GTK_OBJECT (undo1), "activate", GTK_SIGNAL_FUNC (on_undo_activate), NULL);
824
g_signal_connect (GTK_OBJECT (redo1), "activate", GTK_SIGNAL_FUNC (on_redo_activate), NULL);
826
GLADE_HOOKUP_OBJECT (window1, menuitem1, "menuitem1");
827
GLADE_HOOKUP_OBJECT (window1, menu1, "menu1");
828
GLADE_HOOKUP_OBJECT (window1, new1, "new1");
829
GLADE_HOOKUP_OBJECT (window1, open1, "open1");
830
GLADE_HOOKUP_OBJECT (window1, wrap1, "wrap1");
831
GLADE_HOOKUP_OBJECT (window1, title1, "title1");
832
GLADE_HOOKUP_OBJECT (window1, menutool1, "menutool1");
833
GLADE_HOOKUP_OBJECT (window1, find1, "find1");
834
GLADE_HOOKUP_OBJECT (window1, find2, "find2");
835
GLADE_HOOKUP_OBJECT (window1, save1, "save1");
836
GLADE_HOOKUP_OBJECT (window1, save_as1, "save_as1");
837
GLADE_HOOKUP_OBJECT (window1, reload1, "reload1");
838
GLADE_HOOKUP_OBJECT (window1, separatormenuitem1, "separatormenuitem1");
839
GLADE_HOOKUP_OBJECT (window1, quit1, "quit1");
840
GLADE_HOOKUP_OBJECT (window1, menuitem2, "menuitem2");
841
GLADE_HOOKUP_OBJECT (window1, menu2, "menu2");
842
GLADE_HOOKUP_OBJECT (window1, cut1, "cut1");
843
GLADE_HOOKUP_OBJECT (window1, copy1, "copy1");
844
GLADE_HOOKUP_OBJECT (window1, paste1, "paste1");
845
GLADE_HOOKUP_OBJECT (window1, delete1, "delete1");
846
GLADE_HOOKUP_OBJECT (window1, menuitem4, "menuitem4");
847
GLADE_HOOKUP_OBJECT (window1, menu4, "menu4");
848
GLADE_HOOKUP_OBJECT (window1, about1, "about1");
849
GLADE_HOOKUP_OBJECT (window1, help1, "help1");
850
GLADE_HOOKUP_OBJECT (window1, statbar1, "statbar1");
851
GLADE_HOOKUP_OBJECT (window1, undo1, "undo1");
852
GLADE_HOOKUP_OBJECT (window1, redo1, "redo1");
855
gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data)
857
//FIX: prevent toolbar from getting focus by keyboard
858
static bool bRecurse = false;
862
gtk_widget_child_focus (widget, (GtkDirectionType)GTK_DIR_TAB_FORWARD);