📄 layout_util.c
字号:
}GtkWidget *layout_actions_menu_bar(LayoutWindow *lw){ return gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu");}/* *----------------------------------------------------------------------------- * toolbar *----------------------------------------------------------------------------- */ static void layout_button_thumb_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_thumb_set(lw, gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(widget)));}static void layout_button_home_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; const gchar *path = homedir(); if (path) layout_set_path(lw, path);}static void layout_button_refresh_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_refresh(lw);}static void layout_button_zoom_in_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_adjust(lw, get_zoom_increment());}static void layout_button_zoom_out_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_adjust(lw, -get_zoom_increment());}static void layout_button_zoom_fit_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_set(lw, 0.0);}static void layout_button_zoom_1_1_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_image_zoom_set(lw, 1.0);}static void layout_button_config_cb(GtkWidget *widget, gpointer data){ show_config_window();}static void layout_button_float_cb(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; layout_tools_float_toggle(lw);}static void layout_button_custom_icon(GtkWidget *button, const gchar *key){ GtkWidget *icon; GdkPixbuf *pixbuf; pixbuf = pixbuf_inline(key); if (!pixbuf) return; icon = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); pref_toolbar_button_set_icon(button, icon, NULL); gtk_widget_show(icon);}GtkWidget *layout_button_bar(LayoutWindow *lw){ GtkWidget *box; GtkWidget *button; box = pref_toolbar_new(NULL, GTK_TOOLBAR_ICONS); button = pref_toolbar_button(box, NULL, _("_Thumbnails"), TRUE, _("Show thumbnails"), G_CALLBACK(layout_button_thumb_cb), lw); layout_button_custom_icon(button, PIXBUF_INLINE_ICON_THUMB); lw->thumb_button = button; pref_toolbar_button(box, GTK_STOCK_HOME, NULL, FALSE, _("Change to home folder"), G_CALLBACK(layout_button_home_cb), lw); pref_toolbar_button(box, GTK_STOCK_REFRESH, NULL, FALSE, _("Refresh file list"), G_CALLBACK(layout_button_refresh_cb), lw); pref_toolbar_button(box, GTK_STOCK_ZOOM_IN, NULL, FALSE, _("Zoom in"), G_CALLBACK(layout_button_zoom_in_cb), lw); pref_toolbar_button(box, GTK_STOCK_ZOOM_OUT, NULL, FALSE, _("Zoom out"), G_CALLBACK(layout_button_zoom_out_cb), lw); pref_toolbar_button(box, GTK_STOCK_ZOOM_FIT, NULL, FALSE, _("Fit image to window"), G_CALLBACK(layout_button_zoom_fit_cb), lw); pref_toolbar_button(box, GTK_STOCK_ZOOM_100, NULL, FALSE, _("Set zoom 1:1"), G_CALLBACK(layout_button_zoom_1_1_cb), lw); pref_toolbar_button(box, GTK_STOCK_PREFERENCES, NULL, FALSE, _("Configure options"), G_CALLBACK(layout_button_config_cb), lw); button = pref_toolbar_button(box, NULL, _("_Float"), FALSE, _("Float Controls"), G_CALLBACK(layout_button_float_cb), lw); layout_button_custom_icon(button, PIXBUF_INLINE_ICON_FLOAT); return box;}/* *----------------------------------------------------------------------------- * misc *----------------------------------------------------------------------------- */static void layout_util_sync_views(LayoutWindow *lw){ GtkAction *action; if (!lw->action_group) return; action = gtk_action_group_get_action(lw->action_group, "FolderTree"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->tree_view); action = gtk_action_group_get_action(lw->action_group, "ViewIcons"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->icon_view); action = gtk_action_group_get_action(lw->action_group, "FloatTools"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->tools_float); action = gtk_action_group_get_action(lw->action_group, "SBarKeywords"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->bar_info_enabled); action = gtk_action_group_get_action(lw->action_group, "SBarExif"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->bar_exif_enabled); action = gtk_action_group_get_action(lw->action_group, "SBarSort"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->bar_sort_enabled); action = gtk_action_group_get_action(lw->action_group, "HideToolbar"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->toolbar_hidden);}void layout_util_sync_thumb(LayoutWindow *lw){ GtkAction *action; if (!lw->action_group) return; action = gtk_action_group_get_action(lw->action_group, "Thumbnails"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->thumbs_enabled); g_object_set(action, "sensitive", !lw->icon_view, NULL); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(lw->thumb_button), lw->thumbs_enabled); gtk_widget_set_sensitive(lw->thumb_button, !lw->icon_view);}void layout_util_sync(LayoutWindow *lw){ layout_util_sync_views(lw); layout_util_sync_thumb(lw); layout_menu_recent_update(lw); layout_menu_edit_update(lw);}/* *----------------------------------------------------------------------------- * icons (since all the toolbar icons are included here, best place as any) *----------------------------------------------------------------------------- */PixmapFolders *folder_icons_new(void){ PixmapFolders *pf; pf = g_new0(PixmapFolders, 1); pf->close = pixbuf_inline(PIXBUF_INLINE_FOLDER_CLOSED); pf->open = pixbuf_inline(PIXBUF_INLINE_FOLDER_OPEN); pf->deny = pixbuf_inline(PIXBUF_INLINE_FOLDER_LOCKED); pf->parent = pixbuf_inline(PIXBUF_INLINE_FOLDER_UP); return pf;}void folder_icons_free(PixmapFolders *pf){ if (!pf) return; g_object_unref(pf->close); g_object_unref(pf->open); g_object_unref(pf->deny); g_object_unref(pf->parent); g_free(pf);}/* *----------------------------------------------------------------------------- * sidebars *----------------------------------------------------------------------------- */#define SIDEBAR_WIDTH 288static void layout_bar_info_destroyed(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; lw->bar_info = NULL; if (lw->utility_box) { /* destroyed from within itself */ lw->bar_info_enabled = FALSE; layout_util_sync_views(lw); }}static GList *layout_bar_info_list_cb(gpointer data){ LayoutWindow *lw = data; return layout_selection_list(lw);}static void layout_bar_info_new(LayoutWindow *lw){ if (!lw->utility_box) return; lw->bar_info = bar_info_new(layout_image_get_path(lw), FALSE, lw->utility_box); bar_info_set_selection_func(lw->bar_info, layout_bar_info_list_cb, lw); bar_info_selection(lw->bar_info, layout_selection_count(lw, NULL) - 1); bar_info_size_request(lw->bar_info, SIDEBAR_WIDTH * 3 / 4); g_signal_connect(G_OBJECT(lw->bar_info), "destroy", G_CALLBACK(layout_bar_info_destroyed), lw); lw->bar_info_enabled = TRUE; gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->bar_info, FALSE, FALSE, 0); gtk_widget_show(lw->bar_info);} static void layout_bar_info_close(LayoutWindow *lw){ if (lw->bar_info) { bar_info_close(lw->bar_info); lw->bar_info = NULL; } lw->bar_info_enabled = FALSE;}void layout_bar_info_toggle(LayoutWindow *lw){ if (lw->bar_info_enabled) { layout_bar_info_close(lw); } else { layout_bar_info_new(lw); }}static void layout_bar_info_new_image(LayoutWindow *lw){ if (!lw->bar_info || !lw->bar_info_enabled) return; bar_info_set(lw->bar_info, layout_image_get_path(lw));}static void layout_bar_info_new_selection(LayoutWindow *lw, gint count){ if (!lw->bar_info || !lw->bar_info_enabled) return; bar_info_selection(lw->bar_info, count - 1);}static void layout_bar_info_maint_renamed(LayoutWindow *lw){ if (!lw->bar_info || !lw->bar_info_enabled) return; bar_info_maint_renamed(lw->bar_info, layout_image_get_path(lw));}static void layout_bar_exif_destroyed(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; if (lw->bar_exif) { lw->bar_exif_advanced = bar_exif_is_advanced(lw->bar_exif); } lw->bar_exif = NULL; if (lw->utility_box) { /* destroyed from within itself */ lw->bar_exif_enabled = FALSE; layout_util_sync_views(lw); }}static void layout_bar_exif_sized(GtkWidget *widget, GtkAllocation *allocation, gpointer data){ LayoutWindow *lw = data; if (lw->bar_exif) { lw->bar_exif_size = allocation->width; }}static void layout_bar_exif_new(LayoutWindow *lw){ if (!lw->utility_box) return; lw->bar_exif = bar_exif_new(TRUE, layout_image_get_path(lw), lw->bar_exif_advanced, lw->utility_box); g_signal_connect(G_OBJECT(lw->bar_exif), "destroy", G_CALLBACK(layout_bar_exif_destroyed), lw); g_signal_connect(G_OBJECT(lw->bar_exif), "size_allocate", G_CALLBACK(layout_bar_exif_sized), lw); lw->bar_exif_enabled = TRUE; if (lw->bar_exif_size < 1) lw->bar_exif_size = SIDEBAR_WIDTH; gtk_widget_set_size_request(lw->bar_exif, lw->bar_exif_size, -1); gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->bar_exif, FALSE, FALSE, 0); if (lw->bar_info) gtk_box_reorder_child(GTK_BOX(lw->utility_box), lw->bar_exif, 1); gtk_widget_show(lw->bar_exif);}static void layout_bar_exif_close(LayoutWindow *lw){ if (lw->bar_exif) { bar_exif_close(lw->bar_exif); lw->bar_exif = NULL; } lw->bar_exif_enabled = FALSE;}void layout_bar_exif_toggle(LayoutWindow *lw){ if (lw->bar_exif_enabled) { layout_bar_exif_close(lw); } else { layout_bar_exif_new(lw); }}static void layout_bar_exif_new_image(LayoutWindow *lw){ if (!lw->bar_exif || !lw->bar_exif_enabled) return; bar_exif_set(lw->bar_exif, layout_image_get_path(lw));}static void layout_bar_sort_destroyed(GtkWidget *widget, gpointer data){ LayoutWindow *lw = data; lw->bar_sort = NULL; if (lw->utility_box) { /* destroyed from within itself */ lw->bar_sort_enabled = FALSE; layout_util_sync_views(lw); }}static void layout_bar_sort_new(LayoutWindow *lw){ if (!lw->utility_box) return; lw->bar_sort = bar_sort_new(lw); g_signal_connect(G_OBJECT(lw->bar_sort), "destroy", G_CALLBACK(layout_bar_sort_destroyed), lw); lw->bar_sort_enabled = TRUE; gtk_box_pack_end(GTK_BOX(lw->utility_box), lw->bar_sort, FALSE, FALSE, 0); gtk_widget_show(lw->bar_sort);}static void layout_bar_sort_close(LayoutWindow *lw){ if (lw->bar_sort) { bar_sort_close(lw->bar_sort); lw->bar_sort = NULL; } lw->bar_sort_enabled = FALSE;}void layout_bar_sort_toggle(LayoutWindow *lw){ if (lw->bar_sort_enabled) { layout_bar_sort_close(lw); } else { layout_bar_sort_new(lw); }}void layout_bars_new_image(LayoutWindow *lw){ layout_bar_info_new_image(lw); layout_bar_exif_new_image(lw);}void layout_bars_new_selection(LayoutWindow *lw, gint count){ layout_bar_info_new_selection(lw, count);}GtkWidget *layout_bars_prepare(LayoutWindow *lw, GtkWidget *image){ lw->utility_box = gtk_hbox_new(FALSE, PREF_PAD_GAP); gtk_box_pack_start(GTK_BOX(lw->utility_box), image, TRUE, TRUE, 0); gtk_widget_show(image); if (lw->bar_sort_enabled) { layout_bar_sort_new(lw); } if (lw->bar_info_enabled) { layout_bar_info_new(lw); } if (lw->bar_exif_enabled) { layout_bar_exif_new(lw); } return lw->utility_box;}void layout_bars_close(LayoutWindow *lw){ layout_bar_sort_close(lw); layout_bar_exif_close(lw); layout_bar_info_close(lw);}void layout_bars_maint_renamed(LayoutWindow *lw){ layout_bar_info_maint_renamed(lw);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -