1 /* Dia -- an diagram creation/manipulation program
2 * Copyright (C) 1999 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.
25 #include "properties.h"
26 #include "object_ops.h"
27 #include "connectionpoint_ops.h"
30 static GtkWidget
*dialog
= NULL
;
31 static GtkWidget
*dialog_vbox
= NULL
;
32 static GtkWidget
*object_part
= NULL
;
33 static ObjectType
*current_objtype
= NULL
;
34 static Object
*current_object
= NULL
;
36 static GtkWidget
*no_defaults_dialog
= NULL
;
38 static gint
defaults_respond(GtkWidget
*widget
, gint response_id
, gpointer data
);
40 static void create_dialog()
42 dialog
= gtk_dialog_new_with_buttons(
45 GTK_STOCK_CLOSE
, GTK_RESPONSE_CLOSE
,
46 GTK_STOCK_APPLY
, GTK_RESPONSE_APPLY
,
47 GTK_STOCK_OK
, GTK_RESPONSE_OK
,
50 gtk_dialog_set_default_response (GTK_DIALOG(dialog
), GTK_RESPONSE_OK
);
52 dialog_vbox
= GTK_DIALOG (dialog
)->vbox
;
54 gtk_window_set_role (GTK_WINDOW (dialog
), "defaults_window");
56 g_signal_connect(G_OBJECT (dialog
), "response",
57 G_CALLBACK(defaults_respond
), NULL
);
58 g_signal_connect(G_OBJECT(dialog
), "delete_event",
59 G_CALLBACK(gtk_widget_hide
), NULL
);
61 no_defaults_dialog
= gtk_label_new(_("This object has no defaults."));
62 gtk_widget_show (no_defaults_dialog
);
64 gtk_widget_ref(no_defaults_dialog
);
65 gtk_object_sink(GTK_OBJECT(no_defaults_dialog
));
69 defaults_dialog_destroyed(GtkWidget
*widget
, gpointer data
)
71 if (widget
== object_part
) {
73 current_objtype
= NULL
;
74 current_object
= NULL
;
81 defaults_respond(GtkWidget
*widget
, gint response_id
, gpointer data
)
83 if (response_id
== GTK_RESPONSE_OK
||
84 response_id
== GTK_RESPONSE_APPLY
) {
85 if (current_objtype
!= NULL
) {
86 if (current_objtype
->ops
->apply_defaults
)
87 current_objtype
->ops
->apply_defaults();
88 else if (current_object
!= NULL
)
89 object_apply_props_from_dialog (current_object
, object_part
);
92 if (response_id
!= GTK_RESPONSE_APPLY
)
93 gtk_widget_hide(widget
);
98 defaults_show(ObjectType
*objtype
)
101 Object
*def_object
= NULL
;
104 if (objtype
!= NULL
) {
105 if (objtype
->ops
->get_defaults
!= NULL
)
106 defaults
= objtype
->ops
->get_defaults();
108 def_object
= dia_object_default_get (objtype
);
109 defaults
= object_create_props_dialog (def_object
, TRUE
);
111 title
= g_strconcat(_("Defaults: "), objtype
->name
, NULL
);
119 if ((objtype
==NULL
) || (defaults
== NULL
)) {
120 /* No defaults or no object */
121 defaults
= no_defaults_dialog
;
125 if (object_part
!= NULL
) {
126 gtk_container_remove(GTK_CONTAINER(dialog_vbox
), object_part
);
129 g_signal_connect (G_OBJECT (dialog
), "destroy",
130 G_CALLBACK(defaults_dialog_destroyed
), NULL
);
131 /* don't destroy dialog when window manager close button pressed */
132 g_signal_connect(G_OBJECT(dialog
), "delete_event",
133 G_CALLBACK(gtk_widget_hide
), NULL
);
134 gtk_signal_connect(GTK_OBJECT(dialog
), "delete_event",
135 GTK_SIGNAL_FUNC(gtk_true
), NULL
);
137 gtk_box_pack_start(GTK_BOX(dialog_vbox
), defaults
, TRUE
, TRUE
, 0);
138 gtk_widget_show (defaults
);
142 gtk_window_set_title(GTK_WINDOW(dialog
), title
);
146 gtk_window_set_title (GTK_WINDOW (dialog
), _("Object defaults"));
148 if (object_part
!= defaults
) {
149 gtk_window_resize (GTK_WINDOW(dialog
), 1, 1); /* shrink to default */
151 gdk_window_invalidate_rect (dialog
->window
, NULL
, TRUE
);
153 gtk_window_present (GTK_WINDOW(dialog
));
154 object_part
= defaults
;
155 current_objtype
= objtype
;
156 current_object
= def_object
;