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