2 * ui_utils.h - this file is part of Geany, a fast and lightweight IDE
4 * Copyright 2006-2009 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
5 * Copyright 2006-2009 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
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
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 #ifndef GEANY_UI_UTILS_H
25 #define GEANY_UI_UTILS_H 1
27 /** Set a name to lookup @a widget from @a owner.
28 * @param owner Usually a @c GtkWindow.
29 * @param widget Widget.
30 * @param widget_name Name.
31 * @see ui_lookup_widget().
35 #define ui_hookup_widget(owner, widget, widget_name) \
36 g_object_set_data_full(G_OBJECT(owner), widget_name, \
37 g_object_ref(widget), (GDestroyNotify)g_object_unref);
40 typedef struct GeanyInterfacePrefs
42 gboolean sidebar_symbol_visible
;
43 gboolean sidebar_openfiles_visible
;
47 gboolean show_notebook_tabs
;
51 gboolean statusbar_visible
;
52 gboolean show_symbol_list_expanders
;
53 gboolean notebook_double_click_hides_widgets
;
54 gboolean highlighting_invert_all
;
58 extern GeanyInterfacePrefs interface_prefs
;
61 /** Important widgets in the main window. */
62 typedef struct GeanyMainWidgets
64 GtkWidget
*window
; /**< Main window. */
65 GtkWidget
*toolbar
; /**< Main toolbar. */
66 GtkWidget
*sidebar_notebook
; /**< Sidebar notebook. */
67 GtkWidget
*notebook
; /**< Document notebook. */
68 GtkWidget
*editor_menu
; /**< Popup editor menu. */
69 GtkWidget
*tools_menu
; /**< Most plugins add menu items to the Tools menu. */
70 GtkWidget
*progressbar
; /**< Progress bar widget in the status bar to show
71 progress of various actions.
72 See ui_progress_bar_start() for details. */
76 extern GeanyMainWidgets main_widgets
;
79 /* User Interface settings not shown in the Prefs dialog. */
80 typedef struct UIPrefs
82 /* State of the main window when Geany was closed */
83 gint geometry
[5]; /* 0:x, 1:y, 2:width, 3:height, flag for maximized state */
85 gboolean sidebar_visible
;
87 gboolean msgwindow_visible
;
88 gboolean allow_always_save
; /* if set, files can always be saved, even if unchanged */
90 /* Menu-item related data */
92 GQueue
*recent_projects_queue
;
93 gchar
*custom_date_format
;
94 gchar
**custom_commands
;
98 extern UIPrefs ui_prefs
;
101 /* Less commonly used widgets */
102 typedef struct UIWidgets
105 GtkWidget
*toolbar_menu
;
106 GtkWidget
*recent_files_menuitem
;
107 GtkWidget
*recent_files_menu_menubar
;
108 GtkWidget
*print_page_setup
;
109 GtkWidget
*recent_projects_menuitem
;
110 GtkWidget
*recent_projects_menu_menubar
;
113 GtkWidget
*open_colorsel
;
114 GtkWidget
*open_fontsel
;
115 GtkWidget
*open_filesel
;
116 GtkWidget
*save_filesel
;
117 GtkWidget
*prefs_dialog
;
119 /* other widgets not needed in GeanyMainWidgets */
120 GtkWidget
*statusbar
; /* use ui_set_statusbar() to set */
124 extern UIWidgets ui_widgets
;
127 /* The following block of types & functions are more generic and closely related to
128 * certain GTK+ widgets. */
130 typedef struct GeanyAutoSeparator
132 GtkWidget
*widget
; /* e.g. GtkSeparatorToolItem, GtkSeparatorMenuItem */
133 gint ref_count
; /* set to zero initially */
140 GEANY_EDITOR_SHOW_MARKERS_MARGIN
,
141 GEANY_EDITOR_SHOW_LINE_NUMBERS
,
142 GEANY_EDITOR_SHOW_WHITE_SPACE
,
143 GEANY_EDITOR_SHOW_INDENTATION_GUIDES
,
144 GEANY_EDITOR_SHOW_LINE_ENDINGS
146 GeanyUIEditorFeatures
;
149 #define GEANY_STOCK_SAVE_ALL "geany-save-all"
150 #define GEANY_STOCK_CLOSE_ALL "geany-close-all"
151 #define GEANY_STOCK_BUILD "geany-build"
156 GEANY_IMAGE_SAVE_ALL
,
157 GEANY_IMAGE_CLOSE_ALL
,
162 void ui_widget_show_hide(GtkWidget
*widget
, gboolean show
);
164 void ui_widget_modify_font_from_string(GtkWidget
*wid
, const gchar
*str
);
166 void ui_menu_sort_by_label(GtkMenu
*menu
);
168 gchar
*ui_menu_item_get_text(GtkMenuItem
*menu_item
);
170 GtkWidget
*ui_frame_new_with_alignment(const gchar
*label_text
, GtkWidget
**alignment
);
172 GtkWidget
*ui_dialog_vbox_new(GtkDialog
*dialog
);
174 GtkWidget
*ui_button_new_with_image(const gchar
*stock_id
, const gchar
*text
);
176 GtkWidget
*ui_image_menu_item_new(const gchar
*stock_id
, const gchar
*label
);
178 void ui_hbutton_box_copy_layout(GtkButtonBox
*master
, GtkButtonBox
*copy
);
180 void ui_combo_box_add_to_history(GtkComboBox
*combo
, const gchar
*text
);
182 void ui_combo_box_prepend_text_once(GtkComboBox
*combo
, const gchar
*text
);
184 GtkWidget
*ui_path_box_new(const gchar
*title
, GtkFileChooserAction action
, GtkEntry
*entry
);
186 void ui_setup_open_button_callback(GtkWidget
*open_btn
, const gchar
*title
,
187 GtkFileChooserAction action
, GtkEntry
*entry
);
189 void ui_table_add_row(GtkTable
*table
, gint row
, ...) G_GNUC_NULL_TERMINATED
;
191 void ui_auto_separator_add_ref(GeanyAutoSeparator
*autosep
, GtkWidget
*item
);
193 void ui_widget_set_tooltip_text(GtkWidget
*widget
, const gchar
*text
);
195 GtkWidget
*ui_lookup_widget(GtkWidget
*widget
, const gchar
*widget_name
);
197 void ui_widget_set_sensitive(GtkWidget
*widget
, gboolean set
);
199 void ui_entry_add_clear_icon(GtkEntry
*entry
);
202 #define ui_label_new_bold(text)\
203 ui_label_set_markup(GTK_LABEL(gtk_label_new(NULL)), "<b>%s</b>", text);
205 GtkWidget
*ui_label_set_markup(GtkLabel
*label
, const gchar
*format
, ...) G_GNUC_PRINTF(2, 3);
207 /* End of general widget functions */
212 void ui_init_toolbar_widgets(void);
214 void ui_init_stock_items(void);
216 void ui_add_config_file_menu_item(const gchar
*real_path
, const gchar
*label
,
217 GtkContainer
*parent
);
219 void ui_menu_add_document_items(GtkMenu
*menu
, GeanyDocument
*active
, GCallback callback
);
222 void ui_set_statusbar(gboolean log
, const gchar
*format
, ...) G_GNUC_PRINTF (2, 3);
224 void ui_update_statusbar(GeanyDocument
*doc
, gint pos
);
227 /* This sets the window title according to the current filename. */
228 void ui_set_window_title(GeanyDocument
*doc
);
230 void ui_set_editor_font(const gchar
*font_name
);
232 void ui_set_fullscreen(void);
235 void ui_update_popup_reundo_items(GeanyDocument
*doc
);
237 void ui_update_popup_copy_items(GeanyDocument
*doc
);
239 void ui_update_popup_goto_items(gboolean enable
);
242 void ui_update_menu_copy_items(GeanyDocument
*doc
);
244 void ui_update_insert_include_item(GeanyDocument
*doc
, gint item
);
246 void ui_update_fold_items(void);
249 void ui_create_insert_menu_items(void);
251 void ui_create_insert_date_menu_items(void);
254 void ui_save_buttons_toggle(gboolean enable
);
256 void ui_document_buttons_update(void);
259 void ui_sidebar_show_hide(void);
261 void ui_document_show_hide(GeanyDocument
*doc
);
263 void ui_set_search_entry_background(GtkWidget
*widget
, gboolean success
);
266 GdkPixbuf
*ui_new_pixbuf_from_inline(gint img
);
268 GtkWidget
*ui_new_image_from_inline(gint img
);
271 void ui_create_recent_menus(void);
273 void ui_add_recent_file(const gchar
*utf8_filename
);
275 void ui_add_recent_project_file(const gchar
*utf8_filename
);
278 void ui_update_tab_status(GeanyDocument
*doc
);
281 typedef gboolean
TVMatchCallback(void);
283 gboolean
ui_tree_view_find_next(GtkTreeView
*treeview
, TVMatchCallback cb
);
285 gboolean
ui_tree_view_find_previous(GtkTreeView
*treeview
, TVMatchCallback cb
);
288 void ui_statusbar_showhide(gboolean state
);
290 void ui_add_document_sensitive(GtkWidget
*widget
);
292 void ui_toggle_editor_features(GeanyUIEditorFeatures feature
);
294 void ui_update_view_editor_menu_items(void);
296 void ui_progress_bar_start(const gchar
*text
);
298 void ui_progress_bar_stop(void);