~ubuntu-branches/ubuntu/maverick/notecase/maverick

« back to all changes in this revision

Viewing changes to src/MainWnd.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Cyril Brulebois
  • Date: 2005-09-09 09:32:43 UTC
  • Revision ID: james.westby@ubuntu.com-20050909093243-s6namw0yh7q3tqy0
Tags: upstream-1.0.5
ImportĀ upstreamĀ versionĀ 1.0.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
////////////////////////////////////////////////////////////////////////////
 
2
// NoteCase notes manager project <http://notecase.sf.net>
 
3
//
 
4
// This code is licensed under BSD license.See "license.txt" for more details.
 
5
//
 
6
// File: Main application window implementation
 
7
////////////////////////////////////////////////////////////////////////////
 
8
 
 
9
#include "config.h"
 
10
#include <string>
 
11
#include <gdk/gdkkeysyms.h>
 
12
 
 
13
#include "support.h"
 
14
#include "MainWnd.h"
 
15
#include "TreeView.h"
 
16
#include "TextView.h"
 
17
#include "mru.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"
 
25
 
 
26
void ShowBusyCursor();
 
27
void HideBusyCursor();
 
28
 
 
29
extern NoteDocument g_doc;
 
30
extern MRU g_objMRU;
 
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;
 
37
 
 
38
PortableTrayIcon g_tray;
 
39
int g_nTitleBarTextSize = 10; //default size
 
40
 
 
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);
 
48
 
 
49
MainWindow::MainWindow()
 
50
{
 
51
        m_pWidget = NULL;
 
52
}
 
53
 
 
54
MainWindow::~MainWindow()
 
55
{
 
56
}
 
57
 
 
58
void MainWindow::Create()
 
59
{
 
60
        m_pWidget = create_main_win();
 
61
        OnCreate();
 
62
}
 
63
 
 
64
void MainWindow::OnCreate()
 
65
{
 
66
        //check startup options
 
67
        IniFile file;
 
68
        file.Load(MRU::getfilename());
 
69
 
 
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);
 
73
 
 
74
        GtkWidget *treeview = lookup_widget(window1, "treeview1");
 
75
        GtkWidget *textview = lookup_widget(window1, "textview1");
 
76
        GtkWidget *label1   = lookup_widget(window1, "label1");
 
77
 
 
78
        //set initial fonts
 
79
        std::string strFont1;
 
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);
 
85
        }
 
86
 
 
87
        std::string strFont2;
 
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);
 
95
        }
 
96
 
 
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);
 
103
#else   
 
104
        pango_font_description_set_size (desc3, (8*g_nTitleBarTextSize)/10);    //TOFIX convert from pixels to fractions?
 
105
#endif   
 
106
        gtk_widget_modify_font(label1, desc3);
 
107
        pango_font_description_free(desc3);
 
108
        TRACE("Node title bar: Font size=%d\n", g_nTitleBarTextSize);
 
109
 
 
110
 
 
111
        bool bMaximize;
 
112
        if(file.GetValue("Startup", "Maximize", bMaximize))
 
113
                if(bMaximize)
 
114
                        gtk_window_maximize(GTK_WINDOW(window1));
 
115
 
 
116
        //on demand check if we need to register file formats  
 
117
        bool bRegisterFormats;
 
118
        if(file.GetValue("Startup", "RegisterFormats", bRegisterFormats))
 
119
                if(bRegisterFormats)
 
120
                        register_extensions_check();
 
121
 
 
122
        //restore text wrapping option
 
123
        bool bWrapText;
 
124
        if(file.GetValue("Display", "WrapText", bWrapText))
 
125
        if(bWrapText)
 
126
                set_wrap_activated(true);
 
127
 
 
128
        //restore "toolbar visible" option
 
129
        bool bShowToolbar;
 
130
        file.GetValue("Display", "ShowToolBar", bShowToolbar, 1);
 
131
                if(bShowToolbar)
 
132
                        set_show_toolbar(true);
 
133
 
 
134
        //restore "node title visible" option
 
135
        bool bShowTitle;
 
136
        if(file.GetValue("Display", "NodeTitleBar", bShowTitle))
 
137
                if(bShowTitle)
 
138
                        set_show_node_title(true);
 
139
 
 
140
        //restore "status bar visible" option
 
141
        bool bShowStatBar;
 
142
        file.GetValue("Display", "ShowStatusBar", bShowStatBar, 1);
 
143
        if(bShowStatBar)        // default is true, change only if false
 
144
                set_show_status_bar(true);
 
145
 
 
146
        //restore last position
 
147
        bool bRestoreLastPos;
 
148
        file.GetValue("Startup", "RestoreLastPosition", bRestoreLastPos, 1);
 
149
        if(bRestoreLastPos)
 
150
        {
 
151
                gint nPosLeft, nPosTop, nPosWidth, nPosHeight, nPosDivider;
 
152
                nPosLeft = nPosTop = nPosWidth = nPosHeight = nPosDivider = 0;
 
153
 
 
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);
 
159
                
 
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;
 
166
 
 
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);
 
172
        }
 
173
        else
 
174
        {
 
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);
 
178
        }
 
179
        gtk_widget_show (window1);
 
180
 
 
181
        //load global option
 
182
        file.GetValue("Display", "MinimizeToTray", g_bMinimizeToTray);
 
183
        restart_autosave();
 
184
}
 
185
 
 
186
//TOFIX make class member RefreshTitle() 
 
187
void RefreshMainTitle()
 
188
{
 
189
        std::string strTitle(APP_NAME_STR);
 
190
        strTitle += " ";
 
191
        strTitle += APP_VER_STR;
 
192
        
 
193
        if(g_doc.GetPath().size()>0)
 
194
        {
 
195
                strTitle += " - [";
 
196
                if(g_doc.IsModified())
 
197
                        strTitle += "*";
 
198
                strTitle += g_doc.GetPath();
 
199
                strTitle += "]";
 
200
        }
 
201
        
 
202
        gtk_window_set_title (GTK_WINDOW (window1), strTitle.c_str());
 
203
}
 
204
 
 
205
GtkWidget* create_main_win ()
 
206
{
 
207
        GtkWidget *window1;
 
208
        GtkWidget *vbox1;
 
209
        GtkWidget *menubar1;
 
210
        GtkWidget *hbox1;
 
211
        GtkWidget *scrolledwindow1;
 
212
        GtkWidget *treeview1;
 
213
        GtkWidget *scrolledwindow2;
 
214
        GtkWidget *textview1;
 
215
        GtkWidget *statusbar1;
 
216
        GtkWidget *vbox2;
 
217
        GtkWidget *label1;
 
218
        GtkAccelGroup *accel_group;
 
219
        GtkWidget *toolbar1;
 
220
        
 
221
        accel_group = gtk_accel_group_new ();
 
222
        
 
223
        //prepare version string
 
224
        std::string strApp(APP_NAME_STR);
 
225
        strApp += " ";
 
226
        strApp += APP_VER_STR;
 
227
 
 
228
        window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
229
        gtk_window_set_title (GTK_WINDOW (window1), strApp.c_str());
 
230
        
 
231
        vbox1 = gtk_vbox_new (FALSE, 0);
 
232
        gtk_widget_show (vbox1);
 
233
        gtk_container_add (GTK_CONTAINER (window1), vbox1);
 
234
        
 
235
        menubar1 = gtk_menu_bar_new ();
 
236
        gtk_widget_show (menubar1);
 
237
        gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
 
238
 
 
239
        create_menu(window1, menubar1, accel_group);
 
240
        
 
241
        // create toolbar
 
242
        toolbar1 = create_toolbar();
 
243
        gtk_box_pack_start (GTK_BOX (vbox1), toolbar1, FALSE, FALSE, 0);
 
244
 
 
245
        //
 
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);
 
250
        
 
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);
 
255
                
 
256
        //create tree view
 
257
        g_tree.Create();
 
258
        treeview1 = g_tree.m_pWidget;
 
259
        gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview1);
 
260
 
 
261
        vbox2 = gtk_vbox_new (FALSE, 0);
 
262
        gtk_widget_show (vbox2);
 
263
        gtk_paned_pack2 (GTK_PANED (hbox1), vbox2, TRUE, TRUE); 
 
264
        
 
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); 
 
269
        
 
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);
 
274
        
 
275
        //create text view
 
276
        g_text.Create();
 
277
        textview1 = g_text.m_pWidget;
 
278
        gtk_container_add (GTK_CONTAINER (scrolledwindow2), textview1);
 
279
                
 
280
        statusbar1 = gtk_statusbar_new ();
 
281
        gtk_box_pack_start (GTK_BOX (vbox1), statusbar1, FALSE, FALSE, 0);
 
282
 
 
283
        g_signal_connect (GTK_OBJECT (window1), "window_state_event", GTK_SIGNAL_FUNC (window_state_event),  NULL);
 
284
        
 
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");
 
298
        
 
299
        //attach accelerators
 
300
        GClosure *closure;
 
301
        
 
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);
 
305
 
 
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);
 
309
 
 
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);
 
313
 
 
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);
 
317
        
 
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);
 
321
        
 
322
        gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);
 
323
        
 
324
        g_doc.SetPassCallback( PasswordCallback );
 
325
 
 
326
        
 
327
#ifdef _WIN32
 
328
#else
 
329
        //set window/application icon
 
330
        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&notecase_xpm);
 
331
        gtk_window_set_icon(GTK_WINDOW(window1), pixbuf);
 
332
        g_object_unref(pixbuf);
 
333
#endif
 
334
        
 
335
        return window1;
 
336
}
 
337
 
 
338
GtkWidget* create_toolbar()
 
339
{
 
340
        GtkWidget *toolitem1;
 
341
        GtkWidget *button3; 
 
342
        GtkIconSize tmp_toolbar_icon_size;
 
343
 
 
344
        GtkWidget *toolbar1 = gtk_toolbar_new ();
 
345
        //gtk_widget_show (toolbar1);  //initialy invisible (set by .ini value)
 
346
 
 
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)); 
 
350
        
 
351
        g_signal_connect (GTK_OBJECT (toolbar1), "focus", GTK_SIGNAL_FUNC (on_focus_event), NULL);
 
352
 
 
353
        gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar1), TRUE );
 
354
        GtkTooltips *tips = gtk_tooltips_new ();
 
355
 
 
356
        button3 = gtk_image_new_from_stock (GTK_STOCK_NEW, tmp_toolbar_icon_size);
 
357
        gtk_widget_show (button3);
 
358
 
 
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);
 
364
 
 
365
 
 
366
        button3 = gtk_image_new_from_stock (GTK_STOCK_OPEN, tmp_toolbar_icon_size);
 
367
        gtk_widget_show (button3);
 
368
 
 
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);
 
374
 
 
375
 
 
376
        button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE, tmp_toolbar_icon_size);
 
377
        gtk_widget_show (button3);
 
378
 
 
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);
 
384
 
 
385
 
 
386
        button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, tmp_toolbar_icon_size);
 
387
        gtk_widget_show (button3);
 
388
 
 
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);
 
394
 
 
395
        //append space
 
396
        toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
 
397
        gtk_widget_show (toolitem1);
 
398
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
399
 
 
400
 
 
401
        button3 = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, tmp_toolbar_icon_size);
 
402
        gtk_widget_show (button3);
 
403
 
 
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");
 
411
 
 
412
 
 
413
        button3 = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, tmp_toolbar_icon_size);
 
414
        gtk_widget_show (button3);
 
415
 
 
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");
 
423
 
 
424
 
 
425
        button3 = gtk_image_new_from_stock (GTK_STOCK_CUT, tmp_toolbar_icon_size);
 
426
        gtk_widget_show (button3);
 
427
 
 
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);
 
433
 
 
434
 
 
435
        button3 = gtk_image_new_from_stock (GTK_STOCK_COPY, tmp_toolbar_icon_size);
 
436
        gtk_widget_show (button3);
 
437
 
 
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);
 
443
 
 
444
 
 
445
        button3 = gtk_image_new_from_stock (GTK_STOCK_PASTE, tmp_toolbar_icon_size);
 
446
        gtk_widget_show (button3);
 
447
 
 
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);
 
453
 
 
454
        
 
455
        button3 = gtk_image_new_from_stock (GTK_STOCK_DELETE, tmp_toolbar_icon_size);
 
456
        gtk_widget_show (button3);
 
457
 
 
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);
 
463
 
 
464
        //append space
 
465
        toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
 
466
        gtk_widget_show (toolitem1);
 
467
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
468
 
 
469
        button3 = gtk_image_new_from_stock (GTK_STOCK_HELP, tmp_toolbar_icon_size);
 
470
        gtk_widget_show (button3);
 
471
 
 
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);
 
477
 
 
478
 
 
479
        return toolbar1;
 
480
}
 
481
 
 
482
gboolean window_state_event (GtkWidget           *widget,
 
483
                                                        GdkEventWindowState *event)
 
484
{
 
485
        if(event->changed_mask & GDK_WINDOW_STATE_ICONIFIED)
 
486
        {
 
487
                if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
 
488
                {
 
489
                        //on window minimized, show tray icon
 
490
                        if(g_bMinimizeToTray)
 
491
                        {
 
492
                                g_tray.Show();
 
493
                                g_tray.SetTooltip("NoteCase"); //important: call this after Show
 
494
                                gtk_widget_hide(window1);
 
495
                        }
 
496
                }
 
497
        }
 
498
        return FALSE;
 
499
}
 
500
 
 
501
const char *PasswordCallback(const char *szFile)
 
502
{
 
503
        static char szPass[1024] = "";
 
504
        szPass[0] = '\0';
 
505
        
 
506
        HideBusyCursor();       //restore the normal cursor for the moment
 
507
 
 
508
        //ask user for password
 
509
        PasswordDialog dlg;
 
510
 
 
511
        //set label     
 
512
        std::string strLabel = _("Please enter the password for file\n");
 
513
        strLabel += szFile;
 
514
        dlg.SetLabel(strLabel.c_str());
 
515
 
 
516
        gtk_grab_add( dlg.GetDialog() );        //block all other widgets in the app
 
517
                        
 
518
        if(GTK_RESPONSE_OK == dlg.ShowModal())
 
519
        {
 
520
                //get result
 
521
                GtkWidget *entry1 = lookup_widget(dlg.GetDialog(), "entry1");
 
522
                const char *szText = gtk_entry_get_text (GTK_ENTRY(entry1));
 
523
                if(szText)
 
524
                        strcpy(szPass, szText);
 
525
        }
 
526
        
 
527
        gtk_grab_remove(dlg.GetDialog());       //unblock
 
528
        gtk_widget_destroy (dlg.GetDialog());
 
529
        
 
530
        ShowBusyCursor(); //keep showing busy 
 
531
 
 
532
        //return password
 
533
        if(strlen(szPass)<1)
 
534
                return NULL;
 
535
        return szPass;
 
536
}
 
537
 
 
538
void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group)
 
539
{
 
540
        GtkWidget *menuitem1;
 
541
        GtkWidget *menu1;
 
542
        GtkWidget *new1;
 
543
        GtkWidget *open1;
 
544
        GtkWidget *save1;
 
545
        GtkWidget *save_as1;
 
546
        GtkWidget *reload1;
 
547
        GtkWidget *separatormenuitem1;
 
548
        GtkWidget *quit1;
 
549
        GtkWidget *menuitem2;
 
550
        GtkWidget *menu2;
 
551
        GtkWidget *cut1;
 
552
        GtkWidget *copy1;
 
553
        GtkWidget *paste1;
 
554
        GtkWidget *delete1;
 
555
        GtkWidget *find1;
 
556
        GtkWidget *find2;
 
557
        GtkWidget *title1;
 
558
        GtkWidget *statbar1;
 
559
        GtkWidget *menutool1;
 
560
        GtkWidget *wrap1;
 
561
        GtkWidget *options1;
 
562
        GtkWidget *undo1;
 
563
        GtkWidget *redo1;
 
564
        GtkWidget *menuitem3;
 
565
        GtkWidget *menu3;
 
566
        GtkWidget *menuitem4;
 
567
        GtkWidget *menu4;
 
568
        GtkWidget *about1;
 
569
        GtkWidget *help1;
 
570
        GtkWidget *icon;
 
571
        GtkWidget *menu_item;
 
572
 
 
573
        menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File"));
 
574
        gtk_widget_show (menuitem1);
 
575
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem1);
 
576
        
 
577
        menu1 = gtk_menu_new ();
 
578
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menu1);
 
579
        
 
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);
 
587
        
 
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);
 
595
 
 
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);
 
603
 
 
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);
 
610
        
 
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);
 
615
 
 
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);
 
620
 
 
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);
 
626
        
 
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);
 
632
 
 
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);
 
637
                
 
638
        //
 
639
        //  MRU (most recently used) list
 
640
        //
 
641
        
 
642
        //create MRU item
 
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);
 
646
        
 
647
        g_objMRU.Load();
 
648
        g_objMRU.RebuildMenu();
 
649
        
 
650
        //add separator
 
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);
 
655
        
 
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);
 
664
 
 
665
        menuitem2 = gtk_menu_item_new_with_mnemonic (_("_Edit"));
 
666
        gtk_widget_show (menuitem2);
 
667
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);
 
668
        
 
669
        menu2 = gtk_menu_new ();
 
670
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);
 
671
 
 
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);
 
680
 
 
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);
 
689
 
 
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);
 
694
        
 
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);
 
702
 
 
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);
 
710
        
 
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);
 
718
 
 
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);
 
725
        
 
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);
 
730
 
 
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);
 
738
 
 
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);
 
743
 
 
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);
 
751
 
 
752
        menuitem3 = gtk_menu_item_new_with_mnemonic (_("_View"));
 
753
        gtk_widget_show (menuitem3);
 
754
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem3);
 
755
        
 
756
        menu3 = gtk_menu_new ();
 
757
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menu3);
 
758
 
 
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);
 
763
 
 
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);
 
768
 
 
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);
 
773
 
 
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);
 
779
                
 
780
        menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help"));
 
781
        gtk_widget_show (menuitem4);
 
782
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);
 
783
 
 
784
        menu4 = gtk_menu_new ();
 
785
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);
 
786
        
 
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);
 
794
        
 
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);
 
799
        
 
800
        about1 = gtk_menu_item_new_with_mnemonic (_("_About"));
 
801
        gtk_widget_show (about1);
 
802
        gtk_container_add (GTK_CONTAINER (menu4), about1);
 
803
 
 
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);
 
825
 
 
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");  
 
853
}
 
854
 
 
855
gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data)
 
856
{
 
857
        //FIX: prevent toolbar from getting focus by keyboard
 
858
        static bool bRecurse = false;
 
859
        if(!bRecurse)
 
860
        {
 
861
                bRecurse = true;
 
862
                gtk_widget_child_focus (widget, (GtkDirectionType)GTK_DIR_TAB_FORWARD);
 
863
                bRecurse = false;
 
864
        }
 
865
        
 
866
        return FALSE;
 
867
}
 
868