r5162 | eht16 | 2010-08-15 13:53:09 +0100 (Sun, 15 Aug 2010) | 1 line
[geany-mirror.git] / src / ui_utils.h
blob4652a20f7d591292ebfc8f5fa0b27ad97ad2a4db
1 /*
2 * ui_utils.h - this file is part of Geany, a fast and lightweight IDE
4 * Copyright 2006-2010 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
5 * Copyright 2006-2010 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.
21 * $Id$
24 #ifndef GEANY_UI_UTILS_H
25 #define GEANY_UI_UTILS_H 1
27 /** Sets 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().
33 * @since 0.16
34 **/
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;
44 gchar *editor_font;
45 gchar *tagbar_font;
46 gchar *msgwin_font;
47 gboolean show_notebook_tabs;
48 gint tab_pos_editor;
49 gint tab_pos_msgwin;
50 gint tab_pos_sidebar;
51 gboolean statusbar_visible;
52 gboolean show_symbol_list_expanders;
53 gboolean notebook_double_click_hides_widgets;
54 gboolean highlighting_invert_all;
55 gint sidebar_pos;
56 gboolean msgwin_status_visible;
57 gboolean msgwin_compiler_visible;
58 gboolean msgwin_messages_visible;
59 gboolean msgwin_scribble_visible;
60 gboolean use_native_windows_dialogs; /* only used on Windows */
61 gboolean compiler_tab_autoscroll;
63 GeanyInterfacePrefs;
65 extern GeanyInterfacePrefs interface_prefs;
68 /** Important widgets in the main window. */
69 typedef struct GeanyMainWidgets
71 GtkWidget *window; /**< Main window. */
72 GtkWidget *toolbar; /**< Main toolbar. */
73 GtkWidget *sidebar_notebook; /**< Sidebar notebook. */
74 GtkWidget *notebook; /**< Document notebook. */
75 GtkWidget *editor_menu; /**< Popup editor menu. */
76 GtkWidget *tools_menu; /**< Most plugins add menu items to the Tools menu. */
77 GtkWidget *progressbar; /**< Progress bar widget in the status bar to show
78 progress of various actions.
79 See ui_progress_bar_start() for details. */
81 GeanyMainWidgets;
83 extern GeanyMainWidgets main_widgets;
86 /* User Interface settings not shown in the Prefs dialog. */
87 typedef struct UIPrefs
89 /* State of the main window when Geany was closed */
90 gint geometry[5]; /* 0:x, 1:y, 2:width, 3:height, flag for maximized state */
91 gboolean fullscreen;
92 gboolean sidebar_visible;
93 gint sidebar_page;
94 gboolean msgwindow_visible;
95 gboolean allow_always_save; /* if set, files can always be saved, even if unchanged */
97 /* Menu-item related data */
98 GQueue *recent_queue;
99 GQueue *recent_projects_queue;
100 gchar *custom_date_format;
101 gchar **custom_commands;
103 UIPrefs;
105 extern UIPrefs ui_prefs;
108 /* Less commonly used widgets */
109 typedef struct UIWidgets
111 /* menu widgets */
112 GtkWidget *toolbar_menu;
113 GtkWidget *recent_files_menuitem;
114 GtkWidget *recent_files_menu_menubar;
115 GtkWidget *print_page_setup;
116 GtkWidget *recent_projects_menuitem;
117 GtkWidget *recent_projects_menu_menubar;
119 /* dialogs */
120 GtkWidget *open_colorsel;
121 GtkWidget *open_fontsel;
122 GtkWidget *open_filesel;
123 GtkWidget *save_filesel;
124 GtkWidget *prefs_dialog;
126 /* other widgets not needed in GeanyMainWidgets */
127 GtkWidget *statusbar; /* use ui_set_statusbar() to set */
129 UIWidgets;
131 extern UIWidgets ui_widgets;
134 /* The following block of types & functions are more generic and closely related to
135 * certain GTK+ widgets. */
137 typedef struct GeanyAutoSeparator
139 GtkWidget *widget; /* e.g. GtkSeparatorToolItem, GtkSeparatorMenuItem */
140 gint ref_count; /* set to zero initially */
142 GeanyAutoSeparator;
145 typedef enum
147 GEANY_EDITOR_SHOW_MARKERS_MARGIN,
148 GEANY_EDITOR_SHOW_LINE_NUMBERS,
149 GEANY_EDITOR_SHOW_WHITE_SPACE,
150 GEANY_EDITOR_SHOW_INDENTATION_GUIDES,
151 GEANY_EDITOR_SHOW_LINE_ENDINGS
153 GeanyUIEditorFeatures;
156 #define GEANY_STOCK_SAVE_ALL "geany-save-all"
157 #define GEANY_STOCK_CLOSE_ALL "geany-close-all"
158 #define GEANY_STOCK_BUILD "geany-build"
160 enum
162 GEANY_IMAGE_LOGO,
163 GEANY_IMAGE_SAVE_ALL,
164 GEANY_IMAGE_CLOSE_ALL,
165 GEANY_IMAGE_BUILD
169 void ui_widget_show_hide(GtkWidget *widget, gboolean show);
171 void ui_widget_modify_font_from_string(GtkWidget *wid, const gchar *str);
173 void ui_menu_sort_by_label(GtkMenu *menu);
175 gchar *ui_menu_item_get_text(GtkMenuItem *menu_item);
177 GtkWidget *ui_frame_new_with_alignment(const gchar *label_text, GtkWidget **alignment);
179 GtkWidget *ui_dialog_vbox_new(GtkDialog *dialog);
181 GtkWidget *ui_button_new_with_image(const gchar *stock_id, const gchar *text);
183 GtkWidget *ui_image_menu_item_new(const gchar *stock_id, const gchar *label);
185 void ui_hbutton_box_copy_layout(GtkButtonBox *master, GtkButtonBox *copy);
187 void ui_combo_box_add_to_history(GtkComboBox *combo, const gchar *text);
189 void ui_combo_box_prepend_text_once(GtkComboBox *combo, const gchar *text);
191 GtkWidget *ui_path_box_new(const gchar *title, GtkFileChooserAction action, GtkEntry *entry);
193 void ui_setup_open_button_callback(GtkWidget *open_btn, const gchar *title,
194 GtkFileChooserAction action, GtkEntry *entry);
196 void ui_table_add_row(GtkTable *table, gint row, ...) G_GNUC_NULL_TERMINATED;
198 void ui_auto_separator_add_ref(GeanyAutoSeparator *autosep, GtkWidget *item);
200 void ui_widget_set_tooltip_text(GtkWidget *widget, const gchar *text);
202 GtkWidget *ui_lookup_widget(GtkWidget *widget, const gchar *widget_name);
204 void ui_widget_set_sensitive(GtkWidget *widget, gboolean set);
206 void ui_entry_add_clear_icon(GtkEntry *entry);
208 void ui_editable_insert_text_callback(GtkEditable *editable, gchar *new_text,
209 gint new_text_len, gint *position, gpointer data);
211 GtkWidget *ui_label_new_bold(const gchar *text);
213 GtkWidget *ui_label_set_markup(GtkLabel *label, const gchar *format, ...) G_GNUC_PRINTF(2, 3);
215 /* End of general widget functions */
218 void ui_init(void);
220 void ui_init_toolbar_widgets(void);
222 void ui_init_stock_items(void);
224 void ui_add_config_file_menu_item(const gchar *real_path, const gchar *label,
225 GtkContainer *parent);
227 void ui_menu_add_document_items(GtkMenu *menu, GeanyDocument *active, GCallback callback);
230 void ui_set_statusbar(gboolean log, const gchar *format, ...) G_GNUC_PRINTF (2, 3);
232 void ui_update_statusbar(GeanyDocument *doc, gint pos);
235 /* This sets the window title according to the current filename. */
236 void ui_set_window_title(GeanyDocument *doc);
238 void ui_set_editor_font(const gchar *font_name);
240 void ui_set_fullscreen(void);
243 void ui_update_popup_reundo_items(GeanyDocument *doc);
245 void ui_update_popup_copy_items(GeanyDocument *doc);
247 void ui_update_popup_goto_items(gboolean enable);
250 void ui_update_menu_copy_items(GeanyDocument *doc);
252 void ui_update_insert_include_item(GeanyDocument *doc, gint item);
254 void ui_update_fold_items(void);
257 void ui_create_insert_menu_items(void);
259 void ui_create_insert_date_menu_items(void);
262 void ui_save_buttons_toggle(gboolean enable);
264 void ui_document_buttons_update(void);
267 void ui_sidebar_show_hide(void);
269 void ui_document_show_hide(GeanyDocument *doc);
271 void ui_set_search_entry_background(GtkWidget *widget, gboolean success);
274 GdkPixbuf *ui_new_pixbuf_from_inline(gint img);
276 GtkWidget *ui_new_image_from_inline(gint img);
279 void ui_create_recent_menus(void);
281 void ui_add_recent_file(const gchar *utf8_filename);
283 void ui_add_recent_project_file(const gchar *utf8_filename);
286 void ui_update_tab_status(GeanyDocument *doc);
289 typedef gboolean TVMatchCallback(guint);
291 gboolean ui_tree_view_find_next(GtkTreeView *treeview, TVMatchCallback cb);
293 gboolean ui_tree_view_find_previous(GtkTreeView *treeview, TVMatchCallback cb);
296 void ui_statusbar_showhide(gboolean state);
298 void ui_add_document_sensitive(GtkWidget *widget);
300 void ui_toggle_editor_features(GeanyUIEditorFeatures feature);
302 void ui_update_view_editor_menu_items(void);
304 void ui_progress_bar_start(const gchar *text);
306 void ui_progress_bar_stop(void);
308 void ui_swap_sidebar_pos(void);
310 gboolean ui_is_keyval_enter_or_return(guint keyval);
312 gint ui_get_gtk_settings_integer(const gchar *property_name, gint default_value);
314 #endif