2006-12-03 Dimitris Glezos <dimitris@glezos.com>
[dia.git] / lib / widgets.h
blob43155104124786b6ce4c73b4096ad8298e2e0127
1 /* Dia -- an diagram creation/manipulation program
2 * Copyright (C) 1998 Alexander Larsson
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 #ifndef WIDGETS_H
19 #define WIDGETS_H
21 #include <config.h>
23 #include <gdk/gdk.h>
24 #include <gtk/gtkmenu.h>
25 #include <gtk/gtkoptionmenu.h>
26 #include <gtk/gtkdrawingarea.h>
27 #include <gtk/gtkcolorsel.h>
28 #include <gtk/gtkhbox.h>
29 #include <gtk/gtkfilesel.h>
30 #include <gtk/gtkspinbutton.h>
31 #include <gtk/gtklabel.h>
32 #include <gtk/gtkcolorseldialog.h>
33 #include <gtk/gtkmenuitem.h>
35 #include "diatypes.h"
37 #include "font.h"
38 #include "color.h"
39 #include "arrows.h"
41 /* DiaFontSelector: */
42 #define DIAFONTSELECTOR(obj) GTK_CHECK_CAST (obj, dia_font_selector_get_type (), DiaFontSelector)
43 #define DIAFONTSELECTOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, dia_font_selector_get_type (), DiaFontSelectorClass)
44 #define IS_DIAFONTSELECTOR(obj) GTK_CHECK_TYPE (obj, dia_font_selector_get_type ())
47 GtkType dia_font_selector_get_type (void);
48 GtkWidget* dia_font_selector_new (void);
49 void dia_font_selector_set_font (DiaFontSelector *fs, DiaFont *font);
50 void dia_font_selector_set_preview (DiaFontSelector *fs, gchar *text);
51 DiaFont * dia_font_selector_get_font (DiaFontSelector *fs);
53 /* DiaAlignmentSelector: */
54 #define DIAALIGNMENTSELECTOR(obj) GTK_CHECK_CAST (obj, dia_alignment_selector_get_type (), DiaAlignmentSelector)
55 #define DIAALIGNMENTSELECTOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, dia_alignment_selector_get_type (), DiaAlignmentSelectorClass)
56 #define IS_DIAALIGNMENTSELECTOR(obj) GTK_CHECK_TYPE (obj, dia_alignment_selector_get_type ())
59 GtkType dia_alignment_selector_get_type (void);
60 GtkWidget* dia_alignment_selector_new (void);
61 Alignment dia_alignment_selector_get_alignment (DiaAlignmentSelector *as);
62 void dia_alignment_selector_set_alignment (DiaAlignmentSelector *as,
63 Alignment align);
65 /* DiaLineStyleSelector: */
66 #define DIALINESTYLESELECTOR(obj) GTK_CHECK_CAST (obj, dia_line_style_selector_get_type (), DiaLineStyleSelector)
67 #define DIALINESTYLESELECTOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, dia_line_style_selector_get_type (), DiaLineStyleSelectorClass)
68 #define IS_DIALINESTYLESELECTOR(obj) GTK_CHECK_TYPE (obj, dia_line_style_selector_get_type ())
70 #define DEFAULT_LINESTYLE LINESTYLE_SOLID
71 #define DEFAULT_LINESTYLE_DASHLEN 1.0
74 GtkType dia_line_style_selector_get_type (void);
75 GtkWidget* dia_line_style_selector_new (void);
76 void dia_line_style_selector_get_linestyle (DiaLineStyleSelector *as,
77 LineStyle *linestyle,
78 real *dashlength);
79 void dia_line_style_selector_set_linestyle (DiaLineStyleSelector *as,
80 LineStyle linestyle,
81 real dashlength);
83 /* DiaColorSelector: */
84 #define DIACOLORSELECTOR(obj) GTK_CHECK_CAST (obj, dia_color_selector_get_type (), DiaColorSelector)
85 #define DIACOLORSELECTOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, dia_color_selector_get_type (), DiaColorSelectorClass)
86 #define IS_DIACOLORSELECTOR(obj) GTK_CHECK_TYPE (obj, dia_color_selector_get_type ())
88 #define DEFAULT_FG_COLOR color_black
89 #define DEFAULT_BG_COLOR color_white
90 #define DEFAULT_COLOR color_white
93 struct _DiaColorSelector
95 GtkButton button;
97 GtkWidget *area;
98 GdkGC *gc;
100 GtkWidget *col_sel;
104 struct _DiaColorSelectorClass
106 GtkButtonClass parent_class;
109 GtkType dia_color_selector_get_type (void);
110 GtkWidget* dia_color_selector_new (void);
111 void dia_color_selector_get_color (GtkWidget *cs, Color *color);
112 void dia_color_selector_set_color (GtkWidget *cs,
113 const Color *color);
116 /* DiaArrowSelector */
117 #define DIA_TYPE_ARROW_SELECTOR (dia_arrow_selector_get_type())
118 #define DIA_ARROW_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, dia_arrow_selector_get_type (), DiaArrowSelector))
119 #define DIA_ARROW_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass, dia_arrow_selector_get_type (), DiaArrowSelectorClass))
120 #define DIA_IS_ARROW_SELECTOR(obj) (G_TYPE_CHECK_TYPE (obj, dia_arrow_selector_get_type ()))
121 #define DIA_ARROW_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DIA_TYPE_ARROW_SELECTOR, DiaArrowSelectorClass))
123 #define DEFAULT_ARROW ARROW_NONE
124 #define DEFAULT_ARROW_LENGTH DEFAULT_ARROW_SIZE
125 #define DEFAULT_ARROW_WIDTH DEFAULT_ARROW_SIZE
128 GType dia_arrow_selector_get_type (void);
129 GtkWidget* dia_arrow_selector_new (void);
130 Arrow dia_arrow_selector_get_arrow (DiaArrowSelector *as);
131 void dia_arrow_selector_set_arrow (DiaArrowSelector *as,
132 Arrow arrow);
135 /* DiaFileSelector: */
136 #define DIAFILESELECTOR(obj) GTK_CHECK_CAST (obj, dia_file_selector_get_type (), DiaFileSelector)
137 #define DIAFILESELECTOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, dia_file_selector_get_type (), DiaFileSelectorClass)
138 #define IS_DIAFILESELECTOR(obj) GTK_CHECK_TYPE (obj, dia_file_selector_get_type ())
141 GtkType dia_file_selector_get_type (void);
142 GtkWidget* dia_file_selector_new (void);
143 void dia_file_selector_set_file (DiaFileSelector *fs, char *file);
144 const gchar *dia_file_selector_get_file (DiaFileSelector *fs);
146 /* DiaSizeSelector: */
147 #define DIA_SIZE_SELECTOR(obj) GTK_CHECK_CAST (obj, dia_size_selector_get_type (), DiaSizeSelector)
148 #define DIA_SIZE_SELECTOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, dia_size_selector_get_type (), DiaSizeSelectorClass)
149 #define IS_DIA_SIZE_SELECTOR(obj) GTK_CHECK_TYPE (obj, dia_size_selector_get_type ())
152 GtkType dia_size_selector_get_type (void);
153 GtkWidget* dia_size_selector_new (real width, real height);
154 void dia_size_selector_set_locked(DiaSizeSelector *ss, gboolean locked);
155 void dia_size_selector_set_size (DiaSizeSelector *ss, real width, real height);
156 gboolean dia_size_selector_get_size (DiaSizeSelector *ss, real *width, real *height);
159 /* DiaUnitSpinner */
160 #define DIA_UNIT_SPINNER(obj) GTK_CHECK_CAST(obj, dia_unit_spinner_get_type(), DiaUnitSpinner)
161 #define DIA_UNIT_SPINNER_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, dia_unit_spinner_get_type(), DiaUnitSpinnerClass)
162 #define DIA_IS_UNIT_SPINNER(obj) GTK_CHECK_TYPE(obj, dia_unit_spinner_get_type())
164 typedef struct _DiaUnitSpinner DiaUnitSpinner;
165 typedef struct _DiaUnitSpinnerClass DiaUnitSpinnerClass;
167 typedef enum {
168 DIA_UNIT_FEET,
169 DIA_UNIT_METER,
170 DIA_UNIT_DECIMETER,
171 DIA_UNIT_MILLIMETER,
172 DIA_UNIT_POINT,
173 DIA_UNIT_CENTIMETER,
174 DIA_UNIT_INCH,
175 } DiaUnit;
177 struct _DiaUnitSpinner {
178 GtkSpinButton parent;
180 DiaUnit unit_num;
183 struct _DiaUnitSpinnerClass {
184 GtkSpinButtonClass parent_class;
188 GtkType dia_unit_spinner_get_type (void);
189 GtkWidget *dia_unit_spinner_new (GtkAdjustment *adjustment,
190 guint digits,
191 DiaUnit adj_unit);
192 void dia_unit_spinner_set_value (DiaUnitSpinner *self, gfloat val);
193 gfloat dia_unit_spinner_get_value (DiaUnitSpinner *self);
195 /* DiaDynamicMenu */
197 #define DIA_DYNAMIC_MENU(obj) GTK_CHECK_CAST(obj, dia_dynamic_menu_get_type(), DiaDynamicMenu)
198 #define DIA_DYNAMIC_MENU_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, dia_dynamic_menu_get_type(), DiaDynamicMenuClass)
199 #define DIA_IS_DYNAMIC_MENU(obj) GTK_CHECK_TYPE(obj, dia_dynamic_menu_get_type())
201 typedef struct _DiaDynamicMenu DiaDynamicMenu;
202 typedef struct _DiaDynamicMenuClass DiaDynamicMenuClass;
204 /** The ways the non-default entries in the menu can be sorted:
205 * DDM_SORT_TOP: Just add new ones at the top, removing them from the middle.
206 * Not currently implemented.
207 * DDM_SORT_NEWEST: Add new ones to the top, and move selected ones to the
208 * top as well.
209 * DDM_SORT_SORT: Sort the entries according to the CompareFunc order.
211 typedef enum { DDM_SORT_TOP, DDM_SORT_NEWEST, DDM_SORT_SORT } DdmSortType;
213 typedef GtkWidget *(* DDMCreateItemFunc)(DiaDynamicMenu *, gchar *);
214 typedef void (* DDMCallbackFunc)(DiaDynamicMenu *, const gchar *, gpointer);
216 struct _DiaDynamicMenu {
217 GtkOptionMenu parent;
219 GList *default_entries;
221 DDMCreateItemFunc create_func;
222 DDMCallbackFunc activate_func;
223 gpointer userdata;
225 GtkMenuItem *other_item;
227 gchar *persistent_name;
228 gint cols;
230 gchar *active;
231 /** For the list-based versions, these are the options */
232 GList *options;
236 struct _DiaDynamicMenuClass {
237 GtkOptionMenuClass parent_class;
240 GtkType dia_dynamic_menu_get_type (void);
242 GtkWidget *dia_dynamic_menu_new(DDMCreateItemFunc create,
243 DDMCallbackFunc activate, gpointer userdata,
244 GtkMenuItem *otheritem, gchar *persist);
245 GtkWidget *dia_dynamic_menu_new_stringbased(GtkMenuItem *otheritem,
246 DDMCallbackFunc activate,
247 gpointer userdata,
248 gchar *persist);
249 GtkWidget *dia_dynamic_menu_new_listbased(DDMCreateItemFunc create,
250 DDMCallbackFunc activate,
251 gpointer userdata,
252 gchar *other_label,
253 GList *items, gchar *persist);
254 GtkWidget *dia_dynamic_menu_new_stringlistbased(gchar *other_label,
255 GList *items,
256 DDMCallbackFunc activate,
257 gpointer userdata,
258 gchar *persist);
259 void dia_dynamic_menu_add_default_entry(DiaDynamicMenu *ddm, const gchar *entry);
260 gint dia_dynamic_menu_add_entry(DiaDynamicMenu *ddm, const gchar *entry);
261 void dia_dynamic_menu_set_sorting_method(DiaDynamicMenu *ddm, DdmSortType sort);
262 void dia_dynamic_menu_reset(GtkWidget *widget, gpointer userdata);
263 void dia_dynamic_menu_set_max_entries(DiaDynamicMenu *ddm, gint max);
264 void dia_dynamic_menu_set_columns(DiaDynamicMenu *ddm, gint cols);
265 gchar *dia_dynamic_menu_get_entry(DiaDynamicMenu *ddm);
266 void dia_dynamic_menu_select_entry(DiaDynamicMenu *ddm, const gchar *entry);
268 /* **** Util functions for Gtk stuff **** */
269 /** Create a toggle button with two icons (created with gdk-pixbuf-csource,
270 * for instance). The icons represent on and off.
272 GtkWidget *
273 dia_toggle_button_new_with_icons(const guint8 *on_icon,
274 const guint8 *off_icon);
276 /* Other common defaults */
278 #define DEFAULT_ALIGNMENT ALIGN_LEFT
279 /* This is defined in app/linewidth_area.c. Aw, bummer */
280 #define DEFAULT_LINE_WIDTH 2*0.05
282 #endif /* WIDGETS_H */