comparison src/layout_util.c @ 1582:2ca277a9845b

- handle color profile and write metadata buttons on statusbar by ui_manager - statusbar buttons made configurable
author nadvornik
date Fri, 01 May 2009 23:15:51 +0000
parents 3d9f5c078521
children 70d59df4d2a2
comparison
equal deleted inserted replaced
1581:c9c1a16ff8ae 1582:2ca277a9845b
52 52
53 #define MENU_EDIT_ACTION_OFFSET 16 53 #define MENU_EDIT_ACTION_OFFSET 16
54 54
55 static gboolean layout_bar_enabled(LayoutWindow *lw); 55 static gboolean layout_bar_enabled(LayoutWindow *lw);
56 static gboolean layout_bar_sort_enabled(LayoutWindow *lw); 56 static gboolean layout_bar_sort_enabled(LayoutWindow *lw);
57 static void layout_util_sync_color(LayoutWindow *lw);
58 57
59 /* 58 /*
60 *----------------------------------------------------------------------------- 59 *-----------------------------------------------------------------------------
61 * keyboard handler 60 * keyboard handler
62 *----------------------------------------------------------------------------- 61 *-----------------------------------------------------------------------------
1035 } 1034 }
1036 } 1035 }
1037 1036
1038 #endif 1037 #endif
1039 1038
1039 static void layout_menu_metadata_write_cb(GtkAction *action, gpointer data)
1040 {
1041 metadata_write_queue_confirm(NULL, NULL);
1042 }
1043
1040 1044
1041 /* 1045 /*
1042 *----------------------------------------------------------------------------- 1046 *-----------------------------------------------------------------------------
1043 * color profile button (and menu) 1047 * color profile button (and menu)
1044 *----------------------------------------------------------------------------- 1048 *-----------------------------------------------------------------------------
1086 layout_image_color_profile_set(lw, type, use_image); 1090 layout_image_color_profile_set(lw, type, use_image);
1087 layout_image_refresh(lw); 1091 layout_image_refresh(lw);
1088 #endif 1092 #endif
1089 } 1093 }
1090 1094
1091 #if 0
1092 static gchar *layout_color_name_parse(const gchar *name)
1093 {
1094 if (!name || !*name) return g_strdup(_("Empty"));
1095 return g_strdelimit(g_strdup(name), "_", '-');
1096 }
1097
1098
1099 static void layout_color_button_press_cb(GtkWidget *widget, gpointer data)
1100 {
1101 #ifndef HAVE_LCMS
1102 gchar *msg = g_strdup_printf(_("This installation of %s was not built with support for color profiles."), GQ_APPNAME);
1103 file_util_warning_dialog(_("Color profiles not supported"),
1104 msg,
1105 GTK_STOCK_DIALOG_INFO, widget);
1106 g_free(msg);
1107 return;
1108 #else
1109 LayoutWindow *lw = data;
1110 GtkWidget *menu;
1111 GtkWidget *item;
1112 gchar *buf;
1113 gboolean active;
1114 gint input = 0;
1115 gint screen = 0;
1116 gboolean use_image = FALSE;
1117 gboolean from_image;
1118 gint image_profile;
1119 gint i;
1120
1121 if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return;
1122
1123 image_profile = layout_image_color_profile_get_from_image(lw);
1124 from_image = use_image && (image_profile != COLOR_PROFILE_NONE);
1125 menu = popup_menu_short_lived();
1126
1127 active = layout_image_color_profile_get_use(lw);
1128 menu_item_add_check(menu, _("Use _color profiles"), active,
1129 G_CALLBACK(layout_color_menu_enable_cb), lw);
1130
1131 menu_item_add_divider(menu);
1132
1133 item = menu_item_add_check(menu, _("Use profile from _image"), use_image,
1134 G_CALLBACK(layout_color_menu_use_image_cb), lw);
1135 gtk_widget_set_sensitive(item, image_profile == COLOR_PROFILE_MEM || (image_profile > COLOR_PROFILE_NONE && image_profile < COLOR_PROFILE_FILE));
1136
1137 for (i = COLOR_PROFILE_SRGB; i < COLOR_PROFILE_FILE; i++)
1138 {
1139 const gchar *label;
1140
1141 switch (i)
1142 {
1143 case COLOR_PROFILE_SRGB: label = _("sRGB"); break;
1144 case COLOR_PROFILE_ADOBERGB: label = _("AdobeRGB compatible"); break;
1145 default: label = "fixme"; break;
1146 }
1147 buf = g_strdup_printf(_("Input _%d: %s%s"), i, label, (i == image_profile) ? " *" : "");
1148 item = menu_item_add_radio(menu, (i == COLOR_PROFILE_SRGB) ? NULL : item,
1149 buf, (input == i),
1150 G_CALLBACK(layout_color_menu_input_cb), lw);
1151 g_free(buf);
1152 g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(i));
1153 gtk_widget_set_sensitive(item, active && !from_image);
1154 }
1155
1156 for (i = 0; i < COLOR_PROFILE_INPUTS; i++)
1157 {
1158 const gchar *name = options->color_profile.input_name[i];
1159 const gchar *file = options->color_profile.input_file[i];
1160 gchar *end;
1161
1162 if (!name || !name[0]) name = filename_from_path(file);
1163
1164 end = layout_color_name_parse(name);
1165 buf = g_strdup_printf(_("Input _%d: %s"), i + COLOR_PROFILE_FILE, end);
1166 g_free(end);
1167
1168 item = menu_item_add_radio(menu, item,
1169 buf, (i + COLOR_PROFILE_FILE == input),
1170 G_CALLBACK(layout_color_menu_input_cb), lw);
1171 g_free(buf);
1172 g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(i + COLOR_PROFILE_FILE));
1173 gtk_widget_set_sensitive(item, active && !from_image && is_readable_file(file));
1174 }
1175
1176 menu_item_add_divider(menu);
1177
1178 item = menu_item_add_radio(menu, NULL,
1179 _("Screen sRGB"), (screen == 0),
1180 G_CALLBACK(layout_color_menu_screen_cb), lw);
1181
1182 g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(0));
1183 gtk_widget_set_sensitive(item, active);
1184
1185 item = menu_item_add_radio(menu, item,
1186 _("_Screen profile"), (screen == 1),
1187 G_CALLBACK(layout_color_menu_screen_cb), lw);
1188 g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(1));
1189 gtk_widget_set_sensitive(item, active && is_readable_file(options->color_profile.screen_file));
1190
1191 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME);
1192 #endif /* HAVE_LCMS */
1193 }
1194
1195 #endif
1196 1095
1197 /* 1096 /*
1198 *----------------------------------------------------------------------------- 1097 *-----------------------------------------------------------------------------
1199 * recent menu 1098 * recent menu
1200 *----------------------------------------------------------------------------- 1099 *-----------------------------------------------------------------------------
1356 { "Preferences",GTK_STOCK_PREFERENCES,N_("P_references..."), "<control>O", NULL, CB(layout_menu_config_cb) }, 1255 { "Preferences",GTK_STOCK_PREFERENCES,N_("P_references..."), "<control>O", NULL, CB(layout_menu_config_cb) },
1357 { "Editors",GTK_STOCK_PREFERENCES,N_("Configure _Editors..."), NULL, NULL, CB(layout_menu_editors_cb) }, 1256 { "Editors",GTK_STOCK_PREFERENCES,N_("Configure _Editors..."), NULL, NULL, CB(layout_menu_editors_cb) },
1358 { "LayoutConfig",GTK_STOCK_PREFERENCES,N_("_Configure this window..."), NULL, NULL, CB(layout_menu_layout_config_cb) }, 1257 { "LayoutConfig",GTK_STOCK_PREFERENCES,N_("_Configure this window..."), NULL, NULL, CB(layout_menu_layout_config_cb) },
1359 { "Maintenance", NULL, N_("_Thumbnail maintenance..."),NULL, NULL, CB(layout_menu_remove_thumb_cb) }, 1258 { "Maintenance", NULL, N_("_Thumbnail maintenance..."),NULL, NULL, CB(layout_menu_remove_thumb_cb) },
1360 { "Wallpaper", NULL, N_("Set as _wallpaper"),NULL, NULL, CB(layout_menu_wallpaper_cb) }, 1259 { "Wallpaper", NULL, N_("Set as _wallpaper"),NULL, NULL, CB(layout_menu_wallpaper_cb) },
1260 { "SaveMetadata", GTK_STOCK_SAVE, N_("Save metadata"),NULL, NULL, CB(layout_menu_metadata_write_cb) },
1361 1261
1362 { "ZoomIn", GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "equal", N_("Zoom in"), CB(layout_menu_zoom_in_cb) }, 1262 { "ZoomIn", GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "equal", N_("Zoom in"), CB(layout_menu_zoom_in_cb) },
1363 { "ZoomInAlt1",GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "KP_Add", N_("Zoom in"), CB(layout_menu_zoom_in_cb) }, 1263 { "ZoomInAlt1",GTK_STOCK_ZOOM_IN, N_("Zoom _in"), "KP_Add", N_("Zoom in"), CB(layout_menu_zoom_in_cb) },
1364 { "ZoomOut", GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "minus", N_("Zoom out"), CB(layout_menu_zoom_out_cb) }, 1264 { "ZoomOut", GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "minus", N_("Zoom out"), CB(layout_menu_zoom_out_cb) },
1365 { "ZoomOutAlt1",GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "KP_Subtract", N_("Zoom out"), CB(layout_menu_zoom_out_cb) }, 1265 { "ZoomOutAlt1",GTK_STOCK_ZOOM_OUT, N_("Zoom _out"), "KP_Subtract", N_("Zoom out"), CB(layout_menu_zoom_out_cb) },
1425 { "HideToolbar", NULL, N_("Hide tool_bar"), NULL, NULL, CB(layout_menu_toolbar_cb), FALSE }, 1325 { "HideToolbar", NULL, N_("Hide tool_bar"), NULL, NULL, CB(layout_menu_toolbar_cb), FALSE },
1426 { "HideInfoPixel", NULL, N_("Hide Pi_xel Info"), NULL, NULL, CB(layout_menu_info_pixel_cb), FALSE }, 1326 { "HideInfoPixel", NULL, N_("Hide Pi_xel Info"), NULL, NULL, CB(layout_menu_info_pixel_cb), FALSE },
1427 { "SBar", NULL, N_("_Info"), "<control>K", NULL, CB(layout_menu_bar_cb), FALSE }, 1327 { "SBar", NULL, N_("_Info"), "<control>K", NULL, CB(layout_menu_bar_cb), FALSE },
1428 { "SBarSort", NULL, N_("Sort _manager"), "<control>S", NULL, CB(layout_menu_bar_sort_cb), FALSE }, 1328 { "SBarSort", NULL, N_("Sort _manager"), "<control>S", NULL, CB(layout_menu_bar_sort_cb), FALSE },
1429 { "SlideShow", NULL, N_("Toggle _slideshow"),"S", NULL, CB(layout_menu_slideshow_cb), FALSE }, 1329 { "SlideShow", NULL, N_("Toggle _slideshow"),"S", NULL, CB(layout_menu_slideshow_cb), FALSE },
1430 { "UseColorProfiles", NULL, N_("Use _color profiles"), NULL, NULL, CB(layout_color_menu_enable_cb), FALSE}, 1330 { "UseColorProfiles", GTK_STOCK_SELECT_COLOR, N_("Use _color profiles"), NULL, NULL, CB(layout_color_menu_enable_cb), FALSE},
1431 { "UseImageProfile", NULL, N_("Use profile from _image"), NULL, NULL, CB(layout_color_menu_use_image_cb), FALSE}, 1331 { "UseImageProfile", NULL, N_("Use profile from _image"), NULL, NULL, CB(layout_color_menu_use_image_cb), FALSE},
1432 { "Grayscale", NULL, N_("Toggle _grayscale"),"<shift>G", NULL, CB(layout_menu_alter_desaturate_cb), FALSE}, 1332 { "Grayscale", NULL, N_("Toggle _grayscale"),"<shift>G", NULL, CB(layout_menu_alter_desaturate_cb), FALSE},
1433 }; 1333 };
1434 1334
1435 static GtkRadioActionEntry menu_radio_entries[] = { 1335 static GtkRadioActionEntry menu_radio_entries[] = {
1518 " <menuitem action='Rotate180'/>" 1418 " <menuitem action='Rotate180'/>"
1519 " <menuitem action='Mirror'/>" 1419 " <menuitem action='Mirror'/>"
1520 " <menuitem action='Flip'/>" 1420 " <menuitem action='Flip'/>"
1521 " <menuitem action='AlterNone'/>" 1421 " <menuitem action='AlterNone'/>"
1522 " </menu>" 1422 " </menu>"
1423 " <menuitem action='SaveMetadata'/>"
1523 " <placeholder name='PropertiesSection'/>" 1424 " <placeholder name='PropertiesSection'/>"
1524 " <separator/>" 1425 " <separator/>"
1525 " <menuitem action='Preferences'/>" 1426 " <menuitem action='Preferences'/>"
1526 " <menuitem action='Editors'/>" 1427 " <menuitem action='Editors'/>"
1527 " <menuitem action='LayoutConfig'/>" 1428 " <menuitem action='LayoutConfig'/>"
1632 " <separator/>" 1533 " <separator/>"
1633 " </menu>" 1534 " </menu>"
1634 " </menubar>" 1535 " </menubar>"
1635 " <toolbar name='ToolBar'>" 1536 " <toolbar name='ToolBar'>"
1636 " </toolbar>" 1537 " </toolbar>"
1538 " <toolbar name='StatusBar'>"
1539 " </toolbar>"
1637 "<accelerator action='PrevImageAlt1'/>" 1540 "<accelerator action='PrevImageAlt1'/>"
1638 "<accelerator action='PrevImageAlt2'/>" 1541 "<accelerator action='PrevImageAlt2'/>"
1639 "<accelerator action='NextImageAlt1'/>" 1542 "<accelerator action='NextImageAlt1'/>"
1640 "<accelerator action='NextImageAlt2'/>" 1543 "<accelerator action='NextImageAlt2'/>"
1641 "<accelerator action='DeleteAlt1'/>" 1544 "<accelerator action='DeleteAlt1'/>"
1881 } 1784 }
1882 1785
1883 void layout_actions_setup(LayoutWindow *lw) 1786 void layout_actions_setup(LayoutWindow *lw)
1884 { 1787 {
1885 GError *error; 1788 GError *error;
1789 gint i;
1886 1790
1887 if (lw->ui_manager) return; 1791 if (lw->ui_manager) return;
1888 1792
1889 lw->action_group = gtk_action_group_new("MenuActions"); 1793 lw->action_group = gtk_action_group_new("MenuActions");
1890 gtk_action_group_set_translate_func(lw->action_group, menu_translate, NULL, NULL); 1794 gtk_action_group_set_translate_func(lw->action_group, menu_translate, NULL, NULL);
1917 g_message("building menus failed: %s", error->message); 1821 g_message("building menus failed: %s", error->message);
1918 g_error_free(error); 1822 g_error_free(error);
1919 exit(EXIT_FAILURE); 1823 exit(EXIT_FAILURE);
1920 } 1824 }
1921 1825
1922 layout_toolbar_clear(lw); 1826 for (i = 0; i < TOOLBAR_COUNT; i++)
1923 layout_toolbar_add_default(lw); 1827 {
1828 layout_toolbar_clear(lw, i);
1829 layout_toolbar_add_default(lw, i);
1830 }
1924 1831
1925 layout_actions_setup_marks(lw); 1832 layout_actions_setup_marks(lw);
1926 layout_actions_setup_editors(lw); 1833 layout_actions_setup_editors(lw);
1927 1834
1835 layout_util_status_update_write(lw);
1836
1928 layout_actions_add_window(lw, lw->window); 1837 layout_actions_add_window(lw, lw->window);
1929 } 1838 }
1930 1839
1931 void layout_editors_reload_all(void) 1840 void layout_editors_reload_all(void)
1932 { 1841 {
1970 lw->menu_bar = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu"); 1879 lw->menu_bar = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu");
1971 g_object_ref(lw->menu_bar); 1880 g_object_ref(lw->menu_bar);
1972 return lw->menu_bar; 1881 return lw->menu_bar;
1973 } 1882 }
1974 1883
1975 GtkWidget *layout_actions_toolbar(LayoutWindow *lw) 1884 GtkWidget *layout_actions_toolbar(LayoutWindow *lw, ToolbarType type)
1976 { 1885 {
1977 if (lw->toolbar) return lw->toolbar; 1886 if (lw->toolbar[type]) return lw->toolbar[type];
1978 lw->toolbar = gtk_ui_manager_get_widget(lw->ui_manager, "/ToolBar"); 1887 switch (type)
1979 g_object_ref(lw->toolbar); 1888 {
1980 gtk_toolbar_set_icon_size(GTK_TOOLBAR(lw->toolbar), GTK_ICON_SIZE_SMALL_TOOLBAR); 1889 case TOOLBAR_MAIN:
1981 gtk_toolbar_set_style(GTK_TOOLBAR(lw->toolbar), GTK_TOOLBAR_ICONS); 1890 lw->toolbar[type] = gtk_ui_manager_get_widget(lw->ui_manager, "/ToolBar");
1982 return lw->toolbar; 1891 gtk_toolbar_set_icon_size(GTK_TOOLBAR(lw->toolbar[type]), GTK_ICON_SIZE_SMALL_TOOLBAR);
1983 } 1892 gtk_toolbar_set_style(GTK_TOOLBAR(lw->toolbar[type]), GTK_TOOLBAR_ICONS);
1984 1893 break;
1985 void layout_toolbar_clear(LayoutWindow *lw) 1894 case TOOLBAR_STATUS:
1986 { 1895 lw->toolbar[type] = gtk_ui_manager_get_widget(lw->ui_manager, "/StatusBar");
1987 if (lw->toolbar_merge_id) 1896 gtk_toolbar_set_icon_size(GTK_TOOLBAR(lw->toolbar[type]), GTK_ICON_SIZE_MENU);
1988 { 1897 gtk_toolbar_set_style(GTK_TOOLBAR(lw->toolbar[type]), GTK_TOOLBAR_ICONS);
1989 gtk_ui_manager_remove_ui(lw->ui_manager, lw->toolbar_merge_id); 1898 gtk_toolbar_set_show_arrow(GTK_TOOLBAR(lw->toolbar[type]), FALSE);
1899 break;
1900 default:
1901 break;
1902 }
1903 g_object_ref(lw->toolbar[type]);
1904 return lw->toolbar[type];
1905 }
1906
1907 void layout_toolbar_clear(LayoutWindow *lw, ToolbarType type)
1908 {
1909 if (lw->toolbar_merge_id[type])
1910 {
1911 gtk_ui_manager_remove_ui(lw->ui_manager, lw->toolbar_merge_id[type]);
1990 gtk_ui_manager_ensure_update(lw->ui_manager); 1912 gtk_ui_manager_ensure_update(lw->ui_manager);
1991 } 1913 }
1992 string_list_free(lw->toolbar_actions); 1914 string_list_free(lw->toolbar_actions[type]);
1993 lw->toolbar_actions = NULL; 1915 lw->toolbar_actions[type] = NULL;
1994 1916
1995 lw->toolbar_merge_id = gtk_ui_manager_new_merge_id(lw->ui_manager); 1917 lw->toolbar_merge_id[type] = gtk_ui_manager_new_merge_id(lw->ui_manager);
1996 } 1918 }
1997 1919
1998 1920
1999 void layout_toolbar_add(LayoutWindow *lw, const gchar *action) 1921 void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
2000 { 1922 {
1923 const gchar *path = NULL;
2001 if (!action || !lw->ui_manager) return; 1924 if (!action || !lw->ui_manager) return;
2002 1925
2003 if (g_list_find_custom(lw->toolbar_actions, action, (GCompareFunc)strcmp)) return; 1926 if (g_list_find_custom(lw->toolbar_actions[type], action, (GCompareFunc)strcmp)) return;
2004 1927
2005 gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id, "/ToolBar", action, action, GTK_UI_MANAGER_TOOLITEM, FALSE); 1928 switch (type)
2006 lw->toolbar_actions = g_list_append(lw->toolbar_actions, g_strdup(action)); 1929 {
2007 } 1930 case TOOLBAR_MAIN:
2008 1931 path = "/ToolBar";
2009 1932 break;
2010 void layout_toolbar_add_default(LayoutWindow *lw) 1933 case TOOLBAR_STATUS:
2011 { 1934 path = "/StatusBar";
2012 layout_toolbar_add(lw, "Thumbnails"); 1935 break;
2013 layout_toolbar_add(lw, "Back"); 1936 default:
2014 layout_toolbar_add(lw, "Home"); 1937 break;
2015 layout_toolbar_add(lw, "Refresh"); 1938 }
2016 layout_toolbar_add(lw, "ZoomIn"); 1939
2017 layout_toolbar_add(lw, "ZoomOut"); 1940 gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE);
2018 layout_toolbar_add(lw, "ZoomFit"); 1941 lw->toolbar_actions[type] = g_list_append(lw->toolbar_actions[type], g_strdup(action));
2019 layout_toolbar_add(lw, "Zoom100"); 1942 }
2020 layout_toolbar_add(lw, "Preferences"); 1943
2021 layout_toolbar_add(lw, "FloatTools"); 1944
2022 } 1945 void layout_toolbar_add_default(LayoutWindow *lw, ToolbarType type)
2023 1946 {
2024 void layout_toolbar_write_config(LayoutWindow *lw, GString *outstr, gint indent) 1947 switch (type)
2025 { 1948 {
2026 GList *work = lw->toolbar_actions; 1949 case TOOLBAR_MAIN:
2027 WRITE_NL(); WRITE_STRING("<toolbar>"); 1950 layout_toolbar_add(lw, type, "Thumbnails");
1951 layout_toolbar_add(lw, type, "Back");
1952 layout_toolbar_add(lw, type, "Home");
1953 layout_toolbar_add(lw, type, "Refresh");
1954 layout_toolbar_add(lw, type, "ZoomIn");
1955 layout_toolbar_add(lw, type, "ZoomOut");
1956 layout_toolbar_add(lw, type, "ZoomFit");
1957 layout_toolbar_add(lw, type, "Zoom100");
1958 layout_toolbar_add(lw, type, "Preferences");
1959 layout_toolbar_add(lw, type, "FloatTools");
1960 break;
1961 case TOOLBAR_STATUS:
1962 layout_toolbar_add(lw, type, "UseColorProfiles");
1963 layout_toolbar_add(lw, type, "SaveMetadata");
1964 break;
1965 default:
1966 break;
1967 }
1968 }
1969
1970 void layout_toolbar_write_config(LayoutWindow *lw, ToolbarType type, GString *outstr, gint indent)
1971 {
1972 const gchar *name = NULL;
1973 GList *work = lw->toolbar_actions[type];
1974
1975 switch (type)
1976 {
1977 case TOOLBAR_MAIN:
1978 name = "toolbar";
1979 break;
1980 case TOOLBAR_STATUS:
1981 name = "statusbar";
1982 break;
1983 default:
1984 break;
1985 }
1986
1987 WRITE_NL(); WRITE_STRING("<%s>", name);
2028 indent++; 1988 indent++;
2029 WRITE_NL(); WRITE_STRING("<clear/>"); 1989 WRITE_NL(); WRITE_STRING("<clear/>");
2030 while (work) 1990 while (work)
2031 { 1991 {
2032 gchar *action = work->data; 1992 gchar *action = work->data;
2034 WRITE_NL(); WRITE_STRING("<toolitem "); 1994 WRITE_NL(); WRITE_STRING("<toolitem ");
2035 write_char_option(outstr, indent + 1, "action", action); 1995 write_char_option(outstr, indent + 1, "action", action);
2036 WRITE_STRING("/>"); 1996 WRITE_STRING("/>");
2037 } 1997 }
2038 indent--; 1998 indent--;
2039 WRITE_NL(); WRITE_STRING("</toolbar>"); 1999 WRITE_NL(); WRITE_STRING("</%s>", name);
2040 } 2000 }
2041 2001
2042 void layout_toolbar_add_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values) 2002 void layout_toolbar_add_from_config(LayoutWindow *lw, ToolbarType type, const gchar **attribute_names, const gchar **attribute_values)
2043 { 2003 {
2044 gchar *action = NULL; 2004 gchar *action = NULL;
2045 2005
2046 while (*attribute_names) 2006 while (*attribute_names)
2047 { 2007 {
2051 if (READ_CHAR_FULL("action", action)) continue; 2011 if (READ_CHAR_FULL("action", action)) continue;
2052 2012
2053 log_printf("unknown attribute %s = %s\n", option, value); 2013 log_printf("unknown attribute %s = %s\n", option, value);
2054 } 2014 }
2055 2015
2056 layout_toolbar_add(lw, action); 2016 layout_toolbar_add(lw, type, action);
2057 g_free(action); 2017 g_free(action);
2058 } 2018 }
2059 2019
2060 /* 2020 /*
2061 *----------------------------------------------------------------------------- 2021 *-----------------------------------------------------------------------------
2062 * misc 2022 * misc
2063 *----------------------------------------------------------------------------- 2023 *-----------------------------------------------------------------------------
2064 */ 2024 */
2025
2026 void layout_util_status_update_write(LayoutWindow *lw)
2027 {
2028 GtkAction *action;
2029 gint n = metadata_queue_length();
2030 action = gtk_action_group_get_action(lw->action_group, "SaveMetadata");
2031 gtk_action_set_sensitive(action, n > 0);
2032 if (n > 0)
2033 {
2034 gchar *buf = g_strdup_printf(_("Number of files with unsaved metadata: %d"), n);
2035 g_object_set(G_OBJECT(action), "tooltip", buf, NULL);
2036 g_free(buf);
2037 }
2038 else
2039 {
2040 g_object_set(G_OBJECT(action), "tooltip", _("No unsaved metadata"), NULL);
2041 }
2042 }
2043
2044 void layout_util_status_update_write_all(void)
2045 {
2046 GList *work;
2047
2048 work = layout_window_list;
2049 while (work)
2050 {
2051 LayoutWindow *lw = work->data;
2052 work = work->next;
2053
2054 layout_util_status_update_write(lw);
2055 }
2056 }
2057
2065 static gchar *layout_color_name_parse(const gchar *name) 2058 static gchar *layout_color_name_parse(const gchar *name)
2066 { 2059 {
2067 if (!name || !*name) return g_strdup(_("Empty")); 2060 if (!name || !*name) return g_strdup(_("Empty"));
2068 return g_strdelimit(g_strdup(name), "_", '-'); 2061 return g_strdelimit(g_strdup(name), "_", '-');
2069 } 2062 }
2070 2063
2071 static void layout_util_sync_color(LayoutWindow *lw) 2064 void layout_util_sync_color(LayoutWindow *lw)
2072 { 2065 {
2073 GtkAction *action; 2066 GtkAction *action;
2074 gint input = 0; 2067 gint input = 0;
2075 gboolean use_color; 2068 gboolean use_color;
2076 gboolean use_image = FALSE; 2069 gboolean use_image = FALSE;
2077 gint i; 2070 gint i;
2078 gchar action_name[15]; 2071 gchar action_name[15];
2072 gchar *image_profile;
2073 gchar *screen_profile;
2074
2079 2075
2080 if (!lw->action_group) return; 2076 if (!lw->action_group) return;
2081 if (!layout_image_color_profile_get(lw, &input, &use_image)) return; 2077 if (!layout_image_color_profile_get(lw, &input, &use_image)) return;
2082 2078
2083 use_color = layout_image_color_profile_get_use(lw); 2079 use_color = layout_image_color_profile_get_use(lw);
2084 2080
2085 action = gtk_action_group_get_action(lw->action_group, "UseColorProfiles"); 2081 action = gtk_action_group_get_action(lw->action_group, "UseColorProfiles");
2086 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_color); 2082 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_color);
2083
2084 if (layout_image_color_profile_get_status(lw, &image_profile, &screen_profile))
2085 {
2086 gchar *buf;
2087 buf = g_strdup_printf(_("Image profile: %s\nScreen profile: %s"), image_profile, screen_profile);
2088 g_object_set(G_OBJECT(action), "tooltip", buf, NULL);
2089 g_free(image_profile);
2090 g_free(screen_profile);
2091 g_free(buf);
2092 }
2093 else
2094 {
2095 g_object_set(G_OBJECT(action), "tooltip", _("Click to enable color management"), NULL);
2096 }
2087 2097
2088 action = gtk_action_group_get_action(lw->action_group, "UseImageProfile"); 2098 action = gtk_action_group_get_action(lw->action_group, "UseImageProfile");
2089 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_image); 2099 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_image);
2090 gtk_action_set_sensitive(action, use_color); 2100 gtk_action_set_sensitive(action, use_color);
2091 2101