作図ソフト dia の改良版
Revision | a268f9f37ad7a7117d5282658d3bd52a21c364b3 (tree) |
---|---|
Time | 2004-05-03 02:57:56 |
Author | Lars Clausen <lclausen@src....> |
Commiter | Lars Clausen |
Old diagram props, GObj for Obj.
@@ -1,4 +1,12 @@ | ||
1 | -2004-04-30 Lars Clausen <larsrc@linux.local> | |
1 | +2004-05-02 Lars Clausen <lars@raeder.dk> | |
2 | + | |
3 | + * lib/object.[ch]: Starting to convert Object to DiaObject, son of | |
4 | + GObject. | |
5 | + | |
6 | + * app/dia-props.c: Undo the attempt at making it really | |
7 | + multi-diagram, now going for a one-diagram dialog. | |
8 | + | |
9 | +2004-04-30 Lars Clausen <lars@raeder.dk> | |
2 | 10 | |
3 | 11 | * app/undo.c: Undoing broken undo stuff for diagram properties and |
4 | 12 | page setup. Shouldn't be mixed into undo at all. |
@@ -31,10 +31,8 @@ | ||
31 | 31 | #include "display.h" |
32 | 32 | #include "widgets.h" |
33 | 33 | #include "display.h" |
34 | -#include "persistence.h" | |
35 | 34 | |
36 | 35 | static GtkWidget *dialog = NULL; |
37 | -static GtkWidget *diagram_omenu; | |
38 | 36 | static GtkWidget *dynamic_check; |
39 | 37 | static GtkWidget *width_x_entry, *width_y_entry; |
40 | 38 | static GtkWidget *visible_x_entry, *visible_y_entry; |
@@ -43,28 +41,6 @@ static GtkWidget *bg_colour, *grid_colour, *pagebreak_colour; | ||
43 | 41 | static void diagram_properties_respond(GtkWidget *widget, |
44 | 42 | gint response_id, |
45 | 43 | gpointer user_data); |
46 | -static void diagram_properties_retrieve(Diagram *dia); | |
47 | -void create_diagram_properties_dialog(void); | |
48 | -void diagram_properties_update_diagram_list(void); | |
49 | - | |
50 | -/* diagram_properties_set_diagram | |
51 | - * Called when the active diagram is changed. It updates the contents | |
52 | - * of the diagram properties dialog | |
53 | - */ | |
54 | -void | |
55 | -diagram_properties_set_diagram(Diagram *dia) | |
56 | -{ | |
57 | - int i; | |
58 | - | |
59 | - if (dialog && dia != NULL) | |
60 | - { | |
61 | - diagram_properties_retrieve(dia); | |
62 | - | |
63 | - i = g_list_index(dia_open_diagrams(), dia); | |
64 | - if (i >= 0) | |
65 | - gtk_option_menu_set_history(GTK_OPTION_MENU(diagram_omenu), i); | |
66 | - } | |
67 | -} | |
68 | 44 | |
69 | 45 | static void |
70 | 46 | diagram_properties_dialog_destroyed(GtkWidget *widget, gpointer userdata) |
@@ -73,135 +49,31 @@ diagram_properties_dialog_destroyed(GtkWidget *widget, gpointer userdata) | ||
73 | 49 | dialog = NULL; |
74 | 50 | } |
75 | 51 | |
76 | -/* Update widget sensitivity to deal with dynamic grid and lack of diagram */ | |
77 | 52 | static void |
78 | 53 | diagram_properties_update_sensitivity(GtkToggleButton *widget, |
79 | 54 | gpointer userdata) |
80 | 55 | { |
81 | 56 | Diagram *dia = ddisplay_active_diagram(); |
82 | - if (dia == NULL) { | |
83 | - gtk_widget_set_sensitive(dynamic_check, FALSE); | |
84 | - gtk_widget_set_sensitive(width_x_entry, FALSE); | |
85 | - gtk_widget_set_sensitive(width_y_entry, FALSE); | |
86 | - gtk_widget_set_sensitive(visible_x_entry, FALSE); | |
87 | - gtk_widget_set_sensitive(visible_y_entry, FALSE); | |
88 | - gtk_widget_set_sensitive(bg_colour, FALSE); | |
89 | - gtk_widget_set_sensitive(grid_colour, FALSE); | |
90 | - gtk_widget_set_sensitive(pagebreak_colour, FALSE); | |
91 | - } else { | |
92 | - dia->data->grid.dynamic = | |
93 | - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dynamic_check)); | |
94 | - gtk_widget_set_sensitive(dynamic_check, TRUE); | |
95 | - gtk_widget_set_sensitive(width_x_entry, !dia->data->grid.dynamic); | |
96 | - gtk_widget_set_sensitive(width_y_entry, !dia->data->grid.dynamic); | |
97 | - gtk_widget_set_sensitive(visible_x_entry, !dia->data->grid.dynamic); | |
98 | - gtk_widget_set_sensitive(visible_y_entry, !dia->data->grid.dynamic); | |
99 | - gtk_widget_set_sensitive(bg_colour, TRUE); | |
100 | - gtk_widget_set_sensitive(grid_colour, TRUE); | |
101 | - gtk_widget_set_sensitive(pagebreak_colour, TRUE); | |
102 | - } | |
57 | + dia->data->grid.dynamic = | |
58 | + gtk_toggle_button_get_active(GTK_CHECK_BUTTON(dynamic_check)); | |
59 | + gtk_widget_set_sensitive(width_x_entry, !dia->data->grid.dynamic); | |
60 | + gtk_widget_set_sensitive(width_y_entry, !dia->data->grid.dynamic); | |
61 | + gtk_widget_set_sensitive(visible_x_entry, !dia->data->grid.dynamic); | |
62 | + gtk_widget_set_sensitive(visible_y_entry, !dia->data->grid.dynamic); | |
103 | 63 | } |
104 | 64 | |
105 | 65 | static void |
106 | -diagram_properties_select_diagram_callback(GtkWidget *widget, gpointer gdata) | |
107 | -{ | |
108 | - Diagram *dia = (Diagram *)gdata; | |
109 | - | |
110 | - diagram_properties_set_diagram(dia); | |
111 | -} | |
112 | - | |
113 | -void | |
114 | -diagram_properties_update_diagram_list(void) | |
115 | -{ | |
116 | - GtkWidget *new_menu; | |
117 | - GtkWidget *menu_item; | |
118 | - GList *dia_list; | |
119 | - Diagram *dia; | |
120 | - char *filename; | |
121 | - int i; | |
122 | - int current_nr; | |
123 | - | |
124 | - if (dialog == NULL) return; | |
125 | - | |
126 | - new_menu = gtk_menu_new(); | |
127 | - | |
128 | - current_nr = -1; | |
129 | - | |
130 | - i = 0; | |
131 | - dia_list = dia_open_diagrams(); | |
132 | - while (dia_list != NULL) { | |
133 | - dia = (Diagram *) dia_list->data; | |
134 | - | |
135 | - if (ddisplay_active() && dia == ddisplay_active()->diagram) { | |
136 | - current_nr = i; | |
137 | - } | |
138 | - | |
139 | - filename = strrchr(dia->filename, G_DIR_SEPARATOR); | |
140 | - if (filename==NULL) { | |
141 | - filename = dia->filename; | |
142 | - } else { | |
143 | - filename++; | |
144 | - } | |
145 | - printf("Adding filename %s to menu\n", filename); | |
146 | - | |
147 | - menu_item = gtk_menu_item_new_with_label(filename); | |
148 | - | |
149 | - g_signal_connect (GTK_OBJECT (menu_item), "activate", | |
150 | - /**/ | |
151 | - (GtkSignalFunc) diagram_properties_select_diagram_callback, | |
152 | - (gpointer) dia); | |
153 | - | |
154 | - gtk_menu_append( GTK_MENU(new_menu), menu_item); | |
155 | - gtk_widget_show (menu_item); | |
156 | - | |
157 | - dia_list = g_list_next(dia_list); | |
158 | - i++; | |
159 | - } | |
160 | - | |
161 | - if (dia_open_diagrams()==NULL) { | |
162 | - menu_item = gtk_menu_item_new_with_label (_("none")); | |
163 | - g_signal_connect (GTK_OBJECT (menu_item), "activate", | |
164 | - /**/ | |
165 | - (GtkSignalFunc) diagram_properties_select_diagram_callback, | |
166 | - (gpointer) NULL); | |
167 | - gtk_menu_append( GTK_MENU(new_menu), menu_item); | |
168 | - gtk_widget_show (menu_item); | |
169 | - } | |
170 | - | |
171 | - gtk_option_menu_remove_menu(GTK_OPTION_MENU(diagram_omenu)); | |
172 | - | |
173 | - gtk_option_menu_set_menu(GTK_OPTION_MENU(diagram_omenu), | |
174 | - new_menu); | |
175 | - | |
176 | - gtk_option_menu_set_history(GTK_OPTION_MENU(diagram_omenu), | |
177 | - current_nr); | |
178 | - gtk_menu_set_active(GTK_MENU(new_menu), current_nr); | |
179 | - | |
180 | - if (current_nr == -1) { | |
181 | - dia = NULL; | |
182 | - if (dia_open_diagrams()!=NULL) { | |
183 | - dia = (Diagram *) dia_open_diagrams()->data; | |
184 | - } | |
185 | - /**/ | |
186 | - diagram_properties_set_diagram(dia); | |
187 | - } | |
188 | -} | |
189 | - | |
190 | -void | |
191 | -create_diagram_properties_dialog() | |
66 | +create_diagram_properties_dialog(Diagram *dia) | |
192 | 67 | { |
193 | 68 | GtkWidget *dialog_vbox; |
194 | 69 | GtkWidget *notebook; |
195 | 70 | GtkWidget *table; |
196 | 71 | GtkWidget *label; |
197 | - GtkWidget *hbox; | |
198 | - GtkWidget *menu; | |
199 | - GtkWidget *separator; | |
200 | 72 | GtkAdjustment *adj; |
201 | 73 | |
202 | 74 | dialog = gtk_dialog_new_with_buttons( |
203 | 75 | _("Diagram Properties"), |
204 | - NULL, | |
76 | + GTK_WINDOW(ddisplay_active()->shell), | |
205 | 77 | GTK_DIALOG_DESTROY_WITH_PARENT, |
206 | 78 | GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, |
207 | 79 | GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, |
@@ -211,6 +83,8 @@ create_diagram_properties_dialog() | ||
211 | 83 | //GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); |
212 | 84 | gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_OK); |
213 | 85 | |
86 | + dialog_vbox = GTK_DIALOG(dialog)->vbox; | |
87 | + | |
214 | 88 | gtk_window_set_role(GTK_WINDOW(dialog), "diagram_properties"); |
215 | 89 | |
216 | 90 | g_signal_connect(G_OBJECT(dialog), "response", |
@@ -221,28 +95,6 @@ create_diagram_properties_dialog() | ||
221 | 95 | g_signal_connect(G_OBJECT(dialog), "destroy_event", |
222 | 96 | G_CALLBACK(diagram_properties_dialog_destroyed), NULL); |
223 | 97 | |
224 | - dialog_vbox = GTK_DIALOG(dialog)->vbox; | |
225 | - | |
226 | - hbox = gtk_hbox_new(FALSE, 1); | |
227 | - | |
228 | - label = gtk_label_new(_("Diagrams:")); | |
229 | - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); | |
230 | - gtk_widget_show (label); | |
231 | - | |
232 | - diagram_omenu = gtk_option_menu_new(); | |
233 | - gtk_box_pack_start(GTK_BOX(hbox), diagram_omenu, TRUE, TRUE, 2); | |
234 | - gtk_widget_show (diagram_omenu); | |
235 | - | |
236 | - menu = gtk_menu_new(); | |
237 | - gtk_option_menu_set_menu(GTK_OPTION_MENU(diagram_omenu), menu); | |
238 | - | |
239 | - gtk_box_pack_start(GTK_BOX(dialog_vbox), hbox, FALSE, FALSE, 2); | |
240 | - gtk_widget_show (hbox); | |
241 | - | |
242 | - separator = gtk_hseparator_new(); | |
243 | - gtk_box_pack_start(GTK_BOX(dialog_vbox), separator, FALSE, FALSE, 2); | |
244 | - gtk_widget_show (separator); | |
245 | - | |
246 | 98 | notebook = gtk_notebook_new(); |
247 | 99 | gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); |
248 | 100 | gtk_box_pack_start(GTK_BOX(dialog_vbox), notebook, TRUE, TRUE, 0); |
@@ -379,8 +231,8 @@ diagram_properties_retrieve(Diagram *dia) | ||
379 | 231 | gtk_window_set_title(GTK_WINDOW(dialog), title); |
380 | 232 | g_free(name); |
381 | 233 | g_free(title); |
382 | - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dynamic_check), | |
383 | - dia->data->grid.dynamic); | |
234 | + gtk_toggle_button_set_active(GTK_CHECK_BUTTON(dynamic_check), | |
235 | + dia->data->grid.dynamic); | |
384 | 236 | gtk_spin_button_set_value(GTK_SPIN_BUTTON(width_x_entry), |
385 | 237 | dia->data->grid.width_x); |
386 | 238 | gtk_spin_button_set_value(GTK_SPIN_BUTTON(width_y_entry), |
@@ -403,11 +255,8 @@ diagram_properties_retrieve(Diagram *dia) | ||
403 | 255 | void |
404 | 256 | diagram_properties_show(Diagram *dia) |
405 | 257 | { |
406 | - if (!dialog) { | |
407 | - create_diagram_properties_dialog(); | |
408 | - persistence_register_window(GTK_WINDOW(dialog)); | |
409 | - diagram_properties_update_diagram_list(); | |
410 | - } | |
258 | + if (!dialog) | |
259 | + create_diagram_properties_dialog(dia); | |
411 | 260 | |
412 | 261 | diagram_properties_retrieve(dia); |
413 | 262 |
@@ -427,7 +276,7 @@ diagram_properties_respond(GtkWidget *widget, | ||
427 | 276 | response_id != GTK_RESPONSE_APPLY) { |
428 | 277 | if (active_diagram) { |
429 | 278 | active_diagram->data->grid.dynamic = |
430 | - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dynamic_check)); | |
279 | + gtk_toggle_button_get_active(GTK_CHECK_BUTTON(dynamic_check)); | |
431 | 280 | active_diagram->data->grid.width_x = |
432 | 281 | gtk_spin_button_get_value(GTK_SPIN_BUTTON(width_x_entry)); |
433 | 282 | active_diagram->data->grid.width_y = |
@@ -449,3 +298,17 @@ diagram_properties_respond(GtkWidget *widget, | ||
449 | 298 | if (response_id != GTK_RESPONSE_APPLY) |
450 | 299 | gtk_widget_hide(dialog); |
451 | 300 | } |
301 | + | |
302 | +/* diagram_properties_set_diagram | |
303 | + * Called when the active diagram is changed. It updates the contents | |
304 | + * of the diagram properties dialog | |
305 | + */ | |
306 | +void | |
307 | +diagram_properties_set_diagram(Diagram *dia) | |
308 | +{ | |
309 | + if (dialog && dia != NULL) | |
310 | + { | |
311 | + diagram_properties_retrieve(dia); | |
312 | + } | |
313 | +} | |
314 | + |
@@ -27,6 +27,62 @@ | ||
27 | 27 | |
28 | 28 | #include "dummy_dep.h" |
29 | 29 | |
30 | +static void dia_object_class_init (DiaObjectClass *klass); | |
31 | +static void object_init(DiaObject *obj, int num_handles, int num_connections); | |
32 | + | |
33 | +static gpointer parent_class = NULL; | |
34 | + | |
35 | +GType | |
36 | +dia_Object_get_type (void) | |
37 | +{ | |
38 | + static GType object_type = 0; | |
39 | + | |
40 | + if (!object_type) | |
41 | + { | |
42 | + static const GTypeInfo object_info = | |
43 | + { | |
44 | + sizeof (DiaObjectClass), | |
45 | + (GBaseInitFunc) NULL, | |
46 | + (GBaseFinalizeFunc) NULL, | |
47 | + (GClassInitFunc) dia_object_class_init, | |
48 | + NULL, /* class_finalize */ | |
49 | + NULL, /* class_data */ | |
50 | + sizeof (DiaObject), | |
51 | + 0, /* n_preallocs */ | |
52 | + NULL /* init */ | |
53 | + }; | |
54 | + | |
55 | + object_type = g_type_register_static (G_TYPE_OBJECT, | |
56 | + "DiaObject", | |
57 | + &object_info, 0); | |
58 | + } | |
59 | + | |
60 | + return object_type; | |
61 | +} | |
62 | + | |
63 | +static void | |
64 | +dia_object_finalize(GObject *object) { | |
65 | +} | |
66 | + | |
67 | +static void | |
68 | +dia_object_class_init (DiaObjectClass *klass) | |
69 | +{ | |
70 | + GObjectClass *object_class = G_OBJECT_CLASS (klass); | |
71 | + DiaObjectClass *object_class = DIA_OBJECT_CLASS (klass); | |
72 | + | |
73 | + parent_class = g_type_class_peek_parent (klass); | |
74 | + | |
75 | + object_class->finalize = dia_object_finalize; | |
76 | +} | |
77 | + | |
78 | +DiaObject * | |
79 | +dia_object_new(int num_handles, int num_connections) { | |
80 | + DiaObject *obj = g_object_new(DIA_TYPE_OBJECT, NULL); | |
81 | + object_init(obj, num_handles, num_connections); | |
82 | + return obj; | |
83 | +} | |
84 | + | |
85 | + | |
30 | 86 | void |
31 | 87 | object_init(Object *obj, |
32 | 88 | int num_handles, |
@@ -35,6 +35,8 @@ | ||
35 | 35 | #include "diagramdata.h" |
36 | 36 | #include "parent.h" |
37 | 37 | |
38 | +G_BEGIN_DECLS | |
39 | + | |
38 | 40 | /** This enumeration gives a bitset of modifier keys currently held down. |
39 | 41 | */ |
40 | 42 | typedef enum { |
@@ -266,7 +268,7 @@ typedef DiaMenu *(*ObjectMenuFunc) (Object* obj, Point *position); | ||
266 | 268 | ** The functions provided in object.c |
267 | 269 | *************************************/ |
268 | 270 | |
269 | -void object_init(Object *obj, int num_handles, int num_connections); | |
271 | +void dia_object_new(int num_handles, int num_connections); | |
270 | 272 | void object_destroy(Object *obj); /* Unconnects handles, so don't |
271 | 273 | free handles before calling. */ |
272 | 274 | void object_copy(Object *from, Object *to); |
@@ -333,6 +335,15 @@ typedef struct _Affine { | ||
333 | 335 | } Affine; |
334 | 336 | |
335 | 337 | |
338 | +#define DIA_TYPE_OBJECT (dia_object_get_type ()) | |
339 | +#define DIA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DIA_TYPE_OBJECT, DiaObject)) | |
340 | +#define DIA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DIA_TYPE_OBJECT, DiaObjectClass)) | |
341 | +#define DIA_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DIA_TYPE_OBJECT)) | |
342 | +#define DIA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DIA_TYPE_OBJECT, DiaObjectClass)) | |
343 | + | |
344 | +GType dia_object_get_type (void) G_GNUC_CONST; | |
345 | + | |
346 | + | |
336 | 347 | /* |
337 | 348 | This structure gives access to the functions used to manipulate an object |
338 | 349 | See information above on the use of the functions |
@@ -375,6 +386,7 @@ struct _ObjectOps { | ||
375 | 386 | */ |
376 | 387 | |
377 | 388 | struct _Object { |
389 | + GObject parent_instance; | |
378 | 390 | ObjectType *type; |
379 | 391 | Point position; |
380 | 392 | Rectangle bounding_box; |
@@ -420,7 +432,9 @@ struct _ObjectTypeOps { | ||
420 | 432 | Structure so that the ObjectFactory can create objects |
421 | 433 | of unknown type. (Read in from a shared lib.) |
422 | 434 | */ |
423 | -struct _ObjectType { | |
435 | +struct _DiaObjectClass { | |
436 | + GObjectClass parent_class; | |
437 | + | |
424 | 438 | char *name; |
425 | 439 | int version; |
426 | 440 |
@@ -460,5 +474,7 @@ gboolean dia_object_defaults_save (const gchar *filename); | ||
460 | 474 | Layer *dia_object_get_parent_layer(Object *obj); |
461 | 475 | gboolean dia_object_is_selected (const Object *obj); |
462 | 476 | |
477 | +G_END_DECLS | |
478 | + | |
463 | 479 | #endif /* OBJECT_H */ |
464 | 480 |