Merge pull request #3902 from techee/progressbar_cpu
[geany-mirror.git] / src / ui_utils.h
blob51a9ad92b67c0fc4f79cc3c03e47337b1252563c
1 /*
2 * ui_utils.h - this file is part of Geany, a fast and lightweight IDE
4 * Copyright 2006 The Geany contributors
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 #ifndef GEANY_UI_UTILS_H
22 #define GEANY_UI_UTILS_H 1
24 #include "geany.h" /* for GEANY_DEPRECATED */
25 #include "document.h"
27 #include "gtkcompat.h"
29 G_BEGIN_DECLS
31 /** Sets a name to lookup @a widget from @a owner.
32 * @param owner Usually a window, dialog or popup menu.
33 * @param widget Widget.
34 * @param widget_name Name.
35 * @see ui_lookup_widget().
37 * @since 0.16
38 **/
39 #define ui_hookup_widget(owner, widget, widget_name) \
40 g_object_set_data_full(G_OBJECT(owner), widget_name, \
41 g_object_ref(widget), (GDestroyNotify)g_object_unref);
44 /** Interface preferences */
45 typedef struct GeanyInterfacePrefs
47 gboolean sidebar_symbol_visible; /**< whether the symbol sidebar is visible */
48 gboolean sidebar_openfiles_visible; /**< whether the open file list is visible */
49 gchar *editor_font; /**< editor font */
50 gchar *tagbar_font; /**< symbol sidebar font */
51 gchar *msgwin_font; /**< message window font */
52 gboolean show_notebook_tabs; /**< whether editor tabs are visible */
53 gint tab_pos_editor; /**< positions of editor's tabs */
54 gint tab_pos_msgwin; /**< positions of message window's tabs */
55 gint tab_pos_sidebar; /**< positions of sidebar's tabs */
56 gboolean statusbar_visible; /**< whether the status bar is visible */
57 gboolean show_symbol_list_expanders; /**< whether to show expanders in the symbol list */
58 /** whether a double click on notebook tabs hides all other windows */
59 gboolean notebook_double_click_hides_widgets;
60 gboolean highlighting_invert_all; /**< whether highlighting colors are inverted */
61 gint sidebar_pos; /**< position of the sidebar (left or right) */
62 gboolean msgwin_status_visible; /**< whether message window's status tab is visible */
63 gboolean msgwin_compiler_visible; /**< whether message window's compiler tab is visible */
64 gboolean msgwin_messages_visible; /**< whether message window's messages tab is visible */
65 gboolean msgwin_scribble_visible; /**< whether message window's scribble tab is visible */
66 /** whether to use platform-native file dialogs */
67 gboolean use_native_windows_dialogs;
68 /** whether compiler messages window is automatically scrolled to show new messages */
69 gboolean compiler_tab_autoscroll;
70 gint msgwin_orientation; /**< orientation of the message window */
71 gint symbols_sort_mode; /**< symbol list sorting mode */
72 /** whether to show a warning when closing a project to open a new one */
73 gboolean warn_on_project_close;
74 gint openfiles_path_mode;
75 /** number of characters of a filename to be visible on the tab label */
76 gint tab_label_len;
78 GeanyInterfacePrefs;
81 /** Important widgets in the main window.
82 * Accessed by @c geany->main_widgets. */
83 typedef struct GeanyMainWidgets
85 GtkWidget *window; /**< Main window. */
86 GtkWidget *toolbar; /**< Main toolbar. */
87 GtkWidget *sidebar_notebook; /**< Sidebar notebook. */
88 GtkWidget *notebook; /**< Document notebook. */
89 GtkWidget *editor_menu; /**< Popup editor menu. */
90 GtkWidget *tools_menu; /**< Most plugins add menu items to the Tools menu. */
91 /** Progress bar widget in the status bar to show progress of various actions.
92 * See ui_progress_bar_start() for details. */
93 GtkWidget *progressbar;
94 GtkWidget *message_window_notebook; /**< Message Window notebook. */
95 /** Plugins modifying the project can add their items to the Project menu. */
96 GtkWidget *project_menu;
98 GeanyMainWidgets;
101 #define GEANY_STOCK_SAVE_ALL "geany-save-all"
102 #define GEANY_STOCK_CLOSE_ALL "geany-close-all"
103 #define GEANY_STOCK_BUILD "geany-build"
106 GtkWidget *ui_dialog_vbox_new(GtkDialog *dialog);
108 void ui_set_statusbar(gboolean log, const gchar *format, ...) G_GNUC_PRINTF (2, 3);
110 void ui_table_add_row(GtkTable *table, gint row, ...) G_GNUC_NULL_TERMINATED;
112 GtkWidget *ui_path_box_new(const gchar *title, GtkFileChooserAction action, GtkEntry *entry);
114 GtkWidget *ui_button_new_with_image(const gchar *stock_id, const gchar *text);
116 void ui_add_document_sensitive(GtkWidget *widget);
118 GtkWidget *ui_image_menu_item_new(const gchar *stock_id, const gchar *label);
120 GtkWidget *ui_lookup_widget(GtkWidget *widget, const gchar *widget_name);
122 void ui_progress_bar_start(const gchar *text);
124 void ui_progress_bar_stop(void);
126 void ui_entry_add_clear_icon(GtkEntry *entry);
128 void ui_menu_add_document_items(GtkMenu *menu, GeanyDocument *active, GCallback callback);
130 void ui_menu_add_document_items_sorted(GtkMenu *menu, GeanyDocument *active,
131 GCallback callback, GCompareFunc sort_func);
133 void ui_widget_modify_font_from_string(GtkWidget *wid, const gchar *str);
135 gboolean ui_is_keyval_enter_or_return(guint keyval);
137 gint ui_get_gtk_settings_integer(const gchar *property_name, gint default_value);
139 void ui_combo_box_add_to_history(GtkComboBoxText *combo_entry,
140 const gchar *text, gint history_len);
142 const gchar *ui_lookup_stock_label(const gchar *stock_id);
144 void ui_tree_view_set_tooltip_text_column(GtkTreeView *tree_view, gint column);
147 #ifndef GEANY_DISABLE_DEPRECATED
148 GtkWidget *ui_frame_new_with_alignment(const gchar *label_text, GtkWidget **alignment) GEANY_DEPRECATED;
150 void ui_widget_set_tooltip_text(GtkWidget *widget, const gchar *text) GEANY_DEPRECATED_FOR(gtk_widget_set_tooltip_text);
151 #endif /* GEANY_DISABLE_DEPRECATED */
154 #ifdef GEANY_PRIVATE
156 extern GeanyInterfacePrefs interface_prefs;
158 extern GeanyMainWidgets main_widgets;
161 /* User Interface settings not shown in the Prefs dialog. */
162 typedef struct UIPrefs
164 /* State of the main window when Geany was closed */
165 gint geometry[5]; /* 0:x, 1:y, 2:width, 3:height, flag for maximized state */
166 gboolean fullscreen;
167 gboolean sidebar_visible;
168 gint sidebar_page;
169 gboolean msgwindow_visible;
170 gboolean allow_always_save; /* if set, files can always be saved, even if unchanged */
171 gchar *statusbar_template;
172 gboolean new_document_after_close;
173 gboolean symbols_group_by_type;
175 /* Menu-item related data */
176 GQueue *recent_queue;
177 GQueue *recent_projects_queue;
178 gchar *custom_date_format;
179 gchar **custom_commands;
180 gchar **custom_commands_labels;
182 /* Color picker settings */
183 gchar *color_picker_palette;
185 UIPrefs;
187 extern UIPrefs ui_prefs;
190 /* Less commonly used widgets */
191 typedef struct UIWidgets
193 /* menu widgets */
194 GtkWidget *toolbar_menu;
195 GtkWidget *recent_files_menuitem;
196 GtkWidget *recent_files_menu_menubar;
197 GtkWidget *print_page_setup;
198 GtkWidget *recent_projects_menuitem;
199 GtkWidget *recent_projects_menu_menubar;
200 GtkWidget *config_files_filetype_menu;
202 /* dialogs */
203 GtkWidget *open_colorsel;
204 GtkWidget *open_fontsel;
205 GtkWidget *prefs_dialog;
207 /* other widgets not needed in GeanyMainWidgets */
208 GtkWidget *statusbar; /* use ui_set_statusbar() to set */
210 UIWidgets;
212 extern UIWidgets ui_widgets;
215 /* The following block of types & functions are more generic and closely related to
216 * certain GTK+ widgets. */
218 typedef struct GeanyAutoSeparator
220 GtkWidget *widget; /* e.g. GtkSeparatorToolItem, GtkSeparatorMenuItem */
221 gint show_count; /* visible items, set to zero initially */
222 gint item_count; /* total items, set to zero initially */
224 GeanyAutoSeparator;
227 typedef enum
229 GEANY_EDITOR_SHOW_MARKERS_MARGIN,
230 GEANY_EDITOR_SHOW_LINE_NUMBERS,
231 GEANY_EDITOR_SHOW_WHITE_SPACE,
232 GEANY_EDITOR_SHOW_INDENTATION_GUIDES,
233 GEANY_EDITOR_SHOW_LINE_ENDINGS
235 GeanyUIEditorFeatures;
238 void ui_widget_show_hide(GtkWidget *widget, gboolean show);
240 gchar *ui_menu_item_get_text(GtkMenuItem *menu_item);
242 void ui_dialog_set_primary_button_order(GtkDialog *dialog, gint response, ...);
244 void ui_hbutton_box_copy_layout(GtkButtonBox *master, GtkButtonBox *copy);
246 void ui_combo_box_prepend_text_once(GtkComboBoxText *combo, const gchar *text);
248 void ui_setup_open_button_callback(GtkWidget *open_btn, const gchar *title,
249 GtkFileChooserAction action, GtkEntry *entry);
251 void ui_auto_separator_add_ref(GeanyAutoSeparator *autosep, GtkWidget *item);
253 gpointer ui_builder_get_object (const gchar *name);
255 /* Compatibility functions */
256 GtkWidget *create_edit_menu1(void);
257 GtkWidget *create_prefs_dialog(void);
258 GtkWidget *create_project_dialog(void);
259 GtkWidget *create_toolbar_popup_menu1(void);
260 GtkWidget *create_window1(void);
262 void ui_widget_set_sensitive(GtkWidget *widget, gboolean set);
264 void ui_entry_add_activate_backward_signal(GtkEntry *entry);
266 void ui_editable_insert_text_callback(GtkEditable *editable, gchar *new_text,
267 gint new_text_len, gint *position, gpointer data);
269 GtkWidget *ui_label_new_bold(const gchar *text);
271 void ui_label_set_markup(GtkLabel *label, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
273 /* End of general widget functions */
275 void ui_init_builder(void);
277 void ui_init(void);
279 void ui_init_prefs(void);
281 void ui_finalize_builder(void);
283 void ui_init_toolbar_widgets(void);
285 void ui_init_stock_items(void);
287 void ui_add_config_file_menu_item(const gchar *real_path, const gchar *label,
288 GtkContainer *parent);
290 void ui_update_statusbar(GeanyDocument *doc, gint pos);
293 /* This sets the window title according to the current filename. */
294 void ui_set_window_title(GeanyDocument *doc);
296 void ui_set_editor_font(const gchar *font_name);
298 void ui_set_fullscreen(void);
301 void ui_update_popup_reundo_items(GeanyDocument *doc);
303 void ui_update_popup_copy_items(GeanyDocument *doc);
305 void ui_update_popup_goto_items(gboolean enable);
308 void ui_menu_copy_items_set_sensitive(gboolean sensitive);
310 void ui_update_menu_copy_items(GeanyDocument *doc);
312 void ui_update_insert_include_item(GeanyDocument *doc, gint item);
314 void ui_update_fold_items(void);
317 void ui_create_insert_menu_items(void);
319 void ui_create_insert_date_menu_items(void);
322 void ui_save_buttons_toggle(gboolean enable);
324 void ui_document_buttons_update(void);
327 void ui_sidebar_show_hide(void);
329 void ui_document_show_hide(GeanyDocument *doc);
331 void ui_set_search_entry_background(GtkWidget *widget, gboolean success);
334 void ui_create_recent_menus(void);
336 void ui_add_recent_document(GeanyDocument *doc);
338 void ui_add_recent_project_file(const gchar *utf8_filename);
340 void ui_update_recent_project_menu(void);
343 void ui_update_tab_status(GeanyDocument *doc);
346 typedef gboolean TVMatchCallback(gboolean);
348 gboolean ui_tree_view_find_next(GtkTreeView *treeview, TVMatchCallback cb);
350 gboolean ui_tree_view_find_previous(GtkTreeView *treeview, TVMatchCallback cb);
352 gboolean ui_tree_model_iter_any_next(GtkTreeModel *model, GtkTreeIter *iter, gboolean down);
354 void ui_statusbar_showhide(gboolean state);
356 void ui_toggle_editor_features(GeanyUIEditorFeatures feature);
358 void ui_update_view_editor_menu_items(void);
360 void ui_swap_sidebar_pos(void);
362 GIcon *ui_get_mime_icon(const gchar *mime_type);
364 void ui_focus_current_document(void);
366 GtkWidget *ui_create_encodings_combo_box(gboolean has_detect, gint default_enc);
368 gint ui_encodings_combo_box_get_active_encoding(GtkComboBox *combo);
370 gboolean ui_encodings_combo_box_set_active_encoding(GtkComboBox *combo, gint enc);
372 gchar *ui_get_project_directory(const gchar *path);
374 void ui_menu_sort_by_label(GtkMenu *menu);
376 #endif /* GEANY_PRIVATE */
378 G_END_DECLS
380 #endif /* GEANY_UI_UTILS_H */