Complete export dialog, asking for size and format
authordanigm <dani@danigm.net>
Wed, 7 Jul 2010 23:36:50 +0000 (01:36 +0200)
committerdanigm <dani@danigm.net>
Wed, 7 Jul 2010 23:36:50 +0000 (01:36 +0200)
data/ui/tbo-menu-ui.xml
po/es.po
src/export.c
src/export.h
src/ui-menu.c

index 88a7c87..fb85d6f 100644 (file)
@@ -6,9 +6,7 @@
        <menuitem name="Save" action="SaveFile" />
        <menuitem name="SaveAs" action="SaveFileAs" />
        <separator/>
-       <menuitem name="Export as png" action="ToPNG" />
-       <menuitem name="Export as pdf" action="ToPDF" />
-       <menuitem name="Export as svg" action="ToSVG" />
+       <menuitem name="Export as..." action="ToPNG" />
        <separator/>
        <menuitem name="Quit" action="Quit" />
      </menu>
index 31c00af..e0fb045 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,10 +7,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 0.1\n"
 "Report-Msgid-Bugs-To: dani@danigm.net\n"
-"POT-Creation-Date: 2010-05-11 22:36+0200\n"
+"POT-Creation-Date: 2010-07-08 01:29+0200\n"
 "PO-Revision-Date: 2010-01-24 20:48+0100\n"
 "Last-Translator: Daniel Garcia <dani@danigm.net>\n"
 "Language-Team: \n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -32,15 +33,15 @@ msgstr "No se ha podido cargar el fichero"
 msgid "Couldn't parse file"
 msgstr "No se ha podido parsear el fichero"
 
-#: ../src/comic-new-dialog.c:22 ../src/ui-toolbar.c:300
+#: ../src/comic-new-dialog.c:22 ../src/ui-toolbar.c:313
 msgid "New Comic"
 msgstr "Nuevo Comic"
 
-#: ../src/comic-new-dialog.c:34
+#: ../src/comic-new-dialog.c:34 ../src/export.c:126
 msgid "width: "
 msgstr "ancho: "
 
-#: ../src/comic-new-dialog.c:44
+#: ../src/comic-new-dialog.c:44 ../src/export.c:127
 msgid "height: "
 msgstr "alto: "
 
@@ -52,7 +53,7 @@ msgstr "Abrir"
 msgid "TBO files"
 msgstr "Ficheros TBO"
 
-#: ../src/comic-open-dialog.c:32 ../src/ui-toolbar.c:280
+#: ../src/comic-open-dialog.c:32 ../src/ui-toolbar.c:293
 msgid "All files"
 msgstr "Todos los ficheros"
 
@@ -60,29 +61,37 @@ msgstr "Todos los ficheros"
 msgid "Save as"
 msgstr "Guardar como"
 
-#: ../src/custom-stock.c:37
+#: ../src/custom-stock.c:38
 #, c-format
 msgid "error loading image %s\n"
 msgstr "error cargando imagen %s\n"
 
-#: ../src/export.c:27
+#: ../src/export.c:51 ../src/export.c:102
 msgid "Export as"
 msgstr "Exportar como"
 
-#: ../src/selector-tool.c:127
+#: ../src/export.c:118
+msgid "Filename: "
+msgstr "Nombre de fichero: "
+
+#: ../src/export.c:142
+msgid "guess by extension"
+msgstr "Adivinar por extensión"
+
+#: ../src/selector-tool.c:109
 msgid "Background color: "
 msgstr "Color de fondo: "
 
-#: ../src/selector-tool.c:140
+#: ../src/selector-tool.c:122
 msgid "border"
 msgstr "borde"
 
-#: ../src/selector-tool.c:587
+#: ../src/selector-tool.c:569
 msgid "double click here"
 msgstr "haz doble click aquí"
 
 #. TODO add tooltip_notify
-#: ../src/selector-tool.c:635
+#: ../src/selector-tool.c:617
 msgid "press esc to go back"
 msgstr "pulsa esc para volver atrás"
 
@@ -91,11 +100,11 @@ msgstr "pulsa esc para volver atrás"
 msgid "Couldn't load %s\n"
 msgstr "No se puede cargar %s\n"
 
-#: ../src/tbo-window.c:126
+#: ../src/tbo-window.c:128
 msgid "Untitled"
 msgstr "Sintitulo"
 
-#: ../src/tbo-window.c:182
+#: ../src/tbo-window.c:184
 #, c-format
 msgid "page: %d of %d [ %5d,%5d ] | frames: %d"
 msgstr "página: %d de %d [ %5d,%5d ] | viñetas: %d"
@@ -108,208 +117,222 @@ msgstr "Color del texto:"
 msgid "Font:"
 msgstr "Fuente:"
 
-#: ../src/ui-menu.c:167
+#: ../src/ui-menu.c:191
 msgid "TBO comic editor"
 msgstr "Editor de comic TBO"
 
 #. Toplevel
-#: ../src/ui-menu.c:200
+#: ../src/ui-menu.c:211
 msgid "_File"
 msgstr "_Archivo"
 
-#: ../src/ui-menu.c:201
+#: ../src/ui-menu.c:212
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../src/ui-menu.c:202
+#: ../src/ui-menu.c:213
 msgid "Help"
 msgstr "Ayuda"
 
 #. File menu
-#: ../src/ui-menu.c:206 ../src/ui-toolbar.c:299
+#: ../src/ui-menu.c:217 ../src/ui-toolbar.c:312
 msgid "_New"
 msgstr "_Nuevo"
 
-#: ../src/ui-menu.c:207
+#: ../src/ui-menu.c:218
 msgid "Create a new file"
 msgstr "Crear un nuevo fichero"
 
-#: ../src/ui-menu.c:210 ../src/ui-toolbar.c:303
+#: ../src/ui-menu.c:221 ../src/ui-toolbar.c:316
 msgid "_Open"
 msgstr "_Abrir"
 
-#: ../src/ui-menu.c:211
+#: ../src/ui-menu.c:222
 msgid "Open a new file"
 msgstr "Abrir un fichero"
 
-#: ../src/ui-menu.c:214 ../src/ui-toolbar.c:307
+#: ../src/ui-menu.c:225 ../src/ui-toolbar.c:320
 msgid "_Save"
 msgstr "_Guardar"
 
-#: ../src/ui-menu.c:215 ../src/ui-toolbar.c:308
+#: ../src/ui-menu.c:226 ../src/ui-toolbar.c:321
 msgid "Save current document"
 msgstr "Guardar el documento actual"
 
-#: ../src/ui-menu.c:218
+#: ../src/ui-menu.c:229
 msgid "_Save as"
 msgstr "_Guardar como"
 
-#: ../src/ui-menu.c:219
+#: ../src/ui-menu.c:230
 msgid "Save current document as ..."
 msgstr "Guardar el documento actual como ..."
 
-#: ../src/ui-menu.c:222
-msgid "Export as png"
-msgstr "Exportar a png"
-
-#: ../src/ui-menu.c:223
-msgid "Save current document as png"
-msgstr "Guardar el documento actual como png"
-
-#: ../src/ui-menu.c:226
-msgid "Export as pdf"
-msgstr "Exportar a pdf"
-
-#: ../src/ui-menu.c:227
-msgid "Save current document as pdf"
-msgstr "Guardar el documento actual como pdf"
-
-#: ../src/ui-menu.c:230
-msgid "Export as svg"
-msgstr "Exportar a svg"
-
-#: ../src/ui-menu.c:231
-msgid "Save current document as svg"
-msgstr "Guardar el documento actual como svg"
+#: ../src/ui-menu.c:233
+msgid "Export as..."
+msgstr "Exportar como..."
 
 #: ../src/ui-menu.c:234
+msgid "Save current document as..."
+msgstr "Guardar el documento actual como ..."
+
+#: ../src/ui-menu.c:237
 msgid "_Quit"
 msgstr "_Salir"
 
-#: ../src/ui-menu.c:235
+#: ../src/ui-menu.c:238
 msgid "Quit"
 msgstr "Salir"
 
 #. edit menu
-#: ../src/ui-menu.c:240 ../src/ui-menu.c:241
+#: ../src/ui-menu.c:243 ../src/ui-menu.c:244
 msgid "Clone"
 msgstr "Clonar"
 
-#: ../src/ui-menu.c:243 ../src/ui-menu.c:244
+#: ../src/ui-menu.c:246 ../src/ui-menu.c:247
 msgid "Delete"
 msgstr "Eliminar"
 
-#: ../src/ui-menu.c:246 ../src/ui-menu.c:247
+#: ../src/ui-menu.c:249 ../src/ui-menu.c:250
 msgid "Horizontal flip"
 msgstr "Reflejo horizontal"
 
-#: ../src/ui-menu.c:249 ../src/ui-menu.c:250
+#: ../src/ui-menu.c:252 ../src/ui-menu.c:253
 msgid "Vertical flip"
 msgstr "Reflejo vertical"
 
-#: ../src/ui-menu.c:252 ../src/ui-menu.c:253
+#: ../src/ui-menu.c:255 ../src/ui-menu.c:256
 msgid "Move to front"
 msgstr "Mover al frente"
 
-#: ../src/ui-menu.c:255 ../src/ui-menu.c:256
+#: ../src/ui-menu.c:258 ../src/ui-menu.c:259
 msgid "Move to back"
 msgstr "Mober atrás"
 
 #. Help menu
-#: ../src/ui-menu.c:261 ../src/ui-menu.c:262
+#: ../src/ui-menu.c:263 ../src/ui-menu.c:264
+msgid "Tutorial"
+msgstr ""
+
+#: ../src/ui-menu.c:267 ../src/ui-menu.c:268
 msgid "About"
 msgstr "Acerca de"
 
-#: ../src/ui-menu.c:275
+#: ../src/ui-menu.c:281
 #, c-format
 msgid "Could not merge tbo-menu-ui.xml: %s"
 msgstr "No se ha podido utilizar tbo-menu-ui.xml: %s"
 
-#: ../src/ui-toolbar.c:267
+#: ../src/ui-toolbar.c:280
 msgid "Add an Image"
 msgstr "Añadir una imagen"
 
-#: ../src/ui-toolbar.c:275
+#: ../src/ui-toolbar.c:288
 msgid "png"
 msgstr "png"
 
-#: ../src/ui-toolbar.c:304
+#: ../src/ui-toolbar.c:317
 msgid "Open comic"
 msgstr "Abrir comic"
 
 #. Page tools
-#: ../src/ui-toolbar.c:312
+#: ../src/ui-toolbar.c:325
 msgid "New Page"
 msgstr "Nueva Página"
 
-#: ../src/ui-toolbar.c:313
+#: ../src/ui-toolbar.c:326
 msgid "New page"
 msgstr "Nueva página"
 
-#: ../src/ui-toolbar.c:316
+#: ../src/ui-toolbar.c:329
 msgid "Delete Page"
 msgstr "Borrar Página"
 
-#: ../src/ui-toolbar.c:317
+#: ../src/ui-toolbar.c:330
 msgid "Delete current page"
 msgstr "Borrar la página actual"
 
-#: ../src/ui-toolbar.c:320
+#: ../src/ui-toolbar.c:333
 msgid "Prev Page"
 msgstr "Página anterior"
 
-#: ../src/ui-toolbar.c:321
+#: ../src/ui-toolbar.c:334
 msgid "Prev page"
 msgstr "Página anterior"
 
-#: ../src/ui-toolbar.c:324
+#: ../src/ui-toolbar.c:337
 msgid "Next Page"
 msgstr "Página siguiente"
 
-#: ../src/ui-toolbar.c:325
+#: ../src/ui-toolbar.c:338
 msgid "Next page"
 msgstr "Página siguiente"
 
 #. Zoom tools
-#: ../src/ui-toolbar.c:329 ../src/ui-toolbar.c:330
+#: ../src/ui-toolbar.c:342 ../src/ui-toolbar.c:343
 msgid "Zoom in"
 msgstr "Acercar"
 
-#: ../src/ui-toolbar.c:332 ../src/ui-toolbar.c:333
+#: ../src/ui-toolbar.c:345 ../src/ui-toolbar.c:346
 msgid "Zoom 1:1"
 msgstr "Escala 1:1"
 
-#: ../src/ui-toolbar.c:335 ../src/ui-toolbar.c:336
+#: ../src/ui-toolbar.c:348 ../src/ui-toolbar.c:349
 msgid "Zoom fit"
 msgstr "Ajustar"
 
-#: ../src/ui-toolbar.c:338 ../src/ui-toolbar.c:339
+#: ../src/ui-toolbar.c:351 ../src/ui-toolbar.c:352
 msgid "Zoom out"
 msgstr "Alejar"
 
 #. Png image tool
-#: ../src/ui-toolbar.c:343 ../src/ui-toolbar.c:344
+#: ../src/ui-toolbar.c:356 ../src/ui-toolbar.c:357
 msgid "Image"
 msgstr "Imagen"
 
 #. Page view tools
-#: ../src/ui-toolbar.c:350
+#: ../src/ui-toolbar.c:363
 msgid "New _Frame"
 msgstr "Nueva _Vieta"
 
-#: ../src/ui-toolbar.c:351
+#: ../src/ui-toolbar.c:364
 msgid "New Frame"
 msgstr "Nueva Vieta"
 
-#: ../src/ui-toolbar.c:354 ../src/ui-toolbar.c:355
+#: ../src/ui-toolbar.c:367 ../src/ui-toolbar.c:368
 msgid "Selector"
 msgstr "Selector"
 
 #. Frame view tools
-#: ../src/ui-toolbar.c:359 ../src/ui-toolbar.c:360
+#: ../src/ui-toolbar.c:372 ../src/ui-toolbar.c:373
 msgid "Doodle"
 msgstr "Monigote"
 
-#: ../src/ui-toolbar.c:362 ../src/ui-toolbar.c:363
+#: ../src/ui-toolbar.c:375
+msgid "Booble"
+msgstr "Bocadillo"
+
+#: ../src/ui-toolbar.c:376
+msgid "Bubble"
+msgstr "Bocadillo"
+
+#: ../src/ui-toolbar.c:378 ../src/ui-toolbar.c:379
 msgid "Text"
 msgstr "Texto"
+
+#~ msgid "Export as png"
+#~ msgstr "Exportar a png"
+
+#~ msgid "Save current document as png"
+#~ msgstr "Guardar el documento actual como png"
+
+#~ msgid "Export as pdf"
+#~ msgstr "Exportar a pdf"
+
+#~ msgid "Save current document as pdf"
+#~ msgstr "Guardar el documento actual como pdf"
+
+#~ msgid "Export as svg"
+#~ msgstr "Exportar a svg"
+
+#~ msgid "Save current document as svg"
+#~ msgstr "Guardar el documento actual como svg"
index cc498d0..7902a33 100644 (file)
@@ -8,6 +8,37 @@
 #include "export.h"
 #include "ui-drawing.h"
 #include "tbo-ui-utils.h"
+#include "tbo-types.h"
+
+static LOCK = 0;
+
+struct export_spin_args {
+    gint current_size;
+    gint current_size2;
+    GtkWidget *spin2;
+    gdouble *scale;
+};
+
+static gboolean
+export_size_cb (GtkWidget *widget, struct export_spin_args *args)
+{
+    if (!LOCK)
+    {
+        LOCK = 1;
+        gint current_size = args->current_size;
+        gint current_size2 = args->current_size2;
+        gint new_size = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+        gint new_value;
+        if (new_size)
+        {
+            *(args->scale) = new_size / (gdouble) current_size;
+            new_value = (gint) (*(args->scale) * current_size2);
+            gtk_spin_button_set_value (GTK_SPIN_BUTTON (args->spin2), new_value);
+        }
+        LOCK = 0;
+    }
+    return FALSE;
+}
 
 gboolean
 filedialog_cb (GtkWidget *widget, gpointer data)
@@ -34,10 +65,11 @@ filedialog_cb (GtkWidget *widget, gpointer data)
     }
 
     gtk_widget_destroy (GTK_WIDGET (filechooserdialog));
+    return FALSE;
 }
 
 gboolean
-tbo_export (TboWindow *tbo, const gchar *export_to)
+tbo_export (TboWindow *tbo)
 {
     cairo_surface_t *surface = NULL;
     cairo_t *cr;
@@ -49,6 +81,11 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
     GList *page_list;
     gint i, n, n2;
     gint response;
+    gdouble scale = 1.0;
+    gchar *export_to;
+    gint export_to_index;
+    struct export_spin_args spin_args;
+    struct export_spin_args spin_args2;
 
     GtkWidget *dialog;
     GtkWidget *vbox;
@@ -58,6 +95,9 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
     GtkWidget *filebutton;
     GtkWidget *spinw;
     GtkWidget *spinh;
+    GtkWidget *combobox;
+
+    GtkWidget *button;
 
     dialog = gtk_dialog_new_with_buttons (_("Export as"),
                                             GTK_WINDOW (tbo->window),
@@ -68,6 +108,9 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
                                             GTK_RESPONSE_ACCEPT,
                                             NULL);
 
+    button = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+    gtk_widget_grab_focus (GTK_WIDGET (button));
+
     filebutton = gtk_button_new_from_stock (GTK_STOCK_OPEN);
     vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
 
@@ -81,7 +124,27 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
     gtk_container_add (GTK_CONTAINER (vbox), hbox);
 
     spinw = add_spin_with_label (vbox, _("width: "), tbo->comic->width);
-    spinh = add_spin_with_label (vbox, _("height: "), tbo->comic->width);
+    spinh = add_spin_with_label (vbox, _("height: "), tbo->comic->height);
+
+    spin_args.current_size = tbo->comic->width;
+    spin_args.current_size2 = tbo->comic->height;
+    spin_args.spin2 = spinh;
+    spin_args.scale = &scale;
+    g_signal_connect (spinw, "value-changed", G_CALLBACK (export_size_cb), &spin_args);
+
+    spin_args2.current_size = tbo->comic->height;
+    spin_args2.current_size2 = tbo->comic->width;
+    spin_args2.spin2 = spinw;
+    spin_args2.scale = &scale;
+    g_signal_connect (spinh, "value-changed", G_CALLBACK (export_size_cb), &spin_args2);
+
+    combobox = gtk_combo_box_new_text ();
+    gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("guess by extension"));
+    gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), ".png");
+    gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), ".pdf");
+    gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), ".svg");
+    gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
+    gtk_container_add (GTK_CONTAINER (vbox), combobox);
 
     gtk_widget_show_all (GTK_WIDGET (vbox));
 
@@ -91,7 +154,42 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
 
     if (response == GTK_RESPONSE_ACCEPT)
     {
+        width = (gint) (width * scale);
+        height = (gint) (height * scale);
+
         filename = (gchar *)gtk_entry_get_text (GTK_ENTRY (fileinput));
+        /* 0 guess, 1 png, 2 pdf, 3 svg */
+        export_to_index = gtk_combo_box_get_active (GTK_COMBO_BOX (combobox));
+
+        switch (export_to_index)
+        {
+            case 0:
+                //guess
+                if (strlen (filename) > 4)
+                {
+                    export_to = filename + strlen (filename) - 3;
+                    filename = g_strndup (filename, strlen(filename) - 4);
+                }
+                else
+                {
+                    filename = g_strdup (filename);
+                    export_to = "png";
+                }
+                break;
+            case 1:
+                export_to = "png";
+                break;
+            case 2:
+                export_to = "pdf";
+                break;
+            case 3:
+                export_to = "svg";
+                break;
+            default:
+                export_to = "png";
+                break;
+        }
+
         n = g_list_length (tbo->comic->pages);
         n2 = n;
         for (i=0; n; n=n/10, i++);
@@ -114,24 +212,28 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
             // SVG
             else if (strcmp (export_to, "svg") == 0)
             {
-                surface = cairo_svg_surface_create (rpath, height, width);
+                surface = cairo_svg_surface_create (rpath, width, height);
                 cr = cairo_create (surface);
             }
-            // PNG
-            else if (strcmp (export_to, "png") == 0)
+            // PNG or unknown format... default is png
+            else
             {
                 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
                 cr = cairo_create (surface);
             }
 
+            cairo_scale (cr, scale, scale);
+
             // drawing the stuff
-            tbo_drawing_draw_page (cr, (Page *)page_list->data, width, height);
+            tbo_drawing_draw_page (cr, (Page *)page_list->data, width/scale, height/scale);
 
             if (strcmp (export_to, "pdf") == 0)
                 cairo_show_page (cr);
             else if (strcmp (export_to, "png") == 0)
                 cairo_surface_write_to_png (surface, rpath);
 
+            cairo_scale (cr, 1/scale, 1/scale);
+
             // Not destroying for multipage
             if (strcmp (export_to, "pdf") != 0)
             {
@@ -147,6 +249,8 @@ tbo_export (TboWindow *tbo, const gchar *export_to)
             cairo_destroy (cr);
         }
     }
+    if (!export_to_index)
+        g_free (filename);
 
     gtk_widget_destroy (GTK_WIDGET (dialog));
 
index b39eb1f..2290f55 100644 (file)
@@ -5,6 +5,6 @@
 #include <cairo.h>
 #include "tbo-window.h"
 
-gboolean tbo_export (TboWindow *tbo, const char *);
+gboolean tbo_export (TboWindow *tbo);
 
 #endif
index 5436f3b..e8f6146 100644 (file)
@@ -199,23 +199,9 @@ about_cb (GtkWidget *widget, TboWindow *tbo){
 }
 
 gboolean
-tbo_menu_to_png (GtkWidget *widget, TboWindow *tbo)
+tbo_menu_export (GtkWidget *widget, TboWindow *tbo)
 {
-    tbo_export (tbo, "png");
-    return FALSE;
-}
-
-gboolean
-tbo_menu_to_pdf (GtkWidget *widget, TboWindow *tbo)
-{
-    tbo_export (tbo, "pdf");
-    return FALSE;
-}
-
-gboolean
-tbo_menu_to_svg (GtkWidget *widget, TboWindow *tbo)
-{
-    tbo_export (tbo, "svg");
+    tbo_export (tbo);
     return FALSE;
 }
 
@@ -244,17 +230,9 @@ static const GtkActionEntry tbo_menu_entries [] = {
       N_("Save current document as ..."),
       G_CALLBACK (tbo_comic_saveas_dialog) },
 
-    { "ToPNG", GTK_STOCK_FILE, N_("Export as png"), "",
-      N_("Save current document as png"),
-      G_CALLBACK (tbo_menu_to_png) },
-
-    { "ToPDF", GTK_STOCK_FILE, N_("Export as pdf"), "",
-      N_("Save current document as pdf"),
-      G_CALLBACK (tbo_menu_to_pdf) },
-
-    { "ToSVG", GTK_STOCK_FILE, N_("Export as svg"), "",
-      N_("Save current document as svg"),
-      G_CALLBACK (tbo_menu_to_svg) },
+    { "ToPNG", GTK_STOCK_FILE, N_("Export as..."), "",
+      N_("Save current document as..."),
+      G_CALLBACK (tbo_menu_export) },
 
     { "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q",
       N_("Quit"),