~ubuntu-branches/ubuntu/karmic/mergeant/karmic

« back to all changes in this revision

Viewing changes to libmergeant/graph/mg-canvas-field.c

  • Committer: Bazaar Package Importer
  • Author(s): Gustavo R. Montesino
  • Date: 2007-11-29 08:44:48 UTC
  • mfrom: (2.1.4 hardy)
  • Revision ID: james.westby@ubuntu.com-20071129084448-6aon73d22bv6hzfw
Tags: 0.67-3
* Re-enable installation of the mime files in mergeant.install
* mergeant.dirs: create usr/share/mime/packages to make dh_installmime add
  the update-mime-database code snippets

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* mg-canvas-field.c
2
 
 *
3
 
 * Copyright (C) 2002 - 2004 Vivien Malerba
4
 
 *
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.
9
 
 *
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.
14
 
 *
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
18
 
 * USA
19
 
 */
20
 
 
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>
28
 
 
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);
32
 
 
33
 
static void mg_canvas_field_set_property (GObject              *object,
34
 
                                          guint                 param_id,
35
 
                                          const GValue         *value,
36
 
                                          GParamSpec           *pspec);
37
 
static void mg_canvas_field_get_property (GObject              *object,
38
 
                                          guint                 param_id,
39
 
                                          GValue               *value,
40
 
                                          GParamSpec           *pspec);
41
 
 
42
 
static void mg_canvas_field_extra_event  (MgCanvasItem * citem, GdkEventType event_type);
43
 
enum
44
 
{
45
 
        PROP_0,
46
 
        PROP_FIELD,
47
 
};
48
 
 
49
 
struct _MgCanvasFieldPrivate
50
 
{
51
 
        MgField *field;
52
 
};
53
 
 
54
 
/* get a pointer to the parents to be able to call their destructor */
55
 
static GObjectClass *field_parent_class = NULL;
56
 
 
57
 
guint
58
 
mg_canvas_field_get_type (void)
59
 
{
60
 
        static GType type = 0;
61
 
 
62
 
        if (!type) {
63
 
                static const GTypeInfo info = {
64
 
                        sizeof (MgCanvasFieldClass),
65
 
                        (GBaseInitFunc) NULL,
66
 
                        (GBaseFinalizeFunc) NULL,
67
 
                        (GClassInitFunc) mg_canvas_field_class_init,
68
 
                        NULL,
69
 
                        NULL,
70
 
                        sizeof (MgCanvasField),
71
 
                        0,
72
 
                        (GInstanceInitFunc) mg_canvas_field_init
73
 
                };              
74
 
 
75
 
                type = g_type_register_static (MG_CANVAS_TEXT_TYPE, "MgCanvasField", &info, 0);
76
 
        }
77
 
 
78
 
        return type;
79
 
}
80
 
 
81
 
        
82
 
 
83
 
static void
84
 
mg_canvas_field_class_init (MgCanvasFieldClass * class)
85
 
{
86
 
        GObjectClass   *object_class = G_OBJECT_CLASS (class);
87
 
 
88
 
        field_parent_class = g_type_class_peek_parent (class);
89
 
 
90
 
        object_class->finalize = mg_canvas_field_finalize;
91
 
        MG_CANVAS_ITEM_CLASS (class)->extra_event = mg_canvas_field_extra_event;
92
 
 
93
 
        /* Properties */
94
 
        object_class->set_property = mg_canvas_field_set_property;
95
 
        object_class->get_property = mg_canvas_field_get_property;
96
 
 
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)));
100
 
}
101
 
 
102
 
static void
103
 
mg_canvas_field_init (MgCanvasField * field)
104
 
{
105
 
        field->priv = g_new0 (MgCanvasFieldPrivate, 1);
106
 
        field->priv->field = NULL;
107
 
}
108
 
 
109
 
static void
110
 
field_nullified_cb (MgField *field, MgCanvasField *cf)
111
 
{
112
 
        g_signal_handlers_disconnect_by_func (G_OBJECT (field),
113
 
                                              G_CALLBACK (field_nullified_cb), cf);
114
 
        gtk_object_destroy (GTK_OBJECT (cf));
115
 
}
116
 
 
117
 
static void
118
 
mg_canvas_field_finalize (GObject   * object)
119
 
{
120
 
        MgCanvasField *cf;
121
 
        g_return_if_fail (object != NULL);
122
 
        g_return_if_fail (IS_MG_CANVAS_FIELD (object));
123
 
 
124
 
        cf = MG_CANVAS_FIELD (object);
125
 
        if (cf->priv) {
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;
130
 
                }
131
 
                g_free (cf->priv);
132
 
                cf->priv = NULL;
133
 
        }
134
 
 
135
 
        /* for the parent class */
136
 
        field_parent_class->finalize (object);
137
 
}
138
 
 
139
 
static void 
140
 
mg_canvas_field_set_property    (GObject              *object,
141
 
                                 guint                 param_id,
142
 
                                 const GValue         *value,
143
 
                                 GParamSpec           *pspec)
144
 
{
145
 
        MgCanvasField *cf;
146
 
        gpointer ptr;
147
 
        GString *string;
148
 
        MgServerDataType *dtype;
149
 
 
150
 
        cf = MG_CANVAS_FIELD (object);
151
 
 
152
 
        switch (param_id) {
153
 
        case PROP_FIELD:
154
 
                ptr = g_value_get_pointer (value);
155
 
                MgEntity *ent;
156
 
                g_return_if_fail (IS_MG_FIELD (ptr));
157
 
 
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;
163
 
                }
164
 
 
165
 
                cf->priv->field = MG_FIELD (ptr);
166
 
                g_signal_connect (G_OBJECT (ptr), "nullified",
167
 
                                  G_CALLBACK (field_nullified_cb), cf);
168
 
                
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)));
173
 
 
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,
182
 
                                      "text_bold", pkpart,
183
 
                                      NULL);
184
 
                        if (mg_db_field_is_pkey_alone (MG_DB_FIELD (ptr)))
185
 
                                g_string_append (string, _("\nPrimary key"));
186
 
                        else
187
 
                                if (pkpart)
188
 
                                        g_string_append (string, _("\nPart of primary key"));
189
 
                                
190
 
                }
191
 
                if (IS_MG_QUERY (ent))
192
 
                        g_object_set (object, "highlight_color", MG_CANVAS_QUERY_COLOR, NULL);
193
 
 
194
 
                g_object_set (object, "tip_text", string->str, NULL);
195
 
                g_string_free (string, TRUE);
196
 
                break;
197
 
        }
198
 
}
199
 
 
200
 
static void 
201
 
mg_canvas_field_get_property    (GObject              *object,
202
 
                                 guint                 param_id,
203
 
                                 GValue               *value,
204
 
                                 GParamSpec           *pspec)
205
 
{
206
 
        MgCanvasField *cf;
207
 
        gpointer ptr;
208
 
 
209
 
        cf = MG_CANVAS_FIELD (object);
210
 
 
211
 
        switch (param_id) {
212
 
        case PROP_FIELD:
213
 
                g_object_get (object, "mg_base", &ptr, NULL);
214
 
                g_value_set_pointer (value, ptr);
215
 
                break;
216
 
        }
217
 
}
218
 
 
219
 
static void
220
 
mg_canvas_field_extra_event  (MgCanvasItem *citem, GdkEventType event_type)
221
 
{
222
 
        if (event_type == GDK_LEAVE_NOTIFY)
223
 
                mg_canvas_text_set_highlight (MG_CANVAS_TEXT (citem), FALSE);
224
 
}
225
 
 
226
 
 
227
 
/**
228
 
 * mg_canvas_field_get_field
229
 
 * @cfield: a #MgCanvasField object
230
 
 *
231
 
 * Get the #MgField which @cfield represents
232
 
 *
233
 
 * Returns: the object implementing the #MgField interface
234
 
 */
235
 
MgField *
236
 
mg_canvas_field_get_field (MgCanvasField *cfield)
237
 
{
238
 
        g_return_val_if_fail (cfield && IS_MG_CANVAS_FIELD (cfield), NULL);
239
 
        g_return_val_if_fail (cfield->priv, NULL);
240
 
 
241
 
        return cfield->priv->field;
242
 
}
243