~ubuntu-branches/ubuntu/raring/notecase/raring

« back to all changes in this revision

Viewing changes to src/MainWnd.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Nathan Handler
  • Date: 2008-12-21 13:09:58 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20081221130958-0ri77h0x7j1dclkq
Tags: 1.9.8-0ubuntu1
New upstream release (LP: #307752)

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 "interface.h"
15
 
#include "MainWnd.h"
16
 
#include "TreeView.h"
17
 
#include "TextView.h"
18
 
#include "mru.h"
19
 
#include "callbacks.h"
20
 
#include "lib/debug.h"
21
 
#include "lib/NoteDocument.h"
22
 
#include "lib/IniFile.h"
23
 
#include "lib/FilePath.h"
24
 
#include "PortableTrayIcon.h"
25
 
#include "PasswordDialog.h"
26
 
#include "gui/GuiLanguage.h"
27
 
#include "ShortcutsList.h"
28
 
#include "FindReplaceInfo.h"
29
 
 
30
 
#ifdef _NOKIA_MAEMO
31
 
 #if _NOKIA_MAEMO == 1
32
 
  #include <hildon-widgets/hildon-program.h>
33
 
 #else
34
 
  #include <hildon/hildon-program.h>
35
 
 #endif
36
 
#endif
37
 
 
38
 
#include "../res/notecase.xpm"
39
 
#include "../res/icon_attachment.xpm"
40
 
#include "../res/icon_picture.xpm"
41
 
#include "../res/page_link.xpm"
42
 
#include "../res/text_bold.xpm"
43
 
#include "../res/text_italic.xpm"
44
 
#include "../res/text_underline.xpm"
45
 
#include "../res/text_strikethrough.xpm"
46
 
#include "../res/text_color.xpm"
47
 
#include "../res/text_bg_color.xpm"
48
 
#include "../res/text_no_format.xpm"
49
 
#include "../res/icon_datetime.xpm"
50
 
#include "../res/internal_lock.xpm"
51
 
#include "../res/key.xpm"
52
 
 
53
 
extern bool g_bBusyCursor;
54
 
void ShowBusyCursor();
55
 
void HideBusyCursor();
56
 
 
57
 
extern NoteDocument g_doc;
58
 
extern MRU g_objMRU;
59
 
extern GtkWidget *window1;
60
 
extern GtkWidget *g_menuitem5;
61
 
extern TreeView g_tree;
62
 
extern TextView g_text;
63
 
extern bool g_bMinimizeToTray;
64
 
extern bool g_bCloseToTray;
65
 
extern bool g_bCloseDlgOnTextEnter;
66
 
extern bool g_bAutoSaveOnClose;
67
 
extern bool g_bSkipMemOnlyAutosave;
68
 
extern bool g_bExportDataAsSeparateFile;
69
 
extern MainWindow g_wnd;
70
 
extern IniFile g_objIni;
71
 
extern GuiLanguage g_lang;
72
 
extern bool g_bTreeToTheRight;
73
 
extern bool g_bTreeToTheRightInitial;
74
 
extern GdkColor g_linkColor;
75
 
extern int g_nDefaultNodeIconType;
76
 
extern std::string g_strDefaultIconFile;
77
 
extern FindReplaceInfo g_objSearchInfo;
78
 
 
79
 
extern bool g_bInitialLoad;
80
 
extern bool g_bUpdateMRU;
81
 
extern bool g_bLoadEmbedded;
82
 
extern std::string g_strLoadDocumentFile;
83
 
extern std::string g_strLoadDocumentPass;
84
 
extern int g_nLoadDocumentNodeID;
85
 
 
86
 
extern ShortcutDef g_defTreeNodeNew;
87
 
extern ShortcutDef g_defTreeNodeNewChild;
88
 
extern ShortcutDef g_defTreeNodeDelete;
89
 
extern ShortcutDef g_defTreeNodeRename;
90
 
extern ShortcutDef g_defTreeNodeMoveUp;
91
 
extern ShortcutDef g_defTreeNodeMoveDown;
92
 
extern ShortcutDef g_defTreeNodeMoveLeft;
93
 
extern ShortcutDef g_defTreeNodeMoveRight;
94
 
extern ShortcutDef g_defTreeNodeProperties;
95
 
extern ShortcutDef g_defTreeNodeDelFinished;
96
 
extern ShortcutDef g_defTreeNodeToggleFinished;
97
 
extern ShortcutDef g_defTreeNodeSortChildrenAsc;
98
 
extern ShortcutDef g_defTreeNodeSortChildrenDsc;
99
 
extern ShortcutDef g_defTreeNodeSortRootAsc;
100
 
extern ShortcutDef g_defTreeNodeSortRootDsc;
101
 
extern ShortcutDef g_defTreeNodeExpandAll;
102
 
extern ShortcutDef g_defTreeNodeColapseAll;
103
 
extern ShortcutDef g_defTreeCopyBranchStruct;
104
 
extern ShortcutDef g_defTreePasteBranchRoot;
105
 
 
106
 
ShortcutsList g_shortcuts;
107
 
PortableTrayIcon g_tray;
108
 
int g_nTitleBarTextSize = 10 * PANGO_SCALE; //default size
109
 
bool g_bWrapTree=false;
110
 
bool g_bDrawTextviewExpose = false;
111
 
 
112
 
GdkColor g_rgbTextViewBkColor = { 0, 0xFFFF, 0xFFFF, 0xFFFF };  //white
113
 
 
114
 
void register_extensions_check();
115
 
static void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group);
116
 
static gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event);
117
 
const char *PasswordCallback(const char *szFile, bool bSave);
118
 
static gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data);
119
 
bool LocaleToUtf8(const char *szTxt, std::string &strResult);
120
 
static gint dlg_keyboard_handler (GtkWidget *widget, GdkEventKey *event, gpointer data);
121
 
void SetTextViewCaretColor(bool bBlack);
122
 
void RefreshTextViewCaretColor(GdkColor &BkColor);
123
 
gboolean initial_load_timer(gpointer data);
124
 
int  load_file_embedded(int nCurNodeIdx = -1);
125
 
int load_file(const char *filename, const char *szPassword, int nCurNodeIdx);
126
 
void on_tree_resize(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data);
127
 
void update_tree_wrap();
128
 
 
129
 
MainWindow::MainWindow()
130
 
{
131
 
        m_pWidget = NULL;
132
 
        m_pToolbarBold = NULL;
133
 
        m_pToolbarItalic = NULL;
134
 
        m_pToolbarUnderline = NULL;
135
 
        m_pToolbarColor = NULL;
136
 
        m_pToolbarAttachment = NULL;
137
 
        m_pToolbarBkgColor = NULL;
138
 
        m_pToolbarUndo = NULL;
139
 
        m_pToolbarRedo = NULL;
140
 
}
141
 
 
142
 
MainWindow::~MainWindow()
143
 
{
144
 
}
145
 
 
146
 
void MainWindow::Create()
147
 
{
148
 
        g_shortcuts.Load();
149
 
 
150
 
        g_objIni.GetValue("Display", "DrawGrayTextView", g_bDrawTextviewExpose, 1);
151
 
 
152
 
        g_objIni.GetValue("Display", "TreeToTheRight", g_bTreeToTheRight);
153
 
        g_bTreeToTheRightInitial = g_bTreeToTheRight;
154
 
 
155
 
        //set global RTL support
156
 
        if(g_lang.IsCurLangRTL()) //RTL support
157
 
                gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
158
 
 
159
 
        m_pWidget = create_main_win();
160
 
        OnCreate();
161
 
 
162
 
        //cache loaded shortcuts for faster lookup
163
 
        int nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW, SH_CTX_TREE_WIDGET);
164
 
        if(nPos >= 0)   g_defTreeNodeNew = g_shortcuts[nPos];
165
 
 
166
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW_CHILD, SH_CTX_TREE_WIDGET);
167
 
        if(nPos >= 0)   g_defTreeNodeNewChild = g_shortcuts[nPos];
168
 
 
169
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE, SH_CTX_TREE_WIDGET);
170
 
        if(nPos >= 0)   g_defTreeNodeDelete = g_shortcuts[nPos];
171
 
 
172
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_RENAME, SH_CTX_TREE_WIDGET);
173
 
        if(nPos >= 0)   g_defTreeNodeRename = g_shortcuts[nPos];
174
 
 
175
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_UP, SH_CTX_TREE_WIDGET);
176
 
        if(nPos >= 0)   g_defTreeNodeMoveUp = g_shortcuts[nPos];
177
 
 
178
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_DOWN, SH_CTX_TREE_WIDGET);
179
 
        if(nPos >= 0)   g_defTreeNodeMoveDown = g_shortcuts[nPos];
180
 
 
181
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_LEFT, SH_CTX_TREE_WIDGET);
182
 
        if(nPos >= 0)   g_defTreeNodeMoveLeft = g_shortcuts[nPos];
183
 
 
184
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_RIGHT, SH_CTX_TREE_WIDGET);
185
 
        if(nPos >= 0)   g_defTreeNodeMoveRight = g_shortcuts[nPos];
186
 
 
187
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_RIGHT, SH_CTX_TREE_WIDGET);
188
 
        if(nPos >= 0)   g_defTreeNodeMoveRight = g_shortcuts[nPos];
189
 
 
190
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_PROPERTIES, SH_CTX_TREE_WIDGET);
191
 
        if(nPos >= 0)   g_defTreeNodeProperties = g_shortcuts[nPos];
192
 
 
193
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE_FINISHED, SH_CTX_TREE_WIDGET);
194
 
        if(nPos >= 0)   g_defTreeNodeDelFinished = g_shortcuts[nPos];
195
 
 
196
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_TOGGLE_FINISHED, SH_CTX_TREE_WIDGET);
197
 
        if(nPos >= 0)   g_defTreeNodeToggleFinished = g_shortcuts[nPos];
198
 
 
199
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_ASC, SH_CTX_TREE_WIDGET);
200
 
        if(nPos >= 0)   g_defTreeNodeSortChildrenAsc = g_shortcuts[nPos];
201
 
 
202
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_DESC, SH_CTX_TREE_WIDGET);
203
 
        if(nPos >= 0)   g_defTreeNodeSortChildrenDsc = g_shortcuts[nPos];
204
 
 
205
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_ASC, SH_CTX_TREE_WIDGET);
206
 
        if(nPos >= 0)   g_defTreeNodeSortRootAsc = g_shortcuts[nPos];
207
 
 
208
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_DESC, SH_CTX_TREE_WIDGET);
209
 
        if(nPos >= 0)   g_defTreeNodeSortRootDsc = g_shortcuts[nPos];
210
 
 
211
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_EXPAND_ALL, SH_CTX_TREE_WIDGET);
212
 
        if(nPos >= 0)   g_defTreeNodeExpandAll = g_shortcuts[nPos];
213
 
 
214
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_COLAPSE_ALL, SH_CTX_TREE_WIDGET);
215
 
        if(nPos >= 0)   g_defTreeNodeColapseAll = g_shortcuts[nPos];
216
 
 
217
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_COPY_BR_STRUCT, SH_CTX_TREE_WIDGET);
218
 
        if(nPos >= 0)   g_defTreeCopyBranchStruct = g_shortcuts[nPos];
219
 
 
220
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_PASTE_BR_ROOT, SH_CTX_TREE_WIDGET);
221
 
        if(nPos >= 0)   g_defTreePasteBranchRoot = g_shortcuts[nPos];
222
 
}
223
 
 
224
 
void MainWindow::OnCreate()
225
 
{
226
 
        //check startup options
227
 
        window1 = g_wnd.m_pWidget;
228
 
        g_signal_connect (window1, "destroy", G_CALLBACK (on_quit1_activate), NULL);
229
 
        g_signal_connect (window1, "delete_event", G_CALLBACK (on_window_delete_event), NULL);
230
 
        g_signal_connect (window1, "key_press_event", G_CALLBACK (dlg_keyboard_handler), this);
231
 
 
232
 
        GtkWidget *treeview = lookup_widget(window1, "treeview1");
233
 
        GtkWidget *textview = lookup_widget(window1, "textview1");
234
 
        GtkWidget *label1   = lookup_widget(window1, "label1");
235
 
 
236
 
        //set global margin
237
 
        gtk_text_view_set_left_margin (GTK_TEXT_VIEW(textview), 5);
238
 
        gtk_text_view_set_right_margin(GTK_TEXT_VIEW(textview), 5);
239
 
 
240
 
        //set initial fonts
241
 
        std::string strFont1;
242
 
        g_objIni.GetValue("Display", "TreeFont", strFont1, "");
243
 
        if(!strFont1.empty()){
244
 
                PangoFontDescription *desc1 = pango_font_description_from_string(strFont1.c_str());
245
 
                gtk_widget_modify_font(treeview, desc1);
246
 
                pango_font_description_free(desc1);
247
 
        }
248
 
 
249
 
        std::string strFont2;
250
 
        g_objIni.GetValue("Display", "TextFont", strFont2, "");
251
 
        if(!strFont2.empty()){
252
 
                PangoFontDescription *desc1 = pango_font_description_from_string(strFont2.c_str());
253
 
                gtk_widget_modify_font(textview, desc1);
254
 
                //calculate text size for node title bar as 1.5 the size of other text
255
 
                g_nTitleBarTextSize = (pango_font_description_get_size(desc1) * 15)/10;
256
 
                pango_font_description_free(desc1);
257
 
        }
258
 
 
259
 
        //set font size for node title bar (1.5 times of node text font)
260
 
        PangoContext *context = gtk_widget_get_pango_context (label1);
261
 
        PangoFontDescription *desc2 = pango_context_get_font_description(context);
262
 
        PangoFontDescription *desc3 = pango_font_description_copy(desc2);
263
 
#if GTK_CHECK_VERSION(2,6,0) //minimal version for pango_font_description_set_absolute_size
264
 
        pango_font_description_set_absolute_size(desc3, g_nTitleBarTextSize);
265
 
#else
266
 
        pango_font_description_set_size (desc3, (8*g_nTitleBarTextSize)/10);    //TOFIX convert from pixels to fractions?
267
 
#endif
268
 
        gtk_widget_modify_font(label1, desc3);
269
 
        pango_font_description_free(desc3);
270
 
        //TRACE("Node title bar: Font size=%d\n", g_nTitleBarTextSize);
271
 
 
272
 
        bool bMaximize;
273
 
        if(g_objIni.GetValue("Startup", "Maximize", bMaximize))
274
 
                if(bMaximize)
275
 
                        gtk_window_maximize(GTK_WINDOW(window1));
276
 
 
277
 
        //on demand check if we need to register file formats
278
 
        bool bRegisterFormats;
279
 
        if(g_objIni.GetValue("Startup", "RegisterFormats", bRegisterFormats))
280
 
                if(bRegisterFormats)
281
 
                        register_extensions_check();
282
 
 
283
 
        //restore text wrapping option
284
 
        bool bWrapText;
285
 
        if(g_objIni.GetValue("Display", "WrapText", bWrapText))
286
 
        if(bWrapText)
287
 
                set_wrap_activated(true);
288
 
 
289
 
        //restore tree wrapping option
290
 
        g_objIni.GetValue("Display", "WrapTree", g_bWrapTree);
291
 
 
292
 
        //restore "tree lines" option
293
 
        bool bTreeLines;
294
 
        g_objIni.GetValue("Display", "ShowTreeLines", bTreeLines);
295
 
        g_tree.SetTreeLines(bTreeLines);
296
 
 
297
 
        //restore "toolbar visible" option
298
 
        bool bShowToolbar;
299
 
        g_objIni.GetValue("Display", "ShowToolBar", bShowToolbar, 1);
300
 
                if(bShowToolbar)
301
 
                        set_show_toolbar(true);
302
 
 
303
 
        //restore "node title visible" option
304
 
        bool bShowTitle;
305
 
        if(g_objIni.GetValue("Display", "NodeTitleBar", bShowTitle))
306
 
                if(bShowTitle)
307
 
                        set_show_node_title(true);
308
 
 
309
 
        //restore "status bar visible" option
310
 
        bool bShowStatBar;
311
 
        g_objIni.GetValue("Display", "ShowStatusBar", bShowStatBar, 1);
312
 
        if(bShowStatBar)        // default is true, change only if false
313
 
                set_show_status_bar(true);
314
 
 
315
 
        //restore last position
316
 
        bool bRestoreLastPos;
317
 
        g_objIni.GetValue("Startup", "RestoreLastPosition", bRestoreLastPos, 1);
318
 
        if(bRestoreLastPos)
319
 
        {
320
 
                gint nPosLeft, nPosTop, nPosWidth, nPosHeight, nPosDivider;
321
 
                nPosLeft = nPosTop = nPosWidth = nPosHeight = nPosDivider = 0;
322
 
 
323
 
                g_objIni.GetValue("Startup", "LastPos_Left", nPosLeft);
324
 
                g_objIni.GetValue("Startup", "LastPos_Top", nPosTop);
325
 
                g_objIni.GetValue("Startup", "LastPos_Width", nPosWidth);
326
 
                g_objIni.GetValue("Startup", "LastPos_Height", nPosHeight);
327
 
                g_objIni.GetValue("Startup", "LastPos_Divider", nPosDivider);
328
 
 
329
 
                //apply some common sense checks/fixes
330
 
                if(nPosWidth  <= 0) nPosWidth   = 500;
331
 
                if(nPosHeight <= 0) nPosHeight  = 350;
332
 
                if(nPosLeft   <= 0) nPosLeft    = 0;
333
 
                if(nPosTop    <= 0) nPosTop     = 0;
334
 
                if(nPosDivider<= 0) nPosDivider = 150;
335
 
 
336
 
                gtk_window_move(GTK_WINDOW(window1), nPosLeft, nPosTop);
337
 
                gtk_window_set_default_size(GTK_WINDOW(window1), nPosWidth, nPosHeight);
338
 
                gtk_window_resize(GTK_WINDOW(window1), nPosWidth, nPosHeight);
339
 
                GtkWidget *divider = lookup_widget(window1, "hbox1");
340
 
                gtk_paned_set_position(GTK_PANED(divider), nPosDivider);
341
 
        }
342
 
        else
343
 
        {
344
 
                gtk_window_set_default_size (GTK_WINDOW (window1), 500, 350);
345
 
                GtkWidget *divider = lookup_widget(window1, "hbox1");
346
 
                if(g_bTreeToTheRight)
347
 
                        gtk_paned_set_position (GTK_PANED(divider), 350);
348
 
                else
349
 
                        gtk_paned_set_position (GTK_PANED(divider), 150);
350
 
        }
351
 
 
352
 
        //restore view mode
353
 
        int nMode = 0;
354
 
        g_objIni.GetValue("Display", "ViewMode", nMode, 0);
355
 
        if(nMode > 0){
356
 
                on_view_text_only_mode (NULL, NULL);
357
 
                if(nMode > 1)
358
 
                        on_view_text_only_mode (NULL, NULL);
359
 
        }
360
 
 
361
 
        //set custom GUI colors
362
 
        std::string strColor, strColor1;
363
 
        g_objIni.GetValue("Display", "TextColor", strColor, "");
364
 
        g_objIni.GetValue("Display", "BackgroundColor", strColor1, "");
365
 
        if(strColor.size() > 0)
366
 
        {
367
 
                GdkColor color;
368
 
                gdk_color_parse (strColor.c_str(), &color);
369
 
                gtk_widget_modify_text(GTK_WIDGET(textview), GTK_STATE_NORMAL, &color);
370
 
                gtk_widget_modify_text(GTK_WIDGET(treeview), GTK_STATE_NORMAL, &color);
371
 
        }
372
 
        if(strColor1.size() > 0)
373
 
        {
374
 
                GdkColor color1;
375
 
                gdk_color_parse (strColor1.c_str(), &color1);
376
 
                gtk_widget_modify_base(GTK_WIDGET(textview), GTK_STATE_NORMAL, &color1);
377
 
                gtk_widget_modify_base(GTK_WIDGET(textview), GTK_STATE_INSENSITIVE, &color1);
378
 
                gtk_widget_modify_base(GTK_WIDGET(treeview), GTK_STATE_NORMAL, &color1);
379
 
                RefreshTextViewCaretColor(color1);
380
 
 
381
 
                g_rgbTextViewBkColor = color1;
382
 
 
383
 
                //fix for GTK bug - tree view loses background color
384
 
                static const char cursor_color_rc[] =
385
 
                        "style \"aaa\"\n"
386
 
                        "{\n"
387
 
                        "GtkTreeView::odd-row-color=\"#%04x%04x%04x\"\n"
388
 
                        "GtkTreeView::even-row-color =\"#%04x%04x%04x\"\n"
389
 
                        "}\n"
390
 
                        "widget \"*.aaa\" style \"aaa\"";
391
 
 
392
 
                gchar *rc_temp = g_strdup_printf (cursor_color_rc,
393
 
                                                                        color1.red,
394
 
                                                                        color1.green,
395
 
                                                                        color1.blue,
396
 
                                                                        color1.red,
397
 
                                                                        color1.green,
398
 
                                                                        color1.blue);
399
 
                gtk_rc_parse_string (rc_temp);
400
 
                gtk_widget_set_name(treeview, "aaa");
401
 
                gtk_widget_reset_rc_styles (treeview);
402
 
                g_free (rc_temp);
403
 
        }
404
 
 
405
 
        if(g_bDrawTextviewExpose){
406
 
                //code to register drawing over text view
407
 
                g_signal_connect (G_OBJECT (textview), "expose_event", G_CALLBACK(textview_expose_event_cb), NULL);
408
 
                gtk_widget_set_app_paintable (textview, TRUE);
409
 
                gtk_widget_set_redraw_on_allocate (textview, TRUE);
410
 
        }
411
 
 
412
 
        //init link color
413
 
        std::string strColor2;
414
 
        g_objIni.GetValue("Display", "LinkColor", strColor2, "#0000FF");
415
 
        GdkColor color2;
416
 
        gdk_color_parse (strColor2.c_str(), &color2);
417
 
        g_linkColor = color2;
418
 
 
419
 
        //init default node icon
420
 
        g_objIni.GetValue("Default", "NodeIconType", g_nDefaultNodeIconType, -2);
421
 
        g_objIni.GetValue("Security", "NodeIconValue", g_strDefaultIconFile, "");
422
 
 
423
 
        //
424
 
        g_objIni.GetValue("Search", "CaseSensitive", g_objSearchInfo.m_bFindSensitive, false);
425
 
 
426
 
        //set custom tab size
427
 
        int     nCustomTabSize = 0;
428
 
        g_objIni.GetValue("Display", "CustomTabSize", nCustomTabSize, 0);
429
 
        if(nCustomTabSize > 0)
430
 
        {
431
 
                int nWidthPixels = g_text.CalcTabWidthInPixels(nCustomTabSize);
432
 
                g_text.SetTabWidth(nWidthPixels);
433
 
        }
434
 
 
435
 
        //disable "New notecase" item when single instance is on
436
 
        bool bSingleInst;
437
 
        if(g_objIni.GetValue("Startup", "AllowSingleInstance", bSingleInst) && bSingleInst){
438
 
                GtkWidget *new_notecase1 = lookup_widget(window1, "new_notecase1");
439
 
                gtk_widget_set_sensitive(new_notecase1, FALSE);
440
 
        }
441
 
 
442
 
        if(g_bInitialLoad)
443
 
                g_timeout_add (0, initial_load_timer, NULL);
444
 
 
445
 
        g_tree.SetFocus();      // set initial focus
446
 
 
447
 
        gtk_widget_show (window1);
448
 
 
449
 
        //load global option
450
 
        g_objIni.GetValue("Display", "MinimizeToTray", g_bMinimizeToTray);
451
 
        g_objIni.GetValue("Display", "CloseToTray", g_bCloseToTray);
452
 
        g_objIni.GetValue("Default", "CloseDlgOnTxtEnter", g_bCloseDlgOnTextEnter, true);
453
 
        g_objIni.GetValue("Save", "AutoSaveOnClose", g_bAutoSaveOnClose);
454
 
        g_objIni.GetValue("Save",  "SkipMemOnlyAutoSave", g_bSkipMemOnlyAutosave, true);
455
 
        g_objIni.GetValue("Export", "ExportEmbeddedAsSeparateFile", g_bExportDataAsSeparateFile, 1);
456
 
 
457
 
        if(g_bWrapTree)
458
 
                g_tree.WrapTreeToSize(g_tree.m_pWidget->allocation.width);
459
 
 
460
 
        restart_autosave();
461
 
}
462
 
 
463
 
//TOFIX make class member RefreshTitle()
464
 
void RefreshMainTitle()
465
 
{
466
 
        if(!g_wnd.m_pWidget)    //no need if doing export from cmd line
467
 
                return;
468
 
 
469
 
        std::string strTitle;
470
 
 
471
 
        //basename of the document
472
 
        if(g_doc.GetPath().size()>0)
473
 
        {
474
 
                strTitle += GetBaseName(g_doc.GetPath().c_str());
475
 
                if(g_doc.IsModified())
476
 
                        strTitle += "*";
477
 
 
478
 
                strTitle += " - ";
479
 
 
480
 
                strTitle += APP_NAME_STR;
481
 
                strTitle += " ";
482
 
                strTitle += APP_VER_STR;
483
 
                strTitle += " ";
484
 
 
485
 
                strTitle += "[";
486
 
                strTitle += g_doc.GetPath().c_str();
487
 
                strTitle += "]";
488
 
        }
489
 
        else
490
 
        {
491
 
                strTitle += APP_NAME_STR;
492
 
                strTitle += " ";
493
 
                strTitle += APP_VER_STR;
494
 
        }
495
 
 
496
 
        gtk_window_set_title (GTK_WINDOW (window1), strTitle.c_str());
497
 
}
498
 
 
499
 
GtkWidget* MainWindow::create_main_win ()
500
 
{
501
 
#ifdef _NOKIA_MAEMO
502
 
    HildonProgram *program;
503
 
    HildonWindow *window1;
504
 
#else
505
 
        GtkWidget *window1;
506
 
#endif
507
 
 
508
 
        GtkWidget *vbox1;
509
 
        GtkWidget *menubar1;
510
 
        GtkWidget *hbox1;
511
 
        GtkWidget *scrolledwindow1;
512
 
        GtkWidget *treeview1;
513
 
        GtkWidget *scrolledwindow2;
514
 
        GtkWidget *textview1;
515
 
        GtkWidget *statusbar1;
516
 
        GtkWidget *vbox2;
517
 
        GtkWidget *label1;
518
 
        GtkAccelGroup *accel_group;
519
 
        GtkWidget *toolbar1;
520
 
 
521
 
#ifdef _NOKIA_MAEMO
522
 
        // Create the hildon program and setup the title
523
 
    program = HILDON_PROGRAM(hildon_program_get_instance());
524
 
    g_set_application_name("Notecase");
525
 
#endif
526
 
 
527
 
        accel_group = gtk_accel_group_new ();
528
 
 
529
 
        //prepare version string
530
 
        std::string strApp(APP_NAME_STR);
531
 
        strApp += " ";
532
 
        strApp += APP_VER_STR;
533
 
 
534
 
#ifdef _NOKIA_MAEMO
535
 
    // Create HildonWindow and set it to HildonProgram
536
 
    window1 = HILDON_WINDOW(hildon_window_new());
537
 
    hildon_program_add_window(program, window1);
538
 
#else
539
 
        window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
540
 
        gtk_window_set_title (GTK_WINDOW (window1), strApp.c_str());
541
 
#endif
542
 
 
543
 
        vbox1 = gtk_vbox_new (FALSE, 0);
544
 
        gtk_widget_show (vbox1);
545
 
        gtk_container_add (GTK_CONTAINER (window1), vbox1);
546
 
 
547
 
#ifdef _NOKIA_MAEMO
548
 
        menubar1 = NULL;
549
 
#else
550
 
        menubar1 = gtk_menu_bar_new ();
551
 
        gtk_widget_show (menubar1);
552
 
        gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
553
 
#endif
554
 
 
555
 
        create_menu(GTK_WIDGET(window1), menubar1, accel_group);
556
 
 
557
 
        // create toolbar
558
 
        toolbar1 = create_toolbar();
559
 
 
560
 
#ifdef _NOKIA_MAEMO
561
 
        hildon_window_add_toolbar(window1, GTK_TOOLBAR(toolbar1));
562
 
#else
563
 
        gtk_box_pack_start (GTK_BOX (vbox1), toolbar1, FALSE, FALSE, 0);
564
 
#endif
565
 
 
566
 
        //
567
 
        hbox1 = gtk_hpaned_new ();
568
 
        gtk_widget_show (hbox1);
569
 
        gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
570
 
        gtk_paned_set_position (GTK_PANED (hbox1), 0);
571
 
 
572
 
        GtkWidget *frameLeft = gtk_frame_new (NULL);
573
 
        GtkWidget *frameRight = gtk_frame_new (NULL);
574
 
        gtk_frame_set_shadow_type (GTK_FRAME (frameLeft), GTK_SHADOW_IN);
575
 
        gtk_frame_set_shadow_type (GTK_FRAME (frameRight), GTK_SHADOW_IN);
576
 
        gtk_widget_show (frameLeft);
577
 
        gtk_widget_show (frameRight);
578
 
 
579
 
        scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
580
 
        gtk_widget_show (scrolledwindow1);
581
 
 
582
 
        if(g_lang.IsCurLangRTL() || g_bTreeToTheRight)  //RTL support
583
 
                gtk_container_add( GTK_CONTAINER(frameRight), scrolledwindow1 );
584
 
        else
585
 
                gtk_container_add( GTK_CONTAINER(frameLeft), scrolledwindow1 );
586
 
 
587
 
        gtk_paned_pack1(GTK_PANED(hbox1), frameLeft, FALSE, TRUE);
588
 
 
589
 
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
590
 
 
591
 
        //create tree view
592
 
        g_tree.Create();
593
 
        treeview1 = g_tree.m_pWidget;
594
 
        gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview1);
595
 
 
596
 
        vbox2 = gtk_vbox_new (FALSE, 0);
597
 
        gtk_widget_show (vbox2);
598
 
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 2);
599
 
 
600
 
        if(g_lang.IsCurLangRTL() || g_bTreeToTheRight) //RTL support
601
 
                gtk_container_add( GTK_CONTAINER(frameLeft), vbox2 );
602
 
        else
603
 
                gtk_container_add( GTK_CONTAINER(frameRight), vbox2 );
604
 
 
605
 
        gtk_paned_pack2 (GTK_PANED (hbox1), frameRight, TRUE, TRUE);
606
 
 
607
 
        //create text node label
608
 
        label1 = gtk_label_new ("");
609
 
        gtk_label_set_selectable(GTK_LABEL(label1), TRUE);
610
 
        gtk_widget_set_size_request(label1, 300, -1);
611
 
        gtk_misc_set_alignment(GTK_MISC(label1), 0.0f, 0.7f);  // horizontal: left aligned, vertically centered
612
 
        gtk_misc_set_padding(GTK_MISC(label1), 0, 2);
613
 
        gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
614
 
 
615
 
        //hack trying to fake top margin for text view
616
 
        GtkWidget *margin1 = NULL;
617
 
        if(g_bDrawTextviewExpose){
618
 
                margin1 = gtk_label_new ("");
619
 
                gtk_widget_show (margin1);
620
 
                gtk_widget_set_size_request(margin1, -1, 5);
621
 
                gtk_box_pack_start (GTK_BOX (vbox2), margin1, FALSE, FALSE, 0);
622
 
                gtk_widget_set_app_paintable (margin1, TRUE);
623
 
                gtk_widget_set_redraw_on_allocate   (margin1, TRUE);
624
 
                g_signal_connect (G_OBJECT (margin1), "expose_event", G_CALLBACK(textview1_expose_event_cb), NULL);
625
 
        }
626
 
 
627
 
        scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
628
 
        gtk_widget_show (scrolledwindow2);
629
 
        gtk_box_pack_start (GTK_BOX (vbox2), scrolledwindow2, TRUE, TRUE, 0);
630
 
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
631
 
 
632
 
        //hack trying to fake bottom margin for text view
633
 
        GtkWidget *margin2 = NULL;
634
 
        if(g_bDrawTextviewExpose){
635
 
                margin2 = gtk_label_new ("");
636
 
                gtk_widget_show (margin2);
637
 
                gtk_widget_set_size_request(margin2, -1, 5);
638
 
                gtk_widget_set_app_paintable (margin1, TRUE);
639
 
                gtk_widget_set_redraw_on_allocate (margin2, TRUE);
640
 
                gtk_box_pack_start (GTK_BOX (vbox2), margin2, FALSE, FALSE, 0);
641
 
                g_signal_connect (G_OBJECT (margin2), "expose_event", G_CALLBACK(textview1_expose_event_cb), NULL);
642
 
        }
643
 
 
644
 
        //create text view
645
 
        g_text.Create();
646
 
        g_text.SetEditable(false);      // no selected node
647
 
        textview1 = g_text.m_pWidget;
648
 
        gtk_container_add (GTK_CONTAINER (scrolledwindow2), textview1);
649
 
 
650
 
        statusbar1 = gtk_statusbar_new ();
651
 
        //gtk_widget_show (statusbar1);
652
 
        gtk_box_pack_start (GTK_BOX (vbox1), statusbar1, FALSE, FALSE, 0);
653
 
 
654
 
        g_signal_connect (GTK_OBJECT (window1), "window_state_event", G_CALLBACK(window_state_event),  NULL);
655
 
        g_signal_connect (GTK_OBJECT (scrolledwindow1), "size-allocate", G_CALLBACK(on_tree_resize),  NULL);
656
 
 
657
 
        // Store pointers to all widgets, for use by lookup_widget()
658
 
        GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
659
 
        GLADE_HOOKUP_OBJECT (window1, vbox1, "vbox1");
660
 
#ifndef _NOKIA_MAEMO
661
 
        GLADE_HOOKUP_OBJECT (window1, menubar1, "menubar1");
662
 
#endif
663
 
        GLADE_HOOKUP_OBJECT (window1, hbox1, "hbox1");
664
 
        GLADE_HOOKUP_OBJECT (window1, scrolledwindow1, "scrolledwindow1");
665
 
        GLADE_HOOKUP_OBJECT (window1, treeview1, "treeview1");
666
 
        GLADE_HOOKUP_OBJECT (window1, scrolledwindow2, "scrolledwindow2");
667
 
        GLADE_HOOKUP_OBJECT (window1, textview1, "textview1");
668
 
        GLADE_HOOKUP_OBJECT (window1, statusbar1, "statusbar1");
669
 
        GLADE_HOOKUP_OBJECT (window1, vbox2, "vbox2");
670
 
        GLADE_HOOKUP_OBJECT (window1, label1, "label1");
671
 
        GLADE_HOOKUP_OBJECT (window1, toolbar1, "toolbar1");
672
 
        if(g_bDrawTextviewExpose){
673
 
                GLADE_HOOKUP_OBJECT (window1, margin1, "margin1");
674
 
                GLADE_HOOKUP_OBJECT (window1, margin2, "margin2");
675
 
        }
676
 
 
677
 
        gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);
678
 
 
679
 
        g_doc.SetPassCallback(PasswordCallback);
680
 
 
681
 
#ifdef _WIN32
682
 
#else
683
 
        //set window/application icon
684
 
        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&notecase_xpm);
685
 
        gtk_window_set_icon(GTK_WINDOW(window1), pixbuf);
686
 
        g_object_unref(pixbuf);
687
 
#endif
688
 
 
689
 
        //modify context menu for text view widget
690
 
        g_signal_connect(G_OBJECT(textview1), "populate-popup", G_CALLBACK(on_textview_populate_popup), NULL);
691
 
 
692
 
#ifdef _NOKIA_MAEMO
693
 
        //first one is required for maemo
694
 
        gtk_widget_show_all(GTK_WIDGET(window1));
695
 
        gtk_widget_hide_all(toolbar1);  // hidden on startup
696
 
        gtk_widget_hide(statusbar1);    // hidden on startup
697
 
        gtk_widget_hide(label1);                // hidden on startup (node title bar)
698
 
#endif
699
 
 
700
 
        return GTK_WIDGET(window1);
701
 
}
702
 
 
703
 
GtkWidget* MainWindow::create_toolbar()
704
 
{
705
 
        GtkWidget *toolitem1;
706
 
        GtkWidget *button3;
707
 
        GtkIconSize tmp_toolbar_icon_size;
708
 
 
709
 
        GtkWidget *toolbar1 = gtk_toolbar_new ();
710
 
        //gtk_widget_show (toolbar1);  //initialy invisible (set by .ini value)
711
 
 
712
 
        gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_ICONS);
713
 
        gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar1), GTK_ICON_SIZE_SMALL_TOOLBAR);
714
 
        tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar1));
715
 
 
716
 
        g_signal_connect (GTK_OBJECT (toolbar1), "focus", G_CALLBACK(on_focus_event), NULL);
717
 
 
718
 
        gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar1), TRUE );
719
 
        GtkTooltips *tips = gtk_tooltips_new ();
720
 
 
721
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_NEW, tmp_toolbar_icon_size);
722
 
        gtk_widget_show (button3);
723
 
 
724
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("New"));
725
 
        gtk_widget_show (toolitem1);
726
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
727
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("New"), NULL);
728
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_new1_activate), NULL);
729
 
 
730
 
 
731
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_OPEN, tmp_toolbar_icon_size);
732
 
        gtk_widget_show (button3);
733
 
 
734
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Open"));
735
 
        gtk_widget_show (toolitem1);
736
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
737
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Open"), NULL);
738
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_open1_activate), NULL);
739
 
 
740
 
 
741
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE, tmp_toolbar_icon_size);
742
 
        gtk_widget_show (button3);
743
 
 
744
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Save"));
745
 
        gtk_widget_show (toolitem1);
746
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
747
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Save"), NULL);
748
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_save1_activate), NULL);
749
 
 
750
 
#ifndef _NOKIA_MAEMO
751
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, tmp_toolbar_icon_size);
752
 
        gtk_widget_show (button3);
753
 
 
754
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Save As"));
755
 
        gtk_widget_show (toolitem1);
756
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
757
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Save As"), NULL);
758
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_save_as1_activate), NULL);
759
 
 
760
 
        //append space
761
 
        toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
762
 
        gtk_widget_show (toolitem1);
763
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
764
 
 
765
 
 
766
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_UNDO, tmp_toolbar_icon_size);
767
 
        gtk_widget_show (button3);
768
 
 
769
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Undo"));
770
 
        gtk_widget_show (toolitem1);
771
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
772
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Undo"), NULL);
773
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_undo_activate), NULL);
774
 
        gtk_widget_set_sensitive(toolitem1, FALSE);
775
 
        m_pToolbarUndo = toolitem1;
776
 
 
777
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_REDO, tmp_toolbar_icon_size);
778
 
        gtk_widget_show (button3);
779
 
 
780
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Redo"));
781
 
        gtk_widget_show (toolitem1);
782
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
783
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Redo"), NULL);
784
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_redo_activate), NULL);
785
 
        gtk_widget_set_sensitive(toolitem1, FALSE);
786
 
        m_pToolbarRedo = toolitem1;
787
 
 
788
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_CUT, tmp_toolbar_icon_size);
789
 
        gtk_widget_show (button3);
790
 
 
791
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Cut"));
792
 
        gtk_widget_show (toolitem1);
793
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
794
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Cut"), NULL);
795
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_cut1_activate), NULL);
796
 
 
797
 
 
798
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_COPY, tmp_toolbar_icon_size);
799
 
        gtk_widget_show (button3);
800
 
 
801
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Copy"));
802
 
        gtk_widget_show (toolitem1);
803
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
804
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Copy"), NULL);
805
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_copy1_activate), NULL);
806
 
 
807
 
 
808
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_PASTE, tmp_toolbar_icon_size);
809
 
        gtk_widget_show (button3);
810
 
 
811
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Paste"));
812
 
        gtk_widget_show (toolitem1);
813
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
814
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Paste"), NULL);
815
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_paste1_activate), NULL);
816
 
 
817
 
 
818
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_DELETE, tmp_toolbar_icon_size);
819
 
        gtk_widget_show (button3);
820
 
 
821
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Delete"));
822
 
        gtk_widget_show (toolitem1);
823
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
824
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Delete"), NULL);
825
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_delete1_activate), NULL);
826
 
#endif
827
 
 
828
 
//#if 1
829
 
#ifdef _NOKIA_MAEMO
830
 
        //insert node
831
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_ADD, tmp_toolbar_icon_size);
832
 
        gtk_widget_show (button3);
833
 
 
834
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Insert Node"));
835
 
        gtk_widget_show (toolitem1);
836
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
837
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Insert Node"), NULL);
838
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_menu_insert_node), NULL);
839
 
 
840
 
        //move node left
841
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, tmp_toolbar_icon_size);
842
 
        gtk_widget_show (button3);
843
 
 
844
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Move Node Left"));
845
 
        gtk_widget_show (toolitem1);
846
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
847
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Move Node Left"), NULL);
848
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_menu_move_left), NULL);
849
 
 
850
 
        //move node right
851
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, tmp_toolbar_icon_size);
852
 
        gtk_widget_show (button3);
853
 
 
854
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Move Node Right"));
855
 
        gtk_widget_show (toolitem1);
856
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
857
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Move Node Right"), NULL);
858
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_menu_move_right), NULL);
859
 
#endif
860
 
 
861
 
        //append space
862
 
        toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
863
 
        gtk_widget_show (toolitem1);
864
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
865
 
 
866
 
 
867
 
        // link wizard button
868
 
        GdkPixbuf* pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&page_link);
869
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
870
 
        gtk_widget_show (button3);
871
 
 
872
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Link wizard"));
873
 
        gtk_widget_show (toolitem1);
874
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
875
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Link wizard"), NULL);
876
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_link_wizard_activate), NULL);
877
 
 
878
 
        // insert image button
879
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_picture);
880
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
881
 
        gtk_widget_show (button3);
882
 
 
883
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Insert Picture"));
884
 
        gtk_widget_show (toolitem1);
885
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
886
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Insert Picture"), NULL);
887
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_insert_picture_activate), NULL);
888
 
 
889
 
        // insert image button
890
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_attachment);
891
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
892
 
        gtk_widget_show (button3);
893
 
 
894
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
895
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Node Attachments"));
896
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
897
 
 
898
 
        gtk_widget_show (toolitem1);
899
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
900
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Node Attachments"), NULL);
901
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_node_attachments_activate), NULL);
902
 
 
903
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_attachments");
904
 
        m_pToolbarAttachment = toolitem1;
905
 
 
906
 
        // insert bold button
907
 
        //button3 = gtk_image_new_from_stock (GTK_STOCK_BOLD, tmp_toolbar_icon_size);
908
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bold);
909
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
910
 
        gtk_widget_show (button3);
911
 
 
912
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
913
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Bold"));
914
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
915
 
 
916
 
        gtk_widget_show (toolitem1);
917
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
918
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Bold"), NULL);
919
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_bold_activate), NULL);
920
 
 
921
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_bold");
922
 
        m_pToolbarBold = toolitem1;
923
 
 
924
 
        // insert italic button
925
 
        //button3 = gtk_image_new_from_stock (GTK_STOCK_ITALIC, tmp_toolbar_icon_size);
926
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_italic);
927
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
928
 
        gtk_widget_show (button3);
929
 
 
930
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new  ();
931
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Italic"));
932
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
933
 
 
934
 
        gtk_widget_show (toolitem1);
935
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
936
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Italic"), NULL);
937
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_italic_activate), NULL);
938
 
 
939
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_italic");
940
 
        m_pToolbarItalic = toolitem1;
941
 
 
942
 
        // insert underline button
943
 
        //button3 = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, tmp_toolbar_icon_size);
944
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_underline);
945
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
946
 
        gtk_widget_show (button3);
947
 
 
948
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new  ();
949
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Underline"));
950
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
951
 
 
952
 
        gtk_widget_show (toolitem1);
953
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
954
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Underline"), NULL);
955
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_underline_activate), NULL);
956
 
 
957
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_underline");
958
 
        m_pToolbarUnderline = toolitem1;
959
 
 
960
 
        // insert strikethrough button
961
 
        //button3 = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, tmp_toolbar_icon_size);
962
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_strikethrough);
963
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
964
 
        gtk_widget_show (button3);
965
 
 
966
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new  ();
967
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Strikethrough"));
968
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
969
 
 
970
 
        gtk_widget_show (toolitem1);
971
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
972
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Strikethrough"), NULL);
973
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_strikethrough_activate), NULL);
974
 
 
975
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_strikethrough");
976
 
        m_pToolbarStrike = toolitem1;
977
 
 
978
 
        // insert color button
979
 
        //button3 = gtk_image_new_from_stock (GTK_STOCK_SELECT_COLOR, tmp_toolbar_icon_size);
980
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_color_xpm);
981
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
982
 
        gtk_widget_show (button3);
983
 
 
984
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
985
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Text Color"));
986
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
987
 
 
988
 
        gtk_widget_show (toolitem1);
989
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
990
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Text Color"), NULL);
991
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_color_activate), NULL);
992
 
 
993
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_color");
994
 
        m_pToolbarColor = toolitem1;
995
 
 
996
 
        // insert bkg color button
997
 
        //button3 = gtk_image_new_from_stock (GTK_STOCK_SELECT_COLOR, tmp_toolbar_icon_size);
998
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bg_color_xpm);
999
 
        button3 = gtk_image_new_from_pixbuf (pixbuf);
1000
 
        gtk_widget_show (button3);
1001
 
 
1002
 
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
1003
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Text Background Color"));
1004
 
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
1005
 
 
1006
 
        gtk_widget_show (toolitem1);
1007
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
1008
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Text Background Color"), NULL);
1009
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_background_color_activate), NULL);
1010
 
 
1011
 
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_bkg_color");
1012
 
        m_pToolbarBkgColor = toolitem1;
1013
 
 
1014
 
        //insert help button
1015
 
        button3 = gtk_image_new_from_stock (GTK_STOCK_HELP, tmp_toolbar_icon_size);
1016
 
        gtk_widget_show (button3);
1017
 
 
1018
 
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Help"));
1019
 
        gtk_widget_show (toolitem1);
1020
 
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
1021
 
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Help"), NULL);
1022
 
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_help1_activate), NULL);
1023
 
 
1024
 
        return toolbar1;
1025
 
}
1026
 
 
1027
 
gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event)
1028
 
{
1029
 
        if(event->changed_mask & GDK_WINDOW_STATE_ICONIFIED)
1030
 
        {
1031
 
                if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
1032
 
                {
1033
 
                        //on window minimized, show tray icon
1034
 
                        if(g_bMinimizeToTray)
1035
 
                        {
1036
 
                                g_tray.Show();
1037
 
                                g_tray.SetTooltip("NoteCase"); //important: call this after Show
1038
 
                                gtk_widget_hide(window1);
1039
 
                        }
1040
 
                }
1041
 
        }
1042
 
        return FALSE;
1043
 
}
1044
 
 
1045
 
const char *PasswordCallback(const char *szFile, bool bSave)
1046
 
{
1047
 
        static char szPass[1024] = "";
1048
 
        szPass[0] = '\0';
1049
 
 
1050
 
        bool bCursor = g_bBusyCursor;
1051
 
        if(bCursor)
1052
 
                HideBusyCursor();       //restore the normal cursor for the moment
1053
 
 
1054
 
        //ask user for password
1055
 
        PasswordDialog dlg(bSave ? MODE_PASS_NEW : MODE_PASS_VERIFY);
1056
 
 
1057
 
        //set label
1058
 
        std::string strLabel = _("Please enter the password for file: ");
1059
 
        strLabel += GetBaseName(szFile);
1060
 
        dlg.SetLabel(strLabel.c_str());
1061
 
 
1062
 
        gtk_grab_add( dlg.GetDialog() );        //block all other widgets in the app
1063
 
 
1064
 
        if(GTK_RESPONSE_OK == dlg.ShowModal())
1065
 
        {
1066
 
                //get result
1067
 
                const char *szText = dlg.GetPassword();
1068
 
                if(szText)
1069
 
                        strcpy(szPass, szText);
1070
 
        }
1071
 
 
1072
 
        gtk_grab_remove(dlg.GetDialog());       //unblock
1073
 
        dlg.Destroy();
1074
 
 
1075
 
        if(bCursor)
1076
 
                ShowBusyCursor(); //keep showing busy
1077
 
 
1078
 
        //return password
1079
 
        if(strlen(szPass)<1)
1080
 
                return NULL;
1081
 
        return szPass;
1082
 
}
1083
 
 
1084
 
void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group)
1085
 
{
1086
 
        GtkWidget *menuitem1;
1087
 
        GtkWidget *menu1;
1088
 
        GtkWidget *new1;
1089
 
        GtkWidget *new_notecase1;
1090
 
        GtkWidget *open1;
1091
 
        GtkWidget *close1;
1092
 
        GtkWidget *save1;
1093
 
        GtkWidget *save_as1;
1094
 
        GtkWidget *reload1;
1095
 
        GtkWidget *lock1;
1096
 
        GtkWidget *change_pass1;
1097
 
        GtkWidget *read_only1;
1098
 
        GtkWidget *separatormenuitem1;
1099
 
        GtkWidget *quit1;
1100
 
        GtkWidget *menuitem2;
1101
 
        GtkWidget *menu2;
1102
 
        GtkWidget *cut1;
1103
 
        GtkWidget *copy1;
1104
 
        GtkWidget *paste1;
1105
 
        GtkWidget *delete1;
1106
 
        GtkWidget *find1;
1107
 
        GtkWidget *find2;
1108
 
        GtkWidget *replace1;
1109
 
        GtkWidget *link1;
1110
 
        GtkWidget *title1;
1111
 
        GtkWidget *statbar1;
1112
 
        GtkWidget *menutool1;
1113
 
        GtkWidget *menufull1;
1114
 
        GtkWidget *wrap1;
1115
 
        GtkWidget *options1;
1116
 
        GtkWidget *shortcuts1;
1117
 
        GtkWidget *undo1;
1118
 
        GtkWidget *redo1;
1119
 
        GtkWidget *menuitem3;
1120
 
        GtkWidget *menu3;
1121
 
        GtkWidget *menuitem4;
1122
 
        GtkWidget *menu4;
1123
 
        GtkWidget *about1;
1124
 
        GtkWidget *help1;
1125
 
        GtkWidget *website1;
1126
 
        GtkWidget *icon;
1127
 
        GtkWidget *menu_item;
1128
 
        GtkWidget *textonly1;
1129
 
        GtkWidget *menu5;
1130
 
        GtkWidget *menuitem5;
1131
 
        GtkWidget *move_item;
1132
 
        GtkWidget *submenu;
1133
 
        GtkWidget *wordcount1;
1134
 
        GtkWidget *sort_item;
1135
 
        GtkWidget *bold1;
1136
 
        GtkWidget *italic1;
1137
 
        GtkWidget *underline1;
1138
 
        GtkWidget *strikethrough1;
1139
 
        GtkWidget *color1;
1140
 
        GtkWidget *bkgcolor1;
1141
 
        GtkWidget *picture1;
1142
 
        GtkWidget *remove_format1;
1143
 
        GtkWidget *attachments1;
1144
 
        GtkTooltips *menutips;
1145
 
        GtkWidget *ontop1;
1146
 
 
1147
 
        menutips = gtk_tooltips_new();
1148
 
        gtk_tooltips_enable(menutips);
1149
 
 
1150
 
#ifdef _NOKIA_MAEMO
1151
 
        GtkWidget *maemomenu = gtk_menu_new ();
1152
 
#endif
1153
 
 
1154
 
        menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File"));
1155
 
        gtk_widget_show (menuitem1);
1156
 
#ifdef _NOKIA_MAEMO
1157
 
        gtk_menu_append(GTK_MENU(maemomenu), menuitem1);
1158
 
#else
1159
 
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem1);
1160
 
#endif
1161
 
 
1162
 
        menu1 = gtk_menu_new ();
1163
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menu1);
1164
 
 
1165
 
        new_notecase1 = gtk_image_menu_item_new_with_mnemonic (_("New _Window"));
1166
 
        gtk_widget_show (new_notecase1);
1167
 
        gtk_container_add (GTK_CONTAINER (menu1), new_notecase1);
1168
 
                GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&notecase_xpm);
1169
 
        GdkPixbuf *destpix = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_BILINEAR);
1170
 
        g_object_unref (G_OBJECT (pixbuf));
1171
 
        icon = gtk_image_new_from_pixbuf (destpix);
1172
 
        gtk_widget_show (icon);
1173
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new_notecase1), icon);
1174
 
        int nPos = g_shortcuts.FindByAction(NC_ACTION_APP_NEW);
1175
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1176
 
                gtk_widget_add_accelerator (new_notecase1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1177
 
 
1178
 
        new1 = gtk_image_menu_item_new_with_mnemonic (_("_New"));
1179
 
        gtk_widget_show (new1);
1180
 
        gtk_container_add (GTK_CONTAINER (menu1), new1);
1181
 
        icon = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
1182
 
        gtk_widget_show (icon);
1183
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new1), icon);
1184
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_NEW);
1185
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1186
 
                gtk_widget_add_accelerator (new1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1187
 
 
1188
 
        open1 = gtk_image_menu_item_new_with_mnemonic (_("_Open"));
1189
 
        gtk_widget_show (open1);
1190
 
        gtk_container_add (GTK_CONTAINER (menu1), open1);
1191
 
        icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
1192
 
        gtk_widget_show (icon);
1193
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open1), icon);
1194
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_OPEN);
1195
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1196
 
                gtk_widget_add_accelerator (open1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1197
 
 
1198
 
        close1 = gtk_image_menu_item_new_with_mnemonic (_("_Close"));
1199
 
        gtk_widget_show (close1);
1200
 
        gtk_container_add (GTK_CONTAINER (menu1), close1);
1201
 
        icon = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
1202
 
        gtk_widget_show (icon);
1203
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close1), icon);
1204
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_CLOSE);
1205
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1206
 
                gtk_widget_add_accelerator (close1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1207
 
 
1208
 
        save1 = gtk_image_menu_item_new_with_mnemonic (_("_Save"));
1209
 
        gtk_widget_show (save1);
1210
 
        gtk_container_add (GTK_CONTAINER (menu1), save1);
1211
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
1212
 
        gtk_widget_show (icon);
1213
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save1), icon);
1214
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_SAVE);
1215
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1216
 
                gtk_widget_add_accelerator (save1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1217
 
 
1218
 
        save_as1 = gtk_image_menu_item_new_with_mnemonic (_("Save _As"));
1219
 
        gtk_widget_show (save_as1);
1220
 
        gtk_container_add (GTK_CONTAINER (menu1), save_as1);
1221
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_MENU);
1222
 
        gtk_widget_show (icon);
1223
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save_as1), icon);
1224
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_SAVE_AS);
1225
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1226
 
                gtk_widget_add_accelerator (save_as1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1227
 
 
1228
 
        reload1 = gtk_image_menu_item_new_with_mnemonic (_("Re_load"));
1229
 
        gtk_widget_show (reload1);
1230
 
        gtk_container_add (GTK_CONTAINER (menu1), reload1);
1231
 
        icon = gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_MENU);
1232
 
        gtk_widget_show (icon);
1233
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (reload1), icon);
1234
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_RELOAD);
1235
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1236
 
                gtk_widget_add_accelerator (reload1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1237
 
 
1238
 
        read_only1 = gtk_check_menu_item_new_with_mnemonic (_("Read-Only"));
1239
 
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(read_only1), TRUE);     //show check mark always
1240
 
        gtk_widget_show (read_only1);
1241
 
        gtk_container_add (GTK_CONTAINER (menu1), read_only1);
1242
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_READ_ONLY);
1243
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1244
 
        gtk_widget_add_accelerator (read_only1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1245
 
        gtk_tooltips_set_tip(menutips, read_only1, _("Document property that forbids document editing."), NULL);
1246
 
 
1247
 
        lock1 = gtk_image_menu_item_new_with_mnemonic (_("_Lock Document"));
1248
 
        gtk_widget_show (lock1);
1249
 
        gtk_container_add (GTK_CONTAINER (menu1), lock1);
1250
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&lock_xpm);
1251
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1252
 
        gtk_widget_show (icon);
1253
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (lock1), icon);
1254
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_LOCK_DOCUMENT);
1255
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1256
 
                gtk_widget_add_accelerator (lock1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1257
 
        gtk_widget_set_sensitive (lock1, FALSE);
1258
 
        gtk_tooltips_set_tip(menutips, lock1, _("Unload encrypted document from memory."), NULL);
1259
 
 
1260
 
        change_pass1 = gtk_image_menu_item_new_with_mnemonic (_("_Change Password"));
1261
 
        gtk_widget_show (change_pass1);
1262
 
        gtk_container_add (GTK_CONTAINER (menu1), change_pass1);
1263
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&key);
1264
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1265
 
        gtk_widget_show (icon);
1266
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (change_pass1), icon);
1267
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_PASSWORD_CHANGE);
1268
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1269
 
                gtk_widget_add_accelerator (change_pass1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1270
 
        gtk_widget_set_sensitive (change_pass1, FALSE);
1271
 
 
1272
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1273
 
        gtk_widget_show (separatormenuitem1);
1274
 
        gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
1275
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1276
 
 
1277
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Import"));
1278
 
        gtk_widget_show (menu_item);  // Show the widget
1279
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_import), NULL);
1280
 
        gtk_menu_append(menu1, menu_item);
1281
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_IMPORT);
1282
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1283
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1284
 
 
1285
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Export"));
1286
 
        gtk_widget_show (menu_item);  // Show the widget
1287
 
        g_signal_connect(GTK_OBJECT(menu_item), "activate", G_CALLBACK (on_menu_export), NULL);
1288
 
        gtk_menu_append(menu1, menu_item);
1289
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_EXPORT);
1290
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1291
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1292
 
 
1293
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1294
 
        gtk_widget_show (separatormenuitem1);
1295
 
        gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
1296
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1297
 
 
1298
 
        //
1299
 
        //  MRU (most recently used) list
1300
 
        //
1301
 
 
1302
 
        //create MRU item
1303
 
        g_menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Recent"));
1304
 
        gtk_widget_show (g_menuitem5);
1305
 
        gtk_container_add (GTK_CONTAINER (menu1), g_menuitem5);
1306
 
 
1307
 
        g_objMRU.Load();
1308
 
        g_objMRU.RebuildMenu();
1309
 
 
1310
 
        //add separator
1311
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1312
 
        gtk_widget_show (separatormenuitem1);
1313
 
        gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
1314
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1315
 
 
1316
 
        //continue creating menus
1317
 
        quit1 = gtk_image_menu_item_new_with_mnemonic (_("_Quit"));
1318
 
        gtk_widget_show (quit1);
1319
 
        gtk_container_add (GTK_CONTAINER (menu1), quit1);
1320
 
        icon = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);
1321
 
        gtk_widget_show (icon);
1322
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit1), icon);
1323
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_APP_QUIT);
1324
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1325
 
                gtk_widget_add_accelerator (quit1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1326
 
 
1327
 
        //
1328
 
        // edit menu
1329
 
        //
1330
 
 
1331
 
        menuitem2 = gtk_menu_item_new_with_mnemonic (_("_Edit"));
1332
 
        gtk_widget_show (menuitem2);
1333
 
#ifdef _NOKIA_MAEMO
1334
 
        gtk_menu_append(GTK_MENU(maemomenu), menuitem2);
1335
 
#else
1336
 
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);
1337
 
#endif
1338
 
 
1339
 
        menu2 = gtk_menu_new ();
1340
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);
1341
 
 
1342
 
        undo1 = gtk_image_menu_item_new_with_mnemonic (_("_Undo"));
1343
 
        gtk_widget_show (undo1);
1344
 
        gtk_widget_set_sensitive(undo1, FALSE);
1345
 
        gtk_container_add (GTK_CONTAINER (menu2), undo1);
1346
 
        icon = gtk_image_new_from_stock (GTK_STOCK_UNDO, GTK_ICON_SIZE_MENU);
1347
 
        gtk_widget_show (icon);
1348
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (undo1), icon);
1349
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_UNDO);
1350
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1351
 
                gtk_widget_add_accelerator (undo1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1352
 
 
1353
 
        redo1 = gtk_image_menu_item_new_with_mnemonic (_("_Redo"));
1354
 
        gtk_widget_show (redo1);
1355
 
        gtk_widget_set_sensitive(redo1, FALSE);
1356
 
        gtk_container_add (GTK_CONTAINER (menu2), redo1);
1357
 
        icon = gtk_image_new_from_stock (GTK_STOCK_REDO, GTK_ICON_SIZE_MENU);
1358
 
        gtk_widget_show (icon);
1359
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (redo1), icon);
1360
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_REDO);
1361
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1362
 
                gtk_widget_add_accelerator (redo1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1363
 
 
1364
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1365
 
        gtk_widget_show (separatormenuitem1);
1366
 
        gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
1367
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1368
 
 
1369
 
        cut1 = gtk_image_menu_item_new_with_mnemonic (_("Cu_t"));
1370
 
        gtk_widget_show (cut1);
1371
 
        gtk_container_add (GTK_CONTAINER (menu2), cut1);
1372
 
        icon = gtk_image_new_from_stock (GTK_STOCK_CUT, GTK_ICON_SIZE_MENU);
1373
 
        gtk_widget_show (icon);
1374
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (cut1), icon);
1375
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_CUT);
1376
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1377
 
                gtk_widget_add_accelerator (cut1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1378
 
 
1379
 
        copy1 = gtk_image_menu_item_new_with_mnemonic (_("_Copy"));
1380
 
        gtk_widget_show (copy1);
1381
 
        gtk_container_add (GTK_CONTAINER (menu2), copy1);
1382
 
        icon = gtk_image_new_from_stock (GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
1383
 
        gtk_widget_show (icon);
1384
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (copy1), icon);
1385
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_COPY);
1386
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1387
 
                gtk_widget_add_accelerator (copy1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1388
 
 
1389
 
        paste1 = gtk_image_menu_item_new_with_mnemonic (_("_Paste"));
1390
 
        gtk_widget_show (paste1);
1391
 
        gtk_container_add (GTK_CONTAINER (menu2), paste1);
1392
 
        icon = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
1393
 
        gtk_widget_show (icon);
1394
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (paste1), icon);
1395
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_PASTE);
1396
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1397
 
                gtk_widget_add_accelerator (paste1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1398
 
 
1399
 
        delete1 = gtk_image_menu_item_new_with_mnemonic (_("_Delete"));
1400
 
        gtk_widget_show (delete1);
1401
 
        gtk_container_add (GTK_CONTAINER (menu2), delete1);
1402
 
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
1403
 
        gtk_widget_show (icon);
1404
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (delete1), icon);
1405
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_DELETE);
1406
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1407
 
                gtk_widget_add_accelerator (delete1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1408
 
 
1409
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Copy Branch _Structure"));
1410
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_copy_branch_structure), NULL);
1411
 
        gtk_menu_append(menu2, menu_item);
1412
 
        gtk_widget_show (menu_item);  // Show the widget
1413
 
        icon = gtk_image_new_from_stock (GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
1414
 
        gtk_widget_show (icon);
1415
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1416
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_COPY_BR_STRUCT);
1417
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1418
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1419
 
 
1420
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Paste Branch To Root"));
1421
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_paste_branch_root), NULL);
1422
 
        gtk_menu_append(menu2, menu_item);
1423
 
        gtk_widget_show (menu_item);  // Show the widget
1424
 
        icon = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
1425
 
        gtk_widget_show (icon);
1426
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1427
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_PASTE_BR_ROOT);
1428
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1429
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1430
 
 
1431
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Insert Date/Time"));
1432
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_date_time), NULL);
1433
 
        gtk_menu_append(menu2, menu_item);
1434
 
        gtk_widget_show (menu_item);  // Show the widget
1435
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_datetime);
1436
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1437
 
        gtk_widget_show (icon);
1438
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1439
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_INSERT_DATETIME);
1440
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1441
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1442
 
 
1443
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1444
 
        gtk_widget_show (separatormenuitem1);
1445
 
        gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
1446
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1447
 
 
1448
 
        find1 = gtk_image_menu_item_new_with_mnemonic (_("_Find"));
1449
 
        gtk_widget_show (find1);
1450
 
        gtk_container_add (GTK_CONTAINER (menu2), find1);
1451
 
        icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
1452
 
        gtk_widget_show (icon);
1453
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find1), icon);
1454
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_FIND);
1455
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1456
 
                gtk_widget_add_accelerator (find1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1457
 
 
1458
 
        find2 = gtk_image_menu_item_new_with_mnemonic (_("Find _Next"));
1459
 
        gtk_widget_show (find2);
1460
 
        gtk_container_add (GTK_CONTAINER (menu2), find2);
1461
 
        icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
1462
 
        gtk_widget_show (icon);
1463
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find2), icon);
1464
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_FIND_NEXT);
1465
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1466
 
                gtk_widget_add_accelerator (find2, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1467
 
 
1468
 
        replace1 = gtk_image_menu_item_new_with_mnemonic (_("R_eplace"));
1469
 
        gtk_widget_show (replace1);
1470
 
        gtk_container_add (GTK_CONTAINER (menu2), replace1);
1471
 
        icon = gtk_image_new_from_stock (GTK_STOCK_FIND_AND_REPLACE, GTK_ICON_SIZE_MENU);
1472
 
        gtk_widget_show (icon);
1473
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), icon);
1474
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_REPLACE);
1475
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1476
 
                gtk_widget_add_accelerator (replace1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1477
 
 
1478
 
        link1 = gtk_image_menu_item_new_with_mnemonic (_("Link _Wizard"));
1479
 
        gtk_widget_show (link1);
1480
 
        gtk_container_add (GTK_CONTAINER (menu2), link1);
1481
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&page_link);
1482
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1483
 
        gtk_widget_show (icon);
1484
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (link1), icon);
1485
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_LINK_WIZARD);
1486
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1487
 
                gtk_widget_add_accelerator (link1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1488
 
 
1489
 
        picture1 = gtk_image_menu_item_new_with_mnemonic (_("_Insert Picture"));
1490
 
        gtk_widget_show (picture1);
1491
 
        gtk_container_add (GTK_CONTAINER (menu2), picture1);
1492
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_picture);
1493
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1494
 
        gtk_widget_show (icon);
1495
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (picture1), icon);
1496
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_INSERT_PICTURE);
1497
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1498
 
                gtk_widget_add_accelerator (picture1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1499
 
 
1500
 
        attachments1 = gtk_image_menu_item_new_with_mnemonic (_("Node _Attachments"));
1501
 
        gtk_widget_show (attachments1);
1502
 
        gtk_container_add (GTK_CONTAINER (menu2), attachments1);
1503
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_attachment);
1504
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1505
 
        gtk_widget_show (icon);
1506
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (attachments1), icon);
1507
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_ATTACHMENTS);
1508
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1509
 
                gtk_widget_add_accelerator (attachments1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1510
 
 
1511
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1512
 
        gtk_widget_show (separatormenuitem1);
1513
 
        gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
1514
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1515
 
 
1516
 
        shortcuts1 = gtk_image_menu_item_new_with_mnemonic (_("Configure Shortcuts"));
1517
 
        gtk_widget_show (shortcuts1);
1518
 
        gtk_container_add (GTK_CONTAINER (menu2), shortcuts1);
1519
 
        icon = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
1520
 
        gtk_widget_show (icon);
1521
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (shortcuts1), icon);
1522
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_SHORTCUTS);
1523
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1524
 
                gtk_widget_add_accelerator (shortcuts1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1525
 
 
1526
 
        options1 = gtk_image_menu_item_new_with_mnemonic (_("Configure NoteCase"));
1527
 
        gtk_widget_show (options1);
1528
 
        gtk_container_add (GTK_CONTAINER (menu2), options1);
1529
 
        icon = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
1530
 
        gtk_widget_show (icon);
1531
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (options1), icon);
1532
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_OPTIONS);
1533
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1534
 
                gtk_widget_add_accelerator (options1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1535
 
 
1536
 
        //
1537
 
        // View menu
1538
 
        //
1539
 
        menuitem3 = gtk_menu_item_new_with_mnemonic (_("_View"));
1540
 
        gtk_widget_show (menuitem3);
1541
 
#ifdef _NOKIA_MAEMO
1542
 
        gtk_menu_append(GTK_MENU(maemomenu), menuitem3);
1543
 
#else
1544
 
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem3);
1545
 
#endif
1546
 
 
1547
 
        menu3 = gtk_menu_new ();
1548
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menu3);
1549
 
 
1550
 
        menufull1 = gtk_check_menu_item_new_with_mnemonic (_("_Full Screen"));
1551
 
        gtk_widget_show (menufull1);
1552
 
        gtk_container_add (GTK_CONTAINER (menu3), menufull1);
1553
 
 
1554
 
#ifdef _NOKIA_MAEMO
1555
 
        gtk_widget_add_accelerator (menufull1, "activate", accel_group, HILDON_HARDKEY_FULLSCREEN, (GdkModifierType)0, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1556
 
#endif
1557
 
#ifndef _NOKIA_MAEMO
1558
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_FULLSCREEN);
1559
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1560
 
                gtk_widget_add_accelerator (menufull1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1561
 
#endif
1562
 
 
1563
 
        ontop1 = gtk_check_menu_item_new_with_mnemonic (_("_Always on top"));
1564
 
        gtk_widget_show (ontop1);
1565
 
        gtk_container_add (GTK_CONTAINER (menu3), ontop1);
1566
 
        //TOFIX nPos = g_shortcuts.FindByAction(NC_ACTION_KEEP_ON_TOP);
1567
 
        //if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1568
 
        //      gtk_widget_add_accelerator (ontop1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1569
 
 
1570
 
        menutool1 = gtk_check_menu_item_new_with_mnemonic (_("_Tool Bar"));
1571
 
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(menutool1), TRUE);      //show check mark always
1572
 
        gtk_widget_show (menutool1);
1573
 
        gtk_container_add (GTK_CONTAINER (menu3), menutool1);
1574
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_TOOLBAR);
1575
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1576
 
                gtk_widget_add_accelerator (menutool1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1577
 
 
1578
 
        title1 = gtk_check_menu_item_new_with_mnemonic (_("_Node Title Bar"));
1579
 
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(title1), TRUE); //show check mark always
1580
 
        gtk_widget_show (title1);
1581
 
        gtk_container_add (GTK_CONTAINER (menu3), title1);
1582
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_NODE_TITLEBAR);
1583
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1584
 
                gtk_widget_add_accelerator (title1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1585
 
 
1586
 
        statbar1 = gtk_check_menu_item_new_with_mnemonic (_("_Status Bar"));
1587
 
        gtk_widget_show (statbar1);
1588
 
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(statbar1), TRUE);       //show check mark always
1589
 
        gtk_container_add (GTK_CONTAINER (menu3), statbar1);
1590
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_STATUS_BAR);
1591
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1592
 
                gtk_widget_add_accelerator (statbar1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1593
 
 
1594
 
        wrap1 = gtk_check_menu_item_new_with_mnemonic (_("_Wrap"));
1595
 
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(wrap1), TRUE);  //show check mark always
1596
 
        gtk_widget_show (wrap1);
1597
 
        gtk_container_add (GTK_CONTAINER (menu3), wrap1);
1598
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_WRAP);
1599
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1600
 
                gtk_widget_add_accelerator (wrap1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1601
 
 
1602
 
        textonly1 = gtk_menu_item_new_with_mnemonic (_("Change View _Mode"));
1603
 
        gtk_widget_show (textonly1);
1604
 
        gtk_container_add (GTK_CONTAINER (menu3), textonly1);
1605
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_CHANGE_MODE);
1606
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1607
 
                gtk_widget_add_accelerator (textonly1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1608
 
 
1609
 
        wordcount1 = gtk_menu_item_new_with_mnemonic (_("_Calculate Word Count"));
1610
 
        gtk_widget_show (wordcount1);
1611
 
        gtk_container_add (GTK_CONTAINER (menu3), wordcount1);
1612
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_WORD_COUNT);
1613
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1614
 
                gtk_widget_add_accelerator (wordcount1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1615
 
 
1616
 
        //
1617
 
        // tree menu (start)
1618
 
        //
1619
 
 
1620
 
        menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Tree"));
1621
 
        gtk_widget_show (menuitem5);
1622
 
#ifdef _NOKIA_MAEMO
1623
 
        gtk_menu_append(GTK_MENU(maemomenu), menuitem5);
1624
 
#else
1625
 
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem5);
1626
 
#endif
1627
 
 
1628
 
        menu5 = gtk_menu_new ();
1629
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem5), menu5);
1630
 
 
1631
 
        // ... add menu items with accelerators ...
1632
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Insert Node"));
1633
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_node), NULL);
1634
 
        gtk_menu_append(menu5, menu_item);
1635
 
        gtk_widget_show (menu_item);  // Show the widget
1636
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW);
1637
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1638
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1639
 
 
1640
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("Insert Child _Node"));
1641
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_child_node), NULL);
1642
 
        gtk_menu_append(menu5, menu_item);
1643
 
        gtk_widget_show (menu_item);  // Show the widget
1644
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW_CHILD);
1645
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1646
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1647
 
 
1648
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Delete Node"));
1649
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_delete_node), NULL);
1650
 
        gtk_menu_append(menu5, menu_item);
1651
 
        gtk_widget_show (menu_item);  // Show the widget
1652
 
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
1653
 
        gtk_widget_show (icon);
1654
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1655
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE);
1656
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1657
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1658
 
 
1659
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Rename Node"));
1660
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_rename_node), NULL);
1661
 
        gtk_menu_append(menu5, menu_item);
1662
 
        gtk_widget_show (menu_item);  // Show the widget
1663
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_RENAME);
1664
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1665
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1666
 
 
1667
 
        move_item = gtk_menu_item_new_with_mnemonic(_("_Move Node"));
1668
 
        gtk_menu_append(menu5, move_item);
1669
 
        gtk_widget_show (move_item);  // Show the widget
1670
 
 
1671
 
        sort_item = gtk_menu_item_new_with_mnemonic(_("_Sort"));
1672
 
        gtk_menu_append(menu5, sort_item);
1673
 
        gtk_widget_show (sort_item);  // Show the widget
1674
 
 
1675
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Expand All"));
1676
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_expand_all), NULL);
1677
 
        gtk_menu_append(menu5, menu_item);
1678
 
        gtk_widget_show (menu_item);  // Show the widget
1679
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_EXPAND_ALL);
1680
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1681
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1682
 
 
1683
 
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Collapse All"));
1684
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_collapse_all), NULL);
1685
 
        gtk_menu_append(menu5, menu_item);
1686
 
        gtk_widget_show (menu_item);  // Show the widget
1687
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_COLAPSE_ALL);
1688
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1689
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1690
 
 
1691
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Node _Properties"));
1692
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_node_properties), NULL);
1693
 
        gtk_menu_append(menu5, menu_item);
1694
 
        gtk_widget_show (menu_item);  // Show the widget
1695
 
        icon = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
1696
 
        gtk_widget_show (icon);
1697
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1698
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_PROPERTIES);
1699
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1700
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1701
 
 
1702
 
        //"move node" submenu
1703
 
        submenu = gtk_menu_new ();
1704
 
 
1705
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Up"));
1706
 
        gtk_menu_append(submenu, menu_item);
1707
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_up), NULL);
1708
 
        gtk_widget_show (menu_item);  // Show the widget
1709
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU);
1710
 
        gtk_widget_show (icon);
1711
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1712
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_UP);
1713
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1714
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1715
 
 
1716
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Down"));
1717
 
        gtk_menu_append(submenu, menu_item);
1718
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_down), NULL);
1719
 
        gtk_widget_show (menu_item);  // Show the widget
1720
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU);
1721
 
        gtk_widget_show (icon);
1722
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1723
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_DOWN);
1724
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1725
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1726
 
 
1727
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Left"));
1728
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_left), NULL);
1729
 
        gtk_menu_append(submenu, menu_item);
1730
 
        gtk_widget_show (menu_item);  // Show the widget
1731
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU);
1732
 
        gtk_widget_show (icon);
1733
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1734
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_LEFT);
1735
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1736
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1737
 
 
1738
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Right"));
1739
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_right), NULL);
1740
 
        gtk_menu_append(submenu, menu_item);
1741
 
        gtk_widget_show (menu_item);  // Show the widget
1742
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);
1743
 
        gtk_widget_show (icon);
1744
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1745
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_RIGHT);
1746
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1747
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1748
 
 
1749
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (move_item), submenu);
1750
 
 
1751
 
        //"sort node" submenu
1752
 
        submenu = gtk_menu_new ();
1753
 
 
1754
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Sort Children Ascending"));
1755
 
        gtk_menu_append(submenu, menu_item);
1756
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_ascending), NULL);
1757
 
        gtk_widget_show (menu_item);  // Show the widget
1758
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
1759
 
        gtk_widget_show (icon);
1760
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1761
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_ASC);
1762
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1763
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1764
 
 
1765
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Sort _Children Descending"));
1766
 
        gtk_menu_append(submenu, menu_item);
1767
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_descending), NULL);
1768
 
        gtk_widget_show (menu_item);  // Show the widget
1769
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
1770
 
        gtk_widget_show (icon);
1771
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1772
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_DESC);
1773
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1774
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1775
 
 
1776
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Sort Root Ascending"));
1777
 
        gtk_menu_append(submenu, menu_item);
1778
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_ascending), NULL);
1779
 
        gtk_widget_show (menu_item);  // Show the widget
1780
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
1781
 
        gtk_widget_show (icon);
1782
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1783
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_ASC);
1784
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1785
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1786
 
 
1787
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Sort Root Descending"));
1788
 
        gtk_menu_append(submenu, menu_item);
1789
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_descending), NULL);
1790
 
        gtk_widget_show (menu_item);  // Show the widget
1791
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
1792
 
        gtk_widget_show (icon);
1793
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1794
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_DESC);
1795
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1796
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1797
 
 
1798
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (sort_item), submenu);
1799
 
 
1800
 
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Delete all _Completed nodes"));
1801
 
        gtk_menu_append(menu5, menu_item);
1802
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_delete_finished_nodes), NULL);
1803
 
        gtk_widget_show (menu_item);  // Show the widget
1804
 
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
1805
 
        gtk_widget_show (icon);
1806
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
1807
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE_FINISHED);
1808
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1809
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1810
 
 
1811
 
        //
1812
 
        // Format menu
1813
 
        //
1814
 
 
1815
 
        menuitem2 = gtk_menu_item_new_with_mnemonic (_("F_ormat"));
1816
 
        gtk_widget_show (menuitem2);
1817
 
#ifdef _NOKIA_MAEMO
1818
 
        gtk_menu_append(GTK_MENU(maemomenu), menuitem2);
1819
 
#else
1820
 
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);
1821
 
#endif
1822
 
 
1823
 
        menu2 = gtk_menu_new ();
1824
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);
1825
 
 
1826
 
        bold1 = gtk_image_menu_item_new_with_mnemonic (_("_Bold"));
1827
 
        gtk_widget_show (bold1);
1828
 
        gtk_container_add (GTK_CONTAINER (menu2), bold1);
1829
 
        //icon = gtk_image_new_from_stock (GTK_STOCK_BOLD, GTK_ICON_SIZE_MENU);
1830
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bold);
1831
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1832
 
        gtk_widget_show (icon);
1833
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (bold1), icon);
1834
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_BOLD);
1835
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1836
 
                gtk_widget_add_accelerator (bold1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1837
 
 
1838
 
        italic1 = gtk_image_menu_item_new_with_mnemonic (_("_Italic"));
1839
 
        gtk_widget_show (italic1);
1840
 
        gtk_container_add (GTK_CONTAINER (menu2), italic1);
1841
 
        //icon = gtk_image_new_from_stock (GTK_STOCK_ITALIC, GTK_ICON_SIZE_MENU);
1842
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_italic);
1843
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1844
 
        gtk_widget_show (icon);
1845
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (italic1), icon);
1846
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_ITALIC);
1847
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1848
 
                gtk_widget_add_accelerator (italic1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1849
 
 
1850
 
        underline1 = gtk_image_menu_item_new_with_mnemonic (_("_Underline"));
1851
 
        gtk_widget_show (underline1);
1852
 
        gtk_container_add (GTK_CONTAINER (menu2), underline1);
1853
 
        //icon = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, GTK_ICON_SIZE_MENU);
1854
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_underline);
1855
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1856
 
        gtk_widget_show (icon);
1857
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (underline1), icon);
1858
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_UNDERLINE);
1859
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1860
 
                gtk_widget_add_accelerator (underline1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1861
 
 
1862
 
        strikethrough1 = gtk_image_menu_item_new_with_mnemonic (_("_Strikethrough"));
1863
 
        gtk_widget_show (strikethrough1);
1864
 
        gtk_container_add (GTK_CONTAINER (menu2), strikethrough1);
1865
 
        //icon = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, GTK_ICON_SIZE_MENU);
1866
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_strikethrough);
1867
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1868
 
        gtk_widget_show (icon);
1869
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (strikethrough1), icon);
1870
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_STRIKETHROUGH);
1871
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1872
 
                gtk_widget_add_accelerator (strikethrough1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1873
 
 
1874
 
        color1 = gtk_image_menu_item_new_with_mnemonic (_("_Text color"));
1875
 
        gtk_widget_show (color1);
1876
 
        gtk_container_add (GTK_CONTAINER (menu2), color1);
1877
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_color_xpm);
1878
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1879
 
        gtk_widget_show (icon);
1880
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (color1), icon);
1881
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_COLOR);
1882
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1883
 
                gtk_widget_add_accelerator (color1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1884
 
 
1885
 
        bkgcolor1 = gtk_image_menu_item_new_with_mnemonic (_("Text Background _Color"));
1886
 
        gtk_widget_show (bkgcolor1);
1887
 
        gtk_container_add (GTK_CONTAINER (menu2), bkgcolor1);
1888
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bg_color_xpm);
1889
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1890
 
        gtk_widget_show (icon);
1891
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (bkgcolor1), icon);
1892
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_BKG_COLOR);
1893
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1894
 
                gtk_widget_add_accelerator (bkgcolor1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1895
 
 
1896
 
        remove_format1 = gtk_image_menu_item_new_with_mnemonic (_("_Remove formatting"));
1897
 
        gtk_widget_show (remove_format1);
1898
 
        gtk_container_add (GTK_CONTAINER (menu2), remove_format1);
1899
 
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_no_format_xpm);
1900
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
1901
 
        gtk_widget_show (icon);
1902
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove_format1), icon);
1903
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_REMOVE);
1904
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1905
 
                gtk_widget_add_accelerator (remove_format1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1906
 
 
1907
 
 
1908
 
        //
1909
 
        // Help menu
1910
 
        //
1911
 
 
1912
 
        menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help"));
1913
 
        gtk_widget_show (menuitem4);
1914
 
#ifdef _NOKIA_MAEMO
1915
 
        gtk_menu_append(GTK_MENU(maemomenu), menuitem4);
1916
 
#else
1917
 
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);
1918
 
#endif
1919
 
 
1920
 
        menu4 = gtk_menu_new ();
1921
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);
1922
 
 
1923
 
        website1 = gtk_image_menu_item_new_with_mnemonic (_("_Visit Website"));
1924
 
        gtk_widget_show (website1);
1925
 
        gtk_container_add (GTK_CONTAINER (menu4), website1);
1926
 
        //icon = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
1927
 
        //gtk_widget_show (icon);
1928
 
        //gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (website1), icon);
1929
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_VISIT_WEBSITE);
1930
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1931
 
                gtk_widget_add_accelerator (website1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1932
 
 
1933
 
        help1 = gtk_image_menu_item_new_with_mnemonic (_("_Show help"));
1934
 
        gtk_widget_show (help1);
1935
 
        gtk_container_add (GTK_CONTAINER (menu4), help1);
1936
 
        icon = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
1937
 
        gtk_widget_show (icon);
1938
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), icon);
1939
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_HELP_INDEX);
1940
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1941
 
                gtk_widget_add_accelerator (help1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1942
 
 
1943
 
        separatormenuitem1 = gtk_separator_menu_item_new ();
1944
 
        gtk_widget_show (separatormenuitem1);
1945
 
        gtk_container_add (GTK_CONTAINER (menu4), separatormenuitem1);
1946
 
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
1947
 
 
1948
 
        about1 = gtk_menu_item_new_with_mnemonic (_("_About"));
1949
 
        gtk_widget_show (about1);
1950
 
        gtk_container_add (GTK_CONTAINER (menu4), about1);
1951
 
        nPos = g_shortcuts.FindByAction(NC_ACTION_HELP_ABOUT);
1952
 
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
1953
 
                gtk_widget_add_accelerator (about1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
1954
 
 
1955
 
        g_signal_connect (GTK_OBJECT (new_notecase1),    "activate", G_CALLBACK(on_new_notecase1_activate),  NULL);
1956
 
        g_signal_connect (GTK_OBJECT (new1),    "activate", G_CALLBACK(on_new1_activate),  NULL);
1957
 
        g_signal_connect (GTK_OBJECT (open1),   "activate", G_CALLBACK(on_open1_activate), NULL);
1958
 
        g_signal_connect (GTK_OBJECT (close1),   "activate", G_CALLBACK(on_close1_activate), NULL);
1959
 
        g_signal_connect (GTK_OBJECT (save1),   "activate", G_CALLBACK(on_save1_activate), NULL);
1960
 
        g_signal_connect (GTK_OBJECT (save_as1),"activate", G_CALLBACK(on_save_as1_activate), NULL);
1961
 
        g_signal_connect (GTK_OBJECT (reload1), "activate", G_CALLBACK(on_reload1_activate), NULL);
1962
 
        g_signal_connect (GTK_OBJECT (ontop1), "activate", G_CALLBACK(on_ontop1_activate), NULL);
1963
 
        g_signal_connect (GTK_OBJECT (read_only1), "activate", G_CALLBACK(on_read_only_activate), NULL);
1964
 
        g_signal_connect (GTK_OBJECT (lock1), "activate", G_CALLBACK(on_lock_document_activate), NULL);
1965
 
        g_signal_connect (GTK_OBJECT (change_pass1), "activate", G_CALLBACK(on_change_pass1_activate), NULL);
1966
 
        g_signal_connect (GTK_OBJECT (quit1),   "activate", G_CALLBACK(on_quit1_activate), NULL);
1967
 
        g_signal_connect (GTK_OBJECT (cut1),    "activate", G_CALLBACK(on_cut1_activate), NULL);
1968
 
        g_signal_connect (GTK_OBJECT (copy1),   "activate", G_CALLBACK(on_copy1_activate), NULL);
1969
 
        g_signal_connect (GTK_OBJECT (paste1),  "activate", G_CALLBACK(on_paste1_activate), NULL);
1970
 
        g_signal_connect (GTK_OBJECT (delete1), "activate", G_CALLBACK(on_delete1_activate), NULL);
1971
 
        g_signal_connect (GTK_OBJECT (about1),  "activate", G_CALLBACK(on_about1_activate), NULL);
1972
 
        g_signal_connect (GTK_OBJECT (help1),   "activate", G_CALLBACK(on_help1_activate), NULL);
1973
 
        g_signal_connect (GTK_OBJECT (website1),"activate", G_CALLBACK(on_menu_visit_website), NULL);
1974
 
        g_signal_connect (GTK_OBJECT (options1),"activate", G_CALLBACK(on_options1_activate), NULL);
1975
 
        g_signal_connect (GTK_OBJECT (shortcuts1),"activate", G_CALLBACK(on_view_shortcuts_activate), NULL);
1976
 
        g_signal_connect (GTK_OBJECT (find1),   "activate", G_CALLBACK(on_find1_activate), NULL);
1977
 
        g_signal_connect (GTK_OBJECT (find2),   "activate", G_CALLBACK(on_find2_activate), NULL);
1978
 
        g_signal_connect (GTK_OBJECT (replace1),"activate", G_CALLBACK(on_find_replace_activate), NULL);
1979
 
        g_signal_connect (GTK_OBJECT (wrap1),   "activate", G_CALLBACK(on_wrap_activate), NULL);
1980
 
        g_signal_connect (GTK_OBJECT (title1),  "activate", G_CALLBACK(on_show_node_titlebar_activate), NULL);
1981
 
        g_signal_connect (GTK_OBJECT (statbar1),"activate", G_CALLBACK(on_show_status_bar_activate), NULL);
1982
 
        g_signal_connect (GTK_OBJECT (menutool1),"activate", G_CALLBACK(on_show_toolbar_activate), NULL);
1983
 
        g_signal_connect (GTK_OBJECT (menufull1),"activate", G_CALLBACK(on_full_screen_activate), NULL);
1984
 
        g_signal_connect (GTK_OBJECT (undo1),   "activate", G_CALLBACK(on_undo_activate), NULL);
1985
 
        g_signal_connect (GTK_OBJECT (redo1),   "activate", G_CALLBACK(on_redo_activate), NULL);
1986
 
        g_signal_connect (GTK_OBJECT (link1),   "activate", G_CALLBACK(on_link_wizard_activate), NULL);
1987
 
        g_signal_connect (GTK_OBJECT (textonly1),   "activate", G_CALLBACK(on_view_text_only_mode), NULL);
1988
 
        g_signal_connect (GTK_OBJECT (wordcount1),   "activate", G_CALLBACK(on_view_calc_word_count), NULL);
1989
 
        g_signal_connect (GTK_OBJECT (bold1),     "activate", G_CALLBACK(on_text_bold_activate), NULL);
1990
 
        g_signal_connect (GTK_OBJECT (italic1),   "activate", G_CALLBACK(on_text_italic_activate), NULL);
1991
 
        g_signal_connect (GTK_OBJECT (underline1),"activate", G_CALLBACK(on_text_underline_activate), NULL);
1992
 
        g_signal_connect (GTK_OBJECT (strikethrough1),"activate", G_CALLBACK(on_text_strikethrough_activate), NULL);
1993
 
        g_signal_connect (GTK_OBJECT (color1),    "activate", G_CALLBACK(on_text_color_activate), NULL);
1994
 
        g_signal_connect (GTK_OBJECT (bkgcolor1),    "activate", G_CALLBACK(on_text_background_color_activate), NULL);
1995
 
        g_signal_connect (GTK_OBJECT (picture1), "activate", G_CALLBACK(on_insert_picture_activate), NULL);
1996
 
        g_signal_connect (GTK_OBJECT (remove_format1), "activate", G_CALLBACK(on_remove_format_activate), NULL);
1997
 
        g_signal_connect (GTK_OBJECT (attachments1), "activate", G_CALLBACK(on_node_attachments_activate), NULL);
1998
 
 
1999
 
        GLADE_HOOKUP_OBJECT (window1, menuitem1, "menuitem1");
2000
 
        GLADE_HOOKUP_OBJECT (window1, menu1, "menu1");
2001
 
        GLADE_HOOKUP_OBJECT (window1, new1, "new1");
2002
 
        GLADE_HOOKUP_OBJECT (window1, open1, "open1");
2003
 
        GLADE_HOOKUP_OBJECT (window1, wrap1, "wrap1");
2004
 
        GLADE_HOOKUP_OBJECT (window1, title1, "title1");
2005
 
        GLADE_HOOKUP_OBJECT (window1, menutool1, "menutool1");
2006
 
        GLADE_HOOKUP_OBJECT (window1, find1, "find1");
2007
 
        GLADE_HOOKUP_OBJECT (window1, find2, "find2");
2008
 
        GLADE_HOOKUP_OBJECT (window1, replace1, "replace1");
2009
 
        GLADE_HOOKUP_OBJECT (window1, save1, "save1");
2010
 
        GLADE_HOOKUP_OBJECT (window1, save_as1, "save_as1");
2011
 
        GLADE_HOOKUP_OBJECT (window1, reload1, "reload1");
2012
 
        GLADE_HOOKUP_OBJECT (window1, read_only1, "read_only1");
2013
 
        GLADE_HOOKUP_OBJECT (window1, lock1, "lock1");
2014
 
        GLADE_HOOKUP_OBJECT (window1, change_pass1, "change_pass1");
2015
 
        GLADE_HOOKUP_OBJECT (window1, separatormenuitem1, "separatormenuitem1");
2016
 
        GLADE_HOOKUP_OBJECT (window1, quit1, "quit1");
2017
 
        GLADE_HOOKUP_OBJECT (window1, menuitem2, "menuitem2");
2018
 
        GLADE_HOOKUP_OBJECT (window1, menu2, "menu2");
2019
 
        GLADE_HOOKUP_OBJECT (window1, cut1, "cut1");
2020
 
        GLADE_HOOKUP_OBJECT (window1, copy1, "copy1");
2021
 
        GLADE_HOOKUP_OBJECT (window1, paste1, "paste1");
2022
 
        GLADE_HOOKUP_OBJECT (window1, delete1, "delete1");
2023
 
        GLADE_HOOKUP_OBJECT (window1, menuitem4, "menuitem4");
2024
 
        GLADE_HOOKUP_OBJECT (window1, menu4, "menu4");
2025
 
        GLADE_HOOKUP_OBJECT (window1, about1, "about1");
2026
 
        GLADE_HOOKUP_OBJECT (window1, help1, "help1");
2027
 
        GLADE_HOOKUP_OBJECT (window1, website1, "website1");
2028
 
        GLADE_HOOKUP_OBJECT (window1, statbar1, "statbar1");
2029
 
        GLADE_HOOKUP_OBJECT (window1, undo1, "undo1");
2030
 
        GLADE_HOOKUP_OBJECT (window1, redo1, "redo1");
2031
 
        GLADE_HOOKUP_OBJECT (window1, link1, "link1");
2032
 
        GLADE_HOOKUP_OBJECT (window1, wordcount1, "wordcount1");
2033
 
        GLADE_HOOKUP_OBJECT (window1, new_notecase1, "new_notecase1");
2034
 
        GLADE_HOOKUP_OBJECT (window1, bold1, "bold1");
2035
 
        GLADE_HOOKUP_OBJECT (window1, italic1, "italic1");
2036
 
        GLADE_HOOKUP_OBJECT (window1, underline1, "underline1");
2037
 
        GLADE_HOOKUP_OBJECT (window1, color1, "color1");
2038
 
        GLADE_HOOKUP_OBJECT (window1, bkgcolor1, "bkgcolor1");
2039
 
        GLADE_HOOKUP_OBJECT (window1, picture1, "picture1");
2040
 
        GLADE_HOOKUP_OBJECT (window1, remove_format1, "remove_format1");
2041
 
        GLADE_HOOKUP_OBJECT (window1, attachments1, "attachments1");
2042
 
        GLADE_HOOKUP_OBJECT (window1, menufull1, "menufull1");
2043
 
 
2044
 
#ifdef _NOKIA_MAEMO
2045
 
        hildon_window_set_menu(HILDON_WINDOW(window1), GTK_MENU(maemomenu));
2046
 
#endif
2047
 
}
2048
 
 
2049
 
gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data)
2050
 
{
2051
 
        //FIX: prevent toolbar from getting focus by keyboard
2052
 
        static bool bRecurse = false;
2053
 
        if(!bRecurse)
2054
 
        {
2055
 
                bRecurse = true;
2056
 
                gtk_widget_child_focus (widget, (GtkDirectionType)GTK_DIR_TAB_FORWARD);
2057
 
                bRecurse = false;
2058
 
        }
2059
 
 
2060
 
        return FALSE;
2061
 
}
2062
 
 
2063
 
bool LocaleToUtf8(const char *szTxt, std::string &strResult)
2064
 
{
2065
 
        strResult = "";
2066
 
 
2067
 
        gsize nBytesWritten = 0;
2068
 
#if defined(G_OS_WIN32)
2069
 
        gchar *pFileNameInUTF8 = g_locale_to_utf8(szTxt, -1, 0, &nBytesWritten, 0);
2070
 
#else
2071
 
        gchar *pFileNameInUTF8 = g_filename_to_utf8(szTxt, -1, 0, &nBytesWritten, 0);
2072
 
#endif
2073
 
 
2074
 
        if (pFileNameInUTF8)
2075
 
        {
2076
 
                strResult = pFileNameInUTF8;
2077
 
                g_free(pFileNameInUTF8);
2078
 
                return true;
2079
 
        }
2080
 
 
2081
 
        // on failure, copy original string
2082
 
        strResult = szTxt;
2083
 
        return false;
2084
 
}
2085
 
 
2086
 
bool Utf8ToLocale(const char *szTxt, std::string &strResult)
2087
 
{
2088
 
        gsize bytesWritten = 0;
2089
 
 
2090
 
        // On Windows GLib uses UTF-8 for filenames, but as well as we operate
2091
 
        // on native Windows API, conversion to the encoding used in current
2092
 
        // locale is required.
2093
 
#if defined(G_OS_WIN32)
2094
 
        gchar *pFileName = g_locale_from_utf8(szTxt, -1, 0, &bytesWritten, 0);
2095
 
#else
2096
 
        gchar *pFileName = g_filename_from_utf8(szTxt, -1, 0, &bytesWritten, 0);
2097
 
#endif
2098
 
        if (NULL != pFileName)
2099
 
        {
2100
 
                strResult = pFileName;
2101
 
                g_free(pFileName);
2102
 
                return true;
2103
 
        }
2104
 
 
2105
 
        // on failure, copy original string
2106
 
        strResult = szTxt;
2107
 
        return false;
2108
 
}
2109
 
 
2110
 
gint dlg_keyboard_handler(GtkWidget *widget, GdkEventKey *event, gpointer data)
2111
 
{
2112
 
        //Esc press in the main window minimizes the application
2113
 
        if( event->keyval == GDK_Escape )
2114
 
        {
2115
 
                GtkWidget *widget1 = gtk_window_get_focus(GTK_WINDOW(window1));
2116
 
                if( widget1 != g_text.m_pWidget &&
2117
 
                        widget1 != g_tree.m_pWidget)
2118
 
                        return FALSE;   // skip this, we are in the label editing mode
2119
 
 
2120
 
                gtk_window_iconify(GTK_WINDOW(widget));
2121
 
                return TRUE;    //eat event (handled here)
2122
 
        }
2123
 
        return FALSE;
2124
 
}
2125
 
 
2126
 
void SetTextViewCaretColor(bool bBlack)
2127
 
{
2128
 
        //hack to set 'caret' color dynamicaly (without .rc file on disk)
2129
 
 
2130
 
        GdkColor color = { 0, 0xFFFF, 0xFFFF, 0xFFFF }; //white
2131
 
        if(bBlack){
2132
 
                GdkColor black = { 0, 0, 0, 0 };        //black
2133
 
                color = black;
2134
 
        }
2135
 
 
2136
 
        //TOFIX move this to TextView fn.
2137
 
        static const char cursor_color_rc[] =
2138
 
            "style \"Notecase\"\n"
2139
 
            "{\n"
2140
 
            "GtkTextView::cursor-color=\"#%04x%04x%04x\"\n"
2141
 
            "}\n"
2142
 
            "widget \"*.GtkTextView*\" style : application \"Notecase\"\n";
2143
 
 
2144
 
    gchar *rc_temp = g_strdup_printf (cursor_color_rc,
2145
 
                                                        color.red,
2146
 
                            color.green,
2147
 
                            color.blue);
2148
 
    gtk_rc_parse_string (rc_temp);
2149
 
    gtk_widget_reset_rc_styles (g_text.m_pWidget);
2150
 
    g_free (rc_temp);
2151
 
}
2152
 
 
2153
 
//Based on text-view background color, calculate
2154
 
//the color for text-view caret mark (a.k.a. cursor).
2155
 
//Caret is set to either white or black color (dark bkg -> light caret and vice versa)
2156
 
void RefreshTextViewCaretColor(GdkColor &BkColor)
2157
 
{
2158
 
        //TOFIX for better result try using HSL color model -> L = (MAX(r,g,b) + MIN(r,g,b))/2
2159
 
        //is the background light enough for cursor to be black?
2160
 
        int nR = BkColor.red/255;
2161
 
        int nG = BkColor.green/255;
2162
 
        int nB = BkColor.blue/255;
2163
 
        int nPower = (nR*nR)+(nG*nG)+(nB*nB);
2164
 
 
2165
 
        bool bCaretColorBlack = (nPower > 48387);
2166
 
        SetTextViewCaretColor(bCaretColorBlack);
2167
 
}
2168
 
 
2169
 
gboolean initial_load_timer(gpointer data)
2170
 
{
2171
 
        //load initial document if any
2172
 
        if(g_bLoadEmbedded)
2173
 
                load_file_embedded(/*strCurNodeID*/);
2174
 
        else{
2175
 
                //allow password being entered up to 3 times
2176
 
                int nResult = 0;
2177
 
                int nTryCnt = 0;
2178
 
                while(nTryCnt < 3){
2179
 
                        nResult = load_file(g_strLoadDocumentFile.c_str(), g_strLoadDocumentPass.c_str(), g_nLoadDocumentNodeID);
2180
 
                        nTryCnt ++;
2181
 
                        if(DOC_LOAD_WRONG_PASSWORD != nResult){
2182
 
                                break;
2183
 
                        }
2184
 
                }
2185
 
                if(g_bUpdateMRU)
2186
 
                        g_objMRU.Change(g_strLoadDocumentFile.c_str(), (DOC_LOAD_NOT_FOUND != nResult));//update MRU unless file not found
2187
 
        }
2188
 
 
2189
 
        g_strLoadDocumentPass = "";     // reset password
2190
 
 
2191
 
        return FALSE; // kill timer
2192
 
}
2193
 
 
2194
 
void treeview_show_popup_menu()
2195
 
{
2196
 
        GtkWidget *menu, *submenu;
2197
 
        GtkWidget *menu_item, *move_item, *sort_item, *icon;
2198
 
        int button, event_time;
2199
 
 
2200
 
        menu = gtk_menu_new ();
2201
 
        //g_signal_connect (menu, "deactivate", G_CALLBACK(gtk_widget_destroy), NULL);
2202
 
 
2203
 
        GtkAccelGroup *accel_group = gtk_accel_group_new();
2204
 
        gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2205
 
 
2206
 
        // ... add menu items with accelerators ...
2207
 
        menu_item = gtk_menu_item_new_with_label(_("Insert Node"));
2208
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_node), NULL);
2209
 
        gtk_menu_append(menu, menu_item);
2210
 
        gtk_widget_show (menu_item);  // Show the widget
2211
 
        if(g_defTreeNodeNew.IsValid(SH_CTX_TREE_WIDGET))
2212
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeNew.m_nKey, (GdkModifierType)g_defTreeNodeNew.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2213
 
 
2214
 
        menu_item = gtk_menu_item_new_with_label(_("Insert Child Node"));
2215
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_child_node), NULL);
2216
 
        gtk_menu_append(menu, menu_item);
2217
 
        gtk_widget_show (menu_item);  // Show the widget
2218
 
        if(g_defTreeNodeNewChild.IsValid(SH_CTX_TREE_WIDGET))
2219
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeNewChild.m_nKey, (GdkModifierType)g_defTreeNodeNewChild.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2220
 
 
2221
 
        menu_item = gtk_image_menu_item_new_with_label(_("Delete Node"));
2222
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_delete_node), NULL);
2223
 
        gtk_menu_append(menu, menu_item);
2224
 
        gtk_widget_show (menu_item);  // Show the widget
2225
 
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
2226
 
        gtk_widget_show (icon);
2227
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2228
 
        if(g_defTreeNodeDelete.IsValid(SH_CTX_TREE_WIDGET))
2229
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeDelete.m_nKey, (GdkModifierType)g_defTreeNodeDelete.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2230
 
 
2231
 
        menu_item = gtk_menu_item_new_with_label(_("Rename Node"));
2232
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_rename_node), NULL);
2233
 
        gtk_menu_append(menu, menu_item);
2234
 
        gtk_widget_show (menu_item);  // Show the widget
2235
 
        if(g_defTreeNodeRename.IsValid(SH_CTX_TREE_WIDGET))
2236
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeRename.m_nKey, (GdkModifierType)g_defTreeNodeRename.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2237
 
 
2238
 
        move_item = gtk_menu_item_new_with_label(_("Move Node"));
2239
 
        gtk_menu_append(menu, move_item);
2240
 
        gtk_widget_show (move_item);  // Show the widget
2241
 
 
2242
 
        sort_item = gtk_menu_item_new_with_label(_("Sort"));
2243
 
        gtk_menu_append(menu, sort_item);
2244
 
        gtk_widget_show (sort_item);  // Show the widget
2245
 
 
2246
 
        menu_item = gtk_menu_item_new_with_label(_("Expand All"));
2247
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_expand_all), NULL);
2248
 
        gtk_menu_append(menu, menu_item);
2249
 
        gtk_widget_show (menu_item);  // Show the widget
2250
 
        if(g_defTreeNodeExpandAll.IsValid(SH_CTX_TREE_WIDGET))
2251
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeExpandAll.m_nKey, (GdkModifierType)g_defTreeNodeExpandAll.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2252
 
 
2253
 
        menu_item = gtk_menu_item_new_with_label(_("Collapse All"));
2254
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_collapse_all), NULL);
2255
 
        gtk_menu_append(menu, menu_item);
2256
 
        gtk_widget_show (menu_item);  // Show the widget
2257
 
        if(g_defTreeNodeColapseAll.IsValid(SH_CTX_TREE_WIDGET))
2258
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeColapseAll.m_nKey, (GdkModifierType)g_defTreeNodeColapseAll.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2259
 
 
2260
 
        menu_item = gtk_image_menu_item_new_with_label(_("Mark node as Completed"));
2261
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_node_toggle_finished), NULL);
2262
 
        gtk_menu_append(menu, menu_item);
2263
 
        gtk_widget_show (menu_item);  // Show the widget
2264
 
        if(g_defTreeNodeToggleFinished.IsValid(SH_CTX_TREE_WIDGET))
2265
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeToggleFinished.m_nKey, (GdkModifierType)g_defTreeNodeToggleFinished.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2266
 
 
2267
 
        menu_item = gtk_image_menu_item_new_with_label(_("Node Properties"));
2268
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_node_properties), NULL);
2269
 
        gtk_menu_append(menu, menu_item);
2270
 
        gtk_widget_show (menu_item);  // Show the widget
2271
 
        icon = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
2272
 
        gtk_widget_show (icon);
2273
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2274
 
        if(g_defTreeNodeProperties.IsValid(SH_CTX_TREE_WIDGET))
2275
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeProperties.m_nKey, (GdkModifierType)g_defTreeNodeProperties.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2276
 
 
2277
 
        menu_item = gtk_image_menu_item_new_with_label(_("Link wizard"));
2278
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_link_wizard_activate), NULL);
2279
 
        gtk_menu_append(menu, menu_item);
2280
 
        gtk_widget_show (menu_item);  // Show the widget
2281
 
        GdkPixbuf* pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&page_link);
2282
 
        icon = gtk_image_new_from_pixbuf (pixbuf);
2283
 
        gtk_widget_show (icon);
2284
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2285
 
 
2286
 
        //"move node" submenu
2287
 
        submenu = gtk_menu_new ();
2288
 
 
2289
 
        menu_item = gtk_image_menu_item_new_with_label(_("Up"));
2290
 
        gtk_menu_append(submenu, menu_item);
2291
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_up), NULL);
2292
 
        gtk_widget_show (menu_item);  // Show the widget
2293
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU);
2294
 
        gtk_widget_show (icon);
2295
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2296
 
        if(g_defTreeNodeMoveUp.IsValid(SH_CTX_TREE_WIDGET))
2297
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveUp.m_nKey, (GdkModifierType)g_defTreeNodeMoveUp.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2298
 
 
2299
 
        menu_item = gtk_image_menu_item_new_with_label(_("Down"));
2300
 
        gtk_menu_append(submenu, menu_item);
2301
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_down), NULL);
2302
 
        gtk_widget_show (menu_item);  // Show the widget
2303
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU);
2304
 
        gtk_widget_show (icon);
2305
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2306
 
        if(g_defTreeNodeMoveDown.IsValid(SH_CTX_TREE_WIDGET))
2307
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveDown.m_nKey, (GdkModifierType)g_defTreeNodeMoveDown.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2308
 
 
2309
 
        menu_item = gtk_image_menu_item_new_with_label(_("Left"));
2310
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_left), NULL);
2311
 
        gtk_menu_append(submenu, menu_item);
2312
 
        gtk_widget_show (menu_item);  // Show the widget
2313
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU);
2314
 
        gtk_widget_show (icon);
2315
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2316
 
        if(g_defTreeNodeMoveLeft.IsValid(SH_CTX_TREE_WIDGET))
2317
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveLeft.m_nKey, (GdkModifierType)g_defTreeNodeMoveLeft.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2318
 
 
2319
 
        menu_item = gtk_image_menu_item_new_with_label(_("Right"));
2320
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_right), NULL);
2321
 
        gtk_menu_append(submenu, menu_item);
2322
 
        gtk_widget_show (menu_item);  // Show the widget
2323
 
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);
2324
 
        gtk_widget_show (icon);
2325
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2326
 
        if(g_defTreeNodeMoveRight.IsValid(SH_CTX_TREE_WIDGET))
2327
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveRight.m_nKey, (GdkModifierType)g_defTreeNodeMoveRight.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2328
 
 
2329
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (move_item), submenu);
2330
 
 
2331
 
        //"sort node" submenu
2332
 
        submenu = gtk_menu_new ();
2333
 
 
2334
 
        menu_item = gtk_image_menu_item_new_with_label(_("_Sort Children Ascending"));
2335
 
        gtk_menu_append(submenu, menu_item);
2336
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_ascending), NULL);
2337
 
        gtk_widget_show (menu_item);  // Show the widget
2338
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
2339
 
        gtk_widget_show (icon);
2340
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2341
 
        if(g_defTreeNodeSortChildrenAsc.IsValid(SH_CTX_TREE_WIDGET))
2342
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortChildrenAsc.m_nKey, (GdkModifierType)g_defTreeNodeSortChildrenAsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2343
 
 
2344
 
        menu_item = gtk_image_menu_item_new_with_label(_("Sort _Children Descending"));
2345
 
        gtk_menu_append(submenu, menu_item);
2346
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_descending), NULL);
2347
 
        gtk_widget_show (menu_item);  // Show the widget
2348
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
2349
 
        gtk_widget_show (icon);
2350
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2351
 
        if(g_defTreeNodeSortChildrenAsc.IsValid(SH_CTX_TREE_WIDGET))
2352
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortChildrenAsc.m_nKey, (GdkModifierType)g_defTreeNodeSortChildrenAsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2353
 
 
2354
 
        menu_item = gtk_image_menu_item_new_with_label(_("Sort Root Ascending"));
2355
 
        gtk_menu_append(submenu, menu_item);
2356
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_ascending), NULL);
2357
 
        gtk_widget_show (menu_item);  // Show the widget
2358
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
2359
 
        gtk_widget_show (icon);
2360
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2361
 
        if(g_defTreeNodeSortRootAsc.IsValid(SH_CTX_TREE_WIDGET))
2362
 
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortRootAsc.m_nKey, (GdkModifierType)g_defTreeNodeSortRootAsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2363
 
 
2364
 
        menu_item = gtk_image_menu_item_new_with_label(_("Sort Root Descending"));
2365
 
        gtk_menu_append(submenu, menu_item);
2366
 
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_descending), NULL);
2367
 
        gtk_widget_show (menu_item);  // Show the widget
2368
 
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
2369
 
        gtk_widget_show (icon);
2370
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
2371
 
        if(g_defTreeNodeSortRootDsc.IsValid(SH_CTX_TREE_WIDGET))
2372
 
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortRootDsc.m_nKey, (GdkModifierType)g_defTreeNodeSortRootDsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
2373
 
 
2374
 
 
2375
 
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (sort_item), submenu);
2376
 
 
2377
 
//      if (event)
2378
 
//              event_time = event->time;
2379
 
//      else
2380
 
                event_time = gtk_get_current_event_time ();
2381
 
        button = 0;     //FIX: allow mouse button to trigger the submenu
2382
 
 
2383
 
        gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
2384
 
}
2385
 
 
2386
 
void on_tree_resize(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data)
2387
 
{
2388
 
        static bool bSkip = false;
2389
 
 
2390
 
        if(g_bWrapTree/* && !bSkip*/){
2391
 
                update_tree_wrap();
2392
 
                bSkip = true;
2393
 
        }
2394
 
        else
2395
 
                bSkip = false;
2396
 
}
2397
 
 
2398
 
void update_tree_wrap()
2399
 
{
2400
 
        GtkWidget *scrolledwindow1 = lookup_widget(window1, "scrolledwindow1");
2401
 
        GtkAdjustment *hadjustment = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW(scrolledwindow1));
2402
 
 
2403
 
        int nWidth = scrolledwindow1->allocation.width; //allocation->width
2404
 
 
2405
 
        TRACE("Wrap tree to %d\n", nWidth);
2406
 
        g_tree.WrapTreeToSize(nWidth);
2407
 
 
2408
 
        //set horz scrollbar width
2409
 
 
2410
 
        gdouble  nValue = 0;
2411
 
        g_object_get (G_OBJECT (hadjustment), "upper", &nValue, (char *)NULL);
2412
 
        TRACE("Adj: %f\n", nValue);
2413
 
 
2414
 
        //g_signal_handlers_block_by_func(scrolledwindow1, (void *)on_tree_resize, 0);
2415
 
 
2416
 
        nValue = nWidth;
2417
 
        //TOFIX crashes on Ubuntu g_object_set (G_OBJECT (hadjustment), "upper", &nValue, NULL);
2418
 
 
2419
 
        //gtk_adjustment_changed(hadjustment);
2420
 
        //g_signal_handlers_unblock_by_func(scrolledwindow1, (void *)on_tree_resize, 0);
2421
 
}
 
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 "interface.h"
 
15
#include "MainWnd.h"
 
16
#include "TreeView.h"
 
17
#include "TextView.h"
 
18
#include "mru.h"
 
19
#include "callbacks.h"
 
20
#include "lib/debug.h"
 
21
#include "lib/NoteDocument.h"
 
22
#include "lib/IniFile.h"
 
23
#include "lib/FilePath.h"
 
24
#include "PortableTrayIcon.h"
 
25
#include "PasswordDialog.h"
 
26
#include "gui/GuiLanguage.h"
 
27
#include "ShortcutsList.h"
 
28
#include "FindReplaceInfo.h"
 
29
 
 
30
#ifdef _NOKIA_MAEMO
 
31
 #if _NOKIA_MAEMO == 1
 
32
  #include <hildon-widgets/hildon-program.h>
 
33
 #else
 
34
  #include <hildon/hildon-program.h>
 
35
 #endif
 
36
#endif
 
37
 
 
38
#include "../res/notecase.xpm"
 
39
#include "../res/icon_attachment.xpm"
 
40
#include "../res/icon_picture.xpm"
 
41
#include "../res/page_link.xpm"
 
42
#include "../res/text_bold.xpm"
 
43
#include "../res/text_italic.xpm"
 
44
#include "../res/text_underline.xpm"
 
45
#include "../res/text_strikethrough.xpm"
 
46
#include "../res/text_color.xpm"
 
47
#include "../res/text_bg_color.xpm"
 
48
#include "../res/text_no_format.xpm"
 
49
#include "../res/icon_datetime.xpm"
 
50
#include "../res/internal_lock.xpm"
 
51
#include "../res/key.xpm"
 
52
 
 
53
extern bool g_bBusyCursor;
 
54
void ShowBusyCursor();
 
55
void HideBusyCursor();
 
56
 
 
57
extern NoteDocument g_doc;
 
58
extern MRU g_objMRU;
 
59
extern GtkWidget *window1;
 
60
extern GtkWidget *g_menuitem5;
 
61
extern TreeView g_tree;
 
62
extern TextView g_text;
 
63
extern bool g_bMinimizeToTray;
 
64
extern bool g_bCloseToTray;
 
65
extern bool g_bCloseDlgOnTextEnter;
 
66
extern bool g_bAutoSaveOnClose;
 
67
extern bool g_bSkipMemOnlyAutosave;
 
68
extern bool g_bExportDataAsSeparateFile;
 
69
extern MainWindow g_wnd;
 
70
extern IniFile g_objIni;
 
71
extern GuiLanguage g_lang;
 
72
extern bool g_bTreeToTheRight;
 
73
extern bool g_bTreeToTheRightInitial;
 
74
extern GdkColor g_linkColor;
 
75
extern int g_nDefaultNodeIconType;
 
76
extern std::string g_strDefaultIconFile;
 
77
extern FindReplaceInfo g_objSearchInfo;
 
78
 
 
79
extern bool g_bInitialLoad;
 
80
extern bool g_bUpdateMRU;
 
81
extern bool g_bLoadEmbedded;
 
82
extern std::string g_strLoadDocumentFile;
 
83
extern std::string g_strLoadDocumentPass;
 
84
extern int g_nLoadDocumentNodeID;
 
85
 
 
86
extern ShortcutDef g_defTreeNodeNew;
 
87
extern ShortcutDef g_defTreeNodeNewChild;
 
88
extern ShortcutDef g_defTreeNodeDelete;
 
89
extern ShortcutDef g_defTreeNodeRename;
 
90
extern ShortcutDef g_defTreeNodeMoveUp;
 
91
extern ShortcutDef g_defTreeNodeMoveDown;
 
92
extern ShortcutDef g_defTreeNodeMoveLeft;
 
93
extern ShortcutDef g_defTreeNodeMoveRight;
 
94
extern ShortcutDef g_defTreeNodeProperties;
 
95
extern ShortcutDef g_defTreeNodeDelFinished;
 
96
extern ShortcutDef g_defTreeNodeToggleFinished;
 
97
extern ShortcutDef g_defTreeNodeSortChildrenAsc;
 
98
extern ShortcutDef g_defTreeNodeSortChildrenDsc;
 
99
extern ShortcutDef g_defTreeNodeSortRootAsc;
 
100
extern ShortcutDef g_defTreeNodeSortRootDsc;
 
101
extern ShortcutDef g_defTreeNodeExpandAll;
 
102
extern ShortcutDef g_defTreeNodeColapseAll;
 
103
extern ShortcutDef g_defTreeCopyBranchStruct;
 
104
extern ShortcutDef g_defTreePasteBranchRoot;
 
105
 
 
106
ShortcutsList g_shortcuts;
 
107
PortableTrayIcon g_tray;
 
108
int g_nTitleBarTextSize = 10 * PANGO_SCALE; //default size
 
109
bool g_bWrapTree=false;
 
110
bool g_bDrawTextviewExpose = false;
 
111
 
 
112
GdkColor g_rgbTextViewBkColor = { 0, 0xFFFF, 0xFFFF, 0xFFFF };  //white
 
113
 
 
114
void register_extensions_check();
 
115
static void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group);
 
116
static gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event);
 
117
const char *PasswordCallback(const char *szFile, bool bSave);
 
118
static gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data);
 
119
bool LocaleToUtf8(const char *szTxt, std::string &strResult);
 
120
static gint dlg_keyboard_handler (GtkWidget *widget, GdkEventKey *event, gpointer data);
 
121
void SetTextViewCaretColor(bool bBlack);
 
122
void RefreshTextViewCaretColor(GdkColor &BkColor);
 
123
gboolean initial_load_timer(gpointer data);
 
124
int  load_file_embedded(int nCurNodeIdx = -1);
 
125
int load_file(const char *filename, const char *szPassword, int nCurNodeIdx);
 
126
void on_tree_resize(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data);
 
127
void update_tree_wrap();
 
128
 
 
129
MainWindow::MainWindow()
 
130
{
 
131
        m_pWidget = NULL;
 
132
        m_pToolbarBold = NULL;
 
133
        m_pToolbarItalic = NULL;
 
134
        m_pToolbarUnderline = NULL;
 
135
        m_pToolbarColor = NULL;
 
136
        m_pToolbarAttachment = NULL;
 
137
        m_pToolbarBkgColor = NULL;
 
138
        m_pToolbarUndo = NULL;
 
139
        m_pToolbarRedo = NULL;
 
140
}
 
141
 
 
142
MainWindow::~MainWindow()
 
143
{
 
144
}
 
145
 
 
146
void MainWindow::Create()
 
147
{
 
148
        g_shortcuts.Load();
 
149
 
 
150
        g_objIni.GetValue("Display", "DrawGrayTextView", g_bDrawTextviewExpose, 1);
 
151
 
 
152
        g_objIni.GetValue("Display", "TreeToTheRight", g_bTreeToTheRight);
 
153
        g_bTreeToTheRightInitial = g_bTreeToTheRight;
 
154
 
 
155
        //set global RTL support
 
156
        if(g_lang.IsCurLangRTL()) //RTL support
 
157
                gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
 
158
 
 
159
        m_pWidget = create_main_win();
 
160
        OnCreate();
 
161
 
 
162
        //cache loaded shortcuts for faster lookup
 
163
        int nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW, SH_CTX_TREE_WIDGET);
 
164
        if(nPos >= 0)   g_defTreeNodeNew = g_shortcuts[nPos];
 
165
 
 
166
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW_CHILD, SH_CTX_TREE_WIDGET);
 
167
        if(nPos >= 0)   g_defTreeNodeNewChild = g_shortcuts[nPos];
 
168
 
 
169
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE, SH_CTX_TREE_WIDGET);
 
170
        if(nPos >= 0)   g_defTreeNodeDelete = g_shortcuts[nPos];
 
171
 
 
172
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_RENAME, SH_CTX_TREE_WIDGET);
 
173
        if(nPos >= 0)   g_defTreeNodeRename = g_shortcuts[nPos];
 
174
 
 
175
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_UP, SH_CTX_TREE_WIDGET);
 
176
        if(nPos >= 0)   g_defTreeNodeMoveUp = g_shortcuts[nPos];
 
177
 
 
178
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_DOWN, SH_CTX_TREE_WIDGET);
 
179
        if(nPos >= 0)   g_defTreeNodeMoveDown = g_shortcuts[nPos];
 
180
 
 
181
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_LEFT, SH_CTX_TREE_WIDGET);
 
182
        if(nPos >= 0)   g_defTreeNodeMoveLeft = g_shortcuts[nPos];
 
183
 
 
184
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_RIGHT, SH_CTX_TREE_WIDGET);
 
185
        if(nPos >= 0)   g_defTreeNodeMoveRight = g_shortcuts[nPos];
 
186
 
 
187
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_RIGHT, SH_CTX_TREE_WIDGET);
 
188
        if(nPos >= 0)   g_defTreeNodeMoveRight = g_shortcuts[nPos];
 
189
 
 
190
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_PROPERTIES, SH_CTX_TREE_WIDGET);
 
191
        if(nPos >= 0)   g_defTreeNodeProperties = g_shortcuts[nPos];
 
192
 
 
193
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE_FINISHED, SH_CTX_TREE_WIDGET);
 
194
        if(nPos >= 0)   g_defTreeNodeDelFinished = g_shortcuts[nPos];
 
195
 
 
196
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_TOGGLE_FINISHED, SH_CTX_TREE_WIDGET);
 
197
        if(nPos >= 0)   g_defTreeNodeToggleFinished = g_shortcuts[nPos];
 
198
 
 
199
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_ASC, SH_CTX_TREE_WIDGET);
 
200
        if(nPos >= 0)   g_defTreeNodeSortChildrenAsc = g_shortcuts[nPos];
 
201
 
 
202
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_DESC, SH_CTX_TREE_WIDGET);
 
203
        if(nPos >= 0)   g_defTreeNodeSortChildrenDsc = g_shortcuts[nPos];
 
204
 
 
205
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_ASC, SH_CTX_TREE_WIDGET);
 
206
        if(nPos >= 0)   g_defTreeNodeSortRootAsc = g_shortcuts[nPos];
 
207
 
 
208
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_DESC, SH_CTX_TREE_WIDGET);
 
209
        if(nPos >= 0)   g_defTreeNodeSortRootDsc = g_shortcuts[nPos];
 
210
 
 
211
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_EXPAND_ALL, SH_CTX_TREE_WIDGET);
 
212
        if(nPos >= 0)   g_defTreeNodeExpandAll = g_shortcuts[nPos];
 
213
 
 
214
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_COLAPSE_ALL, SH_CTX_TREE_WIDGET);
 
215
        if(nPos >= 0)   g_defTreeNodeColapseAll = g_shortcuts[nPos];
 
216
 
 
217
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_COPY_BR_STRUCT, SH_CTX_TREE_WIDGET);
 
218
        if(nPos >= 0)   g_defTreeCopyBranchStruct = g_shortcuts[nPos];
 
219
 
 
220
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_PASTE_BR_ROOT, SH_CTX_TREE_WIDGET);
 
221
        if(nPos >= 0)   g_defTreePasteBranchRoot = g_shortcuts[nPos];
 
222
}
 
223
 
 
224
void MainWindow::OnCreate()
 
225
{
 
226
        //check startup options
 
227
        window1 = g_wnd.m_pWidget;
 
228
        g_signal_connect (window1, "destroy", G_CALLBACK (on_quit1_activate), NULL);
 
229
        g_signal_connect (window1, "delete_event", G_CALLBACK (on_window_delete_event), NULL);
 
230
        g_signal_connect (window1, "key_press_event", G_CALLBACK (dlg_keyboard_handler), this);
 
231
 
 
232
        GtkWidget *treeview = lookup_widget(window1, "treeview1");
 
233
        GtkWidget *textview = lookup_widget(window1, "textview1");
 
234
        GtkWidget *label1   = lookup_widget(window1, "label1");
 
235
 
 
236
        //set global margin
 
237
        gtk_text_view_set_left_margin (GTK_TEXT_VIEW(textview), 5);
 
238
        gtk_text_view_set_right_margin(GTK_TEXT_VIEW(textview), 5);
 
239
 
 
240
        //set initial fonts
 
241
        std::string strFont1;
 
242
        g_objIni.GetValue("Display", "TreeFont", strFont1, "");
 
243
        if(!strFont1.empty()){
 
244
                PangoFontDescription *desc1 = pango_font_description_from_string(strFont1.c_str());
 
245
                gtk_widget_modify_font(treeview, desc1);
 
246
                pango_font_description_free(desc1);
 
247
        }
 
248
 
 
249
        std::string strFont2;
 
250
        g_objIni.GetValue("Display", "TextFont", strFont2, "");
 
251
        if(!strFont2.empty()){
 
252
                PangoFontDescription *desc1 = pango_font_description_from_string(strFont2.c_str());
 
253
                gtk_widget_modify_font(textview, desc1);
 
254
                //calculate text size for node title bar as 1.5 the size of other text
 
255
                g_nTitleBarTextSize = (pango_font_description_get_size(desc1) * 15)/10;
 
256
                pango_font_description_free(desc1);
 
257
        }
 
258
 
 
259
        //set font size for node title bar (1.5 times of node text font)
 
260
        PangoContext *context = gtk_widget_get_pango_context (label1);
 
261
        PangoFontDescription *desc2 = pango_context_get_font_description(context);
 
262
        PangoFontDescription *desc3 = pango_font_description_copy(desc2);
 
263
#if GTK_CHECK_VERSION(2,6,0) //minimal version for pango_font_description_set_absolute_size
 
264
        pango_font_description_set_absolute_size(desc3, g_nTitleBarTextSize);
 
265
#else
 
266
        pango_font_description_set_size (desc3, (8*g_nTitleBarTextSize)/10);    //TOFIX convert from pixels to fractions?
 
267
#endif
 
268
        gtk_widget_modify_font(label1, desc3);
 
269
        pango_font_description_free(desc3);
 
270
        //TRACE("Node title bar: Font size=%d\n", g_nTitleBarTextSize);
 
271
 
 
272
        bool bMaximize;
 
273
        if(g_objIni.GetValue("Startup", "Maximize", bMaximize))
 
274
                if(bMaximize)
 
275
                        gtk_window_maximize(GTK_WINDOW(window1));
 
276
 
 
277
        //on demand check if we need to register file formats
 
278
        bool bRegisterFormats;
 
279
        if(g_objIni.GetValue("Startup", "RegisterFormats", bRegisterFormats))
 
280
                if(bRegisterFormats)
 
281
                        register_extensions_check();
 
282
 
 
283
        //restore text wrapping option
 
284
        bool bWrapText;
 
285
        if(g_objIni.GetValue("Display", "WrapText", bWrapText))
 
286
        if(bWrapText)
 
287
                set_wrap_activated(true);
 
288
 
 
289
        //restore tree wrapping option
 
290
        g_objIni.GetValue("Display", "WrapTree", g_bWrapTree);
 
291
 
 
292
        //restore "tree lines" option
 
293
        bool bTreeLines;
 
294
        g_objIni.GetValue("Display", "ShowTreeLines", bTreeLines);
 
295
        g_tree.SetTreeLines(bTreeLines);
 
296
 
 
297
        //restore "toolbar visible" option
 
298
        bool bShowToolbar;
 
299
        g_objIni.GetValue("Display", "ShowToolBar", bShowToolbar, 1);
 
300
                if(bShowToolbar)
 
301
                        set_show_toolbar(true);
 
302
 
 
303
        //restore "node title visible" option
 
304
        bool bShowTitle;
 
305
        if(g_objIni.GetValue("Display", "NodeTitleBar", bShowTitle))
 
306
                if(bShowTitle)
 
307
                        set_show_node_title(true);
 
308
 
 
309
        //restore "status bar visible" option
 
310
        bool bShowStatBar;
 
311
        g_objIni.GetValue("Display", "ShowStatusBar", bShowStatBar, 1);
 
312
        if(bShowStatBar)        // default is true, change only if false
 
313
                set_show_status_bar(true);
 
314
 
 
315
        //restore last position
 
316
        bool bRestoreLastPos;
 
317
        g_objIni.GetValue("Startup", "RestoreLastPosition", bRestoreLastPos, 1);
 
318
        if(bRestoreLastPos)
 
319
        {
 
320
                gint nPosLeft, nPosTop, nPosWidth, nPosHeight, nPosDivider;
 
321
                nPosLeft = nPosTop = nPosWidth = nPosHeight = nPosDivider = 0;
 
322
 
 
323
                g_objIni.GetValue("Startup", "LastPos_Left", nPosLeft);
 
324
                g_objIni.GetValue("Startup", "LastPos_Top", nPosTop);
 
325
                g_objIni.GetValue("Startup", "LastPos_Width", nPosWidth);
 
326
                g_objIni.GetValue("Startup", "LastPos_Height", nPosHeight);
 
327
                g_objIni.GetValue("Startup", "LastPos_Divider", nPosDivider);
 
328
 
 
329
                //apply some common sense checks/fixes
 
330
                if(nPosWidth  <= 0) nPosWidth   = 500;
 
331
                if(nPosHeight <= 0) nPosHeight  = 350;
 
332
                if(nPosLeft   <= 0) nPosLeft    = 0;
 
333
                if(nPosTop    <= 0) nPosTop     = 0;
 
334
                if(nPosDivider<= 0) nPosDivider = 150;
 
335
 
 
336
                gtk_window_move(GTK_WINDOW(window1), nPosLeft, nPosTop);
 
337
                gtk_window_set_default_size(GTK_WINDOW(window1), nPosWidth, nPosHeight);
 
338
                gtk_window_resize(GTK_WINDOW(window1), nPosWidth, nPosHeight);
 
339
                GtkWidget *divider = lookup_widget(window1, "hbox1");
 
340
                gtk_paned_set_position(GTK_PANED(divider), nPosDivider);
 
341
        }
 
342
        else
 
343
        {
 
344
                gtk_window_set_default_size (GTK_WINDOW (window1), 500, 350);
 
345
                GtkWidget *divider = lookup_widget(window1, "hbox1");
 
346
                if(g_bTreeToTheRight)
 
347
                        gtk_paned_set_position (GTK_PANED(divider), 350);
 
348
                else
 
349
                        gtk_paned_set_position (GTK_PANED(divider), 150);
 
350
        }
 
351
 
 
352
        //restore view mode
 
353
        int nMode = 0;
 
354
        g_objIni.GetValue("Display", "ViewMode", nMode, 0);
 
355
        if(nMode > 0){
 
356
                on_view_text_only_mode (NULL, NULL);
 
357
                if(nMode > 1)
 
358
                        on_view_text_only_mode (NULL, NULL);
 
359
        }
 
360
 
 
361
        //set custom GUI colors
 
362
        std::string strColor, strColor1;
 
363
        g_objIni.GetValue("Display", "TextColor", strColor, "");
 
364
        g_objIni.GetValue("Display", "BackgroundColor", strColor1, "");
 
365
        if(strColor.size() > 0)
 
366
        {
 
367
                GdkColor color;
 
368
                gdk_color_parse (strColor.c_str(), &color);
 
369
                gtk_widget_modify_text(GTK_WIDGET(textview), GTK_STATE_NORMAL, &color);
 
370
                gtk_widget_modify_text(GTK_WIDGET(treeview), GTK_STATE_NORMAL, &color);
 
371
        }
 
372
        if(strColor1.size() > 0)
 
373
        {
 
374
                GdkColor color1;
 
375
                gdk_color_parse (strColor1.c_str(), &color1);
 
376
                gtk_widget_modify_base(GTK_WIDGET(textview), GTK_STATE_NORMAL, &color1);
 
377
                gtk_widget_modify_base(GTK_WIDGET(textview), GTK_STATE_INSENSITIVE, &color1);
 
378
                gtk_widget_modify_base(GTK_WIDGET(treeview), GTK_STATE_NORMAL, &color1);
 
379
                RefreshTextViewCaretColor(color1);
 
380
 
 
381
                g_rgbTextViewBkColor = color1;
 
382
 
 
383
                //fix for GTK bug - tree view loses background color
 
384
                static const char cursor_color_rc[] =
 
385
                        "style \"aaa\"\n"
 
386
                        "{\n"
 
387
                        "GtkTreeView::odd-row-color=\"#%04x%04x%04x\"\n"
 
388
                        "GtkTreeView::even-row-color =\"#%04x%04x%04x\"\n"
 
389
                        "}\n"
 
390
                        "widget \"*.aaa\" style \"aaa\"";
 
391
 
 
392
                gchar *rc_temp = g_strdup_printf (cursor_color_rc,
 
393
                                                                        color1.red,
 
394
                                                                        color1.green,
 
395
                                                                        color1.blue,
 
396
                                                                        color1.red,
 
397
                                                                        color1.green,
 
398
                                                                        color1.blue);
 
399
                gtk_rc_parse_string (rc_temp);
 
400
                gtk_widget_set_name(treeview, "aaa");
 
401
                gtk_widget_reset_rc_styles (treeview);
 
402
                g_free (rc_temp);
 
403
        }
 
404
 
 
405
        if(g_bDrawTextviewExpose){
 
406
                //code to register drawing over text view
 
407
                g_signal_connect (G_OBJECT (textview), "expose_event", G_CALLBACK(textview_expose_event_cb), NULL);
 
408
                gtk_widget_set_app_paintable (textview, TRUE);
 
409
                gtk_widget_set_redraw_on_allocate (textview, TRUE);
 
410
        }
 
411
 
 
412
        //init link color
 
413
        std::string strColor2;
 
414
        g_objIni.GetValue("Display", "LinkColor", strColor2, "#0000FF");
 
415
        GdkColor color2;
 
416
        gdk_color_parse (strColor2.c_str(), &color2);
 
417
        g_linkColor = color2;
 
418
 
 
419
        //init default node icon
 
420
        g_objIni.GetValue("Default", "NodeIconType", g_nDefaultNodeIconType, -2);
 
421
        g_objIni.GetValue("Security", "NodeIconValue", g_strDefaultIconFile, "");
 
422
 
 
423
        //
 
424
        g_objIni.GetValue("Search", "CaseSensitive", g_objSearchInfo.m_bFindSensitive, false);
 
425
 
 
426
        //set custom tab size
 
427
        int     nCustomTabSize = 0;
 
428
        g_objIni.GetValue("Display", "CustomTabSize", nCustomTabSize, 0);
 
429
        if(nCustomTabSize > 0)
 
430
        {
 
431
                int nWidthPixels = g_text.CalcTabWidthInPixels(nCustomTabSize);
 
432
                g_text.SetTabWidth(nWidthPixels);
 
433
        }
 
434
 
 
435
        //disable "New notecase" item when single instance is on
 
436
        bool bSingleInst;
 
437
        if(g_objIni.GetValue("Startup", "AllowSingleInstance", bSingleInst) && bSingleInst){
 
438
                GtkWidget *new_notecase1 = lookup_widget(window1, "new_notecase1");
 
439
                gtk_widget_set_sensitive(new_notecase1, FALSE);
 
440
        }
 
441
 
 
442
        if(g_bInitialLoad)
 
443
                g_timeout_add (0, initial_load_timer, NULL);
 
444
 
 
445
        g_tree.SetFocus();      // set initial focus
 
446
 
 
447
        gtk_widget_show (window1);
 
448
 
 
449
        //load global option
 
450
        g_objIni.GetValue("Display", "MinimizeToTray", g_bMinimizeToTray);
 
451
        g_objIni.GetValue("Display", "CloseToTray", g_bCloseToTray);
 
452
        g_objIni.GetValue("Default", "CloseDlgOnTxtEnter", g_bCloseDlgOnTextEnter, true);
 
453
        g_objIni.GetValue("Save", "AutoSaveOnClose", g_bAutoSaveOnClose);
 
454
        g_objIni.GetValue("Save",  "SkipMemOnlyAutoSave", g_bSkipMemOnlyAutosave, true);
 
455
        g_objIni.GetValue("Export", "ExportEmbeddedAsSeparateFile", g_bExportDataAsSeparateFile, 1);
 
456
 
 
457
        if(g_bWrapTree)
 
458
                g_tree.WrapTreeToSize(g_tree.m_pWidget->allocation.width);
 
459
 
 
460
        restart_autosave();
 
461
}
 
462
 
 
463
//TOFIX make class member RefreshTitle()
 
464
void RefreshMainTitle()
 
465
{
 
466
        if(!g_wnd.m_pWidget)    //no need if doing export from cmd line
 
467
                return;
 
468
 
 
469
        std::string strTitle;
 
470
 
 
471
        //basename of the document
 
472
        if(g_doc.GetPath().size()>0)
 
473
        {
 
474
                strTitle += GetBaseName(g_doc.GetPath().c_str());
 
475
                if(g_doc.IsModified())
 
476
                        strTitle += "*";
 
477
 
 
478
                strTitle += " - ";
 
479
 
 
480
                strTitle += APP_NAME_STR;
 
481
                strTitle += " ";
 
482
                strTitle += APP_VER_STR;
 
483
                strTitle += " ";
 
484
 
 
485
                strTitle += "[";
 
486
                strTitle += g_doc.GetPath().c_str();
 
487
                strTitle += "]";
 
488
        }
 
489
        else
 
490
        {
 
491
                strTitle += APP_NAME_STR;
 
492
                strTitle += " ";
 
493
                strTitle += APP_VER_STR;
 
494
        }
 
495
 
 
496
        gtk_window_set_title (GTK_WINDOW (window1), strTitle.c_str());
 
497
}
 
498
 
 
499
GtkWidget* MainWindow::create_main_win ()
 
500
{
 
501
#ifdef _NOKIA_MAEMO
 
502
    HildonProgram *program;
 
503
    HildonWindow *window1;
 
504
#else
 
505
        GtkWidget *window1;
 
506
#endif
 
507
 
 
508
        GtkWidget *vbox1;
 
509
        GtkWidget *menubar1;
 
510
        GtkWidget *hbox1;
 
511
        GtkWidget *scrolledwindow1;
 
512
        GtkWidget *treeview1;
 
513
        GtkWidget *scrolledwindow2;
 
514
        GtkWidget *textview1;
 
515
        GtkWidget *statusbar1;
 
516
        GtkWidget *vbox2;
 
517
        GtkWidget *label1;
 
518
        GtkAccelGroup *accel_group;
 
519
        GtkWidget *toolbar1;
 
520
 
 
521
#ifdef _NOKIA_MAEMO
 
522
        // Create the hildon program and setup the title
 
523
    program = HILDON_PROGRAM(hildon_program_get_instance());
 
524
    g_set_application_name("Notecase");
 
525
#endif
 
526
 
 
527
        accel_group = gtk_accel_group_new ();
 
528
 
 
529
        //prepare version string
 
530
        std::string strApp(APP_NAME_STR);
 
531
        strApp += " ";
 
532
        strApp += APP_VER_STR;
 
533
 
 
534
#ifdef _NOKIA_MAEMO
 
535
    // Create HildonWindow and set it to HildonProgram
 
536
    window1 = HILDON_WINDOW(hildon_window_new());
 
537
    hildon_program_add_window(program, window1);
 
538
#else
 
539
        window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
540
        gtk_window_set_title (GTK_WINDOW (window1), strApp.c_str());
 
541
#endif
 
542
 
 
543
        vbox1 = gtk_vbox_new (FALSE, 0);
 
544
        gtk_widget_show (vbox1);
 
545
        gtk_container_add (GTK_CONTAINER (window1), vbox1);
 
546
 
 
547
#ifdef _NOKIA_MAEMO
 
548
        menubar1 = NULL;
 
549
#else
 
550
        menubar1 = gtk_menu_bar_new ();
 
551
        gtk_widget_show (menubar1);
 
552
        gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
 
553
#endif
 
554
 
 
555
        create_menu(GTK_WIDGET(window1), menubar1, accel_group);
 
556
 
 
557
        // create toolbar
 
558
        toolbar1 = create_toolbar();
 
559
 
 
560
#ifdef _NOKIA_MAEMO
 
561
        hildon_window_add_toolbar(window1, GTK_TOOLBAR(toolbar1));
 
562
#else
 
563
        gtk_box_pack_start (GTK_BOX (vbox1), toolbar1, FALSE, FALSE, 0);
 
564
#endif
 
565
 
 
566
        //
 
567
        hbox1 = gtk_hpaned_new ();
 
568
        gtk_widget_show (hbox1);
 
569
        gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
 
570
        gtk_paned_set_position (GTK_PANED (hbox1), 0);
 
571
 
 
572
        GtkWidget *frameLeft = gtk_frame_new (NULL);
 
573
        GtkWidget *frameRight = gtk_frame_new (NULL);
 
574
        gtk_frame_set_shadow_type (GTK_FRAME (frameLeft), GTK_SHADOW_IN);
 
575
        gtk_frame_set_shadow_type (GTK_FRAME (frameRight), GTK_SHADOW_IN);
 
576
        gtk_widget_show (frameLeft);
 
577
        gtk_widget_show (frameRight);
 
578
 
 
579
        scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
 
580
        gtk_widget_show (scrolledwindow1);
 
581
 
 
582
        if(g_lang.IsCurLangRTL() || g_bTreeToTheRight)  //RTL support
 
583
                gtk_container_add( GTK_CONTAINER(frameRight), scrolledwindow1 );
 
584
        else
 
585
                gtk_container_add( GTK_CONTAINER(frameLeft), scrolledwindow1 );
 
586
 
 
587
        gtk_paned_pack1(GTK_PANED(hbox1), frameLeft, FALSE, TRUE);
 
588
 
 
589
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
590
 
 
591
        //create tree view
 
592
        g_tree.Create();
 
593
        treeview1 = g_tree.m_pWidget;
 
594
        gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview1);
 
595
 
 
596
        vbox2 = gtk_vbox_new (FALSE, 0);
 
597
        gtk_widget_show (vbox2);
 
598
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 2);
 
599
 
 
600
        if(g_lang.IsCurLangRTL() || g_bTreeToTheRight) //RTL support
 
601
                gtk_container_add( GTK_CONTAINER(frameLeft), vbox2 );
 
602
        else
 
603
                gtk_container_add( GTK_CONTAINER(frameRight), vbox2 );
 
604
 
 
605
        gtk_paned_pack2 (GTK_PANED (hbox1), frameRight, TRUE, TRUE);
 
606
 
 
607
        //create text node label
 
608
        label1 = gtk_label_new ("");
 
609
        gtk_label_set_selectable(GTK_LABEL(label1), TRUE);
 
610
        gtk_widget_set_size_request(label1, 300, -1);
 
611
        gtk_misc_set_alignment(GTK_MISC(label1), 0.0f, 0.7f);  // horizontal: left aligned, vertically centered
 
612
        gtk_misc_set_padding(GTK_MISC(label1), 0, 2);
 
613
        gtk_box_pack_start (GTK_BOX (vbox2), label1, FALSE, FALSE, 0);
 
614
 
 
615
        //hack trying to fake top margin for text view
 
616
        GtkWidget *margin1 = NULL;
 
617
        if(g_bDrawTextviewExpose){
 
618
                margin1 = gtk_label_new ("");
 
619
                gtk_widget_show (margin1);
 
620
                gtk_widget_set_size_request(margin1, -1, 5);
 
621
                gtk_box_pack_start (GTK_BOX (vbox2), margin1, FALSE, FALSE, 0);
 
622
                gtk_widget_set_app_paintable (margin1, TRUE);
 
623
                gtk_widget_set_redraw_on_allocate   (margin1, TRUE);
 
624
                g_signal_connect (G_OBJECT (margin1), "expose_event", G_CALLBACK(textview1_expose_event_cb), NULL);
 
625
        }
 
626
 
 
627
        scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
 
628
        gtk_widget_show (scrolledwindow2);
 
629
        gtk_box_pack_start (GTK_BOX (vbox2), scrolledwindow2, TRUE, TRUE, 0);
 
630
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
631
 
 
632
        //hack trying to fake bottom margin for text view
 
633
        GtkWidget *margin2 = NULL;
 
634
        if(g_bDrawTextviewExpose){
 
635
                margin2 = gtk_label_new ("");
 
636
                gtk_widget_show (margin2);
 
637
                gtk_widget_set_size_request(margin2, -1, 5);
 
638
                gtk_widget_set_app_paintable (margin1, TRUE);
 
639
                gtk_widget_set_redraw_on_allocate (margin2, TRUE);
 
640
                gtk_box_pack_start (GTK_BOX (vbox2), margin2, FALSE, FALSE, 0);
 
641
                g_signal_connect (G_OBJECT (margin2), "expose_event", G_CALLBACK(textview1_expose_event_cb), NULL);
 
642
        }
 
643
 
 
644
        //create text view
 
645
        g_text.Create();
 
646
        g_text.SetEditable(false);      // no selected node
 
647
        textview1 = g_text.m_pWidget;
 
648
        gtk_container_add (GTK_CONTAINER (scrolledwindow2), textview1);
 
649
 
 
650
        statusbar1 = gtk_statusbar_new ();
 
651
        //gtk_widget_show (statusbar1);
 
652
        gtk_box_pack_start (GTK_BOX (vbox1), statusbar1, FALSE, FALSE, 0);
 
653
 
 
654
        g_signal_connect (GTK_OBJECT (window1), "window_state_event", G_CALLBACK(window_state_event),  NULL);
 
655
        g_signal_connect (GTK_OBJECT (scrolledwindow1), "size-allocate", G_CALLBACK(on_tree_resize),  NULL);
 
656
 
 
657
        // Store pointers to all widgets, for use by lookup_widget()
 
658
        GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
 
659
        GLADE_HOOKUP_OBJECT (window1, vbox1, "vbox1");
 
660
#ifndef _NOKIA_MAEMO
 
661
        GLADE_HOOKUP_OBJECT (window1, menubar1, "menubar1");
 
662
#endif
 
663
        GLADE_HOOKUP_OBJECT (window1, hbox1, "hbox1");
 
664
        GLADE_HOOKUP_OBJECT (window1, scrolledwindow1, "scrolledwindow1");
 
665
        GLADE_HOOKUP_OBJECT (window1, treeview1, "treeview1");
 
666
        GLADE_HOOKUP_OBJECT (window1, scrolledwindow2, "scrolledwindow2");
 
667
        GLADE_HOOKUP_OBJECT (window1, textview1, "textview1");
 
668
        GLADE_HOOKUP_OBJECT (window1, statusbar1, "statusbar1");
 
669
        GLADE_HOOKUP_OBJECT (window1, vbox2, "vbox2");
 
670
        GLADE_HOOKUP_OBJECT (window1, label1, "label1");
 
671
        GLADE_HOOKUP_OBJECT (window1, toolbar1, "toolbar1");
 
672
        if(g_bDrawTextviewExpose){
 
673
                GLADE_HOOKUP_OBJECT (window1, margin1, "margin1");
 
674
                GLADE_HOOKUP_OBJECT (window1, margin2, "margin2");
 
675
        }
 
676
 
 
677
        gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);
 
678
 
 
679
        g_doc.SetPassCallback(PasswordCallback);
 
680
 
 
681
#ifdef _WIN32
 
682
#else
 
683
        //set window/application icon
 
684
        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&notecase_xpm);
 
685
        gtk_window_set_icon(GTK_WINDOW(window1), pixbuf);
 
686
        g_object_unref(pixbuf);
 
687
#endif
 
688
 
 
689
        //modify context menu for text view widget
 
690
        g_signal_connect(G_OBJECT(textview1), "populate-popup", G_CALLBACK(on_textview_populate_popup), NULL);
 
691
 
 
692
#ifdef _NOKIA_MAEMO
 
693
        //first one is required for maemo
 
694
        gtk_widget_show_all(GTK_WIDGET(window1));
 
695
        gtk_widget_hide_all(toolbar1);  // hidden on startup
 
696
        gtk_widget_hide(statusbar1);    // hidden on startup
 
697
        gtk_widget_hide(label1);                // hidden on startup (node title bar)
 
698
#endif
 
699
 
 
700
        return GTK_WIDGET(window1);
 
701
}
 
702
 
 
703
GtkWidget* MainWindow::create_toolbar()
 
704
{
 
705
        GtkWidget *toolitem1;
 
706
        GtkWidget *button3;
 
707
        GtkIconSize tmp_toolbar_icon_size;
 
708
 
 
709
        GtkWidget *toolbar1 = gtk_toolbar_new ();
 
710
        //gtk_widget_show (toolbar1);  //initialy invisible (set by .ini value)
 
711
 
 
712
        gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_ICONS);
 
713
        gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar1), GTK_ICON_SIZE_SMALL_TOOLBAR);
 
714
        tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar1));
 
715
 
 
716
        g_signal_connect (GTK_OBJECT (toolbar1), "focus", G_CALLBACK(on_focus_event), NULL);
 
717
 
 
718
        gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar1), TRUE );
 
719
        GtkTooltips *tips = gtk_tooltips_new ();
 
720
 
 
721
        button3 = gtk_image_new_from_stock (GTK_STOCK_NEW, tmp_toolbar_icon_size);
 
722
        gtk_widget_show (button3);
 
723
 
 
724
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("New"));
 
725
        gtk_widget_show (toolitem1);
 
726
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
727
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("New"), NULL);
 
728
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_new1_activate), NULL);
 
729
 
 
730
 
 
731
        button3 = gtk_image_new_from_stock (GTK_STOCK_OPEN, tmp_toolbar_icon_size);
 
732
        gtk_widget_show (button3);
 
733
 
 
734
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Open"));
 
735
        gtk_widget_show (toolitem1);
 
736
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
737
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Open"), NULL);
 
738
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_open1_activate), NULL);
 
739
 
 
740
 
 
741
        button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE, tmp_toolbar_icon_size);
 
742
        gtk_widget_show (button3);
 
743
 
 
744
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Save"));
 
745
        gtk_widget_show (toolitem1);
 
746
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
747
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Save"), NULL);
 
748
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_save1_activate), NULL);
 
749
 
 
750
#ifndef _NOKIA_MAEMO
 
751
        button3 = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, tmp_toolbar_icon_size);
 
752
        gtk_widget_show (button3);
 
753
 
 
754
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Save As"));
 
755
        gtk_widget_show (toolitem1);
 
756
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
757
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Save As"), NULL);
 
758
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_save_as1_activate), NULL);
 
759
 
 
760
        //append space
 
761
        toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
 
762
        gtk_widget_show (toolitem1);
 
763
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
764
 
 
765
 
 
766
        button3 = gtk_image_new_from_stock (GTK_STOCK_UNDO, tmp_toolbar_icon_size);
 
767
        gtk_widget_show (button3);
 
768
 
 
769
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Undo"));
 
770
        gtk_widget_show (toolitem1);
 
771
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
772
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Undo"), NULL);
 
773
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_undo_activate), NULL);
 
774
        gtk_widget_set_sensitive(toolitem1, FALSE);
 
775
        m_pToolbarUndo = toolitem1;
 
776
 
 
777
        button3 = gtk_image_new_from_stock (GTK_STOCK_REDO, tmp_toolbar_icon_size);
 
778
        gtk_widget_show (button3);
 
779
 
 
780
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Redo"));
 
781
        gtk_widget_show (toolitem1);
 
782
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
783
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Redo"), NULL);
 
784
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_redo_activate), NULL);
 
785
        gtk_widget_set_sensitive(toolitem1, FALSE);
 
786
        m_pToolbarRedo = toolitem1;
 
787
 
 
788
        button3 = gtk_image_new_from_stock (GTK_STOCK_CUT, tmp_toolbar_icon_size);
 
789
        gtk_widget_show (button3);
 
790
 
 
791
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Cut"));
 
792
        gtk_widget_show (toolitem1);
 
793
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
794
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Cut"), NULL);
 
795
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_cut1_activate), NULL);
 
796
 
 
797
 
 
798
        button3 = gtk_image_new_from_stock (GTK_STOCK_COPY, tmp_toolbar_icon_size);
 
799
        gtk_widget_show (button3);
 
800
 
 
801
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Copy"));
 
802
        gtk_widget_show (toolitem1);
 
803
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
804
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Copy"), NULL);
 
805
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_copy1_activate), NULL);
 
806
 
 
807
 
 
808
        button3 = gtk_image_new_from_stock (GTK_STOCK_PASTE, tmp_toolbar_icon_size);
 
809
        gtk_widget_show (button3);
 
810
 
 
811
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Paste"));
 
812
        gtk_widget_show (toolitem1);
 
813
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
814
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Paste"), NULL);
 
815
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_paste1_activate), NULL);
 
816
 
 
817
 
 
818
        button3 = gtk_image_new_from_stock (GTK_STOCK_DELETE, tmp_toolbar_icon_size);
 
819
        gtk_widget_show (button3);
 
820
 
 
821
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Delete"));
 
822
        gtk_widget_show (toolitem1);
 
823
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
824
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Delete"), NULL);
 
825
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_delete1_activate), NULL);
 
826
#endif
 
827
 
 
828
//#if 1
 
829
#ifdef _NOKIA_MAEMO
 
830
        //insert node
 
831
        button3 = gtk_image_new_from_stock (GTK_STOCK_ADD, tmp_toolbar_icon_size);
 
832
        gtk_widget_show (button3);
 
833
 
 
834
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Insert Node"));
 
835
        gtk_widget_show (toolitem1);
 
836
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
837
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Insert Node"), NULL);
 
838
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_menu_insert_node), NULL);
 
839
 
 
840
        //move node left
 
841
        button3 = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, tmp_toolbar_icon_size);
 
842
        gtk_widget_show (button3);
 
843
 
 
844
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Move Node Left"));
 
845
        gtk_widget_show (toolitem1);
 
846
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
847
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Move Node Left"), NULL);
 
848
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_menu_move_left), NULL);
 
849
 
 
850
        //move node right
 
851
        button3 = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, tmp_toolbar_icon_size);
 
852
        gtk_widget_show (button3);
 
853
 
 
854
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Move Node Right"));
 
855
        gtk_widget_show (toolitem1);
 
856
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
857
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Move Node Right"), NULL);
 
858
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_menu_move_right), NULL);
 
859
#endif
 
860
 
 
861
        //append space
 
862
        toolitem1 = (GtkWidget*) gtk_separator_tool_item_new();
 
863
        gtk_widget_show (toolitem1);
 
864
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
865
 
 
866
 
 
867
        // link wizard button
 
868
        GdkPixbuf* pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&page_link);
 
869
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
870
        gtk_widget_show (button3);
 
871
 
 
872
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Link wizard"));
 
873
        gtk_widget_show (toolitem1);
 
874
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
875
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Link wizard"), NULL);
 
876
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_link_wizard_activate), NULL);
 
877
 
 
878
        // insert image button
 
879
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_picture);
 
880
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
881
        gtk_widget_show (button3);
 
882
 
 
883
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Insert Picture"));
 
884
        gtk_widget_show (toolitem1);
 
885
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
886
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Insert Picture"), NULL);
 
887
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_insert_picture_activate), NULL);
 
888
 
 
889
        // insert image button
 
890
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_attachment);
 
891
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
892
        gtk_widget_show (button3);
 
893
 
 
894
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
 
895
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Node Attachments"));
 
896
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
897
 
 
898
        gtk_widget_show (toolitem1);
 
899
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
900
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Node Attachments"), NULL);
 
901
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_node_attachments_activate), NULL);
 
902
 
 
903
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_attachments");
 
904
        m_pToolbarAttachment = toolitem1;
 
905
 
 
906
        // insert bold button
 
907
        //button3 = gtk_image_new_from_stock (GTK_STOCK_BOLD, tmp_toolbar_icon_size);
 
908
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bold);
 
909
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
910
        gtk_widget_show (button3);
 
911
 
 
912
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
 
913
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Bold"));
 
914
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
915
 
 
916
        gtk_widget_show (toolitem1);
 
917
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
918
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Bold"), NULL);
 
919
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_bold_activate), NULL);
 
920
 
 
921
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_bold");
 
922
        m_pToolbarBold = toolitem1;
 
923
 
 
924
        // insert italic button
 
925
        //button3 = gtk_image_new_from_stock (GTK_STOCK_ITALIC, tmp_toolbar_icon_size);
 
926
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_italic);
 
927
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
928
        gtk_widget_show (button3);
 
929
 
 
930
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new  ();
 
931
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Italic"));
 
932
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
933
 
 
934
        gtk_widget_show (toolitem1);
 
935
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
936
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Italic"), NULL);
 
937
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_italic_activate), NULL);
 
938
 
 
939
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_italic");
 
940
        m_pToolbarItalic = toolitem1;
 
941
 
 
942
        // insert underline button
 
943
        //button3 = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, tmp_toolbar_icon_size);
 
944
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_underline);
 
945
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
946
        gtk_widget_show (button3);
 
947
 
 
948
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new  ();
 
949
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Underline"));
 
950
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
951
 
 
952
        gtk_widget_show (toolitem1);
 
953
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
954
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Underline"), NULL);
 
955
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_underline_activate), NULL);
 
956
 
 
957
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_underline");
 
958
        m_pToolbarUnderline = toolitem1;
 
959
 
 
960
        // insert strikethrough button
 
961
        //button3 = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, tmp_toolbar_icon_size);
 
962
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_strikethrough);
 
963
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
964
        gtk_widget_show (button3);
 
965
 
 
966
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new  ();
 
967
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Strikethrough"));
 
968
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
969
 
 
970
        gtk_widget_show (toolitem1);
 
971
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
972
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Strikethrough"), NULL);
 
973
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_strikethrough_activate), NULL);
 
974
 
 
975
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_strikethrough");
 
976
        m_pToolbarStrike = toolitem1;
 
977
 
 
978
        // insert color button
 
979
        //button3 = gtk_image_new_from_stock (GTK_STOCK_SELECT_COLOR, tmp_toolbar_icon_size);
 
980
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_color_xpm);
 
981
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
982
        gtk_widget_show (button3);
 
983
 
 
984
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
 
985
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Text Color"));
 
986
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
987
 
 
988
        gtk_widget_show (toolitem1);
 
989
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
990
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Text Color"), NULL);
 
991
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_color_activate), NULL);
 
992
 
 
993
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_color");
 
994
        m_pToolbarColor = toolitem1;
 
995
 
 
996
        // insert bkg color button
 
997
        //button3 = gtk_image_new_from_stock (GTK_STOCK_SELECT_COLOR, tmp_toolbar_icon_size);
 
998
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bg_color_xpm);
 
999
        button3 = gtk_image_new_from_pixbuf (pixbuf);
 
1000
        gtk_widget_show (button3);
 
1001
 
 
1002
        toolitem1 = (GtkWidget*) gtk_toggle_tool_button_new ();
 
1003
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolitem1), _("Text Background Color"));
 
1004
        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(toolitem1), button3);
 
1005
 
 
1006
        gtk_widget_show (toolitem1);
 
1007
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
1008
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Text Background Color"), NULL);
 
1009
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_text_background_color_activate), NULL);
 
1010
 
 
1011
        GLADE_HOOKUP_OBJECT (toolbar1, toolitem1, "toolbar_bkg_color");
 
1012
        m_pToolbarBkgColor = toolitem1;
 
1013
 
 
1014
        //insert help button
 
1015
        button3 = gtk_image_new_from_stock (GTK_STOCK_HELP, tmp_toolbar_icon_size);
 
1016
        gtk_widget_show (button3);
 
1017
 
 
1018
        toolitem1 = (GtkWidget*) gtk_tool_button_new (button3, _("Help"));
 
1019
        gtk_widget_show (toolitem1);
 
1020
        gtk_container_add (GTK_CONTAINER (toolbar1), toolitem1);
 
1021
        gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(toolitem1), tips, _("Help"), NULL);
 
1022
        g_signal_connect (GTK_OBJECT (toolitem1), "clicked", G_CALLBACK(on_help1_activate), NULL);
 
1023
 
 
1024
        return toolbar1;
 
1025
}
 
1026
 
 
1027
gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event)
 
1028
{
 
1029
        if(event->changed_mask & GDK_WINDOW_STATE_ICONIFIED)
 
1030
        {
 
1031
                if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
 
1032
                {
 
1033
                        //on window minimized, show tray icon
 
1034
                        if(g_bMinimizeToTray)
 
1035
                        {
 
1036
                                g_tray.Show();
 
1037
                                g_tray.SetTooltip("NoteCase"); //important: call this after Show
 
1038
                                gtk_widget_hide(window1);
 
1039
                        }
 
1040
                }
 
1041
        }
 
1042
        return FALSE;
 
1043
}
 
1044
 
 
1045
const char *PasswordCallback(const char *szFile, bool bSave)
 
1046
{
 
1047
        static char szPass[1024] = "";
 
1048
        szPass[0] = '\0';
 
1049
 
 
1050
        bool bCursor = g_bBusyCursor;
 
1051
        if(bCursor)
 
1052
                HideBusyCursor();       //restore the normal cursor for the moment
 
1053
 
 
1054
        //ask user for password
 
1055
        PasswordDialog dlg(bSave ? MODE_PASS_NEW : MODE_PASS_VERIFY);
 
1056
 
 
1057
        //set label
 
1058
        std::string strLabel = _("Please enter the password for file: ");
 
1059
        strLabel += GetBaseName(szFile);
 
1060
        dlg.SetLabel(strLabel.c_str());
 
1061
 
 
1062
        gtk_grab_add( dlg.GetDialog() );        //block all other widgets in the app
 
1063
 
 
1064
        if(GTK_RESPONSE_OK == dlg.ShowModal())
 
1065
        {
 
1066
                //get result
 
1067
                const char *szText = dlg.GetPassword();
 
1068
                if(szText)
 
1069
                        strcpy(szPass, szText);
 
1070
        }
 
1071
 
 
1072
        gtk_grab_remove(dlg.GetDialog());       //unblock
 
1073
        dlg.Destroy();
 
1074
 
 
1075
        if(bCursor)
 
1076
                ShowBusyCursor(); //keep showing busy
 
1077
 
 
1078
        //return password
 
1079
        if(strlen(szPass)<1)
 
1080
                return NULL;
 
1081
        return szPass;
 
1082
}
 
1083
 
 
1084
void create_menu (GtkWidget *window1, GtkWidget *menubar1, GtkAccelGroup *accel_group)
 
1085
{
 
1086
        GtkWidget *menuitem1;
 
1087
        GtkWidget *menu1;
 
1088
        GtkWidget *new1;
 
1089
        GtkWidget *new_notecase1;
 
1090
        GtkWidget *open1;
 
1091
        GtkWidget *close1;
 
1092
        GtkWidget *save1;
 
1093
        GtkWidget *save_as1;
 
1094
        GtkWidget *reload1;
 
1095
        GtkWidget *lock1;
 
1096
        GtkWidget *change_pass1;
 
1097
        GtkWidget *read_only1;
 
1098
        GtkWidget *separatormenuitem1;
 
1099
        GtkWidget *quit1;
 
1100
        GtkWidget *menuitem2;
 
1101
        GtkWidget *menu2;
 
1102
        GtkWidget *cut1;
 
1103
        GtkWidget *copy1;
 
1104
        GtkWidget *paste1;
 
1105
        GtkWidget *delete1;
 
1106
        GtkWidget *find1;
 
1107
        GtkWidget *find2;
 
1108
        GtkWidget *replace1;
 
1109
        GtkWidget *link1;
 
1110
        GtkWidget *title1;
 
1111
        GtkWidget *statbar1;
 
1112
        GtkWidget *menutool1;
 
1113
        GtkWidget *menufull1;
 
1114
        GtkWidget *wrap1;
 
1115
        GtkWidget *options1;
 
1116
        GtkWidget *shortcuts1;
 
1117
        GtkWidget *undo1;
 
1118
        GtkWidget *redo1;
 
1119
        GtkWidget *menuitem3;
 
1120
        GtkWidget *menu3;
 
1121
        GtkWidget *menuitem4;
 
1122
        GtkWidget *menu4;
 
1123
        GtkWidget *about1;
 
1124
        GtkWidget *help1;
 
1125
        GtkWidget *website1;
 
1126
        GtkWidget *icon;
 
1127
        GtkWidget *menu_item;
 
1128
        GtkWidget *textonly1;
 
1129
        GtkWidget *menu5;
 
1130
        GtkWidget *menuitem5;
 
1131
        GtkWidget *move_item;
 
1132
        GtkWidget *submenu;
 
1133
        GtkWidget *wordcount1;
 
1134
        GtkWidget *sort_item;
 
1135
        GtkWidget *bold1;
 
1136
        GtkWidget *italic1;
 
1137
        GtkWidget *underline1;
 
1138
        GtkWidget *strikethrough1;
 
1139
        GtkWidget *color1;
 
1140
        GtkWidget *bkgcolor1;
 
1141
        GtkWidget *picture1;
 
1142
        GtkWidget *remove_format1;
 
1143
        GtkWidget *attachments1;
 
1144
        GtkTooltips *menutips;
 
1145
        GtkWidget *ontop1;
 
1146
#ifdef HAVE_GTKSOURCEVIEW
 
1147
        GtkWidget *lines1;
 
1148
#endif
 
1149
 
 
1150
        menutips = gtk_tooltips_new();
 
1151
        gtk_tooltips_enable(menutips);
 
1152
 
 
1153
#ifdef _NOKIA_MAEMO
 
1154
        GtkWidget *maemomenu = gtk_menu_new ();
 
1155
#endif
 
1156
 
 
1157
        menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File"));
 
1158
        gtk_widget_show (menuitem1);
 
1159
#ifdef _NOKIA_MAEMO
 
1160
        gtk_menu_append(GTK_MENU(maemomenu), menuitem1);
 
1161
#else
 
1162
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem1);
 
1163
#endif
 
1164
 
 
1165
        menu1 = gtk_menu_new ();
 
1166
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menu1);
 
1167
 
 
1168
        new_notecase1 = gtk_image_menu_item_new_with_mnemonic (_("New _Window"));
 
1169
        gtk_widget_show (new_notecase1);
 
1170
        gtk_container_add (GTK_CONTAINER (menu1), new_notecase1);
 
1171
                GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&notecase_xpm);
 
1172
        GdkPixbuf *destpix = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_BILINEAR);
 
1173
        g_object_unref (G_OBJECT (pixbuf));
 
1174
        icon = gtk_image_new_from_pixbuf (destpix);
 
1175
        gtk_widget_show (icon);
 
1176
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new_notecase1), icon);
 
1177
        int nPos = g_shortcuts.FindByAction(NC_ACTION_APP_NEW);
 
1178
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1179
                gtk_widget_add_accelerator (new_notecase1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1180
 
 
1181
        new1 = gtk_image_menu_item_new_with_mnemonic (_("_New"));
 
1182
        gtk_widget_show (new1);
 
1183
        gtk_container_add (GTK_CONTAINER (menu1), new1);
 
1184
        icon = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
 
1185
        gtk_widget_show (icon);
 
1186
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (new1), icon);
 
1187
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_NEW);
 
1188
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1189
                gtk_widget_add_accelerator (new1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1190
 
 
1191
        open1 = gtk_image_menu_item_new_with_mnemonic (_("_Open"));
 
1192
        gtk_widget_show (open1);
 
1193
        gtk_container_add (GTK_CONTAINER (menu1), open1);
 
1194
        icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
 
1195
        gtk_widget_show (icon);
 
1196
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open1), icon);
 
1197
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_OPEN);
 
1198
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1199
                gtk_widget_add_accelerator (open1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1200
 
 
1201
        close1 = gtk_image_menu_item_new_with_mnemonic (_("_Close"));
 
1202
        gtk_widget_show (close1);
 
1203
        gtk_container_add (GTK_CONTAINER (menu1), close1);
 
1204
        icon = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
 
1205
        gtk_widget_show (icon);
 
1206
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close1), icon);
 
1207
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_CLOSE);
 
1208
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1209
                gtk_widget_add_accelerator (close1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1210
 
 
1211
        save1 = gtk_image_menu_item_new_with_mnemonic (_("_Save"));
 
1212
        gtk_widget_show (save1);
 
1213
        gtk_container_add (GTK_CONTAINER (menu1), save1);
 
1214
        icon = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
 
1215
        gtk_widget_show (icon);
 
1216
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save1), icon);
 
1217
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_SAVE);
 
1218
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1219
                gtk_widget_add_accelerator (save1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1220
 
 
1221
        save_as1 = gtk_image_menu_item_new_with_mnemonic (_("Save _As"));
 
1222
        gtk_widget_show (save_as1);
 
1223
        gtk_container_add (GTK_CONTAINER (menu1), save_as1);
 
1224
        icon = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_MENU);
 
1225
        gtk_widget_show (icon);
 
1226
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (save_as1), icon);
 
1227
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_SAVE_AS);
 
1228
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1229
                gtk_widget_add_accelerator (save_as1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1230
 
 
1231
        reload1 = gtk_image_menu_item_new_with_mnemonic (_("Re_load"));
 
1232
        gtk_widget_show (reload1);
 
1233
        gtk_container_add (GTK_CONTAINER (menu1), reload1);
 
1234
        icon = gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_MENU);
 
1235
        gtk_widget_show (icon);
 
1236
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (reload1), icon);
 
1237
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_RELOAD);
 
1238
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1239
                gtk_widget_add_accelerator (reload1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1240
 
 
1241
        read_only1 = gtk_check_menu_item_new_with_mnemonic (_("Read-Only"));
 
1242
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(read_only1), TRUE);     //show check mark always
 
1243
        gtk_widget_show (read_only1);
 
1244
        gtk_container_add (GTK_CONTAINER (menu1), read_only1);
 
1245
        nPos = g_shortcuts.FindByAction(NC_ACTION_READ_ONLY);
 
1246
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1247
        gtk_widget_add_accelerator (read_only1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1248
        gtk_tooltips_set_tip(menutips, read_only1, _("Document property that forbids document editing."), NULL);
 
1249
 
 
1250
        lock1 = gtk_image_menu_item_new_with_mnemonic (_("_Lock Document"));
 
1251
        gtk_widget_show (lock1);
 
1252
        gtk_container_add (GTK_CONTAINER (menu1), lock1);
 
1253
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&lock_xpm);
 
1254
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1255
        gtk_widget_show (icon);
 
1256
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (lock1), icon);
 
1257
        nPos = g_shortcuts.FindByAction(NC_ACTION_LOCK_DOCUMENT);
 
1258
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1259
                gtk_widget_add_accelerator (lock1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1260
        gtk_widget_set_sensitive (lock1, FALSE);
 
1261
        gtk_tooltips_set_tip(menutips, lock1, _("Unload encrypted document from memory."), NULL);
 
1262
 
 
1263
        change_pass1 = gtk_image_menu_item_new_with_mnemonic (_("_Change Password"));
 
1264
        gtk_widget_show (change_pass1);
 
1265
        gtk_container_add (GTK_CONTAINER (menu1), change_pass1);
 
1266
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&key);
 
1267
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1268
        gtk_widget_show (icon);
 
1269
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (change_pass1), icon);
 
1270
        nPos = g_shortcuts.FindByAction(NC_ACTION_PASSWORD_CHANGE);
 
1271
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1272
                gtk_widget_add_accelerator (change_pass1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1273
        gtk_widget_set_sensitive (change_pass1, FALSE);
 
1274
 
 
1275
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1276
        gtk_widget_show (separatormenuitem1);
 
1277
        gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
 
1278
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1279
 
 
1280
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Import"));
 
1281
        gtk_widget_show (menu_item);  // Show the widget
 
1282
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_import), NULL);
 
1283
        gtk_menu_append(menu1, menu_item);
 
1284
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_IMPORT);
 
1285
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1286
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1287
 
 
1288
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Export"));
 
1289
        gtk_widget_show (menu_item);  // Show the widget
 
1290
        g_signal_connect(GTK_OBJECT(menu_item), "activate", G_CALLBACK (on_menu_export), NULL);
 
1291
        gtk_menu_append(menu1, menu_item);
 
1292
        nPos = g_shortcuts.FindByAction(NC_ACTION_DOC_EXPORT);
 
1293
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1294
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1295
 
 
1296
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1297
        gtk_widget_show (separatormenuitem1);
 
1298
        gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
 
1299
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1300
 
 
1301
        //
 
1302
        //  MRU (most recently used) list
 
1303
        //
 
1304
 
 
1305
        //create MRU item
 
1306
        g_menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Recent"));
 
1307
        gtk_widget_show (g_menuitem5);
 
1308
        gtk_container_add (GTK_CONTAINER (menu1), g_menuitem5);
 
1309
 
 
1310
        g_objMRU.Load();
 
1311
        g_objMRU.RebuildMenu();
 
1312
 
 
1313
        //add separator
 
1314
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1315
        gtk_widget_show (separatormenuitem1);
 
1316
        gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
 
1317
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1318
 
 
1319
        //continue creating menus
 
1320
        quit1 = gtk_image_menu_item_new_with_mnemonic (_("_Quit"));
 
1321
        gtk_widget_show (quit1);
 
1322
        gtk_container_add (GTK_CONTAINER (menu1), quit1);
 
1323
        icon = gtk_image_new_from_stock (GTK_STOCK_QUIT, GTK_ICON_SIZE_MENU);
 
1324
        gtk_widget_show (icon);
 
1325
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit1), icon);
 
1326
        nPos = g_shortcuts.FindByAction(NC_ACTION_APP_QUIT);
 
1327
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1328
                gtk_widget_add_accelerator (quit1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1329
 
 
1330
        //
 
1331
        // edit menu
 
1332
        //
 
1333
 
 
1334
        menuitem2 = gtk_menu_item_new_with_mnemonic (_("_Edit"));
 
1335
        gtk_widget_show (menuitem2);
 
1336
#ifdef _NOKIA_MAEMO
 
1337
        gtk_menu_append(GTK_MENU(maemomenu), menuitem2);
 
1338
#else
 
1339
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);
 
1340
#endif
 
1341
 
 
1342
        menu2 = gtk_menu_new ();
 
1343
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);
 
1344
 
 
1345
        undo1 = gtk_image_menu_item_new_with_mnemonic (_("_Undo"));
 
1346
        gtk_widget_show (undo1);
 
1347
        gtk_widget_set_sensitive(undo1, FALSE);
 
1348
        gtk_container_add (GTK_CONTAINER (menu2), undo1);
 
1349
        icon = gtk_image_new_from_stock (GTK_STOCK_UNDO, GTK_ICON_SIZE_MENU);
 
1350
        gtk_widget_show (icon);
 
1351
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (undo1), icon);
 
1352
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_UNDO);
 
1353
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1354
                gtk_widget_add_accelerator (undo1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1355
 
 
1356
        redo1 = gtk_image_menu_item_new_with_mnemonic (_("_Redo"));
 
1357
        gtk_widget_show (redo1);
 
1358
        gtk_widget_set_sensitive(redo1, FALSE);
 
1359
        gtk_container_add (GTK_CONTAINER (menu2), redo1);
 
1360
        icon = gtk_image_new_from_stock (GTK_STOCK_REDO, GTK_ICON_SIZE_MENU);
 
1361
        gtk_widget_show (icon);
 
1362
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (redo1), icon);
 
1363
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_REDO);
 
1364
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1365
                gtk_widget_add_accelerator (redo1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1366
 
 
1367
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1368
        gtk_widget_show (separatormenuitem1);
 
1369
        gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
 
1370
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1371
 
 
1372
        cut1 = gtk_image_menu_item_new_with_mnemonic (_("Cu_t"));
 
1373
        gtk_widget_show (cut1);
 
1374
        gtk_container_add (GTK_CONTAINER (menu2), cut1);
 
1375
        icon = gtk_image_new_from_stock (GTK_STOCK_CUT, GTK_ICON_SIZE_MENU);
 
1376
        gtk_widget_show (icon);
 
1377
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (cut1), icon);
 
1378
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_CUT);
 
1379
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1380
                gtk_widget_add_accelerator (cut1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1381
 
 
1382
        copy1 = gtk_image_menu_item_new_with_mnemonic (_("_Copy"));
 
1383
        gtk_widget_show (copy1);
 
1384
        gtk_container_add (GTK_CONTAINER (menu2), copy1);
 
1385
        icon = gtk_image_new_from_stock (GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
 
1386
        gtk_widget_show (icon);
 
1387
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (copy1), icon);
 
1388
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_COPY);
 
1389
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1390
                gtk_widget_add_accelerator (copy1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1391
 
 
1392
        paste1 = gtk_image_menu_item_new_with_mnemonic (_("_Paste"));
 
1393
        gtk_widget_show (paste1);
 
1394
        gtk_container_add (GTK_CONTAINER (menu2), paste1);
 
1395
        icon = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
 
1396
        gtk_widget_show (icon);
 
1397
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (paste1), icon);
 
1398
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_PASTE);
 
1399
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1400
                gtk_widget_add_accelerator (paste1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1401
 
 
1402
        delete1 = gtk_image_menu_item_new_with_mnemonic (_("_Delete"));
 
1403
        gtk_widget_show (delete1);
 
1404
        gtk_container_add (GTK_CONTAINER (menu2), delete1);
 
1405
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
 
1406
        gtk_widget_show (icon);
 
1407
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (delete1), icon);
 
1408
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_DELETE);
 
1409
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1410
                gtk_widget_add_accelerator (delete1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1411
 
 
1412
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Copy Branch _Structure"));
 
1413
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_copy_branch_structure), NULL);
 
1414
        gtk_menu_append(menu2, menu_item);
 
1415
        gtk_widget_show (menu_item);  // Show the widget
 
1416
        icon = gtk_image_new_from_stock (GTK_STOCK_COPY, GTK_ICON_SIZE_MENU);
 
1417
        gtk_widget_show (icon);
 
1418
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1419
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_COPY_BR_STRUCT);
 
1420
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1421
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1422
 
 
1423
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Paste Branch To Root"));
 
1424
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_paste_branch_root), NULL);
 
1425
        gtk_menu_append(menu2, menu_item);
 
1426
        gtk_widget_show (menu_item);  // Show the widget
 
1427
        icon = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
 
1428
        gtk_widget_show (icon);
 
1429
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1430
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_PASTE_BR_ROOT);
 
1431
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1432
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1433
 
 
1434
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Insert Date/Time"));
 
1435
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_date_time), NULL);
 
1436
        gtk_menu_append(menu2, menu_item);
 
1437
        gtk_widget_show (menu_item);  // Show the widget
 
1438
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_datetime);
 
1439
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1440
        gtk_widget_show (icon);
 
1441
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1442
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_INSERT_DATETIME);
 
1443
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1444
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1445
 
 
1446
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1447
        gtk_widget_show (separatormenuitem1);
 
1448
        gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
 
1449
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1450
 
 
1451
        find1 = gtk_image_menu_item_new_with_mnemonic (_("_Find"));
 
1452
        gtk_widget_show (find1);
 
1453
        gtk_container_add (GTK_CONTAINER (menu2), find1);
 
1454
        icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
 
1455
        gtk_widget_show (icon);
 
1456
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find1), icon);
 
1457
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_FIND);
 
1458
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1459
                gtk_widget_add_accelerator (find1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1460
 
 
1461
        find2 = gtk_image_menu_item_new_with_mnemonic (_("Find _Next"));
 
1462
        gtk_widget_show (find2);
 
1463
        gtk_container_add (GTK_CONTAINER (menu2), find2);
 
1464
        icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
 
1465
        gtk_widget_show (icon);
 
1466
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find2), icon);
 
1467
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_FIND_NEXT);
 
1468
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1469
                gtk_widget_add_accelerator (find2, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1470
 
 
1471
        replace1 = gtk_image_menu_item_new_with_mnemonic (_("R_eplace"));
 
1472
        gtk_widget_show (replace1);
 
1473
        gtk_container_add (GTK_CONTAINER (menu2), replace1);
 
1474
        icon = gtk_image_new_from_stock (GTK_STOCK_FIND_AND_REPLACE, GTK_ICON_SIZE_MENU);
 
1475
        gtk_widget_show (icon);
 
1476
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), icon);
 
1477
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_REPLACE);
 
1478
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1479
                gtk_widget_add_accelerator (replace1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1480
 
 
1481
        link1 = gtk_image_menu_item_new_with_mnemonic (_("Link _Wizard"));
 
1482
        gtk_widget_show (link1);
 
1483
        gtk_container_add (GTK_CONTAINER (menu2), link1);
 
1484
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&page_link);
 
1485
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1486
        gtk_widget_show (icon);
 
1487
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (link1), icon);
 
1488
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_LINK_WIZARD);
 
1489
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1490
                gtk_widget_add_accelerator (link1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1491
 
 
1492
        picture1 = gtk_image_menu_item_new_with_mnemonic (_("_Insert Picture"));
 
1493
        gtk_widget_show (picture1);
 
1494
        gtk_container_add (GTK_CONTAINER (menu2), picture1);
 
1495
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_picture);
 
1496
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1497
        gtk_widget_show (icon);
 
1498
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (picture1), icon);
 
1499
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_INSERT_PICTURE);
 
1500
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1501
                gtk_widget_add_accelerator (picture1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1502
 
 
1503
        attachments1 = gtk_image_menu_item_new_with_mnemonic (_("Node _Attachments"));
 
1504
        gtk_widget_show (attachments1);
 
1505
        gtk_container_add (GTK_CONTAINER (menu2), attachments1);
 
1506
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&icon_attachment);
 
1507
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1508
        gtk_widget_show (icon);
 
1509
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (attachments1), icon);
 
1510
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_ATTACHMENTS);
 
1511
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1512
                gtk_widget_add_accelerator (attachments1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1513
 
 
1514
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1515
        gtk_widget_show (separatormenuitem1);
 
1516
        gtk_container_add (GTK_CONTAINER (menu2), separatormenuitem1);
 
1517
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1518
 
 
1519
        shortcuts1 = gtk_image_menu_item_new_with_mnemonic (_("Configure Shortcuts"));
 
1520
        gtk_widget_show (shortcuts1);
 
1521
        gtk_container_add (GTK_CONTAINER (menu2), shortcuts1);
 
1522
        icon = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
 
1523
        gtk_widget_show (icon);
 
1524
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (shortcuts1), icon);
 
1525
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_SHORTCUTS);
 
1526
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1527
                gtk_widget_add_accelerator (shortcuts1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1528
 
 
1529
        options1 = gtk_image_menu_item_new_with_mnemonic (_("Configure NoteCase"));
 
1530
        gtk_widget_show (options1);
 
1531
        gtk_container_add (GTK_CONTAINER (menu2), options1);
 
1532
        icon = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
 
1533
        gtk_widget_show (icon);
 
1534
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (options1), icon);
 
1535
        nPos = g_shortcuts.FindByAction(NC_ACTION_EDIT_OPTIONS);
 
1536
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1537
                gtk_widget_add_accelerator (options1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1538
 
 
1539
        //
 
1540
        // View menu
 
1541
        //
 
1542
        menuitem3 = gtk_menu_item_new_with_mnemonic (_("_View"));
 
1543
        gtk_widget_show (menuitem3);
 
1544
#ifdef _NOKIA_MAEMO
 
1545
        gtk_menu_append(GTK_MENU(maemomenu), menuitem3);
 
1546
#else
 
1547
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem3);
 
1548
#endif
 
1549
 
 
1550
        menu3 = gtk_menu_new ();
 
1551
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menu3);
 
1552
 
 
1553
        menufull1 = gtk_check_menu_item_new_with_mnemonic (_("_Full Screen"));
 
1554
        gtk_widget_show (menufull1);
 
1555
        gtk_container_add (GTK_CONTAINER (menu3), menufull1);
 
1556
 
 
1557
#ifdef _NOKIA_MAEMO
 
1558
        gtk_widget_add_accelerator (menufull1, "activate", accel_group, HILDON_HARDKEY_FULLSCREEN, (GdkModifierType)0, (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1559
#endif
 
1560
#ifndef _NOKIA_MAEMO
 
1561
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_FULLSCREEN);
 
1562
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1563
                gtk_widget_add_accelerator (menufull1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1564
#endif
 
1565
 
 
1566
        ontop1 = gtk_check_menu_item_new_with_mnemonic (_("_Always on top"));
 
1567
        gtk_widget_show (ontop1);
 
1568
        gtk_container_add (GTK_CONTAINER (menu3), ontop1);
 
1569
        //TOFIX nPos = g_shortcuts.FindByAction(NC_ACTION_KEEP_ON_TOP);
 
1570
        //if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1571
        //      gtk_widget_add_accelerator (ontop1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1572
 
 
1573
        menutool1 = gtk_check_menu_item_new_with_mnemonic (_("_Tool Bar"));
 
1574
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(menutool1), TRUE);      //show check mark always
 
1575
        gtk_widget_show (menutool1);
 
1576
        gtk_container_add (GTK_CONTAINER (menu3), menutool1);
 
1577
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_TOOLBAR);
 
1578
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1579
                gtk_widget_add_accelerator (menutool1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1580
 
 
1581
        title1 = gtk_check_menu_item_new_with_mnemonic (_("_Node Title Bar"));
 
1582
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(title1), TRUE); //show check mark always
 
1583
        gtk_widget_show (title1);
 
1584
        gtk_container_add (GTK_CONTAINER (menu3), title1);
 
1585
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_NODE_TITLEBAR);
 
1586
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1587
                gtk_widget_add_accelerator (title1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1588
 
 
1589
        statbar1 = gtk_check_menu_item_new_with_mnemonic (_("_Status Bar"));
 
1590
        gtk_widget_show (statbar1);
 
1591
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(statbar1), TRUE);       //show check mark always
 
1592
        gtk_container_add (GTK_CONTAINER (menu3), statbar1);
 
1593
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_STATUS_BAR);
 
1594
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1595
                gtk_widget_add_accelerator (statbar1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1596
 
 
1597
#ifdef HAVE_GTKSOURCEVIEW
 
1598
        lines1 = gtk_check_menu_item_new_with_mnemonic (_("Line numbers"));
 
1599
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(lines1), TRUE); //show check mark always
 
1600
        gtk_widget_show (lines1);
 
1601
        gtk_container_add (GTK_CONTAINER (menu3), lines1);
 
1602
        //TOFIX nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_WRAP);
 
1603
        //if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1604
        //      gtk_widget_add_accelerator (wrap1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1605
#endif
 
1606
 
 
1607
        wrap1 = gtk_check_menu_item_new_with_mnemonic (_("_Wrap"));
 
1608
        gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(wrap1), TRUE);  //show check mark always
 
1609
        gtk_widget_show (wrap1);
 
1610
        gtk_container_add (GTK_CONTAINER (menu3), wrap1);
 
1611
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_WRAP);
 
1612
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1613
                gtk_widget_add_accelerator (wrap1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1614
 
 
1615
        textonly1 = gtk_menu_item_new_with_mnemonic (_("Change View _Mode"));
 
1616
        gtk_widget_show (textonly1);
 
1617
        gtk_container_add (GTK_CONTAINER (menu3), textonly1);
 
1618
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_CHANGE_MODE);
 
1619
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1620
                gtk_widget_add_accelerator (textonly1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1621
 
 
1622
        wordcount1 = gtk_menu_item_new_with_mnemonic (_("_Calculate Word Count"));
 
1623
        gtk_widget_show (wordcount1);
 
1624
        gtk_container_add (GTK_CONTAINER (menu3), wordcount1);
 
1625
        nPos = g_shortcuts.FindByAction(NC_ACTION_VIEW_WORD_COUNT);
 
1626
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1627
                gtk_widget_add_accelerator (wordcount1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1628
 
 
1629
        //
 
1630
        // tree menu (start)
 
1631
        //
 
1632
 
 
1633
        menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Tree"));
 
1634
        gtk_widget_show (menuitem5);
 
1635
#ifdef _NOKIA_MAEMO
 
1636
        gtk_menu_append(GTK_MENU(maemomenu), menuitem5);
 
1637
#else
 
1638
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem5);
 
1639
#endif
 
1640
 
 
1641
        menu5 = gtk_menu_new ();
 
1642
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem5), menu5);
 
1643
 
 
1644
        // ... add menu items with accelerators ...
 
1645
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Insert Node"));
 
1646
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_node), NULL);
 
1647
        gtk_menu_append(menu5, menu_item);
 
1648
        gtk_widget_show (menu_item);  // Show the widget
 
1649
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW);
 
1650
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1651
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1652
 
 
1653
        menu_item = gtk_menu_item_new_with_mnemonic(_("Insert Child _Node"));
 
1654
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_child_node), NULL);
 
1655
        gtk_menu_append(menu5, menu_item);
 
1656
        gtk_widget_show (menu_item);  // Show the widget
 
1657
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_NEW_CHILD);
 
1658
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1659
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1660
 
 
1661
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Delete Node"));
 
1662
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_delete_node), NULL);
 
1663
        gtk_menu_append(menu5, menu_item);
 
1664
        gtk_widget_show (menu_item);  // Show the widget
 
1665
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
 
1666
        gtk_widget_show (icon);
 
1667
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1668
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE);
 
1669
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1670
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1671
 
 
1672
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Rename Node"));
 
1673
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_rename_node), NULL);
 
1674
        gtk_menu_append(menu5, menu_item);
 
1675
        gtk_widget_show (menu_item);  // Show the widget
 
1676
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_RENAME);
 
1677
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1678
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1679
 
 
1680
        move_item = gtk_menu_item_new_with_mnemonic(_("_Move Node"));
 
1681
        gtk_menu_append(menu5, move_item);
 
1682
        gtk_widget_show (move_item);  // Show the widget
 
1683
 
 
1684
        sort_item = gtk_menu_item_new_with_mnemonic(_("_Sort"));
 
1685
        gtk_menu_append(menu5, sort_item);
 
1686
        gtk_widget_show (sort_item);  // Show the widget
 
1687
 
 
1688
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Expand All"));
 
1689
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_expand_all), NULL);
 
1690
        gtk_menu_append(menu5, menu_item);
 
1691
        gtk_widget_show (menu_item);  // Show the widget
 
1692
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_EXPAND_ALL);
 
1693
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1694
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1695
 
 
1696
        menu_item = gtk_menu_item_new_with_mnemonic(_("_Collapse All"));
 
1697
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_collapse_all), NULL);
 
1698
        gtk_menu_append(menu5, menu_item);
 
1699
        gtk_widget_show (menu_item);  // Show the widget
 
1700
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_COLAPSE_ALL);
 
1701
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1702
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1703
 
 
1704
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Node _Properties"));
 
1705
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_node_properties), NULL);
 
1706
        gtk_menu_append(menu5, menu_item);
 
1707
        gtk_widget_show (menu_item);  // Show the widget
 
1708
        icon = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
 
1709
        gtk_widget_show (icon);
 
1710
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1711
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_PROPERTIES);
 
1712
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1713
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1714
 
 
1715
        //"move node" submenu
 
1716
        submenu = gtk_menu_new ();
 
1717
 
 
1718
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Up"));
 
1719
        gtk_menu_append(submenu, menu_item);
 
1720
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_up), NULL);
 
1721
        gtk_widget_show (menu_item);  // Show the widget
 
1722
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU);
 
1723
        gtk_widget_show (icon);
 
1724
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1725
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_UP);
 
1726
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1727
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1728
 
 
1729
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Down"));
 
1730
        gtk_menu_append(submenu, menu_item);
 
1731
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_down), NULL);
 
1732
        gtk_widget_show (menu_item);  // Show the widget
 
1733
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU);
 
1734
        gtk_widget_show (icon);
 
1735
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1736
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_DOWN);
 
1737
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1738
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1739
 
 
1740
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Left"));
 
1741
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_left), NULL);
 
1742
        gtk_menu_append(submenu, menu_item);
 
1743
        gtk_widget_show (menu_item);  // Show the widget
 
1744
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU);
 
1745
        gtk_widget_show (icon);
 
1746
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1747
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_LEFT);
 
1748
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1749
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1750
 
 
1751
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Right"));
 
1752
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_right), NULL);
 
1753
        gtk_menu_append(submenu, menu_item);
 
1754
        gtk_widget_show (menu_item);  // Show the widget
 
1755
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);
 
1756
        gtk_widget_show (icon);
 
1757
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1758
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_MOVE_RIGHT);
 
1759
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1760
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1761
 
 
1762
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (move_item), submenu);
 
1763
 
 
1764
        //"sort node" submenu
 
1765
        submenu = gtk_menu_new ();
 
1766
 
 
1767
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Sort Children Ascending"));
 
1768
        gtk_menu_append(submenu, menu_item);
 
1769
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_ascending), NULL);
 
1770
        gtk_widget_show (menu_item);  // Show the widget
 
1771
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
 
1772
        gtk_widget_show (icon);
 
1773
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1774
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_ASC);
 
1775
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1776
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1777
 
 
1778
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Sort _Children Descending"));
 
1779
        gtk_menu_append(submenu, menu_item);
 
1780
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_descending), NULL);
 
1781
        gtk_widget_show (menu_item);  // Show the widget
 
1782
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
 
1783
        gtk_widget_show (icon);
 
1784
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1785
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_CHILDREN_DESC);
 
1786
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1787
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1788
 
 
1789
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Sort Root Ascending"));
 
1790
        gtk_menu_append(submenu, menu_item);
 
1791
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_ascending), NULL);
 
1792
        gtk_widget_show (menu_item);  // Show the widget
 
1793
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
 
1794
        gtk_widget_show (icon);
 
1795
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1796
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_ASC);
 
1797
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1798
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1799
 
 
1800
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Sort Root Descending"));
 
1801
        gtk_menu_append(submenu, menu_item);
 
1802
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_descending), NULL);
 
1803
        gtk_widget_show (menu_item);  // Show the widget
 
1804
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
 
1805
        gtk_widget_show (icon);
 
1806
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1807
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_SORT_ROOT_DESC);
 
1808
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1809
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1810
 
 
1811
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (sort_item), submenu);
 
1812
 
 
1813
        menu_item = gtk_image_menu_item_new_with_mnemonic(_("Delete all _Completed nodes"));
 
1814
        gtk_menu_append(menu5, menu_item);
 
1815
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_delete_finished_nodes), NULL);
 
1816
        gtk_widget_show (menu_item);  // Show the widget
 
1817
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
 
1818
        gtk_widget_show (icon);
 
1819
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
1820
        nPos = g_shortcuts.FindByAction(NC_ACTION_TREE_NODE_DELETE_FINISHED);
 
1821
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1822
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1823
 
 
1824
        //
 
1825
        // Format menu
 
1826
        //
 
1827
 
 
1828
        menuitem2 = gtk_menu_item_new_with_mnemonic (_("F_ormat"));
 
1829
        gtk_widget_show (menuitem2);
 
1830
#ifdef _NOKIA_MAEMO
 
1831
        gtk_menu_append(GTK_MENU(maemomenu), menuitem2);
 
1832
#else
 
1833
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);
 
1834
#endif
 
1835
 
 
1836
        menu2 = gtk_menu_new ();
 
1837
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);
 
1838
 
 
1839
        bold1 = gtk_image_menu_item_new_with_mnemonic (_("_Bold"));
 
1840
        gtk_widget_show (bold1);
 
1841
        gtk_container_add (GTK_CONTAINER (menu2), bold1);
 
1842
        //icon = gtk_image_new_from_stock (GTK_STOCK_BOLD, GTK_ICON_SIZE_MENU);
 
1843
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bold);
 
1844
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1845
        gtk_widget_show (icon);
 
1846
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (bold1), icon);
 
1847
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_BOLD);
 
1848
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1849
                gtk_widget_add_accelerator (bold1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1850
 
 
1851
        italic1 = gtk_image_menu_item_new_with_mnemonic (_("_Italic"));
 
1852
        gtk_widget_show (italic1);
 
1853
        gtk_container_add (GTK_CONTAINER (menu2), italic1);
 
1854
        //icon = gtk_image_new_from_stock (GTK_STOCK_ITALIC, GTK_ICON_SIZE_MENU);
 
1855
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_italic);
 
1856
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1857
        gtk_widget_show (icon);
 
1858
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (italic1), icon);
 
1859
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_ITALIC);
 
1860
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1861
                gtk_widget_add_accelerator (italic1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1862
 
 
1863
        underline1 = gtk_image_menu_item_new_with_mnemonic (_("_Underline"));
 
1864
        gtk_widget_show (underline1);
 
1865
        gtk_container_add (GTK_CONTAINER (menu2), underline1);
 
1866
        //icon = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, GTK_ICON_SIZE_MENU);
 
1867
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_underline);
 
1868
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1869
        gtk_widget_show (icon);
 
1870
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (underline1), icon);
 
1871
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_UNDERLINE);
 
1872
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1873
                gtk_widget_add_accelerator (underline1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1874
 
 
1875
        strikethrough1 = gtk_image_menu_item_new_with_mnemonic (_("_Strikethrough"));
 
1876
        gtk_widget_show (strikethrough1);
 
1877
        gtk_container_add (GTK_CONTAINER (menu2), strikethrough1);
 
1878
        //icon = gtk_image_new_from_stock (GTK_STOCK_UNDERLINE, GTK_ICON_SIZE_MENU);
 
1879
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_strikethrough);
 
1880
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1881
        gtk_widget_show (icon);
 
1882
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (strikethrough1), icon);
 
1883
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_STRIKETHROUGH);
 
1884
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1885
                gtk_widget_add_accelerator (strikethrough1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1886
 
 
1887
        color1 = gtk_image_menu_item_new_with_mnemonic (_("_Text color"));
 
1888
        gtk_widget_show (color1);
 
1889
        gtk_container_add (GTK_CONTAINER (menu2), color1);
 
1890
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_color_xpm);
 
1891
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1892
        gtk_widget_show (icon);
 
1893
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (color1), icon);
 
1894
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_COLOR);
 
1895
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1896
                gtk_widget_add_accelerator (color1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1897
 
 
1898
        bkgcolor1 = gtk_image_menu_item_new_with_mnemonic (_("Text Background _Color"));
 
1899
        gtk_widget_show (bkgcolor1);
 
1900
        gtk_container_add (GTK_CONTAINER (menu2), bkgcolor1);
 
1901
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_bg_color_xpm);
 
1902
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1903
        gtk_widget_show (icon);
 
1904
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (bkgcolor1), icon);
 
1905
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_BKG_COLOR);
 
1906
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1907
                gtk_widget_add_accelerator (bkgcolor1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1908
 
 
1909
        remove_format1 = gtk_image_menu_item_new_with_mnemonic (_("_Remove formatting"));
 
1910
        gtk_widget_show (remove_format1);
 
1911
        gtk_container_add (GTK_CONTAINER (menu2), remove_format1);
 
1912
        pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&text_no_format_xpm);
 
1913
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
1914
        gtk_widget_show (icon);
 
1915
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove_format1), icon);
 
1916
        nPos = g_shortcuts.FindByAction(NC_ACTION_FORMAT_REMOVE);
 
1917
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1918
                gtk_widget_add_accelerator (remove_format1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1919
 
 
1920
 
 
1921
        //
 
1922
        // Help menu
 
1923
        //
 
1924
 
 
1925
        menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help"));
 
1926
        gtk_widget_show (menuitem4);
 
1927
#ifdef _NOKIA_MAEMO
 
1928
        gtk_menu_append(GTK_MENU(maemomenu), menuitem4);
 
1929
#else
 
1930
        gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);
 
1931
#endif
 
1932
 
 
1933
        menu4 = gtk_menu_new ();
 
1934
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);
 
1935
 
 
1936
        website1 = gtk_image_menu_item_new_with_mnemonic (_("_Visit Website"));
 
1937
        gtk_widget_show (website1);
 
1938
        gtk_container_add (GTK_CONTAINER (menu4), website1);
 
1939
        //icon = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
 
1940
        //gtk_widget_show (icon);
 
1941
        //gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (website1), icon);
 
1942
        nPos = g_shortcuts.FindByAction(NC_ACTION_VISIT_WEBSITE);
 
1943
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1944
                gtk_widget_add_accelerator (website1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1945
 
 
1946
        help1 = gtk_image_menu_item_new_with_mnemonic (_("_Show help"));
 
1947
        gtk_widget_show (help1);
 
1948
        gtk_container_add (GTK_CONTAINER (menu4), help1);
 
1949
        icon = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
 
1950
        gtk_widget_show (icon);
 
1951
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), icon);
 
1952
        nPos = g_shortcuts.FindByAction(NC_ACTION_HELP_INDEX);
 
1953
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1954
                gtk_widget_add_accelerator (help1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1955
 
 
1956
        separatormenuitem1 = gtk_separator_menu_item_new ();
 
1957
        gtk_widget_show (separatormenuitem1);
 
1958
        gtk_container_add (GTK_CONTAINER (menu4), separatormenuitem1);
 
1959
        gtk_widget_set_sensitive (separatormenuitem1, FALSE);
 
1960
 
 
1961
        about1 = gtk_menu_item_new_with_mnemonic (_("_About"));
 
1962
        gtk_widget_show (about1);
 
1963
        gtk_container_add (GTK_CONTAINER (menu4), about1);
 
1964
        nPos = g_shortcuts.FindByAction(NC_ACTION_HELP_ABOUT);
 
1965
        if(nPos >= 0 && !g_shortcuts[nPos].IsEmpty())
 
1966
                gtk_widget_add_accelerator (about1, "activate", accel_group, g_shortcuts[nPos].m_nKey, (GdkModifierType)g_shortcuts[nPos].GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
1967
 
 
1968
        g_signal_connect (GTK_OBJECT (new_notecase1),    "activate", G_CALLBACK(on_new_notecase1_activate),  NULL);
 
1969
        g_signal_connect (GTK_OBJECT (new1),    "activate", G_CALLBACK(on_new1_activate),  NULL);
 
1970
        g_signal_connect (GTK_OBJECT (open1),   "activate", G_CALLBACK(on_open1_activate), NULL);
 
1971
        g_signal_connect (GTK_OBJECT (close1),   "activate", G_CALLBACK(on_close1_activate), NULL);
 
1972
        g_signal_connect (GTK_OBJECT (save1),   "activate", G_CALLBACK(on_save1_activate), NULL);
 
1973
        g_signal_connect (GTK_OBJECT (save_as1),"activate", G_CALLBACK(on_save_as1_activate), NULL);
 
1974
        g_signal_connect (GTK_OBJECT (reload1), "activate", G_CALLBACK(on_reload1_activate), NULL);
 
1975
        g_signal_connect (GTK_OBJECT (ontop1), "activate", G_CALLBACK(on_ontop1_activate), NULL);
 
1976
        g_signal_connect (GTK_OBJECT (read_only1), "activate", G_CALLBACK(on_read_only_activate), NULL);
 
1977
        g_signal_connect (GTK_OBJECT (lock1), "activate", G_CALLBACK(on_lock_document_activate), NULL);
 
1978
        g_signal_connect (GTK_OBJECT (change_pass1), "activate", G_CALLBACK(on_change_pass1_activate), NULL);
 
1979
        g_signal_connect (GTK_OBJECT (quit1),   "activate", G_CALLBACK(on_quit1_activate), NULL);
 
1980
        g_signal_connect (GTK_OBJECT (cut1),    "activate", G_CALLBACK(on_cut1_activate), NULL);
 
1981
        g_signal_connect (GTK_OBJECT (copy1),   "activate", G_CALLBACK(on_copy1_activate), NULL);
 
1982
        g_signal_connect (GTK_OBJECT (paste1),  "activate", G_CALLBACK(on_paste1_activate), NULL);
 
1983
        g_signal_connect (GTK_OBJECT (delete1), "activate", G_CALLBACK(on_delete1_activate), NULL);
 
1984
        g_signal_connect (GTK_OBJECT (about1),  "activate", G_CALLBACK(on_about1_activate), NULL);
 
1985
        g_signal_connect (GTK_OBJECT (help1),   "activate", G_CALLBACK(on_help1_activate), NULL);
 
1986
        g_signal_connect (GTK_OBJECT (website1),"activate", G_CALLBACK(on_menu_visit_website), NULL);
 
1987
        g_signal_connect (GTK_OBJECT (options1),"activate", G_CALLBACK(on_options1_activate), NULL);
 
1988
        g_signal_connect (GTK_OBJECT (shortcuts1),"activate", G_CALLBACK(on_view_shortcuts_activate), NULL);
 
1989
        g_signal_connect (GTK_OBJECT (find1),   "activate", G_CALLBACK(on_find1_activate), NULL);
 
1990
        g_signal_connect (GTK_OBJECT (find2),   "activate", G_CALLBACK(on_find2_activate), NULL);
 
1991
        g_signal_connect (GTK_OBJECT (replace1),"activate", G_CALLBACK(on_find_replace_activate), NULL);
 
1992
        g_signal_connect (GTK_OBJECT (wrap1),   "activate", G_CALLBACK(on_wrap_activate), NULL);
 
1993
#ifdef HAVE_GTKSOURCEVIEW       
 
1994
        g_signal_connect (GTK_OBJECT (lines1),  "activate", G_CALLBACK(on_show_line_numbers_activate), NULL);
 
1995
#endif
 
1996
        g_signal_connect (GTK_OBJECT (title1),  "activate", G_CALLBACK(on_show_node_titlebar_activate), NULL);
 
1997
        g_signal_connect (GTK_OBJECT (statbar1),"activate", G_CALLBACK(on_show_status_bar_activate), NULL);
 
1998
        g_signal_connect (GTK_OBJECT (menutool1),"activate", G_CALLBACK(on_show_toolbar_activate), NULL);
 
1999
        g_signal_connect (GTK_OBJECT (menufull1),"activate", G_CALLBACK(on_full_screen_activate), NULL);
 
2000
        g_signal_connect (GTK_OBJECT (undo1),   "activate", G_CALLBACK(on_undo_activate), NULL);
 
2001
        g_signal_connect (GTK_OBJECT (redo1),   "activate", G_CALLBACK(on_redo_activate), NULL);
 
2002
        g_signal_connect (GTK_OBJECT (link1),   "activate", G_CALLBACK(on_link_wizard_activate), NULL);
 
2003
        g_signal_connect (GTK_OBJECT (textonly1),   "activate", G_CALLBACK(on_view_text_only_mode), NULL);
 
2004
        g_signal_connect (GTK_OBJECT (wordcount1),   "activate", G_CALLBACK(on_view_calc_word_count), NULL);
 
2005
        g_signal_connect (GTK_OBJECT (bold1),     "activate", G_CALLBACK(on_text_bold_activate), NULL);
 
2006
        g_signal_connect (GTK_OBJECT (italic1),   "activate", G_CALLBACK(on_text_italic_activate), NULL);
 
2007
        g_signal_connect (GTK_OBJECT (underline1),"activate", G_CALLBACK(on_text_underline_activate), NULL);
 
2008
        g_signal_connect (GTK_OBJECT (strikethrough1),"activate", G_CALLBACK(on_text_strikethrough_activate), NULL);
 
2009
        g_signal_connect (GTK_OBJECT (color1),    "activate", G_CALLBACK(on_text_color_activate), NULL);
 
2010
        g_signal_connect (GTK_OBJECT (bkgcolor1),    "activate", G_CALLBACK(on_text_background_color_activate), NULL);
 
2011
        g_signal_connect (GTK_OBJECT (picture1), "activate", G_CALLBACK(on_insert_picture_activate), NULL);
 
2012
        g_signal_connect (GTK_OBJECT (remove_format1), "activate", G_CALLBACK(on_remove_format_activate), NULL);
 
2013
        g_signal_connect (GTK_OBJECT (attachments1), "activate", G_CALLBACK(on_node_attachments_activate), NULL);
 
2014
 
 
2015
        GLADE_HOOKUP_OBJECT (window1, menuitem1, "menuitem1");
 
2016
        GLADE_HOOKUP_OBJECT (window1, menu1, "menu1");
 
2017
        GLADE_HOOKUP_OBJECT (window1, new1, "new1");
 
2018
        GLADE_HOOKUP_OBJECT (window1, open1, "open1");
 
2019
        GLADE_HOOKUP_OBJECT (window1, wrap1, "wrap1");
 
2020
        GLADE_HOOKUP_OBJECT (window1, title1, "title1");
 
2021
        GLADE_HOOKUP_OBJECT (window1, menutool1, "menutool1");
 
2022
        GLADE_HOOKUP_OBJECT (window1, find1, "find1");
 
2023
        GLADE_HOOKUP_OBJECT (window1, find2, "find2");
 
2024
        GLADE_HOOKUP_OBJECT (window1, replace1, "replace1");
 
2025
        GLADE_HOOKUP_OBJECT (window1, save1, "save1");
 
2026
        GLADE_HOOKUP_OBJECT (window1, save_as1, "save_as1");
 
2027
        GLADE_HOOKUP_OBJECT (window1, reload1, "reload1");
 
2028
        GLADE_HOOKUP_OBJECT (window1, read_only1, "read_only1");
 
2029
        GLADE_HOOKUP_OBJECT (window1, lock1, "lock1");
 
2030
        GLADE_HOOKUP_OBJECT (window1, change_pass1, "change_pass1");
 
2031
        GLADE_HOOKUP_OBJECT (window1, separatormenuitem1, "separatormenuitem1");
 
2032
        GLADE_HOOKUP_OBJECT (window1, quit1, "quit1");
 
2033
        GLADE_HOOKUP_OBJECT (window1, menuitem2, "menuitem2");
 
2034
        GLADE_HOOKUP_OBJECT (window1, menu2, "menu2");
 
2035
        GLADE_HOOKUP_OBJECT (window1, cut1, "cut1");
 
2036
        GLADE_HOOKUP_OBJECT (window1, copy1, "copy1");
 
2037
        GLADE_HOOKUP_OBJECT (window1, paste1, "paste1");
 
2038
        GLADE_HOOKUP_OBJECT (window1, delete1, "delete1");
 
2039
        GLADE_HOOKUP_OBJECT (window1, menuitem4, "menuitem4");
 
2040
        GLADE_HOOKUP_OBJECT (window1, menu4, "menu4");
 
2041
        GLADE_HOOKUP_OBJECT (window1, about1, "about1");
 
2042
        GLADE_HOOKUP_OBJECT (window1, help1, "help1");
 
2043
        GLADE_HOOKUP_OBJECT (window1, website1, "website1");
 
2044
        GLADE_HOOKUP_OBJECT (window1, statbar1, "statbar1");
 
2045
        GLADE_HOOKUP_OBJECT (window1, undo1, "undo1");
 
2046
        GLADE_HOOKUP_OBJECT (window1, redo1, "redo1");
 
2047
        GLADE_HOOKUP_OBJECT (window1, link1, "link1");
 
2048
        GLADE_HOOKUP_OBJECT (window1, wordcount1, "wordcount1");
 
2049
        GLADE_HOOKUP_OBJECT (window1, new_notecase1, "new_notecase1");
 
2050
        GLADE_HOOKUP_OBJECT (window1, bold1, "bold1");
 
2051
        GLADE_HOOKUP_OBJECT (window1, italic1, "italic1");
 
2052
        GLADE_HOOKUP_OBJECT (window1, underline1, "underline1");
 
2053
        GLADE_HOOKUP_OBJECT (window1, color1, "color1");
 
2054
        GLADE_HOOKUP_OBJECT (window1, bkgcolor1, "bkgcolor1");
 
2055
        GLADE_HOOKUP_OBJECT (window1, picture1, "picture1");
 
2056
        GLADE_HOOKUP_OBJECT (window1, remove_format1, "remove_format1");
 
2057
        GLADE_HOOKUP_OBJECT (window1, attachments1, "attachments1");
 
2058
        GLADE_HOOKUP_OBJECT (window1, menufull1, "menufull1");
 
2059
 
 
2060
#ifdef _NOKIA_MAEMO
 
2061
        hildon_window_set_menu(HILDON_WINDOW(window1), GTK_MENU(maemomenu));
 
2062
#endif
 
2063
}
 
2064
 
 
2065
gboolean on_focus_event (GtkWidget *widget, GtkDirectionType arg1, gpointer user_data)
 
2066
{
 
2067
        //FIX: prevent toolbar from getting focus by keyboard
 
2068
        static bool bRecurse = false;
 
2069
        if(!bRecurse)
 
2070
        {
 
2071
                bRecurse = true;
 
2072
                gtk_widget_child_focus (widget, (GtkDirectionType)GTK_DIR_TAB_FORWARD);
 
2073
                bRecurse = false;
 
2074
        }
 
2075
 
 
2076
        return FALSE;
 
2077
}
 
2078
 
 
2079
bool LocaleToUtf8(const char *szTxt, std::string &strResult)
 
2080
{
 
2081
        strResult = "";
 
2082
 
 
2083
        gsize nBytesWritten = 0;
 
2084
#if defined(G_OS_WIN32)
 
2085
        gchar *pFileNameInUTF8 = g_locale_to_utf8(szTxt, -1, 0, &nBytesWritten, 0);
 
2086
#else
 
2087
        gchar *pFileNameInUTF8 = g_filename_to_utf8(szTxt, -1, 0, &nBytesWritten, 0);
 
2088
#endif
 
2089
 
 
2090
        if (pFileNameInUTF8)
 
2091
        {
 
2092
                strResult = pFileNameInUTF8;
 
2093
                g_free(pFileNameInUTF8);
 
2094
                return true;
 
2095
        }
 
2096
 
 
2097
        // on failure, copy original string
 
2098
        strResult = szTxt;
 
2099
        return false;
 
2100
}
 
2101
 
 
2102
bool Utf8ToLocale(const char *szTxt, std::string &strResult)
 
2103
{
 
2104
        gsize bytesWritten = 0;
 
2105
 
 
2106
        // On Windows GLib uses UTF-8 for filenames, but as well as we operate
 
2107
        // on native Windows API, conversion to the encoding used in current
 
2108
        // locale is required.
 
2109
#if defined(G_OS_WIN32)
 
2110
        gchar *pFileName = g_locale_from_utf8(szTxt, -1, 0, &bytesWritten, 0);
 
2111
#else
 
2112
        gchar *pFileName = g_filename_from_utf8(szTxt, -1, 0, &bytesWritten, 0);
 
2113
#endif
 
2114
        if (NULL != pFileName)
 
2115
        {
 
2116
                strResult = pFileName;
 
2117
                g_free(pFileName);
 
2118
                return true;
 
2119
        }
 
2120
 
 
2121
        // on failure, copy original string
 
2122
        strResult = szTxt;
 
2123
        return false;
 
2124
}
 
2125
 
 
2126
gint dlg_keyboard_handler(GtkWidget *widget, GdkEventKey *event, gpointer data)
 
2127
{
 
2128
        //Esc press in the main window minimizes the application
 
2129
        if( event->keyval == GDK_Escape )
 
2130
        {
 
2131
                GtkWidget *widget1 = gtk_window_get_focus(GTK_WINDOW(window1));
 
2132
                if( widget1 != g_text.m_pWidget &&
 
2133
                        widget1 != g_tree.m_pWidget)
 
2134
                        return FALSE;   // skip this, we are in the label editing mode
 
2135
 
 
2136
                gtk_window_iconify(GTK_WINDOW(widget));
 
2137
                return TRUE;    //eat event (handled here)
 
2138
        }
 
2139
        return FALSE;
 
2140
}
 
2141
 
 
2142
void SetTextViewCaretColor(bool bBlack)
 
2143
{
 
2144
        //hack to set 'caret' color dynamicaly (without .rc file on disk)
 
2145
 
 
2146
        GdkColor color = { 0, 0xFFFF, 0xFFFF, 0xFFFF }; //white
 
2147
        if(bBlack){
 
2148
                GdkColor black = { 0, 0, 0, 0 };        //black
 
2149
                color = black;
 
2150
        }
 
2151
 
 
2152
        //TOFIX move this to TextView fn.
 
2153
        static const char cursor_color_rc[] =
 
2154
            "style \"Notecase\"\n"
 
2155
            "{\n"
 
2156
            "GtkTextView::cursor-color=\"#%04x%04x%04x\"\n"
 
2157
            "}\n"
 
2158
            "widget \"*.GtkTextView*\" style : application \"Notecase\"\n";
 
2159
 
 
2160
    gchar *rc_temp = g_strdup_printf (cursor_color_rc,
 
2161
                                                        color.red,
 
2162
                            color.green,
 
2163
                            color.blue);
 
2164
    gtk_rc_parse_string (rc_temp);
 
2165
    gtk_widget_reset_rc_styles (g_text.m_pWidget);
 
2166
    g_free (rc_temp);
 
2167
}
 
2168
 
 
2169
//Based on text-view background color, calculate
 
2170
//the color for text-view caret mark (a.k.a. cursor).
 
2171
//Caret is set to either white or black color (dark bkg -> light caret and vice versa)
 
2172
void RefreshTextViewCaretColor(GdkColor &BkColor)
 
2173
{
 
2174
        //TOFIX for better result try using HSL color model -> L = (MAX(r,g,b) + MIN(r,g,b))/2
 
2175
        //is the background light enough for cursor to be black?
 
2176
        int nR = BkColor.red/255;
 
2177
        int nG = BkColor.green/255;
 
2178
        int nB = BkColor.blue/255;
 
2179
        int nPower = (nR*nR)+(nG*nG)+(nB*nB);
 
2180
 
 
2181
        bool bCaretColorBlack = (nPower > 48387);
 
2182
        SetTextViewCaretColor(bCaretColorBlack);
 
2183
}
 
2184
 
 
2185
gboolean initial_load_timer(gpointer data)
 
2186
{
 
2187
        //load initial document if any
 
2188
        if(g_bLoadEmbedded)
 
2189
                load_file_embedded(/*strCurNodeID*/);
 
2190
        else{
 
2191
                //allow password being entered up to 3 times
 
2192
                int nResult = 0;
 
2193
                int nTryCnt = 0;
 
2194
                while(nTryCnt < 3){
 
2195
                        nResult = load_file(g_strLoadDocumentFile.c_str(), g_strLoadDocumentPass.c_str(), g_nLoadDocumentNodeID);
 
2196
                        nTryCnt ++;
 
2197
                        if(DOC_LOAD_WRONG_PASSWORD != nResult){
 
2198
                                break;
 
2199
                        }
 
2200
                }
 
2201
                if(g_bUpdateMRU)
 
2202
                        g_objMRU.Change(g_strLoadDocumentFile.c_str(), (DOC_LOAD_NOT_FOUND != nResult));//update MRU unless file not found
 
2203
        }
 
2204
 
 
2205
        g_strLoadDocumentPass = "";     // reset password
 
2206
 
 
2207
        return FALSE; // kill timer
 
2208
}
 
2209
 
 
2210
void treeview_show_popup_menu()
 
2211
{
 
2212
        GtkWidget *menu, *submenu;
 
2213
        GtkWidget *menu_item, *move_item, *sort_item, *icon;
 
2214
        int button, event_time;
 
2215
 
 
2216
        menu = gtk_menu_new ();
 
2217
        //g_signal_connect (menu, "deactivate", G_CALLBACK(gtk_widget_destroy), NULL);
 
2218
 
 
2219
        GtkAccelGroup *accel_group = gtk_accel_group_new();
 
2220
        gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
 
2221
 
 
2222
        // ... add menu items with accelerators ...
 
2223
        menu_item = gtk_menu_item_new_with_label(_("Insert Node"));
 
2224
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_node), NULL);
 
2225
        gtk_menu_append(menu, menu_item);
 
2226
        gtk_widget_show (menu_item);  // Show the widget
 
2227
        if(g_defTreeNodeNew.IsValid(SH_CTX_TREE_WIDGET))
 
2228
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeNew.m_nKey, (GdkModifierType)g_defTreeNodeNew.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2229
 
 
2230
        menu_item = gtk_menu_item_new_with_label(_("Insert Child Node"));
 
2231
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_insert_child_node), NULL);
 
2232
        gtk_menu_append(menu, menu_item);
 
2233
        gtk_widget_show (menu_item);  // Show the widget
 
2234
        if(g_defTreeNodeNewChild.IsValid(SH_CTX_TREE_WIDGET))
 
2235
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeNewChild.m_nKey, (GdkModifierType)g_defTreeNodeNewChild.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2236
 
 
2237
        menu_item = gtk_image_menu_item_new_with_label(_("Delete Node"));
 
2238
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_delete_node), NULL);
 
2239
        gtk_menu_append(menu, menu_item);
 
2240
        gtk_widget_show (menu_item);  // Show the widget
 
2241
        icon = gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_MENU);
 
2242
        gtk_widget_show (icon);
 
2243
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2244
        if(g_defTreeNodeDelete.IsValid(SH_CTX_TREE_WIDGET))
 
2245
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeDelete.m_nKey, (GdkModifierType)g_defTreeNodeDelete.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2246
 
 
2247
        menu_item = gtk_menu_item_new_with_label(_("Rename Node"));
 
2248
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_rename_node), NULL);
 
2249
        gtk_menu_append(menu, menu_item);
 
2250
        gtk_widget_show (menu_item);  // Show the widget
 
2251
        if(g_defTreeNodeRename.IsValid(SH_CTX_TREE_WIDGET))
 
2252
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeRename.m_nKey, (GdkModifierType)g_defTreeNodeRename.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2253
 
 
2254
        move_item = gtk_menu_item_new_with_label(_("Move Node"));
 
2255
        gtk_menu_append(menu, move_item);
 
2256
        gtk_widget_show (move_item);  // Show the widget
 
2257
 
 
2258
        sort_item = gtk_menu_item_new_with_label(_("Sort"));
 
2259
        gtk_menu_append(menu, sort_item);
 
2260
        gtk_widget_show (sort_item);  // Show the widget
 
2261
 
 
2262
        menu_item = gtk_menu_item_new_with_label(_("Expand All"));
 
2263
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_expand_all), NULL);
 
2264
        gtk_menu_append(menu, menu_item);
 
2265
        gtk_widget_show (menu_item);  // Show the widget
 
2266
        if(g_defTreeNodeExpandAll.IsValid(SH_CTX_TREE_WIDGET))
 
2267
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeExpandAll.m_nKey, (GdkModifierType)g_defTreeNodeExpandAll.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2268
 
 
2269
        menu_item = gtk_menu_item_new_with_label(_("Collapse All"));
 
2270
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_collapse_all), NULL);
 
2271
        gtk_menu_append(menu, menu_item);
 
2272
        gtk_widget_show (menu_item);  // Show the widget
 
2273
        if(g_defTreeNodeColapseAll.IsValid(SH_CTX_TREE_WIDGET))
 
2274
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeColapseAll.m_nKey, (GdkModifierType)g_defTreeNodeColapseAll.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2275
 
 
2276
        menu_item = gtk_image_menu_item_new_with_label(_("Mark node as Completed"));
 
2277
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_node_toggle_finished), NULL);
 
2278
        gtk_menu_append(menu, menu_item);
 
2279
        gtk_widget_show (menu_item);  // Show the widget
 
2280
        if(g_defTreeNodeToggleFinished.IsValid(SH_CTX_TREE_WIDGET))
 
2281
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeToggleFinished.m_nKey, (GdkModifierType)g_defTreeNodeToggleFinished.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2282
 
 
2283
        menu_item = gtk_image_menu_item_new_with_label(_("Node Properties"));
 
2284
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_node_properties), NULL);
 
2285
        gtk_menu_append(menu, menu_item);
 
2286
        gtk_widget_show (menu_item);  // Show the widget
 
2287
        icon = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_MENU);
 
2288
        gtk_widget_show (icon);
 
2289
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2290
        if(g_defTreeNodeProperties.IsValid(SH_CTX_TREE_WIDGET))
 
2291
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeProperties.m_nKey, (GdkModifierType)g_defTreeNodeProperties.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2292
 
 
2293
        menu_item = gtk_image_menu_item_new_with_label(_("Link wizard"));
 
2294
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_link_wizard_activate), NULL);
 
2295
        gtk_menu_append(menu, menu_item);
 
2296
        gtk_widget_show (menu_item);  // Show the widget
 
2297
        GdkPixbuf* pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)&page_link);
 
2298
        icon = gtk_image_new_from_pixbuf (pixbuf);
 
2299
        gtk_widget_show (icon);
 
2300
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2301
 
 
2302
        //"move node" submenu
 
2303
        submenu = gtk_menu_new ();
 
2304
 
 
2305
        menu_item = gtk_image_menu_item_new_with_label(_("Up"));
 
2306
        gtk_menu_append(submenu, menu_item);
 
2307
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_up), NULL);
 
2308
        gtk_widget_show (menu_item);  // Show the widget
 
2309
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU);
 
2310
        gtk_widget_show (icon);
 
2311
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2312
        if(g_defTreeNodeMoveUp.IsValid(SH_CTX_TREE_WIDGET))
 
2313
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveUp.m_nKey, (GdkModifierType)g_defTreeNodeMoveUp.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2314
 
 
2315
        menu_item = gtk_image_menu_item_new_with_label(_("Down"));
 
2316
        gtk_menu_append(submenu, menu_item);
 
2317
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_down), NULL);
 
2318
        gtk_widget_show (menu_item);  // Show the widget
 
2319
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_MENU);
 
2320
        gtk_widget_show (icon);
 
2321
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2322
        if(g_defTreeNodeMoveDown.IsValid(SH_CTX_TREE_WIDGET))
 
2323
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveDown.m_nKey, (GdkModifierType)g_defTreeNodeMoveDown.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2324
 
 
2325
        menu_item = gtk_image_menu_item_new_with_label(_("Left"));
 
2326
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_left), NULL);
 
2327
        gtk_menu_append(submenu, menu_item);
 
2328
        gtk_widget_show (menu_item);  // Show the widget
 
2329
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_MENU);
 
2330
        gtk_widget_show (icon);
 
2331
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2332
        if(g_defTreeNodeMoveLeft.IsValid(SH_CTX_TREE_WIDGET))
 
2333
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveLeft.m_nKey, (GdkModifierType)g_defTreeNodeMoveLeft.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2334
 
 
2335
        menu_item = gtk_image_menu_item_new_with_label(_("Right"));
 
2336
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_move_right), NULL);
 
2337
        gtk_menu_append(submenu, menu_item);
 
2338
        gtk_widget_show (menu_item);  // Show the widget
 
2339
        icon = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);
 
2340
        gtk_widget_show (icon);
 
2341
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2342
        if(g_defTreeNodeMoveRight.IsValid(SH_CTX_TREE_WIDGET))
 
2343
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeMoveRight.m_nKey, (GdkModifierType)g_defTreeNodeMoveRight.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2344
 
 
2345
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (move_item), submenu);
 
2346
 
 
2347
        //"sort node" submenu
 
2348
        submenu = gtk_menu_new ();
 
2349
 
 
2350
        menu_item = gtk_image_menu_item_new_with_label(_("_Sort Children Ascending"));
 
2351
        gtk_menu_append(submenu, menu_item);
 
2352
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_ascending), NULL);
 
2353
        gtk_widget_show (menu_item);  // Show the widget
 
2354
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
 
2355
        gtk_widget_show (icon);
 
2356
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2357
        if(g_defTreeNodeSortChildrenAsc.IsValid(SH_CTX_TREE_WIDGET))
 
2358
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortChildrenAsc.m_nKey, (GdkModifierType)g_defTreeNodeSortChildrenAsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2359
 
 
2360
        menu_item = gtk_image_menu_item_new_with_label(_("Sort _Children Descending"));
 
2361
        gtk_menu_append(submenu, menu_item);
 
2362
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_child_descending), NULL);
 
2363
        gtk_widget_show (menu_item);  // Show the widget
 
2364
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
 
2365
        gtk_widget_show (icon);
 
2366
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2367
        if(g_defTreeNodeSortChildrenAsc.IsValid(SH_CTX_TREE_WIDGET))
 
2368
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortChildrenAsc.m_nKey, (GdkModifierType)g_defTreeNodeSortChildrenAsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2369
 
 
2370
        menu_item = gtk_image_menu_item_new_with_label(_("Sort Root Ascending"));
 
2371
        gtk_menu_append(submenu, menu_item);
 
2372
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_ascending), NULL);
 
2373
        gtk_widget_show (menu_item);  // Show the widget
 
2374
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_ASCENDING, GTK_ICON_SIZE_MENU);
 
2375
        gtk_widget_show (icon);
 
2376
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2377
        if(g_defTreeNodeSortRootAsc.IsValid(SH_CTX_TREE_WIDGET))
 
2378
                        gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortRootAsc.m_nKey, (GdkModifierType)g_defTreeNodeSortRootAsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2379
 
 
2380
        menu_item = gtk_image_menu_item_new_with_label(_("Sort Root Descending"));
 
2381
        gtk_menu_append(submenu, menu_item);
 
2382
        g_signal_connect(menu_item, "activate", G_CALLBACK (on_menu_sort_root_descending), NULL);
 
2383
        gtk_widget_show (menu_item);  // Show the widget
 
2384
        icon = gtk_image_new_from_stock (GTK_STOCK_SORT_DESCENDING, GTK_ICON_SIZE_MENU);
 
2385
        gtk_widget_show (icon);
 
2386
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), icon);
 
2387
        if(g_defTreeNodeSortRootDsc.IsValid(SH_CTX_TREE_WIDGET))
 
2388
                gtk_widget_add_accelerator (menu_item, "activate", accel_group, g_defTreeNodeSortRootDsc.m_nKey, (GdkModifierType)g_defTreeNodeSortRootDsc.GetModifierFlags(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE));
 
2389
 
 
2390
 
 
2391
        gtk_menu_item_set_submenu (GTK_MENU_ITEM (sort_item), submenu);
 
2392
 
 
2393
//      if (event)
 
2394
//              event_time = event->time;
 
2395
//      else
 
2396
                event_time = gtk_get_current_event_time ();
 
2397
        button = 0;     //FIX: allow mouse button to trigger the submenu
 
2398
 
 
2399
        gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 
2400
}
 
2401
 
 
2402
void on_tree_resize(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data)
 
2403
{
 
2404
        static bool bSkip = false;
 
2405
 
 
2406
        if(g_bWrapTree/* && !bSkip*/){
 
2407
                update_tree_wrap();
 
2408
                bSkip = true;
 
2409
        }
 
2410
        else
 
2411
                bSkip = false;
 
2412
}
 
2413
 
 
2414
void update_tree_wrap()
 
2415
{
 
2416
        GtkWidget *scrolledwindow1 = lookup_widget(window1, "scrolledwindow1");
 
2417
        GtkAdjustment *hadjustment = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW(scrolledwindow1));
 
2418
 
 
2419
        int nWidth = scrolledwindow1->allocation.width; //allocation->width
 
2420
 
 
2421
        TRACE("Wrap tree to %d\n", nWidth);
 
2422
        g_tree.WrapTreeToSize(nWidth);
 
2423
 
 
2424
        //set horz scrollbar width
 
2425
 
 
2426
        gdouble  nValue = 0;
 
2427
        g_object_get (G_OBJECT (hadjustment), "upper", &nValue, (char *)NULL);
 
2428
        TRACE("Adj: %f\n", nValue);
 
2429
 
 
2430
        //g_signal_handlers_block_by_func(scrolledwindow1, (void *)on_tree_resize, 0);
 
2431
 
 
2432
        nValue = nWidth;
 
2433
        //TOFIX crashes on Ubuntu g_object_set (G_OBJECT (hadjustment), "upper", &nValue, NULL);
 
2434
 
 
2435
        //gtk_adjustment_changed(hadjustment);
 
2436
        //g_signal_handlers_unblock_by_func(scrolledwindow1, (void *)on_tree_resize, 0);
 
2437
}