1 #ifndef __GLADE_PROJECT_H__
2 #define __GLADE_PROJECT_H__
3 
4 #include <gladeui/glade-widget.h>
5 #include <gladeui/glade-command.h>
6 #include <gladeui/glade-xml-utils.h>
7 
8 G_BEGIN_DECLS
9 
10 #define GLADE_TYPE_PROJECT            (glade_project_get_type ())
11 #define GLADE_PROJECT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_PROJECT, GladeProject))
12 #define GLADE_PROJECT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_PROJECT, GladeProjectClass))
13 #define GLADE_IS_PROJECT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_PROJECT))
14 #define GLADE_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_PROJECT))
15 #define GLADE_PROJECT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_PROJECT, GladeProjectClass))
16 
17 typedef struct _GladeProjectPrivate  GladeProjectPrivate;
18 typedef struct _GladeProjectClass    GladeProjectClass;
19 
20 /**
21  * GladePointerMode:
22  * @GLADE_POINTER_SELECT:      Mouse pointer used for selecting widgets
23  * @GLADE_POINTER_ADD_WIDGET:  Mouse pointer used for adding widgets
24  * @GLADE_POINTER_DRAG_RESIZE: Mouse pointer used for dragging and
25  *                             resizing widgets in containers
26  * @GLADE_POINTER_MARGIN_EDIT: Mouse pointer used to edit widget margins
27  * @GLADE_POINTER_ALIGN_EDIT:  Mouse pointer used to edit widget alignment
28  *
29  * Indicates what the pointer is used for in the workspace.
30  */
31 typedef enum
32 {
33   GLADE_POINTER_SELECT = 0,
34   GLADE_POINTER_ADD_WIDGET,
35   GLADE_POINTER_DRAG_RESIZE,
36   GLADE_POINTER_MARGIN_EDIT,
37   GLADE_POINTER_ALIGN_EDIT
38 } GladePointerMode;
39 
40 typedef enum
41 {
42   GLADE_SUPPORT_OK                   = 0,
43   GLADE_SUPPORT_DEPRECATED           = (0x01 << 0),
44   GLADE_SUPPORT_MISMATCH             = (0x01 << 1)
45 } GladeSupportMask;
46 
47 /**
48  * GladeProjectModelColumns:
49  * @GLADE_PROJECT_MODEL_COLUMN_ICON_NAME: name of the icon for the widget
50  * @GLADE_PROJECT_MODEL_COLUMN_NAME: Name of the widget
51  * @GLADE_PROJECT_MODEL_COLUMN_TYPE_NAME: The type name of the widget
52  * @GLADE_PROJECT_MODEL_COLUMN_OBJECT: the GObject of the widget
53  * @GLADE_PROJECT_MODEL_COLUMN_MISC: the auxilary text describing a widget's role
54  * @GLADE_PROJECT_MODEL_COLUMN_WARNING: the support warning text for this widget
55  * @GLADE_PROJECT_MODEL_N_COLUMNS: Number of columns
56  *
57  * The tree view columns provided by the GtkTreeModel implemented
58  * by GladeProject
59  *
60  **/
61 typedef enum
62 {
63   GLADE_PROJECT_MODEL_COLUMN_ICON_NAME,
64   GLADE_PROJECT_MODEL_COLUMN_NAME,
65   GLADE_PROJECT_MODEL_COLUMN_TYPE_NAME,
66   GLADE_PROJECT_MODEL_COLUMN_OBJECT,
67   GLADE_PROJECT_MODEL_COLUMN_MISC,
68   GLADE_PROJECT_MODEL_COLUMN_WARNING,
69   GLADE_PROJECT_MODEL_N_COLUMNS
70 } GladeProjectModelColumns;
71 
72 /**
73  * GladeVerifyFlags:
74  * @GLADE_VERIFY_VERSIONS: Verify version mismatches
75  * @GLADE_VERIFY_DEPRECATIONS: Verify deprecations
76  * @GLADE_VERIFY_UNRECOGNIZED: Verify unrecognized types
77  *
78  */
79 typedef enum {
80   GLADE_VERIFY_VERSIONS      = (1 << 0),
81   GLADE_VERIFY_DEPRECATIONS  = (1 << 1),
82   GLADE_VERIFY_UNRECOGNIZED  = (1 << 2)
83 } GladeVerifyFlags;
84 
85 struct _GladeProject
86 {
87   GObject parent_instance;
88 
89   GladeProjectPrivate *priv;
90 };
91 
92 struct _GladeProjectClass
93 {
94   GObjectClass parent_class;
95 
96   void          (*add_object)          (GladeProject *project,
97                                         GladeWidget  *widget);
98   void          (*remove_object)       (GladeProject *project,
99                                         GladeWidget  *widget);
100 
101   void          (*undo)                (GladeProject *project);
102   void          (*redo)                (GladeProject *project);
103   GladeCommand *(*next_undo_item)      (GladeProject *project);
104   GladeCommand *(*next_redo_item)      (GladeProject *project);
105   void          (*push_undo)           (GladeProject *project,
106                                         GladeCommand *command);
107 
108   void          (*changed)             (GladeProject *project,
109                                         GladeCommand *command,
110                                         gboolean      forward);
111 
112   void          (*widget_name_changed) (GladeProject *project,
113                                         GladeWidget  *widget);
114   void          (*selection_changed)   (GladeProject *project);
115   void          (*close)               (GladeProject *project);
116 
117   void          (*parse_finished)      (GladeProject *project);
118 
119   void   (* glade_reserved1)   (void);
120   void   (* glade_reserved2)   (void);
121   void   (* glade_reserved3)   (void);
122   void   (* glade_reserved4)   (void);
123   void   (* glade_reserved5)   (void);
124   void   (* glade_reserved6)   (void);
125   void   (* glade_reserved7)   (void);
126   void   (* glade_reserved8)   (void);
127 };
128 
129 
130 GType               glade_project_get_type            (void) G_GNUC_CONST;
131 
132 GladeProject       *glade_project_new                 (void);
133 GladeProject       *glade_project_load                (const gchar         *path);
134 gboolean            glade_project_load_from_file      (GladeProject        *project,
135                                                        const gchar         *path);
136 gboolean            glade_project_save                (GladeProject        *project,
137                                                        const gchar         *path,
138                                                        GError             **error);
139 gboolean            glade_project_save_verify         (GladeProject        *project,
140                                                        const gchar         *path,
141 						       GladeVerifyFlags     flags,
142                                                        GError             **error);
143 gboolean            glade_project_autosave            (GladeProject        *project,
144                                                        GError             **error);
145 gboolean            glade_project_backup              (GladeProject        *project,
146                                                        const gchar         *path,
147                                                        GError             **error);
148 void                glade_project_push_progress        (GladeProject       *project);
149 gboolean            glade_project_load_cancelled       (GladeProject       *project);
150 void                glade_project_cancel_load          (GladeProject       *project);
151 
152 void                glade_project_preview              (GladeProject       *project,
153                                                         GladeWidget        *gwidget);
154 void                glade_project_properties           (GladeProject       *project);
155 gchar              *glade_project_resource_fullpath    (GladeProject       *project,
156                                                         const gchar        *resource);
157 void                glade_project_set_resource_path    (GladeProject       *project,
158                                                         const gchar        *path);
159 const gchar        *glade_project_get_resource_path    (GladeProject       *project);
160 
161 void                glade_project_widget_visibility_changed (GladeProject  *project,
162                                                              GladeWidget   *widget,
163                                                              gboolean       visible);
164 void                glade_project_check_reordered      (GladeProject       *project,
165                                                         GladeWidget        *parent,
166                                                         GList              *old_order);
167 
168 void                glade_project_set_template         (GladeProject       *project,
169 							GladeWidget        *widget);
170 GladeWidget        *glade_project_get_template         (GladeProject       *project);
171 
172 void                glade_project_set_license          (GladeProject       *project,
173                                                         const gchar        *license);
174 
175 const gchar        *glade_project_get_license          (GladeProject       *project);
176 
177 /* Commands */
178 void                glade_project_undo                 (GladeProject       *project);
179 void                glade_project_redo                 (GladeProject       *project);
180 GladeCommand       *glade_project_next_undo_item       (GladeProject       *project);
181 GladeCommand       *glade_project_next_redo_item       (GladeProject       *project);
182 void                glade_project_push_undo            (GladeProject       *project,
183                                                         GladeCommand       *cmd);
184 GtkWidget          *glade_project_undo_items           (GladeProject       *project);
185 GtkWidget          *glade_project_redo_items           (GladeProject       *project);
186 
187 /* Add/Remove Objects */
188 const GList        *glade_project_get_objects          (GladeProject       *project);
189 void                glade_project_add_object           (GladeProject       *project,
190                                                         GObject            *object);
191 void                glade_project_remove_object        (GladeProject       *project,
192                                                         GObject            *object);
193 gboolean            glade_project_has_object           (GladeProject       *project,
194                                                         GObject            *object);
195 void                glade_project_widget_changed       (GladeProject       *project,
196                                                         GladeWidget        *gwidget);
197 
198 /* Widget names */
199 GladeWidget        *glade_project_get_widget_by_name   (GladeProject       *project,
200                                                         const gchar        *name);
201 void                glade_project_set_widget_name      (GladeProject       *project,
202                                                         GladeWidget        *widget,
203 							const gchar        *name);
204 gchar              *glade_project_new_widget_name      (GladeProject       *project,
205                                                         GladeWidget        *widget,
206                                                         const gchar        *base_name);
207 gboolean            glade_project_available_widget_name(GladeProject       *project,
208                                                         GladeWidget        *widget,
209                                                         const gchar        *name);
210 
211 /* Selection */
212 gboolean            glade_project_is_selected          (GladeProject       *project,
213                                                         GObject            *object);
214 void                glade_project_selection_set        (GladeProject       *project,
215                                                         GObject            *object,
216                                                         gboolean            emit_signal);
217 void                glade_project_selection_add        (GladeProject       *project,
218                                                         GObject            *object,
219                                                         gboolean            emit_signal);
220 void                glade_project_selection_remove     (GladeProject       *project,
221                                                         GObject            *object,
222                                                         gboolean            emit_signal);
223 void                glade_project_selection_clear      (GladeProject       *project,
224                                                         gboolean            emit_signal);
225 void                glade_project_selection_changed    (GladeProject       *project);
226 void                glade_project_queue_selection_changed (GladeProject    *project);
227 GList              *glade_project_selection_get        (GladeProject       *project);
228 gboolean            glade_project_get_has_selection    (GladeProject       *project);
229 
230 /* Accessors */
231 const gchar        *glade_project_get_path             (GladeProject       *project);
232 gchar              *glade_project_get_name             (GladeProject       *project);
233 void                glade_project_reset_path           (GladeProject       *project);
234 gboolean            glade_project_is_loading           (GladeProject       *project);
235 time_t              glade_project_get_file_mtime       (GladeProject       *project);
236 gboolean            glade_project_get_readonly         (GladeProject       *project);
237 gboolean            glade_project_get_modified         (GladeProject       *project);
238 void                glade_project_set_pointer_mode     (GladeProject       *project,
239                                                         GladePointerMode    mode);
240 GladePointerMode    glade_project_get_pointer_mode     (GladeProject       *project);
241 void                glade_project_set_add_item         (GladeProject       *project,
242                                                         GladeWidgetAdaptor *adaptor);
243 GladeWidgetAdaptor *glade_project_get_add_item         (GladeProject       *project);
244 void                glade_project_set_target_version   (GladeProject       *project,
245 							const gchar        *catalog,
246 							gint                major,
247 							gint                minor);
248 void                glade_project_get_target_version   (GladeProject       *project,
249                                                         const gchar        *catalog,
250                                                         gint               *major,
251                                                         gint               *minor);
252 GList              *glade_project_required_libs        (GladeProject       *project);
253 gchar              *glade_project_display_dependencies (GladeProject       *project);
254 
255 GList              *glade_project_toplevels            (GladeProject       *project);
256 
257 void                glade_project_set_translation_domain (GladeProject *project,
258                                                           const gchar *domain);
259 const gchar        *glade_project_get_translation_domain (GladeProject *project);
260 
261 void                glade_project_set_css_provider_path  (GladeProject *project,
262                                                           const gchar  *path);
263 
264 const gchar        *glade_project_get_css_provider_path  (GladeProject *project);
265 
266 /* Verifications */
267 gboolean            glade_project_verify               (GladeProject       *project,
268 							gboolean            saving,
269 							GladeVerifyFlags    flags);
270 gchar              *glade_project_verify_widget_adaptor(GladeProject       *project,
271                                                         GladeWidgetAdaptor *adaptor,
272                                                         GladeSupportMask   *mask);
273 void                glade_project_verify_property      (GladeProperty      *property);
274 void                glade_project_verify_signal        (GladeWidget        *widget,
275                                                         GladeSignal        *signal);
276 gboolean            glade_project_writing_preview      (GladeProject       *project);
277 
278 /* General selection driven commands */
279 void                glade_project_copy_selection       (GladeProject       *project);
280 void                glade_project_command_cut          (GladeProject       *project);
281 void                glade_project_command_paste        (GladeProject       *project,
282                                                         GladePlaceholder   *placeholder);
283 void                glade_project_command_delete       (GladeProject       *project);
284 
285 G_END_DECLS
286 
287 #endif /* __GLADE_PROJECT_H__ */
288