3 #include <glib/gi18n.h>
7 #include "comic-new-dialog.h"
8 #include "comic-saveas-dialog.h"
9 #include "comic-open-dialog.h"
10 #include "tbo-window.h"
11 #include "ui-drawing.h"
13 #include "selector-tool.h"
18 static GtkActionGroup *MENU_ACTION_GROUP = NULL;
21 update_menubar (TboWindow *tbo)
25 char *actions[20] = {"FlipHObj", "FlipVObj", "OrderUpObj", "OrderDownObj", "DeleteObj", "CloneObj"};
27 int obj_n_elements = 4;
28 gboolean activated = FALSE;
30 tbo_object *obj = selector_tool_get_selected_obj ();
31 Frame *frame = selector_tool_get_selected_frame ();
33 if (!MENU_ACTION_GROUP)
36 if (get_frame_view () && obj)
38 for (i=0; i<elements; i++)
40 action = gtk_action_group_get_action (MENU_ACTION_GROUP, actions[i]);
41 gtk_action_set_sensitive (action, TRUE);
44 else if (!get_frame_view () && frame)
46 for (i=obj_n_elements; i<elements; i++)
48 action = gtk_action_group_get_action (MENU_ACTION_GROUP, actions[i]);
49 gtk_action_set_sensitive (action, TRUE);
54 for (i=0; i<elements; i++)
56 action = gtk_action_group_get_action (MENU_ACTION_GROUP, actions[i]);
57 gtk_action_set_sensitive (action, FALSE);
62 gboolean menu_handler (GtkWidget *widget, gpointer data){
63 printf ("Menu :%s\n", ((TboWindow *) data)->comic->title);
68 clone_obj_cb (GtkWidget *widget, gpointer data)
70 tbo_object *obj = selector_tool_get_selected_obj ();
71 Frame *frame = selector_tool_get_selected_frame ();
72 Page *page = tbo_comic_get_current_page (((TboWindow*)data)->comic);
74 if (!get_frame_view () && frame)
76 Frame *cloned_frame = tbo_frame_clone (frame);
77 cloned_frame->x += 10;
78 cloned_frame->y -= 10;
79 tbo_page_add_frame (page, cloned_frame);
80 set_selected (cloned_frame, (TboWindow*)data);
82 else if (obj && get_frame_view ())
84 tbo_object *cloned_obj = obj->clone (obj);
87 tbo_frame_add_obj (frame, cloned_obj);
88 set_selected_obj (cloned_obj, (TboWindow*)data);
90 update_drawing ((TboWindow *)data);
95 delete_obj_cb (GtkWidget *widget, gpointer data)
97 TboWindow *tbo = (TboWindow *)data;
99 tbo_object *obj = selector_tool_get_selected_obj ();
100 Frame *frame = selector_tool_get_selected_frame ();
101 Page *page = tbo_comic_get_current_page (((TboWindow*)data)->comic);
103 if (obj && get_frame_view ())
105 tbo_frame_del_obj (frame, obj);
106 set_selected_obj (NULL, tbo);
108 else if (!get_frame_view () && frame)
110 tbo_page_del_frame (page, frame);
111 set_selected (NULL, tbo);
113 update_drawing ((TboWindow *)data);
118 flip_v_cb (GtkWidget *widget, gpointer data)
120 tbo_object *obj = selector_tool_get_selected_obj ();
122 tbo_object_flipv (obj);
123 update_drawing ((TboWindow *)data);
128 flip_h_cb (GtkWidget *widget, gpointer data)
130 tbo_object *obj = selector_tool_get_selected_obj ();
132 tbo_object_fliph (obj);
133 update_drawing ((TboWindow *)data);
138 order_up_cb (GtkWidget *widget, gpointer data)
140 tbo_object *obj = selector_tool_get_selected_obj ();
142 tbo_object_order_up (obj);
143 update_drawing ((TboWindow *)data);
148 order_down_cb (GtkWidget *widget, gpointer data)
150 tbo_object *obj = selector_tool_get_selected_obj ();
152 tbo_object_order_down (obj);
153 update_drawing ((TboWindow *)data);
157 gboolean close_cb (GtkWidget *widget, gpointer data){
158 printf ("Ventana cerrada\n");
159 tbo_window_free_cb (widget, NULL, ((TboWindow *) data));
164 about_cb (GtkWidget *widget, TboWindow *tbo){
165 const gchar *authors[] = {"danigm <dani@danigm.net>", NULL};
166 const gchar *artists[] = {"danigm <dani@danigm.net>",
168 "Arcadia http://www.arcadiaproject.org :",
169 "Samuel Navas Portillo",
170 "Daniel Pavón Pérez",
171 "Juan Jesús Pérez Luna",
177 "Rafael García <bladecoder@gmail.com>",
180 gtk_show_about_dialog (GTK_WINDOW (tbo->window),
181 "name", _("TBO comic editor"),
185 "website", "http://trac.danigm.net/tbo",
192 tbo_menu_to_png (GtkWidget *widget, TboWindow *tbo)
194 tbo_export (tbo, "png");
199 tbo_menu_to_pdf (GtkWidget *widget, TboWindow *tbo)
201 tbo_export (tbo, "pdf");
206 tbo_menu_to_svg (GtkWidget *widget, TboWindow *tbo)
208 tbo_export (tbo, "svg");
212 static const GtkActionEntry tbo_menu_entries [] = {
215 { "File", NULL, N_("_File") },
216 { "Edit", NULL, N_("_Edit") },
217 { "Help", NULL, N_("Help") },
221 { "NewFile", GTK_STOCK_NEW, N_("_New"), "<control>N",
222 N_("Create a new file"),
223 G_CALLBACK (tbo_comic_new_dialog) },
225 { "OpenFile", GTK_STOCK_OPEN, N_("_Open"), "<control>O",
226 N_("Open a new file"),
227 G_CALLBACK (tbo_comic_open_dialog) },
229 { "SaveFile", GTK_STOCK_SAVE, N_("_Save"), "<control>S",
230 N_("Save current document"),
231 G_CALLBACK (tbo_comic_save_dialog) },
233 { "SaveFileAs", GTK_STOCK_SAVE_AS, N_("_Save as"), "",
234 N_("Save current document as ..."),
235 G_CALLBACK (tbo_comic_saveas_dialog) },
237 { "ToPNG", GTK_STOCK_FILE, N_("Export as png"), "",
238 N_("Save current document as png"),
239 G_CALLBACK (tbo_menu_to_png) },
241 { "ToPDF", GTK_STOCK_FILE, N_("Export as pdf"), "",
242 N_("Save current document as pdf"),
243 G_CALLBACK (tbo_menu_to_pdf) },
245 { "ToSVG", GTK_STOCK_FILE, N_("Export as svg"), "",
246 N_("Save current document as svg"),
247 G_CALLBACK (tbo_menu_to_svg) },
249 { "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q",
251 G_CALLBACK (close_cb) },
255 { "CloneObj", GTK_STOCK_COPY, N_("Clone"), "<control>d",
257 G_CALLBACK (clone_obj_cb) },
258 { "DeleteObj", GTK_STOCK_DELETE, N_("Delete"), "Delete",
260 G_CALLBACK (delete_obj_cb) },
261 { "FlipHObj", NULL, N_("Horizontal flip"), "h",
262 N_("Horizontal flip"),
263 G_CALLBACK (flip_h_cb) },
264 { "FlipVObj", NULL, N_("Vertical flip"), "v",
266 G_CALLBACK (flip_v_cb) },
267 { "OrderUpObj", NULL, N_("Move to front"), "Page_Up",
269 G_CALLBACK ( order_up_cb ) },
270 { "OrderDownObj", NULL, N_("Move to back"), "Page_Down",
272 G_CALLBACK ( order_down_cb ) },
276 { "About", GTK_STOCK_ABOUT, N_("About"), "",
278 G_CALLBACK (about_cb) },
281 GtkWidget *generate_menu (TboWindow *window){
283 GtkUIManager *manager;
284 GError *error = NULL;
286 manager = gtk_ui_manager_new ();
287 gtk_ui_manager_add_ui_from_file (manager, DATA_DIR "/ui/tbo-menu-ui.xml", &error);
290 g_warning (_("Could not merge tbo-menu-ui.xml: %s"), error->message);
291 g_error_free (error);
294 MENU_ACTION_GROUP = gtk_action_group_new ("MenuActions");
295 gtk_action_group_set_translation_domain (MENU_ACTION_GROUP, NULL);
296 gtk_action_group_add_actions (MENU_ACTION_GROUP, tbo_menu_entries,
297 G_N_ELEMENTS (tbo_menu_entries), window);
299 gtk_ui_manager_insert_action_group (manager, MENU_ACTION_GROUP, 0);
301 menu = gtk_ui_manager_get_widget (manager, "/menubar");