1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 3 /* 4 * GThumb 5 * 6 * Copyright (C) 2005-2009 Free Software Foundation, Inc. 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 22 #ifndef GTH_BROWSER_H 23 #define GTH_BROWSER_H 24 25 #include "gth-file-source.h" 26 #include "gth-file-store.h" 27 #include "gth-icon-cache.h" 28 #include "gth-image.h" 29 #include "gth-menu-manager.h" 30 #include "gth-task.h" 31 #include "gth-viewer-page.h" 32 #include "gth-window.h" 33 #include "typedefs.h" 34 35 G_BEGIN_DECLS 36 37 #define GTH_BROWSER_MENU_MANAGER_GEARS "gears" 38 #define GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS "gears.folder-actions" 39 #define GTH_BROWSER_MENU_MANAGER_GEARS_OTHER_ACTIONS "gears.other-actions" 40 #define GTH_BROWSER_MENU_MANAGER_GEARS_APP_ACTIONS "gears.app-actions" 41 #define GTH_BROWSER_MENU_MANAGER_FILE "file" 42 #define GTH_BROWSER_MENU_MANAGER_FILE_SCREEN_ACTIONS "file.screen-actions" 43 #define GTH_BROWSER_MENU_MANAGER_FILE_OPEN_ACTIONS "file.open-actions" 44 #define GTH_BROWSER_MENU_MANAGER_FILE_EDIT_ACTIONS "file.edit-actions" 45 #define GTH_BROWSER_MENU_MANAGER_FILE_FILE_ACTIONS "file.file-actions" 46 #define GTH_BROWSER_MENU_MANAGER_FILE_FOLDER_ACTIONS "file.folder-actions" 47 #define GTH_BROWSER_MENU_MANAGER_FILE_OTHER_ACTIONS "file.other-actions" 48 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST "file-list" 49 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_SCREEN_ACTIONS "file-list.screen-actions" 50 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_OPEN_ACTIONS "file-list.open-actions" 51 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_EDIT_ACTIONS "file-list.edit-actions" 52 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_FILE_ACTIONS "file-list.file-actions" 53 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_DELETE_ACTIONS "file-list.delete-actions" 54 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_FOLDER_ACTIONS "file-list.folder-actions" 55 #define GTH_BROWSER_MENU_MANAGER_FILE_LIST_OTHER_ACTIONS "file-list.other-actions" 56 #define GTH_BROWSER_MENU_MANAGER_FOLDER "folder" 57 #define GTH_BROWSER_MENU_MANAGER_FOLDER_OPEN_ACTIONS "folder.open-actions" 58 #define GTH_BROWSER_MENU_MANAGER_FOLDER_CREATE_ACTIONS "folder.create-actions" 59 #define GTH_BROWSER_MENU_MANAGER_FOLDER_EDIT_ACTIONS "folder.edit-actions" 60 #define GTH_BROWSER_MENU_MANAGER_FOLDER_FOLDER_ACTIONS "folder.folder-actions" 61 #define GTH_BROWSER_MENU_MANAGER_FOLDER_OTHER_ACTIONS "folder.other-actions" 62 63 #define GTH_BROWSER_HEADER_BAR_BIG_MARGIN 12 64 65 #define GTH_TYPE_BROWSER (gth_browser_get_type ()) 66 #define GTH_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_BROWSER, GthBrowser)) 67 #define GTH_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTH_BROWSER_TYPE, GthBrowserClass)) 68 #define GTH_IS_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTH_TYPE_BROWSER)) 69 #define GTH_IS_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTH_TYPE_BROWSER)) 70 #define GTH_BROWSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTH_TYPE_BROWSER, GthBrowserClass)) 71 72 typedef struct _GthBrowser GthBrowser; 73 typedef struct _GthBrowserClass GthBrowserClass; 74 typedef struct _GthBrowserPrivate GthBrowserPrivate; 75 76 typedef void (*GthBrowserCallback) (GthBrowser *, gboolean cancelled, gpointer user_data); 77 78 typedef enum { /*< skip >*/ 79 GTH_BROWSER_PAGE_BROWSER = 0, 80 GTH_BROWSER_PAGE_VIEWER, 81 GTH_BROWSER_N_PAGES 82 } GthBrowserPage; 83 84 typedef enum { /*< skip >*/ 85 GTH_BROWSER_HEADER_SECTION_BROWSER_NAVIGATION, 86 GTH_BROWSER_HEADER_SECTION_BROWSER_LOCATIONS, 87 GTH_BROWSER_HEADER_SECTION_BROWSER_COMMANDS, 88 GTH_BROWSER_HEADER_SECTION_BROWSER_TOOLS, 89 GTH_BROWSER_HEADER_SECTION_BROWSER_METADATA_TOOLS, 90 GTH_BROWSER_HEADER_SECTION_BROWSER_VIEW, 91 GTH_BROWSER_HEADER_SECTION_VIEWER_NAVIGATION, 92 GTH_BROWSER_HEADER_SECTION_VIEWER_OTHER_VIEW, 93 GTH_BROWSER_HEADER_SECTION_VIEWER_VIEW, 94 GTH_BROWSER_HEADER_SECTION_VIEWER_ZOOM, /* section shared by viewer and editor */ 95 GTH_BROWSER_HEADER_SECTION_VIEWER_COMMANDS, 96 GTH_BROWSER_HEADER_SECTION_VIEWER_OTHER_COMMANDS, 97 GTH_BROWSER_HEADER_SECTION_VIEWER_SIDEBAR, 98 GTH_BROWSER_HEADER_SECTION_VIEWER_EDIT, 99 GTH_BROWSER_HEADER_SECTION_VIEWER_EDIT_METADATA, 100 GTH_BROWSER_HEADER_SECTION_EDITOR_NAVIGATION, 101 GTH_BROWSER_HEADER_SECTION_EDITOR_VIEW, 102 GTH_BROWSER_HEADER_SECTION_EDITOR_COMMANDS, 103 GTH_BROWSER_HEADER_SECTION_EDITOR_APPLY, 104 GTH_BROWSER_N_HEADER_SECTIONS 105 } GthBrowserHeaderSection; 106 107 typedef enum { 108 GTH_ACTION_GO_TO, 109 GTH_ACTION_GO_BACK, 110 GTH_ACTION_GO_FORWARD, 111 GTH_ACTION_GO_UP, 112 GTH_ACTION_TREE_LIST_CHILDREN, 113 GTH_ACTION_TREE_OPEN 114 } GthAction; 115 116 typedef enum { 117 GTH_SCROLL_ACTION_NONE, 118 GTH_SCROLL_ACTION_CHANGE_FILE, 119 GTH_SCROLL_ACTION_ZOOM 120 } GthScrollAction; 121 122 struct _GthBrowser 123 { 124 GthWindow __parent; 125 GthBrowserPrivate *priv; 126 }; 127 128 struct _GthBrowserClass 129 { 130 GthWindowClass __parent_class; 131 132 void (*location_ready) (GthBrowser *browser, 133 GFile *location, 134 gboolean error); 135 }; 136 137 GType gth_browser_get_type (void); 138 GtkWidget * gth_browser_new (GFile *location, 139 GFile *file_to_select); 140 GFile * gth_browser_get_location (GthBrowser *browser); 141 GthFileData * gth_browser_get_location_data (GthBrowser *browser); 142 GthFileData * gth_browser_get_current_file (GthBrowser *browser); 143 gboolean gth_browser_get_file_modified (GthBrowser *browser); 144 void gth_browser_go_to (GthBrowser *browser, 145 GFile *location, 146 GFile *file_to_select); 147 void gth_browser_go_back (GthBrowser *browser, 148 int steps); 149 void gth_browser_go_forward (GthBrowser *browser, 150 int steps); 151 void gth_browser_go_to_history_pos (GthBrowser *browser, 152 int pos); 153 void gth_browser_go_up (GthBrowser *browser, 154 int steps); 155 void gth_browser_go_home (GthBrowser *browser); 156 void gth_browser_clear_history (GthBrowser *browser); 157 void gth_browser_set_dialog (GthBrowser *browser, 158 const char *dialog_name, 159 GtkWidget *dialog); 160 GtkWidget * gth_browser_get_dialog (GthBrowser *browser, 161 const char *dialog_name); 162 GthIconCache * gth_browser_get_menu_icon_cache (GthBrowser *browser); 163 GtkWidget * gth_browser_get_infobar (GthBrowser *browser); 164 GtkWidget * gth_browser_get_statusbar (GthBrowser *browser); 165 GtkWidget * gth_browser_get_filterbar (GthBrowser *browser); 166 GtkWidget * gth_browser_get_headerbar_section (GthBrowser *browser, 167 GthBrowserHeaderSection section); 168 GtkWidget * gth_browser_add_header_bar_button (GthBrowser *browser, 169 GthBrowserHeaderSection section, 170 const char *icon_name, 171 const char *tooltip, 172 const char *action_name, 173 const char *accelerator); 174 GtkWidget * gth_browser_add_header_bar_toggle_button 175 (GthBrowser *browser, 176 GthBrowserHeaderSection section, 177 const char *icon_name, 178 const char *tooltip, 179 const char *action_name, 180 const char *accelerator); 181 GtkWidget * gth_browser_add_header_bar_label_button 182 (GthBrowser *browser, 183 GthBrowserHeaderSection section, 184 const char *label, 185 const char *tooltip, 186 const char *action_name, 187 const char *accelerator); 188 GtkWidget * gth_browser_add_header_bar_menu_button 189 (GthBrowser *browser, 190 GthBrowserHeaderSection section, 191 const char *icon_name, 192 const char *tooltip, 193 GtkWidget *popover); 194 void gth_browser_add_menu_manager_for_menu 195 (GthBrowser *browser, 196 const char *menu_id, 197 GMenu *menu); 198 GthMenuManager * gth_browser_get_menu_manager (GthBrowser *browser, 199 const char *menu_id); 200 GtkWidget * gth_browser_get_file_list (GthBrowser *browser); 201 GtkWidget * gth_browser_get_file_list_view (GthBrowser *browser); 202 GtkWidget * gth_browser_get_thumbnail_list (GthBrowser *browser); 203 GtkWidget * gth_browser_get_thumbnail_list_view(GthBrowser *browser); 204 GthFileSource * gth_browser_get_location_source (GthBrowser *browser); 205 GthFileStore * gth_browser_get_file_store (GthBrowser *browser); 206 GtkWidget * gth_browser_get_folder_tree (GthBrowser *browser); 207 void gth_browser_get_sort_order (GthBrowser *browser, 208 GthFileDataSort **sort_type, 209 gboolean *inverse); 210 void gth_browser_set_sort_order (GthBrowser *browser, 211 GthFileDataSort *sort_type, 212 gboolean inverse); 213 void gth_browser_get_file_list_info (GthBrowser *browser, 214 int *current_position, 215 int *n_visibles); 216 void gth_browser_stop (GthBrowser *browser); 217 void gth_browser_reload (GthBrowser *browser); 218 void gth_browser_exec_task (GthBrowser *browser, 219 GthTask *task, 220 GthTaskFlags flags); 221 void gth_browser_set_close_with_task (GthBrowser *browser, 222 gboolean value); 223 gboolean gth_browser_get_close_with_task (GthBrowser *browser); 224 GtkWidget * gth_browser_get_location_bar (GthBrowser *browser); 225 GtkWidget * gth_browser_get_list_info_bar (GthBrowser *browser); 226 gboolean gth_browser_viewer_button_press_cb (GthBrowser *browser, 227 GdkEventButton *event); 228 gboolean gth_browser_viewer_scroll_event_cb (GthBrowser *browser, 229 GdkEventScroll *event); 230 gboolean gth_browser_viewer_key_press_cb (GthBrowser *browser, 231 GdkEventKey *event); 232 void gth_browser_set_viewer_widget (GthBrowser *browser, 233 GtkWidget *widget); 234 GtkWidget * gth_browser_get_viewer_widget (GthBrowser *browser); 235 GthViewerPage * gth_browser_get_viewer_page (GthBrowser *browser); 236 GtkWidget * gth_browser_get_viewer_sidebar (GthBrowser *browser); 237 gboolean gth_browser_show_next_image (GthBrowser *browser, 238 gboolean skip_broken, 239 gboolean only_selected); 240 gboolean gth_browser_show_prev_image (GthBrowser *browser, 241 gboolean skip_broken, 242 gboolean only_selected); 243 gboolean gth_browser_show_first_image (GthBrowser *browser, 244 gboolean skip_broken, 245 gboolean only_selected); 246 gboolean gth_browser_show_last_image (GthBrowser *browser, 247 gboolean skip_broken, 248 gboolean only_selected); 249 void gth_browser_load_file (GthBrowser *browser, 250 GthFileData *file_data, 251 gboolean view); 252 void gth_browser_update_title (GthBrowser *browser); 253 void gth_browser_update_sensitivity (GthBrowser *browser); 254 void gth_browser_update_extra_widget (GthBrowser *browser); 255 void gth_browser_update_statusbar_file_info 256 (GthBrowser *browser); 257 void gth_browser_show_file_properties (GthBrowser *browser); 258 void gth_browser_show_viewer_tools (GthBrowser *browser); 259 void gth_browser_toggle_file_properties (GthBrowser *browser); 260 void gth_browser_toggle_viewer_tools (GthBrowser *browser); 261 void gth_browser_hide_sidebar (GthBrowser *browser); 262 void gth_browser_load_location (GthBrowser *browser, 263 GFile *location); 264 void gth_browser_show_filterbar (GthBrowser *browser, 265 gboolean show); 266 gpointer gth_browser_get_image_preloader (GthBrowser *browser); 267 void gth_browser_register_viewer_control 268 (GthBrowser *browser, 269 GtkWidget *widget); 270 void gth_browser_unregister_viewer_control 271 (GthBrowser *browser, 272 GtkWidget *widget); 273 void gth_browser_fullscreen (GthBrowser *browser); 274 void gth_browser_unfullscreen (GthBrowser *browser); 275 gboolean gth_browser_get_is_fullscreen (GthBrowser *browser); 276 void gth_browser_file_menu_popup (GthBrowser *browser, 277 GdkEventButton *event); 278 GthFileData * gth_browser_get_folder_popup_file_data (GthBrowser *browser); 279 void gth_browser_ask_whether_to_save (GthBrowser *browser, 280 GthBrowserCallback 281 callback, 282 gpointer user_data); 283 void gth_browser_save_state (GthBrowser *browser); 284 gboolean gth_browser_restore_state (GthBrowser *browser); 285 void gth_browser_apply_editor_changes (GthBrowser *browser); 286 GthICCProfile * gth_browser_get_monitor_profile (GthBrowser *browser); 287 GtkWidget * gth_browser_get_fullscreen_headerbar 288 (GthBrowser *browser); 289 void gth_browser_keep_mouse_visible (GthBrowser *browser, 290 gboolean value); 291 void gth_browser_show_menu (GthBrowser *browser); 292 293 /* utilities */ 294 295 G_END_DECLS 296 297 #endif /* GTH_BROWSER_H */ 298