2 * Copyright (C) 2004 John Ellis
3 * Copyright (C) 2008 - 2016 The Geeqie Team
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.
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.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 struct FullScreenData;
33 #define LAYOUT_ID_CURRENT "_current_"
34 #define MAX_SPLIT_IMAGES 4
36 extern GList *layout_window_list;
42 LAYOUT_RIGHT = 1 << 1,
44 LAYOUT_BOTTOM = 1 << 3
49 LayoutOptions options;
63 /* menus, path selector */
65 GtkActionGroup *action_group;
66 GtkActionGroup *action_group_editors;
68 GtkUIManager *ui_manager;
69 guint toolbar_merge_id[TOOLBAR_COUNT];
70 GList *toolbar_actions[TOOLBAR_COUNT];
72 GtkWidget *path_entry;
76 LayoutLocation image_location;
80 ImageWindow *split_images[MAX_SPLIT_IMAGES];
81 ImageSplitMode split_mode;
82 gint active_split_image;
84 GtkWidget *split_image_widget;
85 GtkSizeGroup *split_image_sizegroup;
87 /* tools window (float) */
90 GtkWidget *tools_pane;
92 GtkWidget *menu_tool_bar; /**< Combined menu and toolbar box */
93 GtkWidget *menu_bar; /**< referenced by lw, exist during whole lw lifetime */
96 GtkWidget *toolbar[TOOLBAR_COUNT]; /**< referenced by lw, exist during whole lw lifetime */
98 GtkWidget *back_button;
102 LayoutLocation dir_location;
109 LayoutLocation file_location;
113 GtkWidget *file_view;
115 GtkWidget *info_box; /**< status bar */
116 GtkWidget *info_progress_bar; /**< status bar */
117 GtkWidget *info_sort; /**< status bar */
118 GtkWidget *info_status; /**< status bar */
119 GtkWidget *info_details; /**< status bar */
120 GtkWidget *info_zoom; /**< status bar */
121 GtkWidget *info_pixel; /**< status bar */
125 SlideShowData *slideshow;
129 FullScreenData *full_screen;
133 GtkWidget *utility_box; /**< referenced by lw, exist during whole lw lifetime */
134 GtkWidget *utility_paned; /**< between image and bar */
138 gboolean bar_sort_enabled; /**< Set during start-up, and checked when the editors have loaded */
140 GtkWidget *exif_window;
141 GtkWidget *sar_window; /**< Search and Run window */
143 AnimationData *animation;
145 GtkWidget *log_window;
148 LayoutWindow *layout_new(FileData *dir_fd, LayoutOptions *lop);
149 LayoutWindow *layout_new_with_geometry(FileData *dir_fd, LayoutOptions *lop,
150 const gchar *geometry);
151 LayoutWindow *layout_new_from_config(const gchar **attribute_names, const gchar **attribute_values, gboolean use_commandline);
152 void layout_update_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values);
153 LayoutWindow *layout_new_from_default();
155 void layout_close(LayoutWindow *lw);
156 void layout_free(LayoutWindow *lw);
158 gboolean layout_valid(LayoutWindow **lw);
160 void layout_show_config_window(LayoutWindow *lw);
162 void layout_apply_options(LayoutWindow *lw, LayoutOptions *lop);
164 void layout_sync_options_with_current_state(LayoutWindow *lw);
165 void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names, const gchar **attribute_values);
166 void layout_write_attributes(LayoutOptions *layout, GString *outstr, gint indent);
167 void layout_write_config(LayoutWindow *lw, GString *outstr, gint indent);
170 LayoutWindow *layout_find_by_image(ImageWindow *imd);
171 LayoutWindow *layout_find_by_image_fd(ImageWindow *imd);
172 LayoutWindow *layout_find_by_layout_id(const gchar *id);
175 const gchar *layout_get_path(LayoutWindow *lw);
176 gboolean layout_set_path(LayoutWindow *lw, const gchar *path);
177 gboolean layout_set_fd(LayoutWindow *lw, FileData *fd);
179 void layout_status_update_progress(LayoutWindow *lw, gdouble val, const gchar *text);
180 void layout_status_update_info(LayoutWindow *lw, const gchar *text);
181 void layout_status_update_image(LayoutWindow *lw);
182 void layout_status_update_all(LayoutWindow *lw);
184 GList *layout_list(LayoutWindow *lw);
185 guint layout_list_count(LayoutWindow *lw, gint64 *bytes);
186 FileData *layout_list_get_fd(LayoutWindow *lw, gint index);
187 gint layout_list_get_index(LayoutWindow *lw, FileData *fd);
188 void layout_list_sync_fd(LayoutWindow *lw, FileData *fd);
190 GList *layout_selection_list(LayoutWindow *lw);
191 /* return list of pointers to int for selection */
192 GList *layout_selection_list_by_index(LayoutWindow *lw);
193 guint layout_selection_count(LayoutWindow *lw, gint64 *bytes);
194 void layout_select_all(LayoutWindow *lw);
195 void layout_select_none(LayoutWindow *lw);
196 void layout_select_invert(LayoutWindow *lw);
197 void layout_select_list(LayoutWindow *lw, GList *list);
199 void layout_mark_to_selection(LayoutWindow *lw, gint mark, MarkToSelectionMode mode);
200 void layout_selection_to_mark(LayoutWindow *lw, gint mark, SelectionToMarkMode mode);
202 void layout_mark_filter_toggle(LayoutWindow *lw, gint mark);
204 void layout_refresh(LayoutWindow *lw);
206 void layout_thumb_set(LayoutWindow *lw, gboolean enable);
208 void layout_marks_set(LayoutWindow *lw, gboolean enable);
210 void layout_file_filter_set(LayoutWindow *lw, gboolean enable);
212 void layout_sort_set_files(LayoutWindow *lw, SortType type, gboolean ascend, gboolean case_sensitive);
213 gboolean layout_sort_get(LayoutWindow *lw, SortType *type, gboolean *ascend, gboolean *case_sensitive);
215 gboolean layout_geometry_get(LayoutWindow *lw, gint *x, gint *y, gint *w, gint *h);
216 gboolean layout_geometry_get_dividers(LayoutWindow *lw, gint *h, gint *v);
218 void layout_views_set(LayoutWindow *lw, DirViewType dir_view_type, FileViewType file_view_type);
220 void layout_views_set_sort_dir(LayoutWindow *lw, SortType method, gboolean ascend, gboolean case_sensitive);
222 void layout_status_update(LayoutWindow *lw, const gchar *text);
224 void layout_style_set(LayoutWindow *lw, gint style, const gchar *order);
226 void layout_menu_update_edit();
227 void layout_styles_update();
228 void layout_colors_update();
231 gboolean layout_geometry_get_tools(LayoutWindow *lw, gint *x, gint *y, gint *w, gint *h, gint *divider_pos);
232 void layout_tools_float_set(LayoutWindow *lw, gboolean popped, gboolean hidden);
233 gboolean layout_tools_float_get(LayoutWindow *lw, gboolean *popped, gboolean *hidden);
235 void layout_tools_float_toggle(LayoutWindow *lw);
236 void layout_tools_hide_toggle(LayoutWindow *lw);
239 void layout_selectable_toolbars_toggle(LayoutWindow *lw);
240 void layout_info_pixel_set(LayoutWindow *lw, gboolean show);
242 void layout_split_change(LayoutWindow *lw, ImageSplitMode mode);
244 void save_layout(LayoutWindow *lw);
245 gchar *layout_get_unique_id();
246 guint layout_window_count();
249 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */