Author: post
Date: 2012-07-28 19:06:12 +0200 (Sat, 28 Jul 2012)
New Revision: 4243

Added:
   trunk/src/ui-client.xml
Modified:
   trunk/src/Makefile.am
   trunk/src/application.c
   trunk/src/gtk-interface.c
   trunk/src/rs-actions.c
   trunk/src/rs-dir-selector.c
Log:
Add "Client Mode" by Camilo Polymeris for editing a single image.

Modified: trunk/src/Makefile.am
===================================================================
--- trunk/src/Makefile.am       2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/Makefile.am       2012-07-28 17:06:12 UTC (rev 4243)
@@ -15,7 +15,7 @@
 AM_CXXFLAGS = $(AM_CFLAGS)
 
 uidir = $(datadir)/rawstudio/
-ui_DATA = ui.xml rawstudio.gtkrc
+ui_DATA = ui.xml ui-client.xml rawstudio.gtkrc
 
 bin_PROGRAMS = rawstudio
 

Modified: trunk/src/application.c
===================================================================
--- trunk/src/application.c     2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/application.c     2012-07-28 17:06:12 UTC (rev 4243)
@@ -641,10 +641,12 @@
        gboolean do_test = FALSE;
        gboolean use_system_theme = DEFAULT_CONF_USE_SYSTEM_THEME;
        gchar *debug = NULL;
+    gchar *client_mode_dest = NULL;
 
        GError *error = NULL;
        GOptionContext *option_context;
        const GOptionEntry option_entries[] = {
+        { "output", 'o', 0, G_OPTION_ARG_STRING, &client_mode_dest, "Run in 
client mode", "target filename"},
                { "debug", 'd', 0, G_OPTION_ARG_STRING, &debug, "Debug flags to 
use", "flags" },
                { "do-tests", 't', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, 
&do_test, "Do internal tests", NULL },
                { NULL }
@@ -677,6 +679,19 @@
 
        if (debug)      
                rs_debug_setup(debug);
+               if (client_mode_dest)
+               {
+                       /* Client mode. */
+                       if (argc != 2)
+                       {
+                               g_printf("You must specify exactly one input 
and one output image to work in client mode.\n");
+                                       exit(1);
+                       }
+                       rs_conf_set_boolean("client-mode", TRUE);
+                       rs_conf_set_string("client-mode-destination", 
client_mode_dest);
+               }
+               else
+                       rs_conf_set_boolean("client-mode", FALSE);
 
        gdk_threads_set_lock_functions(rs_gdk_lock, rs_gdk_unlock);
 #if GLIB_MAJOR_VERSION <= 2 && GLIB_MINOR_VERSION < 31

Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c   2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/gtk-interface.c   2012-07-28 17:06:12 UTC (rev 4243)
@@ -1122,7 +1122,12 @@
        {
                GError *error = NULL;
                ui_manager = gtk_ui_manager_new ();
-               gtk_ui_manager_add_ui_from_file (ui_manager, PACKAGE_DATA_DIR 
G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "ui.xml", &error);
+               gboolean client_mode;
+               rs_conf_get_boolean("client-mode", &client_mode);
+               if (client_mode)
+                       gtk_ui_manager_add_ui_from_file (ui_manager, 
PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "ui-client.xml", 
&error);
+               else
+                       gtk_ui_manager_add_ui_from_file (ui_manager, 
PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "ui.xml", &error);
                if (error)
                {
                        g_message ("Building menus failed: %s", error->message);
@@ -1173,7 +1178,6 @@
        }
 }
 
-
 static void
 drag_data_received(GtkWidget *widget, GdkDragContext *drag_context,
        gint x, gint y, GtkSelectionData *selection_data, guint info, guint t,
@@ -1213,7 +1217,12 @@
 static gboolean
 gui_window_delete(GtkWidget *widget, GdkEvent  *event, gpointer user_data)
 {
-       rs_core_action_group_activate("Quit");
+       gboolean client_mode;
+       rs_conf_get_boolean("client-mode", &client_mode);
+       if (client_mode)
+               rs_core_action_group_activate("SaveAndQuit");
+       else
+               rs_core_action_group_activate("Quit");
        return TRUE;
 }
 
@@ -1252,7 +1261,9 @@
        gtk_drag_dest_set(GTK_WIDGET(rawstudio_window), GTK_DEST_DEFAULT_ALL, 
targets, 1, GDK_ACTION_COPY);
        g_signal_connect((gpointer) rawstudio_window, "drag_data_received", 
G_CALLBACK(drag_data_received), rs);
        g_signal_connect((gpointer) rawstudio_window, "window-state-event", 
G_CALLBACK(window_state_event), rs);
+//     g_signal_connect((gpointer) rawstudio_window, "configure-event", 
G_CALLBACK(window_configure_event), rs);
 
+
        gtk_widget_set_name (GTK_WIDGET(rawstudio_window), "rawstudio-widget");
 
        return(GTK_WIDGET(rawstudio_window));
@@ -1432,7 +1443,13 @@
 void
 rs_window_set_title(const char *str)
 {
-       GString *window_title = g_string_new(_("Rawstudio"));
+       GString * window_title;
+       gboolean client_mode;
+       rs_conf_get_boolean("client-mode", &client_mode);
+       if (client_mode)
+               window_title = g_string_new(_("Rawstudio Client Mode"));
+       else
+               window_title = g_string_new(_("Rawstudio"));
        if (str)
        {
                window_title = g_string_append(window_title, " - ");
@@ -1514,10 +1531,13 @@
        g_signal_connect((gpointer) rs->iconbox, "group-activated", 
G_CALLBACK(group_activated), rs);
 
        rs->store = RS_STORE(rs->iconbox);
-
+    
        rs_get_core_action_group(rs);
 
        /* Build toolbox */
+       gboolean client_mode;
+       rs_conf_get_boolean("client-mode", &client_mode);
+    
        rs->tools = tools = rs_toolbox_new();
        g_signal_connect(tools, "snapshot-changed", 
G_CALLBACK(snapshot_changed), rs);
        rs_toolbox_register_actions(RS_TOOLBOX(tools));
@@ -1545,10 +1565,16 @@
        gtk_box_pack_start (GTK_BOX(open_box), library_expander, FALSE, TRUE, 
0);
        gtk_box_pack_start (GTK_BOX(open_box), directory_expander, TRUE, TRUE, 
0);
 
-       rs->toolbox = gtk_notebook_new();
-       gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), tools, 
gtk_label_new(_("Tools")));
-       gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), batchbox, 
gtk_label_new(_("Batch")));
-       gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), open_box, 
gtk_label_new(_("Open")));
+       
+       if (client_mode)
+               rs->toolbox = tools;
+       else
+       {
+               rs->toolbox = gtk_notebook_new();
+               gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), tools, 
gtk_label_new(_("Tools")));
+               gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), batchbox, 
gtk_label_new(_("Batch")));
+               gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), open_box, 
gtk_label_new(_("Open")));
+       }
 
        /* Metadata infobox */
        infobox = gtk_label_new("");
@@ -1583,7 +1609,10 @@
        gtk_container_add (GTK_CONTAINER (rs->window), vbox);
 
        gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, TRUE, 0);
-       gtk_box_pack_start (GTK_BOX (vbox), rs->iconbox, FALSE, TRUE, 0);
+    
+    rs_conf_get_boolean("client-mode", &client_mode);
+    if (!client_mode)
+        gtk_box_pack_start (GTK_BOX (vbox), rs->iconbox, FALSE, TRUE, 0);
        gtk_box_pack_start (GTK_BOX (vbox), pane, TRUE, TRUE, 0);
        gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
 
@@ -1593,6 +1622,18 @@
        gboolean show_iconbox;
        gboolean show_toolbox;
        rs_conf_get_boolean_with_default(CONF_FULLSCREEN, &fullscreen, 
DEFAULT_CONF_FULLSCREEN);
+       if (!show_iconbox)
+               rs_core_action_group_activate("Iconbox");
+       if (!show_toolbox)
+               rs_core_action_group_activate("Toolbox");
+
+       gtk_widget_show_all (rs->window);
+       toolbox_width = 240;
+       rs_conf_get_integer(CONF_TOOLBOX_WIDTH, &toolbox_width);
+       gdk_threads_enter();
+       GTK_CATCHUP();
+       gdk_threads_leave();
+
        if (fullscreen)
        {
                rs_core_action_group_activate("Fullscreen");
@@ -1604,24 +1645,18 @@
                /* Get actual state */
                rs_conf_get_boolean_with_default(CONF_SHOW_ICONBOX_FULLSCREEN, 
&show_iconbox, show_iconbox_default);
                rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_FULLSCREEN, 
&show_toolbox, show_toolbox_default);
+               gtk_window_get_size(rawstudio_window, &window_width, NULL);
+               gtk_paned_set_position(GTK_PANED(pane), window_width - 
toolbox_width);
        }
        else
        {
-               gtk_window_get_size(rawstudio_window, &window_width, NULL);
-               if (rs_conf_get_integer(CONF_TOOLBOX_WIDTH, &toolbox_width))
-                       gtk_paned_set_position(GTK_PANED(pane), window_width - 
toolbox_width);
-
-               gtk_window_unfullscreen(GTK_WINDOW(rs->window));
                rs_conf_get_boolean_with_default(CONF_SHOW_ICONBOX, 
&show_iconbox, DEFAULT_CONF_SHOW_TOOLBOX);
                rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX, 
&show_toolbox, DEFAULT_CONF_SHOW_ICONBOX);
+               gtk_window_unfullscreen(GTK_WINDOW(rs->window));
+               gtk_window_get_size(rawstudio_window, &window_width, NULL);
+               gtk_paned_set_position(GTK_PANED(pane), window_width - 
toolbox_width);
        }
-       if (!show_iconbox)
-               rs_core_action_group_activate("Iconbox");
-       if (!show_toolbox)
-               rs_core_action_group_activate("Toolbox");
 
-       gtk_widget_show_all (rs->window);
-
        if (argc > 1)
        {
                gchar *path;
@@ -1631,10 +1666,11 @@
                        path = g_strdup(argv[1]);
                rs_open_file_delayed(rs, path);
                rs_conf_set_integer(CONF_LAST_PRIORITY_PAGE, 0);
-               rs_dir_selector_expand_path(RS_DIR_SELECTOR(dir_selector), 
path);
                
+               if (!client_mode)
+                       
rs_dir_selector_expand_path(RS_DIR_SELECTOR(dir_selector), path);
+
                rs_window_set_title(g_path_get_dirname(path));
-
                g_free(path);
        }
        else

Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c      2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/rs-actions.c      2012-07-28 17:06:12 UTC (rev 4243)
@@ -412,7 +412,47 @@
        gtk_main_quit();
 }
 
+ACTION(client_mode_quit)
+{
 
+       gchar *directory;
+    
+       RSOutput *output = rs_output_new("RSJpegfile");
+       gchar *filename = rs_conf_get_string("client-mode-destination");
+
+       if (filename)
+       {
+               /* Create directory, if it doesn't exist */
+               directory = g_path_get_dirname(filename);
+        
+               if (FALSE == g_file_test(directory, G_FILE_TEST_EXISTS | 
G_FILE_TEST_IS_DIR))
+                       if (g_mkdir_with_parents(directory, 0x1ff))
+                       {
+                               gui_status_notify(_("Could not create output 
directory."));
+                               return;
+                       }
+               guint msg = gui_status_push(_("Auto exporting..."));
+               gui_set_busy(TRUE);
+               GTK_CATCHUP();
+               g_object_set(output, "filename", filename, NULL);
+        
+               if (rs_photo_save(rs->photo, rs->filter_end, output, -1, -1, 
FALSE, 1.0, rs->current_setting))
+               {
+                       gchar *status = g_strdup_printf("%s (%s)", _("File 
exported"), filename);
+                       gui_status_notify(status);
+                       g_free(status);
+               }
+               else
+                       gui_status_notify(_("Export failed"));
+               gui_status_pop(msg);
+               gui_set_busy(FALSE);
+               g_free(directory);
+       }
+
+       g_object_unref(output);
+       rs_action_quit(action, rs);
+}
+
 ACTION(copy_image)
 {
        if (!rs->photo)
@@ -985,8 +1025,11 @@
 }
 
 TOGGLEACTION(iconbox)
-{
-       gui_widget_show(rs->iconbox, 
gtk_toggle_action_get_active(toggleaction), CONF_SHOW_ICONBOX_FULLSCREEN, 
CONF_SHOW_ICONBOX);
+{  
+       gboolean client_mode;
+       rs_conf_get_boolean("client-mode", &client_mode);
+       if (!client_mode)
+               gui_widget_show(rs->iconbox, 
gtk_toggle_action_get_active(toggleaction), CONF_SHOW_ICONBOX_FULLSCREEN, 
CONF_SHOW_ICONBOX);
 }
 
 TOGGLEACTION(toolbox)
@@ -1020,7 +1063,11 @@
        rs_conf_set_boolean(CONF_FULLSCREEN, rs->window_fullscreen);
 
        /* Update Toolox and Iconbox */
-       gui_fullscreen_changed(rs->iconbox, rs->window_fullscreen, "Iconbox",
+    
+       gboolean client_mode;
+       rs_conf_get_boolean("client-mode", &client_mode);
+       if (!client_mode)
+               gui_fullscreen_changed(rs->iconbox, rs->window_fullscreen, 
"Iconbox",
                                                                                
                 DEFAULT_CONF_SHOW_ICONBOX_FULLSCREEN, 
DEFAULT_CONF_SHOW_ICONBOX,
                                                                                
                 CONF_SHOW_ICONBOX_FULLSCREEN, CONF_SHOW_ICONBOX);
        gui_fullscreen_changed(rs->toolbox, rs->window_fullscreen, "Toolbox",
@@ -1465,6 +1512,8 @@
        { "Reload", GTK_STOCK_REFRESH, _("_Reload directory"), "<control>R", 
NULL, ACTION_CB(reload) },
        { "DeleteFlagged", GTK_STOCK_DELETE, _("_Delete Flagged Photos"), 
"<control><shift>D", NULL, ACTION_CB(delete_flagged) },
        { "Quit", GTK_STOCK_QUIT, _("_Quit"), "<control>Q", NULL, 
ACTION_CB(quit) },
+       { "CancelAndQuit", NULL, _("_Just Quit"), NULL, NULL, ACTION_CB(quit) },
+       { "SaveAndQuit", GTK_STOCK_SAVE, _("Save & _Quit"), "<control>Q", NULL, 
ACTION_CB(client_mode_quit) },
 
        /* Edit menu */
        { "RevertSettings", GTK_STOCK_UNDO, _("_Revert Settings"), 
"<control>Z", NULL, ACTION_CB(revert_settings) },

Modified: trunk/src/rs-dir-selector.c
===================================================================
--- trunk/src/rs-dir-selector.c 2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/rs-dir-selector.c 2012-07-28 17:06:12 UTC (rev 4243)
@@ -192,10 +192,13 @@
        GString *gs = NULL;
 
        /* Set busy cursor */   
-       GdkCursor* cursor = gdk_cursor_new(GDK_WATCH);
-       
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, 
cursor);
-       gdk_cursor_unref(cursor);
-       gdk_flush();
+       if (GDK_IS_WINDOW(GTK_WIDGET(view)->window))
+       {
+               GdkCursor* cursor = gdk_cursor_new(GDK_WATCH);
+               
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, 
cursor);
+               gdk_cursor_unref(cursor);
+               gdk_flush();
+       }
 
        model = gtk_tree_view_get_model(view);
        gtk_tree_model_iter_children(GTK_TREE_MODEL(model),
@@ -229,7 +232,8 @@
                g_dir_close(dir);
                g_free(filepath);
        }
-       
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, NULL);
+       if (GDK_IS_WINDOW(GTK_WIDGET(view)->window))
+               
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, NULL);
        gtk_tree_store_remove(GTK_TREE_STORE(model), &empty);
 }
 

Added: trunk/src/ui-client.xml
===================================================================
--- trunk/src/ui-client.xml                             (rev 0)
+++ trunk/src/ui-client.xml     2012-07-28 17:06:12 UTC (rev 4243)
@@ -0,0 +1,82 @@
+<ui>
+ <menubar name="MainMenu">
+  <menu action="FileMenu">
+   <menuitem action="ExportAs" />
+   <menuitem action="CopyImage" />
+   <menuitem action="ResetSettings" />
+   <separator />
+   <menuitem action="CancelAndQuit" />
+   <menuitem action="SaveAndQuit" />
+  </menu>
+  <menu action="PhotoMenu">
+   <menu action="WhiteBalanceMenu">
+    <menuitem action="CameraWB" />
+    <menuitem action="AutoWB" />
+   </menu>
+   <menuitem action="Crop" />
+   <menuitem action="Uncrop" />
+   <menuitem action="Straighten" />
+   <menuitem action="Unstraighten" />
+   <menuitem action="RotateClockwise" />
+   <menuitem action="RotateCounterClockwise" />
+   <menuitem action="Flip" />
+   <menuitem action="Mirror" />
+  </menu>
+  <menu action="ViewMenu">
+   <menuitem action="ZommToFit" />
+   <menu action="SnapshotMenu">
+    <menuitem action="SnapshotA" />
+    <menuitem action="SnapshotB" />
+    <menuitem action="SnapshotC" />
+    <separator />
+    <menuitem action="SnapshotPrevious" />
+    <menuitem action="SnapshotNext" />
+   </menu>
+   <separator />
+   <menuitem action="Toolbox" />
+   <menuitem action="Fullscreen" />
+   <menuitem action="FullscreenPreview" />
+   <separator />
+   <menuitem action="ExposureMask" />
+   <menuitem action="Split" />
+   <menuitem action="Lightsout" />
+   <menuitem action="LensDbEditor" />
+  </menu>
+  <menu action="HelpMenu">
+   <menuitem action="OnlineDocumentation" />
+   <separator />
+   <menuitem action="About" />
+  </menu>
+ </menubar>
+ <popup name="PreviewPopup" action="PreviewPopup">
+   <menuitem action="ZommToFit" />
+   <separator />
+  <menuitem action="Crop" />
+  <menuitem action="Uncrop" />
+  <menuitem action="Straighten" />
+  <menuitem action="Unstraighten" />
+   <menu action="WhiteBalanceMenu">
+    <menuitem action="CameraWB" />
+    <menuitem action="AutoWB" />
+   </menu>
+  <separator />
+  <menuitem action="ExposureMask" />
+  <menuitem action="Split" />
+  <menuitem action="Lightsout" />
+ </popup>
+ <popup name="PreviewPopupRight" action="PreviewPopupRight">
+  <menuitem action="RightA" />
+  <menuitem action="RightB" />
+  <menuitem action="RightC" />
+  <separator />
+   <menuitem action="ZommToFit" />
+   <separator />
+  <menuitem action="Crop" />
+  <menuitem action="Uncrop" />
+  <menuitem action="Straighten" />
+  <menuitem action="Unstraighten" />
+  <separator />
+  <menuitem action="ExposureMask" />
+  <menuitem action="Split" />
+ </popup>
+</ui>


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to