2 * This file is part of maemopad+
5 * This software is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public License
7 * as published by the Free Software Foundation; either version 2.1 of
8 * the License, or (at your option) any later version.
10 * This software is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this software; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 #include <ui/interface.h>
23 #include <ui/callbacks.h>
24 #include <ui/sketchwidget.h>
27 #include <sys/param.h>
28 #include <sys/types.h>
33 #include <hildon-widgets/hildon-program.h>
34 #include <hildon-widgets/hildon-file-chooser-dialog.h>
35 #include <hildon-widgets/hildon-note.h>
36 #include <hildon-widgets/hildon-font-selection-dialog.h>
37 #include <hildon-widgets/hildon-color-button.h>
43 GtkWidget
*create_brushsizemenu(MainView
* main
);
44 GtkWidget
*create_viewmenu(MainView
* main
);
45 GtkWidget
*create_shapemenu(MainView
* main
);
46 GtkWidget
*create_sketchlinesmenu(MainView
* main
);
47 GtkWidget
*create_menu(MainView
* main
);
48 static void create_toolbar(MainView
* main
);
49 void create_textarea(MainView
* main
);
50 void create_treeview(MainView
* main
);
51 static void _tool_button_set_icon_name(GtkToolButton
*button
, const gchar
*icon_name
);
52 void create_checklist(MainView
* main
);
54 void sk_set_brushsize(MainView
* main
, guint bsize
)
56 int i
= (bsize
/ 2) - 1;
58 if (i
>= BRUSHSIZE_COUNT
)
59 i
= BRUSHSIZE_COUNT
- 1;
63 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(main
->brushsizemenuitems
[i
]), FALSE
);
64 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(main
->brushsizemenuitems
[i
]), TRUE
);
67 static void _tool_button_set_icon_name(GtkToolButton
*button
, const gchar
*icon_name
)
70 image
= gtk_image_new_from_icon_name(icon_name
, GTK_ICON_SIZE_SMALL_TOOLBAR
);
71 gtk_tool_button_set_icon_widget(button
, image
);
74 void _toggle_tool_button_set_inconsistent(GtkToggleToolButton
*button
, gboolean inconsistent
)
76 GtkWidget
*toggle_button
= gtk_bin_get_child(GTK_BIN(button
));
77 gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(toggle_button
), inconsistent
);
80 MainView
*interface_main_view_new(AppData
* data
)
82 MainView
*result
= g_new0(MainView
, 1);
84 GtkWidget
*main_vbox
= gtk_vbox_new(FALSE
, 0);
86 result
->hpaned
= gtk_hpaned_new();
88 result
->clipboard
= gtk_clipboard_get(GDK_SELECTION_CLIPBOARD
);
89 gtk_clipboard_set_can_store(result
->clipboard
, NULL
, 0);
91 result
->file_edited
= FALSE
;
94 result
->data
->main_view
= HILDON_WINDOW(hildon_window_new());
96 create_treeview(result
);
97 create_textarea(result
);
98 create_checklist(result
);
100 result
->brushsizemenu
= create_brushsizemenu(result
);
101 result
->sketchlinesmenu
= create_sketchlinesmenu(result
);
102 result
->viewmenu
= create_viewmenu(result
);
103 result
->shapemenu
= create_shapemenu(result
);
105 create_toolbar(result
);
106 GtkWidget
*nodemenu
= create_menu(result
);
108 g_signal_connect_swapped(result
->treeview
, "button_press_event", G_CALLBACK(cb_popup
), nodemenu
);
109 gtk_widget_tap_and_hold_setup(GTK_WIDGET(result
->treeview
), nodemenu
, NULL
, GTK_TAP_AND_HOLD_NONE
);
111 gtk_container_add(GTK_CONTAINER(result
->data
->main_view
), result
->hpaned
);
113 gtk_paned_add1(GTK_PANED(result
->hpaned
), result
->scrolledtree
);
115 result
->sk
= sketchwidget_new(800, 480, FALSE
);
116 sketchwidget_set_undocallback(result
->sk
, callback_undotoggle
, result
);
117 sketchwidget_set_redocallback(result
->sk
, callback_redotoggle
, result
);
118 /* sketchwidget_set_fingercallback(result->sk, callback_finger, result);*/
120 gtk_box_pack_start(GTK_BOX(main_vbox
), result
->scrolledwindow
, TRUE
, TRUE
, 0);
121 gtk_box_pack_start(GTK_BOX(main_vbox
), sketchwidget_get_mainwidget(result
->sk
), TRUE
, TRUE
, 0);
122 gtk_box_pack_start(GTK_BOX(main_vbox
), result
->listscroll
, TRUE
, TRUE
, 0);
123 hildon_window_add_toolbar(result
->data
->main_view
, GTK_TOOLBAR(result
->toolbar
));
125 gtk_paned_add2(GTK_PANED(result
->hpaned
), main_vbox
);
127 gtk_widget_show(main_vbox
);
128 gtk_widget_show(result
->hpaned
);
130 gtk_widget_show_all(GTK_WIDGET(result
->data
->main_view
));
131 gtk_widget_grab_focus(GTK_WIDGET(result
->textview
));
133 result
->file_edited
= FALSE
;
134 result
->file_name
= NULL
;
136 g_signal_connect(G_OBJECT(result
->data
->main_view
), "key_press_event", G_CALLBACK(key_press_cb
), result
);
137 g_signal_connect(G_OBJECT(result
->data
->main_view
), "delete_event", G_CALLBACK(close_cb
), result
);
139 sk_set_brushsize(result
, 2);
140 sk_set_brushsize(result
, 4);
142 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(result
->sketchlinesmenuitems
[0]), TRUE
);
143 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(result
->shapemenuitems
[0]), TRUE
);
145 result
->newnodedialog_createchild
= TRUE
;
147 result
->cursorBusy
= gdk_cursor_new(GDK_WATCH
);
148 result
->loading
=FALSE
;
153 void interface_main_view_destroy(MainView
* main
)
155 gdk_cursor_unref(main
->cursorBusy
);
159 gchar
*interface_file_chooser(MainView
* mainview
, GtkFileChooserAction action
, gchar
* suggname
, gchar
* suggext
)
162 gchar
*filename
= NULL
;
164 dialog
= hildon_file_chooser_dialog_new(GTK_WINDOW(mainview
->data
->main_view
), action
);
165 gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog
), TRUE
);
167 if (action
== GTK_FILE_CHOOSER_ACTION_SAVE
&& suggname
!= NULL
)
172 snprintf(fn
, sizeof(fn
), "%s", suggname
);
174 snprintf(fn
, sizeof(fn
), "%s.%s", suggname
, suggext
);
179 while(stat(fn
, &s
) == 0)
183 snprintf(fn
, sizeof(fn
), "%s(%d)", suggname
, i
);
185 snprintf(fn
, sizeof(fn
), "%s(%d).%s", suggname
, i
, suggext
);
188 fprintf(stderr
, "%s\n", fn
);
189 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog
), fn
);
192 gtk_widget_show_all(GTK_WIDGET(dialog
));
193 if (gtk_dialog_run(GTK_DIALOG(dialog
)) == GTK_RESPONSE_OK
)
195 filename
= gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog
));
198 gtk_widget_destroy(dialog
);
202 gint
interface_create_new_file(MainView
* main
)
204 HildonNote
*hn
= NULL
;
205 gint response
= FALSE
;
207 g_assert(main
!= NULL
&& main
->data
->app
!= NULL
);
209 hn
= HILDON_NOTE(hildon_note_new_confirmation_add_buttons(GTK_WINDOW(main
->data
->main_view
), _("Create new file?"), _("Yes"), CONFRESP_YES
, _("No"), CONFRESP_NO
, NULL
, NULL
));
210 response
= gtk_dialog_run(GTK_DIALOG(hn
));
211 gtk_widget_destroy(GTK_WIDGET(hn
));
220 * Create the menu items needed for the drop down menu
222 GtkWidget
*create_menu(MainView
* main
)
225 * Create needed handles
228 GtkWidget
*file_menu
, *close
, *about
, *edit_menu
, *tools_menu
, *node_menu
, *node_item
;
231 * Get the menu of our view
233 main_menu
= GTK_MENU( gtk_menu_new () );
234 /* Add menu to HildonWindow */
235 hildon_window_set_menu(main
->data
->main_view
, main_menu
);
238 * Create new menus for submenus in our drop down menu
240 file_menu
= gtk_menu_new();
241 node_menu
= gtk_menu_new();
242 edit_menu
= gtk_menu_new();
243 tools_menu
= gtk_menu_new();
246 * Create the menu items
248 main
->file_item
= gtk_menu_item_new_with_label(_("File"));
249 node_item
= gtk_menu_item_new_with_label(_("Memo"));
251 main
->new_node_item
= gtk_menu_item_new_with_label(_("New memo"));
252 main
->delete_node_item
= gtk_menu_item_new_with_label(_("Delete memo"));
253 main
->expand_collapse_node_item
= gtk_menu_item_new_with_label(_("Expand/collapse node"));
254 main
->export_node_item
= gtk_menu_item_new_with_label(_("Export memo"));
256 main
->new_item
= gtk_menu_item_new_with_label(_("New data file"));
257 main
->open_item
= gtk_menu_item_new_with_label(_("Open data file..."));
258 main
->save_item
= gtk_menu_item_new_with_label(_("Save data"));
259 main
->view_item
= gtk_menu_item_new_with_label(_("View"));
260 main
->edit_item
= gtk_menu_item_new_with_label(_("Edit"));
261 main
->cut_item
= gtk_menu_item_new_with_label(_("Cut"));
262 main
->copy_item
= gtk_menu_item_new_with_label(_("Copy"));
263 main
->paste_item
= gtk_menu_item_new_with_label(_("Paste"));
264 main
->clear_item
= gtk_menu_item_new_with_label(_("Clear"));
265 main
->tools_item
= gtk_menu_item_new_with_label(_("Tools"));
266 close
= gtk_menu_item_new_with_label(_("Exit"));
269 * Add menu items to right menus
271 gtk_menu_append(main_menu
, main
->file_item
);
272 gtk_menu_append(file_menu
, main
->new_item
);
273 gtk_menu_append(file_menu
, main
->open_item
);
274 gtk_menu_append(file_menu
, main
->save_item
);
276 gtk_menu_append(main_menu
, main
->view_item
);
278 gtk_menu_append(main_menu
, main
->edit_item
);
279 gtk_menu_append(edit_menu
, main
->cut_item
);
280 gtk_menu_append(edit_menu
, main
->copy_item
);
281 gtk_menu_append(edit_menu
, main
->paste_item
);
282 gtk_menu_append(edit_menu
, gtk_separator_menu_item_new());
283 gtk_menu_append(edit_menu
, main
->clear_item
);
285 gtk_menu_append(main_menu
, node_item
);
286 gtk_menu_append(node_menu
, main
->new_node_item
);
287 gtk_menu_append(node_menu
, main
->delete_node_item
);
288 gtk_menu_append(node_menu
, gtk_separator_menu_item_new());
289 gtk_menu_append(node_menu
, main
->export_node_item
);
290 #ifdef EXPANDING_ROWS
291 gtk_menu_append(node_menu
, gtk_separator_menu_item_new());
292 gtk_menu_append(node_menu
, main
->expand_collapse_node_item
);
294 gtk_menu_append(main_menu
, main
->tools_item
);
295 gtk_menu_append(main_menu
, gtk_separator_menu_item_new());
296 about
= gtk_menu_item_new_with_label(_("About..."));
297 gtk_menu_append(main_menu
, about
);
298 gtk_menu_append(main_menu
, close
);
300 g_signal_connect(G_OBJECT(about
), "activate", G_CALLBACK(callback_about
), main
);
303 * Add submenus to the right items
305 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->file_item
), file_menu
);
306 gtk_menu_item_set_submenu(GTK_MENU_ITEM(node_item
), node_menu
);
307 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->edit_item
), edit_menu
);
308 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->tools_item
), tools_menu
);
310 main
->tools_brushsize
= gtk_menu_item_new_with_label(_("Brush size"));
311 main
->tools_pagestyle
= gtk_menu_item_new_with_label(_("Page style"));
312 main
->tools_shape
= gtk_menu_item_new_with_label(_("Shape"));
313 main
->tools_color
= gtk_menu_item_new_with_label(_("Color..."));
314 main
->tools_font
= gtk_menu_item_new_with_label(_("Font..."));
315 main
->tools_wordwrap
= gtk_check_menu_item_new_with_label(_("Word wrap"));
316 main
->tools_pressure
= gtk_check_menu_item_new_with_label(_("Pressure sensitive brush color"));
318 gtk_menu_append(tools_menu
, main
->tools_color
);
319 gtk_menu_append(tools_menu
, main
->tools_brushsize
);
320 gtk_menu_append(tools_menu
, main
->tools_shape
);
321 gtk_menu_append(tools_menu
, main
->tools_pagestyle
);
322 gtk_menu_append(tools_menu
, main
->tools_font
);
323 gtk_menu_append(tools_menu
, main
->tools_wordwrap
);
324 gtk_menu_append(tools_menu
, main
->tools_pressure
);
325 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->tools_brushsize
), main
->brushsizemenu
);
326 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->tools_pagestyle
), main
->sketchlinesmenu
);
327 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->tools_shape
), main
->shapemenu
);
329 gtk_menu_item_set_submenu(GTK_MENU_ITEM(main
->view_item
), main
->viewmenu
);
332 * Attach the callback functions to the activate signal
334 g_signal_connect(G_OBJECT(main
->new_node_item
), "activate", G_CALLBACK(callback_file_new_node
), main
);
335 g_signal_connect(G_OBJECT(main
->delete_node_item
), "activate", G_CALLBACK(callback_file_delete_node
), main
);
336 g_signal_connect(G_OBJECT(main
->export_node_item
), "activate", G_CALLBACK(callback_file_export_node
), main
);
337 g_signal_connect(G_OBJECT(main
->expand_collapse_node_item
), "activate", G_CALLBACK(callback_file_expand_collapse_node
), main
);
339 g_signal_connect(G_OBJECT(main
->new_item
), "activate", G_CALLBACK(callback_file_new
), main
);
340 g_signal_connect(G_OBJECT(main
->open_item
), "activate", G_CALLBACK(callback_file_open
), main
);
341 g_signal_connect(G_OBJECT(main
->save_item
), "activate", G_CALLBACK(callback_file_save
), main
);
342 g_signal_connect(G_OBJECT(main
->cut_item
), "activate", G_CALLBACK(callback_edit_cut
), main
);
343 g_signal_connect(G_OBJECT(main
->copy_item
), "activate", G_CALLBACK(callback_edit_copy
), main
);
344 g_signal_connect(G_OBJECT(main
->paste_item
), "activate", G_CALLBACK(callback_edit_paste
), main
);
345 g_signal_connect(G_OBJECT(main
->clear_item
), "activate", G_CALLBACK(callback_edit_clear
), main
);
346 g_signal_connect(G_OBJECT(main
->tools_font
), "activate", G_CALLBACK(callback_font
), main
);
347 g_signal_connect(G_OBJECT(main
->tools_wordwrap
), "toggled", G_CALLBACK(callback_wordwrap
), main
);
348 g_signal_connect(G_OBJECT(main
->tools_pressure
), "toggled", G_CALLBACK(callback_pressure
), main
);
349 g_signal_connect(G_OBJECT(main
->tools_color
), "activate", G_CALLBACK(callback_color_invoke
), main
);
351 g_signal_connect(G_OBJECT(close
), "activate", G_CALLBACK(callback_file_close
), main
);
354 * We need to show menu items
356 gtk_widget_show_all(GTK_WIDGET(main_menu
));
361 GtkWidget
*create_brushsizemenu(MainView
* main
)
368 menu
= gtk_menu_new();
370 for(i
= 0; i
< BRUSHSIZE_COUNT
; i
++)
372 int bsize
= (i
+ 1) * 2;
376 snprintf(fpa
, sizeof(fpa
), "%s/pencil%d.png", PIXMAPDIR
, i
+ 1);
377 GtkWidget
*pix
= gtk_image_new_from_file(fpa
);
383 snprintf(st
, sizeof(st
), _("%dpt"), bsize
);
384 main
->brushsizemenuitems
[i
] = gtk_radio_menu_item_new_with_label(gr
, st
);
385 gr
= gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(main
->brushsizemenuitems
[i
]));
387 gtk_object_set_user_data(GTK_OBJECT(main
->brushsizemenuitems
[i
]), bsize
);
388 gtk_object_set_data(GTK_OBJECT(main
->brushsizemenuitems
[i
]), "m", main
);
389 gtk_object_set_data(GTK_OBJECT(main
->brushsizemenuitems
[i
]), "i", pix
);
391 gtk_menu_prepend(menu
, main
->brushsizemenuitems
[i
]);
392 g_signal_connect(G_OBJECT(main
->brushsizemenuitems
[i
]), "activate", G_CALLBACK(callback_brushsize
), main
->brushsizemenuitems
[i
]);
395 gtk_widget_show_all(GTK_WIDGET(menu
));
400 GtkWidget
*create_sketchlinesmenu(MainView
* main
)
407 menu
= gtk_menu_new();
411 snprintf(st
[0], sizeof(st
[0]), _("No background"));
412 snprintf(st
[1], sizeof(st
[1]), _("Notebook lines"));
413 snprintf(st
[2], sizeof(st
[2]), _("Graph lines"));
415 for(i
= 0; i
< 3; i
++)
419 snprintf(fpa
, sizeof(fpa
), "%s/sketchbg%d.png", PIXMAPDIR
, i
);
420 GtkWidget
*pix
= gtk_image_new_from_file(fpa
);
424 main
->sketchlinesmenuitems
[i
] = gtk_radio_menu_item_new_with_label(gr
, st
[i
]);
425 gr
= gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(main
->sketchlinesmenuitems
[i
]));
427 gtk_object_set_user_data(GTK_OBJECT(main
->sketchlinesmenuitems
[i
]), i
);
428 gtk_object_set_data(GTK_OBJECT(main
->sketchlinesmenuitems
[i
]), "m", main
);
429 gtk_object_set_data(GTK_OBJECT(main
->sketchlinesmenuitems
[i
]), "i", pix
);
431 gtk_menu_prepend(menu
, main
->sketchlinesmenuitems
[i
]);
432 g_signal_connect(G_OBJECT(main
->sketchlinesmenuitems
[i
]), "activate", G_CALLBACK(callback_sketchlines
), main
->sketchlinesmenuitems
[i
]);
435 gtk_widget_show_all(GTK_WIDGET(menu
));
440 GtkWidget
*create_viewmenu(MainView
* main
)
445 menu
= gtk_menu_new();
450 snprintf(st
[0], sizeof(st
[0]), _("Tree"));
451 snprintf(st
[1], sizeof(st
[1]), _("Toolbar"));
452 snprintf(st
[2], sizeof(st
[2]), _("Full screen"));
455 this is here because we might want to change the order of the items
456 warning: these are also in callback_setview()
463 for(i
= 0; i
< 3; i
++)
465 main
->viewmenuitems
[i
] = gtk_check_menu_item_new_with_label(st
[i
]);
467 gtk_object_set_user_data(GTK_OBJECT(main
->viewmenuitems
[i
]), stf
[i
]);
468 gtk_object_set_data(GTK_OBJECT(main
->viewmenuitems
[i
]), "m", main
);
470 gtk_menu_prepend(menu
, main
->viewmenuitems
[i
]);
471 g_signal_connect(G_OBJECT(main
->viewmenuitems
[i
]), "toggled", G_CALLBACK(callback_viewmenu
), main
->viewmenuitems
[i
]);
474 gtk_widget_show_all(GTK_WIDGET(menu
));
479 GtkWidget
*create_shapemenu(MainView
* main
)
486 menu
= gtk_menu_new();
490 snprintf(st
[0], sizeof(st
[0]), _("Free"));
491 snprintf(st
[1], sizeof(st
[1]), _("Line"));
492 snprintf(st
[2], sizeof(st
[2]), _("Rectangle"));
493 snprintf(st
[3], sizeof(st
[3]), _("Ellipse"));
495 for(i
= 0; i
< 4; i
++)
497 main
->shapemenuitems
[i
] = gtk_radio_menu_item_new_with_label(gr
, st
[i
]);
498 gr
= gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(main
->shapemenuitems
[i
]));
500 gtk_object_set_user_data(GTK_OBJECT(main
->shapemenuitems
[i
]), i
);
501 gtk_object_set_data(GTK_OBJECT(main
->shapemenuitems
[i
]), "m", main
);
503 gtk_menu_prepend(menu
, main
->shapemenuitems
[i
]);
504 g_signal_connect(G_OBJECT(main
->shapemenuitems
[i
]), "activate", G_CALLBACK(callback_shapemenu
), main
->shapemenuitems
[i
]);
507 gtk_widget_show_all(GTK_WIDGET(menu
));
512 * Create toolbar to mainview
514 static void create_toolbar(MainView
* main
)
517 * Create new GTK toolbar
519 main
->toolbar
= gtk_toolbar_new();
522 * Set toolbar properties
524 gtk_toolbar_set_orientation(GTK_TOOLBAR(main
->toolbar
), GTK_ORIENTATION_HORIZONTAL
);
525 gtk_toolbar_set_style(GTK_TOOLBAR(main
->toolbar
), GTK_TOOLBAR_BOTH_HORIZ
);
528 * Make menus and buttons to toolbar:
531 /* main->toggletree_tb = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_INDEX);*/
532 main
->toggletree_tb
= gtk_toggle_tool_button_new();
533 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->toggletree_tb
), "qgn_toolb_im_showpane");
534 g_signal_connect(G_OBJECT(main
->toggletree_tb
), "toggled", G_CALLBACK(callback_toggletree
), main
);
536 main
->new_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_ADD
);
538 /* main->save_tb = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);*/
539 main
->save_tb
= gtk_tool_button_new(NULL
, NULL
);
540 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->save_tb
), "qgn_toolb_gene_save");
542 main
->separator_tb1
= gtk_separator_tool_item_new();
545 * main->cut_tb = gtk_tool_button_new_from_stock(GTK_STOCK_CUT);
546 * main->copy_tb = gtk_tool_button_new_from_stock(GTK_STOCK_COPY);
547 * main->paste_tb = gtk_tool_button_new_from_stock(GTK_STOCK_PASTE);
548 * main->separator_tb2 = gtk_separator_tool_item_new();
551 main
->bold_tb
= gtk_toggle_tool_button_new();
552 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->bold_tb
), "qgn_list_gene_bold");
554 main
->italic_tb
= gtk_toggle_tool_button_new();
555 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->italic_tb
), "qgn_list_gene_italic");
557 main
->underline_tb
= gtk_toggle_tool_button_new();
558 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->underline_tb
), "qgn_list_gene_underline");
560 main
->bullet_tb
= gtk_toggle_tool_button_new();
561 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->bullet_tb
), "qgn_list_gene_bullets");
563 main
->strikethru_tb
= gtk_toggle_tool_button_new_from_stock(GTK_STOCK_STRIKETHROUGH
);
564 /* _tool_button_set_icon_name(GTK_TOOL_BUTTON(main->strikethru_tb), "qgn_list_gene_strikethrough");*/
566 main
->check_tb
= gtk_toggle_tool_button_new();
567 _tool_button_set_icon_name(GTK_TOOL_BUTTON(main
->check_tb
), "qgn_list_continuous_multi_select");
569 main
->checkadd_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_FILE
);
570 main
->checkdel_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_DELETE
);
573 main->bold_tb = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_BOLD);
574 main->italic_tb = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_ITALIC);
575 main->underline_tb = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_UNDERLINE);
577 main
->font_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_SELECT_FONT
);
579 /* main->fullscreen_tb = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);*/
582 * Insert items to toolbar
584 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->toggletree_tb
, -1);
585 /* gtk_toolbar_insert(GTK_TOOLBAR(main->toolbar), gtk_separator_tool_item_new(), -1);*/
586 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->new_tb
, -1);
587 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->save_tb
, -1);
588 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->separator_tb1
, -1);
591 * gtk_toolbar_insert ( GTK_TOOLBAR(main->toolbar), main->cut_tb, -1);
592 * gtk_toolbar_insert ( GTK_TOOLBAR(main->toolbar), main->copy_tb, -1);
593 * gtk_toolbar_insert ( GTK_TOOLBAR(main->toolbar), main->paste_tb, -1);
594 * gtk_toolbar_insert ( GTK_TOOLBAR(main->toolbar), main->separator_tb2, -1);
596 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->font_tb
, -1);
597 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->bold_tb
, -1);
598 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->italic_tb
, -1);
599 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->underline_tb
, -1);
600 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->bullet_tb
, -1);
601 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->strikethru_tb
, -1);
602 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->check_tb
, -1);
609 main
->colorbutton
= hildon_color_button_new_with_color(&col
);
611 main
->colorbutton_tb
= gtk_tool_item_new();
612 gtk_container_add(GTK_CONTAINER(main
->colorbutton_tb
), main
->colorbutton
);
613 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->colorbutton_tb
, -1);
614 g_signal_connect(G_OBJECT(main
->colorbutton
), "clicked", G_CALLBACK(callback_color
), main
);
616 main
->brushsize_tb
= gtk_tool_button_new(NULL
, NULL
);
617 g_signal_connect(G_OBJECT(main
->brushsize_tb
), "clicked", G_CALLBACK(callback_brushsizetb
), main
);
618 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->brushsize_tb
, -1);
620 main
->eraser_tb
= gtk_toggle_tool_button_new();
621 gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(main
->eraser_tb
), gtk_image_new_from_file(PIXMAPDIR
"/" "eraser.png"));
622 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->eraser_tb
, -1);
623 g_signal_connect(G_OBJECT(main
->eraser_tb
), "toggled", G_CALLBACK(callback_eraser
), main
);
625 main
->shape_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_CONVERT
);
626 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->shape_tb
, -1);
627 g_signal_connect(G_OBJECT(main
->shape_tb
), "clicked", G_CALLBACK(callback_menu
), main
->shapemenu
);
629 main
->sketchlines_tb
= gtk_tool_button_new(NULL
, NULL
);
630 g_signal_connect(G_OBJECT(main
->sketchlines_tb
), "clicked", G_CALLBACK(callback_menu
), main
->sketchlinesmenu
);
631 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->sketchlines_tb
, -1);
634 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), gtk_separator_tool_item_new(), -1);
636 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->checkadd_tb
, -1);
637 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->checkdel_tb
, -1);
639 main
->undo_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_UNDO
);
640 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->undo_tb
, -1);
641 g_signal_connect(G_OBJECT(main
->undo_tb
), "clicked", G_CALLBACK(callback_undo
), main
);
643 main
->redo_tb
= gtk_tool_button_new_from_stock(GTK_STOCK_REDO
);
644 gtk_toolbar_insert(GTK_TOOLBAR(main
->toolbar
), main
->redo_tb
, -1);
645 g_signal_connect(G_OBJECT(main
->redo_tb
), "clicked", G_CALLBACK(callback_redo
), main
);
648 * Connect signals to buttons
650 g_signal_connect(G_OBJECT(main
->new_tb
), "clicked", G_CALLBACK(callback_file_new_node
), main
);
651 g_signal_connect(G_OBJECT(main
->save_tb
), "clicked", G_CALLBACK(callback_file_save
), main
);
654 * g_signal_connect(G_OBJECT(main->cut_tb), "clicked",
655 * G_CALLBACK(callback_edit_cut), main);
656 * g_signal_connect(G_OBJECT(main->copy_tb), "clicked",
657 * G_CALLBACK(callback_edit_copy), main);
658 * g_signal_connect(G_OBJECT(main->paste_tb), "clicked",
659 * G_CALLBACK(callback_edit_paste), main);
661 g_signal_connect(G_OBJECT(main
->font_tb
), "clicked", G_CALLBACK(callback_font
), main
);
663 gtk_object_set_data(GTK_OBJECT(main
->bold_tb
), "s", WPT_BOLD
);
664 gtk_object_set_data(GTK_OBJECT(main
->italic_tb
), "s", WPT_ITALIC
);
665 gtk_object_set_data(GTK_OBJECT(main
->underline_tb
), "s", WPT_UNDERLINE
);
666 gtk_object_set_data(GTK_OBJECT(main
->bullet_tb
), "s", WPT_BULLET
);
667 gtk_object_set_data(GTK_OBJECT(main
->strikethru_tb
), "s", WPT_STRIKE
);
668 gtk_object_set_data(GTK_OBJECT(main
->check_tb
), "s", WPT_LEFT
);
670 gtk_object_set_data(GTK_OBJECT(main
->bold_tb
), "m", main
);
671 gtk_object_set_data(GTK_OBJECT(main
->italic_tb
), "m", main
);
672 gtk_object_set_data(GTK_OBJECT(main
->underline_tb
), "m", main
);
673 gtk_object_set_data(GTK_OBJECT(main
->bullet_tb
), "m", main
);
674 gtk_object_set_data(GTK_OBJECT(main
->strikethru_tb
), "m", main
);
675 gtk_object_set_data(GTK_OBJECT(main
->check_tb
), "m", main
);
677 g_signal_connect(G_OBJECT(main
->bold_tb
), "toggled", G_CALLBACK(callback_fontstyle
), main
->bold_tb
);
678 g_signal_connect(G_OBJECT(main
->italic_tb
), "toggled", G_CALLBACK(callback_fontstyle
), main
->italic_tb
);
679 g_signal_connect(G_OBJECT(main
->underline_tb
), "toggled", G_CALLBACK(callback_fontstyle
), main
->underline_tb
);
680 g_signal_connect(G_OBJECT(main
->bullet_tb
), "toggled", G_CALLBACK(callback_fontstyle
), main
->bullet_tb
);
681 g_signal_connect(G_OBJECT(main
->strikethru_tb
), "toggled", G_CALLBACK(callback_fontstyle
), main
->strikethru_tb
);
682 g_signal_connect(G_OBJECT(main
->check_tb
), "toggled", G_CALLBACK(callback_fontstyle
), main
->check_tb
);
684 g_signal_connect(G_OBJECT(main
->checkadd_tb
), "clicked", G_CALLBACK(callback_checklist_add
), main
);
685 g_signal_connect(G_OBJECT(main
->checkdel_tb
), "clicked", G_CALLBACK(callback_checklist_delete
), main
);
687 gtk_widget_show_all(GTK_WIDGET(main
->toolbar
));
691 * Create the text area
693 void create_textarea(MainView
* main
)
695 main
->scrolledwindow
= gtk_scrolled_window_new(NULL
, NULL
);
696 gtk_widget_hide(main
->scrolledwindow
);
697 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(main
->scrolledwindow
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
699 main
->textview
= wp_text_view_new();
701 gtk_text_view_set_editable(GTK_TEXT_VIEW(main->textview), TRUE);
702 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(main->textview), 10);
703 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(main->textview), 10);
704 main->buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(main->textview));
705 main->buffer = wp_text_buffer_new(NULL);
707 main
->buffer
= WP_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(main
->textview
)));
709 g_signal_connect(G_OBJECT(main
->buffer
), "refresh_attributes", G_CALLBACK(callback_textbuffer_move
), main
);
710 g_signal_connect(G_OBJECT(main
->buffer
), "can_undo", G_CALLBACK(callback_undotoggle
), main
);
711 g_signal_connect(G_OBJECT(main
->buffer
), "can_redo", G_CALLBACK(callback_redotoggle
), main
);
713 wp_text_buffer_enable_rich_text(main
->buffer
, TRUE
);
714 gtk_text_buffer_set_can_paste_rich_text(GTK_TEXT_BUFFER(main
->buffer
), TRUE
);
716 gtk_container_add(GTK_CONTAINER(main
->scrolledwindow
), main
->textview
);
717 gtk_widget_show(main
->textview
);
719 gtk_widget_modify_font(main
->textview
, pango_font_description_from_string("Monospace Regular 16"));
721 g_signal_connect(G_OBJECT(main
->buffer
), "modified-changed", G_CALLBACK(callback_buffer_modified
), main
);
722 g_signal_connect(G_OBJECT(main
->buffer
), "changed", G_CALLBACK(callback_buffer_modified
), main
);
726 * Create the treeview
728 void create_treeview(MainView
* main
)
730 main
->scrolledtree
= gtk_scrolled_window_new(NULL
, NULL
);
731 gtk_widget_show(main
->scrolledtree
);
732 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(main
->scrolledtree
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
734 GtkTreeStore
*tstore
= gtk_tree_store_new(N_COLUMNS
, G_TYPE_STRING
, GDK_TYPE_PIXBUF
,
737 main
->treeview
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(tstore
));
738 g_object_unref(G_OBJECT(tstore
));
740 GtkCellRenderer
*renderer1
= gtk_cell_renderer_text_new();
741 GtkCellRenderer
*renderer2
= gtk_cell_renderer_pixbuf_new();
743 GtkTreeViewColumn
*column
= gtk_tree_view_column_new();
745 gtk_tree_view_column_pack_start(column
, renderer2
, FALSE
);
746 gtk_tree_view_column_pack_start(column
, renderer1
, FALSE
);
748 gtk_tree_view_column_add_attribute(column
, renderer1
, "text", NODE_NAME
);
749 gtk_tree_view_column_add_attribute(column
, renderer2
, "pixbuf", NODE_PIXBUF
);
752 * gtk_tree_view_column_add_attribute(column, renderer2, "width", 0);
753 * gtk_tree_view_column_add_attribute(column, renderer2, "height", 0);
755 gtk_tree_view_column_set_cell_data_func(column
, renderer2
, callback_treeview_celldatafunc
, main
, NULL
);
757 gtk_tree_view_column_set_sizing(column
, GTK_TREE_VIEW_COLUMN_FIXED
);
758 gtk_tree_view_column_set_resizable(column
, FALSE
);
760 gtk_tree_view_append_column(GTK_TREE_VIEW(main
->treeview
), column
);
762 GtkTreeSelection
*select
= gtk_tree_view_get_selection(GTK_TREE_VIEW(main
->treeview
));
764 gtk_tree_selection_set_mode(select
, GTK_SELECTION_BROWSE
);
765 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(main
->treeview
), FALSE
);
766 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(main
->treeview
), FALSE
);
767 #ifdef EXPANDING_ROWS
768 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(main
->treeview
), column
);
770 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(main
->treeview
), NULL
);
773 gtk_tree_view_expand_all(GTK_TREE_VIEW(main
->treeview
));
774 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(main
->treeview
), TRUE
);
775 gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(main
->treeview
), FALSE
);
777 g_signal_connect(G_OBJECT(select
), "changed", G_CALLBACK(callback_treeview_change
), main
);
778 #ifndef EXPANDING_ROWS
779 g_signal_connect(G_OBJECT(main
->treeview
), "test-collapse-row", G_CALLBACK(callback_treeview_testcollapse
), main
);
781 gtk_tree_selection_set_select_function(select
, treeview_canselect
, main
, NULL
);
782 gtk_object_set_user_data(GTK_OBJECT(main
->treeview
), (gpointer
) main
);
784 gtk_container_add(GTK_CONTAINER(main
->scrolledtree
), main
->treeview
);
786 gtk_widget_set_name(main
->treeview
, "maemopadplus-treeview");
788 gtk_rc_parse(PIXMAPDIR
"/maemopadplus.rc");
790 gtk_widget_show(main
->treeview
);
794 void create_checklist(MainView
* main
)
796 main
->check_newitemcounter
=0;
797 main
->listscroll
= gtk_scrolled_window_new(NULL
, NULL
);
798 gtk_widget_hide(main
->listscroll
);
799 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(main
->listscroll
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
801 GtkListStore
*store
= gtk_list_store_new(CHECKN_COLUMNS
, G_TYPE_BOOLEAN
, G_TYPE_STRING
, G_TYPE_STRING
, G_TYPE_INT
, G_TYPE_BOOLEAN
);
803 main
->listview
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(store
));
804 g_object_unref(G_OBJECT(store
));
806 g_object_set(main
->listview
, "allow-checkbox-mode", FALSE
, NULL
);
808 GtkCellRenderer
*renderer1
= gtk_cell_renderer_toggle_new();
809 g_object_set(renderer1
, "activatable", TRUE
, NULL
);
810 g_object_set(renderer1
, "checkbox-mode", FALSE
, NULL
);
811 g_object_set(renderer1
, "radio", FALSE
, NULL
);
812 g_signal_connect(G_OBJECT(renderer1
), "toggled", G_CALLBACK(callback_checklist_toggled
), main
->listview
);
814 GtkCellRenderer
*renderer2
= gtk_cell_renderer_text_new();
815 g_object_set(renderer2
, "editable", TRUE
, NULL
);
816 g_signal_connect(G_OBJECT(renderer2
), "edited", G_CALLBACK(callback_checklist_edited
), main
->listview
);
818 GtkTreeViewColumn
*col1
= gtk_tree_view_column_new_with_attributes("", renderer1
,
819 /* "cell-background", CHECKNODE_COLOR,*/
820 "active", CHECKNODE_CHECKED
,
823 main
->listtextcol
= gtk_tree_view_column_new_with_attributes("", renderer2
,
824 "text", CHECKNODE_TEXT
,
825 /* "cell-background", CHECKNODE_COLOR,*/
826 "foreground", CHECKNODE_COLOR
,
827 "strikethrough", CHECKNODE_STRIKE
,
828 "weight", CHECKNODE_BOLD
,
831 gtk_tree_view_append_column(GTK_TREE_VIEW(main
->listview
), col1
);
832 gtk_tree_view_append_column(GTK_TREE_VIEW(main
->listview
), main
->listtextcol
);
834 GtkTreeSelection
*select
= gtk_tree_view_get_selection(GTK_TREE_VIEW(main
->listview
));
836 gtk_tree_selection_set_mode(select
, GTK_SELECTION_MULTIPLE
);
837 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(main
->listview
), FALSE
);
838 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(main
->listview
), FALSE
);
839 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(main
->listview
), TRUE
);
842 gtk_tree_selection_set_select_function(select, treeview_canselect, main, NULL);
844 g_signal_connect(G_OBJECT(select
), "changed", G_CALLBACK(callback_checklist_change
), main
);
846 gtk_object_set_user_data(GTK_OBJECT(main
->listview
), (gpointer
) main
);
847 gtk_object_set_data(GTK_OBJECT(main
->listview
), "edited", FALSE
);
849 gtk_container_add(GTK_CONTAINER(main
->listscroll
), main
->listview
);
850 gtk_widget_show(main
->listview
);
852 GtkTreeIter toplevel;
853 gtk_list_store_append(store, &toplevel);
854 gtk_list_store_set(store, &toplevel,
855 CHECKNODE_CHECKED, TRUE, CHECKNODE_TEXT, "sample text", -1);