3
* Copyright (C) 2002 - 2004 Vivien Malerba
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation; either version 2 of the
8
* License, or (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21
#include "mg-canvas.h"
22
#include "mg-canvas-field.h"
23
#include <libmergeant/mg-defs.h>
24
#include <libmergeant/mg-field.h>
25
#include <libmergeant/mg-db-table.h>
26
#include <libmergeant/mg-db-field.h>
27
#include <libmergeant/mg-query.h>
29
static void mg_canvas_field_class_init (MgCanvasFieldClass * class);
30
static void mg_canvas_field_init (MgCanvasField * drag);
31
static void mg_canvas_field_finalize (GObject * object);
33
static void mg_canvas_field_set_property (GObject *object,
37
static void mg_canvas_field_get_property (GObject *object,
42
static void mg_canvas_field_extra_event (MgCanvasItem * citem, GdkEventType event_type);
49
struct _MgCanvasFieldPrivate
54
/* get a pointer to the parents to be able to call their destructor */
55
static GObjectClass *field_parent_class = NULL;
58
mg_canvas_field_get_type (void)
60
static GType type = 0;
63
static const GTypeInfo info = {
64
sizeof (MgCanvasFieldClass),
66
(GBaseFinalizeFunc) NULL,
67
(GClassInitFunc) mg_canvas_field_class_init,
70
sizeof (MgCanvasField),
72
(GInstanceInitFunc) mg_canvas_field_init
75
type = g_type_register_static (MG_CANVAS_TEXT_TYPE, "MgCanvasField", &info, 0);
84
mg_canvas_field_class_init (MgCanvasFieldClass * class)
86
GObjectClass *object_class = G_OBJECT_CLASS (class);
88
field_parent_class = g_type_class_peek_parent (class);
90
object_class->finalize = mg_canvas_field_finalize;
91
MG_CANVAS_ITEM_CLASS (class)->extra_event = mg_canvas_field_extra_event;
94
object_class->set_property = mg_canvas_field_set_property;
95
object_class->get_property = mg_canvas_field_get_property;
97
g_object_class_install_property
98
(object_class, PROP_FIELD,
99
g_param_spec_pointer ("field", NULL, NULL, (G_PARAM_READABLE | G_PARAM_WRITABLE)));
103
mg_canvas_field_init (MgCanvasField * field)
105
field->priv = g_new0 (MgCanvasFieldPrivate, 1);
106
field->priv->field = NULL;
110
field_nullified_cb (MgField *field, MgCanvasField *cf)
112
g_signal_handlers_disconnect_by_func (G_OBJECT (field),
113
G_CALLBACK (field_nullified_cb), cf);
114
gtk_object_destroy (GTK_OBJECT (cf));
118
mg_canvas_field_finalize (GObject * object)
121
g_return_if_fail (object != NULL);
122
g_return_if_fail (IS_MG_CANVAS_FIELD (object));
124
cf = MG_CANVAS_FIELD (object);
126
if (cf->priv->field) {
127
g_signal_handlers_disconnect_by_func (G_OBJECT (cf->priv->field),
128
G_CALLBACK (field_nullified_cb), cf);
129
cf->priv->field = NULL;
135
/* for the parent class */
136
field_parent_class->finalize (object);
140
mg_canvas_field_set_property (GObject *object,
148
MgServerDataType *dtype;
150
cf = MG_CANVAS_FIELD (object);
154
ptr = g_value_get_pointer (value);
156
g_return_if_fail (IS_MG_FIELD (ptr));
158
/* signals management */
159
if (cf->priv->field) {
160
g_signal_handlers_disconnect_by_func (G_OBJECT (ptr),
161
G_CALLBACK (field_nullified_cb), cf);
162
cf->priv->field = NULL;
165
cf->priv->field = MG_FIELD (ptr);
166
g_signal_connect (G_OBJECT (ptr), "nullified",
167
G_CALLBACK (field_nullified_cb), cf);
169
/* attributes setting */
170
string = g_string_new ("");
171
dtype = mg_field_get_data_type (MG_FIELD (ptr));
172
g_string_append_printf (string, _("Type: %s"), mg_base_get_name (MG_BASE (dtype)));
174
g_object_set (object, "mg_base", ptr, NULL);
175
ent = mg_field_get_entity (MG_FIELD (ptr));
176
if (IS_MG_DB_TABLE (ent)) {
177
gboolean nullok = mg_db_field_is_null_allowed (MG_DB_FIELD (ptr));
178
gboolean pkpart = mg_db_field_is_pkey_part (MG_DB_FIELD (ptr));
179
g_object_set (object,
180
"highlight_color", MG_CANVAS_DB_TABLE_COLOR,
181
"text_underline", !nullok,
184
if (mg_db_field_is_pkey_alone (MG_DB_FIELD (ptr)))
185
g_string_append (string, _("\nPrimary key"));
188
g_string_append (string, _("\nPart of primary key"));
191
if (IS_MG_QUERY (ent))
192
g_object_set (object, "highlight_color", MG_CANVAS_QUERY_COLOR, NULL);
194
g_object_set (object, "tip_text", string->str, NULL);
195
g_string_free (string, TRUE);
201
mg_canvas_field_get_property (GObject *object,
209
cf = MG_CANVAS_FIELD (object);
213
g_object_get (object, "mg_base", &ptr, NULL);
214
g_value_set_pointer (value, ptr);
220
mg_canvas_field_extra_event (MgCanvasItem *citem, GdkEventType event_type)
222
if (event_type == GDK_LEAVE_NOTIFY)
223
mg_canvas_text_set_highlight (MG_CANVAS_TEXT (citem), FALSE);
228
* mg_canvas_field_get_field
229
* @cfield: a #MgCanvasField object
231
* Get the #MgField which @cfield represents
233
* Returns: the object implementing the #MgField interface
236
mg_canvas_field_get_field (MgCanvasField *cfield)
238
g_return_val_if_fail (cfield && IS_MG_CANVAS_FIELD (cfield), NULL);
239
g_return_val_if_fail (cfield->priv, NULL);
241
return cfield->priv->field;