1 /* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 3 -*- */
2 
3 /*
4  * GImageView
5  * Copyright (C) 2001 Takuro Ashie
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  *
21  * $Id: gimv_thumb_win.h,v 1.10 2004/12/20 18:15:42 makeinu Exp $
22  */
23 
24 #ifndef __GIMV_THUMB_WIN_H__
25 #define __GIMV_THUMB_WIN_H__
26 
27 #include "gimageview.h"
28 
29 #include "gimv_image_view.h"
30 #include "gimv_thumb_view.h"
31 
32 
33 #define GIMV_TYPE_THUMB_WIN            (gimv_thumb_win_get_type ())
34 #define GIMV_THUMB_WIN(obj)            (GTK_CHECK_CAST (obj, gimv_thumb_win_get_type (), GimvThumbWin))
35 #define GIMV_THUMB_WIN_CLASS(klass)    (GTK_CHECK_CLASS_CAST (klass, gimv_thumb_win_get_type, GimvThumbWinClass))
36 #define GIMV_IS_THUMB_WIN(obj)         (GTK_CHECK_TYPE (obj, gimv_thumb_win_get_type ()))
37 #define GIMV_IS_THUMB_WIN_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMV_TYPE_THUMB_WIN))
38 
39 
40 #define GIMV_THUMB_WIN_MIN_THUMB_SIZE 4
41 #define GIMV_THUMB_WIN_MAX_THUMB_SIZE 640
42 
43 /* current page of notebook */
44 #define GIMV_THUMB_WIN_CURRENT_PAGE -1
45 
46 
47 typedef struct GimvThumbWinClass_Tag GimvThumbWinClass;
48 typedef struct GimvThumbWinPriv_Tag  GimvThumbWinPriv;
49 
50 
51 /* program status */
52 typedef enum {
53    GIMV_THUMB_WIN_STATUS_NORMAL,
54    GIMV_THUMB_WIN_STATUS_LOADING,
55    GIMV_THUMB_WIN_STATUS_LOADING_BG,
56    GIMV_THUMB_WIN_STATUS_CHECKING_DUPLICATE,
57    GIMV_THUMB_WIN_STATUS_NO_SENSITIVE
58 } GimvThumbwinStatus;
59 
60 
61 typedef enum {
62    GIMV_SORT_NAME,
63    GIMV_SORT_ATIME,
64    GIMV_SORT_MTIME,
65    GIMV_SORT_CTIME,
66    GIMV_SORT_SIZE,
67    GIMV_SORT_TYPE,
68    GIMV_SORT_WIDTH,
69    GIMV_SORT_HEIGHT,
70    GIMV_SORT_AREA,
71    GIMV_SORT_NONE
72 } GimvSortItem;
73 
74 
75 typedef enum {
76    GIMV_SORT_REVERSE          = 1 << 0,
77    GIMV_SORT_CASE_INSENSITIVE = 1 << 1,
78    GIMV_SORT_DIR_INSENSITIVE  = 1 << 2
79 } GimvSortFlag;
80 
81 
82 typedef struct GimvThumbwinComposeType_Tag {
83    gboolean pane1_horizontal;
84    gboolean pane2_horizontal;
85    gboolean pane2_attach_to_child1;
86    GimvComponentType widget_type[3];
87 } GimvThumbwinComposeType;
88 
89 extern GimvThumbwinComposeType compose_type[];
90 
91 
92 /* thumbnail window composition */
93 struct GimvThumbWin_Tag
94 {
95    GtkWindow  parent;
96 
97    GtkWidget *main_vbox;
98 
99    /* top of window (menu & toolbar) */
100    GtkWidget *menubar;
101    GtkWidget *menubar_handle;
102    GtkWidget *toolbar;
103    GtkWidget *toolbar_handle;
104    GtkWidget *location_entry;
105    GtkWidget *summary_mode_menu;
106 
107    /* middle of window (main contents) */
108    GtkWidget *main_contents;
109    GtkWidget *dirview;
110    GtkWidget *notebook;
111    GtkWidget *preview;
112    GtkWidget *pane1;
113    GtkWidget *pane2;
114 
115    /* dir view module */
116    DirView   *dv;
117 
118    /* image view module */
119    GimvImageView *iv;
120 
121    /* commnet view module */
122    GimvCommentView *cv;
123 
124    /* bottom of window (status bar) */
125    GtkWidget *status_bar_container;
126    GtkWidget *status_bar1;
127    GtkWidget *status_bar2;
128    GtkWidget *status_bar3;
129    GtkWidget *progressbar;
130 
131    /* popup menu */
132    GtkWidget *thumbview_popup;
133 
134    /* sub menus */
135    GtkWidget *view_menu;
136    GtkWidget *sort_menu;
137    GtkWidget *comp_menu;
138 
139    struct    /* menuitems */
140    {
141       GtkWidget *file;
142       GtkWidget *edit;
143       GtkWidget *view;
144       GtkWidget *tool;
145 
146       GtkWidget *dirview;
147       GtkWidget *preview;
148       GtkWidget *menubar;
149       GtkWidget *toolbar;
150       GtkWidget *dir_toolbar;
151       GtkWidget *statusbar;
152       GtkWidget *tab;
153       GtkWidget *preview_tab;
154       GtkWidget *fullscr;
155 
156       GtkWidget *layout[6];
157 
158       GtkWidget *select;
159       GtkWidget *unselect;
160       GtkWidget *refresh;
161       GtkWidget *reload;
162       GtkWidget *recreate;
163 
164       GtkWidget *rename;
165       GtkWidget *copy;
166       GtkWidget *move;
167       GtkWidget *link;
168       GtkWidget *delete;
169 
170       GtkWidget *find_sim;
171 
172       GtkWidget *sort_name;
173       GtkWidget *sort_access;
174       GtkWidget *sort_time;
175       GtkWidget *sort_change;
176       GtkWidget *sort_size;
177       GtkWidget *sort_type;
178       GtkWidget *sort_width, *sort_height, *sort_area;
179       GtkWidget *sort_rev, *sort_case, *sort_dir;
180    } menuitem;
181 
182    struct    /* buttons in toolbar */
183    {
184       GtkWidget *fileopen;
185       GtkWidget *prefs;
186       GtkWidget *refresh;
187       GtkWidget *skip;
188       GtkWidget *stop;
189       GtkWidget *prev;
190       GtkWidget *next;
191       GtkWidget *quit;
192       GtkWidget *size_spin;
193    } button;
194 
195    /* window status */
196    GimvThumbwinStatus status;
197    gboolean     show_dirview;
198    gboolean     show_preview;
199    gboolean     fullscreen;
200    gint         win_x;
201    gint         win_y;
202    gint         win_width;
203    gint         win_height;
204    gint         pane_size1;
205    gint         pane_size2;
206    const gchar *thumbview_summary_mode;
207    GimvImageViewPlayerVisibleType player_visible;
208    GimvSortItem sortitem;
209    GimvSortFlag sortflags;
210    gint         layout_type;
211    GtkPositionType tab_pos;
212    gboolean     changing_layout;
213 
214    gint   filenum; /* image files number in this window */
215    gint   pagenum; /* notebook pages number in this window */
216    gint   newpage_count;
217    gulong filesize;
218 
219    /* File open dialog */
220    GtkWidget *open_dialog;
221 
222 #ifdef USE_GTK2
223    GSList *accel_group_list;
224 #endif
225 
226    GimvThumbWinPriv *priv;
227 };
228 
229 
230 struct GimvThumbWinClass_Tag
231 {
232    GtkWindowClass parent_class;
233 };
234 
235 
236 GList       *gimv_thumb_win_get_list                  (void);
237 GtkType      gimv_thumb_win_get_type                  (void);
238 
239 GtkWidget   *gimv_thumb_win_new                       (void);
240 GimvThumbWin
241             *gimv_thumb_win_open_window              (void);
242 
243 GimvThumbView
244             *gimv_thumb_win_find_thumbtable           (GimvThumbWin   *tw,
245                                                        gint            pagenum);
246 void         gimv_thumb_win_set_statusbar_page_info   (GimvThumbWin   *tw,
247                                                        gint            pagenum);
248 void         gimv_thumb_win_loading_update_progress   (GimvThumbWin   *tw,
249                                                        gint            pagenum);
250 void         gimv_thumb_win_set_sensitive             (GimvThumbWin   *tw,
251                                                        GimvThumbwinStatus status);
252 void         gimv_thumb_win_set_tab_label_text        (GtkWidget *page_container,
253                                                        const gchar    *title);
254 void         gimv_thumb_win_set_tab_label_state       (GtkWidget *page_container,
255                                                        GtkStateType    state);
256 GimvThumbView
257             *gimv_thumb_win_create_new_tab            (GimvThumbWin   *tw);
258 GtkWidget   *gimv_thumb_win_detach_tab                (GimvThumbWin   *tw_dest,
259                                                        GimvThumbWin   *tw_src,
260                                                        GimvThumbView  *tv);
261 void         gimv_thumb_win_close_tab                 (GimvThumbWin   *tw,
262                                                        gint            page);
263 void         gimv_thumb_win_reload_thumbnail          (GimvThumbWin   *tw,
264                                                        ThumbLoadType   type);
265 void         gimv_thumb_win_open_dirview              (GimvThumbWin   *tw);
266 void         gimv_thumb_win_close_dirview             (GimvThumbWin   *tw);
267 void         gimv_thumb_win_open_preview              (GimvThumbWin   *tw);
268 void         gimv_thumb_win_close_preview             (GimvThumbWin   *tw);
269 void         gimv_thumb_win_location_entry_set_text   (GimvThumbWin   *tw,
270                                                        const gchar    *location);
271 GimvSortItem gimv_thumb_win_get_sort_type             (GimvThumbWin   *tw,
272                                                        GimvSortFlag   *flags_ret);
273 /* currently, only GIMV_THUMB_WIN_CURRENT_PAGE will be accepted */
274 void         gimv_thumb_win_sort_thumbnail            (GimvThumbWin   *tw,
275                                                        GimvSortItem    item,
276                                                        GimvSortFlag    flags,
277                                                        gint            page);
278 void         gimv_thumb_win_change_layout             (GimvThumbWin   *tw,
279                                                        gint            layout);
280 void         gimv_thumb_win_swap_component            (GimvThumbWin   *tw,
281                                                        GimvComponentType com1,
282                                                        GimvComponentType com2);
283 void          gimv_thumb_win_save_state               (GimvThumbWin   *tw);
284 
285 /* FIXMEEEEEEEEEEEEEEEEEE!! (TOT */
286 void         gimv_thumb_win_notebook_drag_src_unset   (GimvThumbWin   *tw);
287 void         gimv_thumb_win_notebook_drag_src_reset   (GimvThumbWin   *tw);
288 #ifdef USE_GTK2
289 void         gimv_thumb_win_remove_key_accel          (GimvThumbWin   *tw);
290 void         gimv_thumb_win_reset_key_accel           (GimvThumbWin   *tw);
291 #endif /* USE_GTK2 */
292 /* END FIXMEEEEEEEEEEEEEEEEEE!! (TOT */
293 
294 #endif /* __GIMV_THUMB_WIN_H__ */
295