Mercurial > geeqie
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 |