Update called vala api.
[stuffkeeper.git] / src / stuffkeeper-item-view.gob
blob688cff0799c3cb5121244fa022e3a78a954af994
1 requires 2.0.10
3 %h{
4 #include <gtk/gtk.h>
5 #include <glib/gi18n.h>
6 #include "stuffkeeper-data-item.h"
7 #include "stuffkeeper-data-schema.h"
8 #include "stuffkeeper-show-item.h"
9 #include "stuffkeeper-edit-schema.h"
10 #include "stuffkeeper-multiple-item-view.h"
11 #include "stuffkeeperglue.h"
14 class Stuffkeeper:Item:View from Gtk:VBox
16     private StuffkeeperDataSchema *schema = {NULL};
17     private StuffkeeperDataItem *item = {NULL};
18     private StuffkeeperDataBackend *skdb = {NULL};
20     private 
21     void
22     schema_edit_button_clicked(self, GtkWidget *button)
23     {
24         if(stuffkeeper_data_backend_get_locked(self->_priv->skdb))
25         {
26             printf("** ERROR ** should not be called here\n");
27             return;
28         }
30         if(self->_priv->schema)
31         {
32             StuffkeeperEditSchema *skes = stuffkeeper_edit_schema_new();
33             stuffkeeper_edit_schema_set_schema(skes, self->_priv->schema);
34         }
35     }
37     private 
38         void
39         interface_header_changed(GtkWidget *widget, GtkStyle *old, GtkWidget *wid)
40         {
41             g_signal_handlers_block_by_func(G_OBJECT(widget), self_interface_header_changed, wid);
42             gtk_widget_modify_bg(GTK_WIDGET(wid), GTK_STATE_NORMAL, &(widget->style->bg[GTK_STATE_SELECTED]));
43             gtk_widget_modify_fg(GTK_WIDGET(wid), GTK_STATE_NORMAL, &(widget->style->fg[GTK_STATE_SELECTED]));
44             gtk_widget_modify_text(GTK_WIDGET(wid), GTK_STATE_NORMAL, &(widget->style->text[GTK_STATE_SELECTED]));
46             g_signal_handlers_unblock_by_func(G_OBJECT(widget),self_interface_header_changed , wid);
47         }
48     private
49         void
50         interface_color(GtkWidget *wid)
51         {
52             g_signal_connect(G_OBJECT(wid), "style-set", G_CALLBACK(self_interface_header_changed), wid);
53         }
54     private 
55         void
56         interface_background_changed(GtkWidget *widget, GtkStyle *old, GtkWidget *wid)
57         {
58             g_signal_handlers_block_by_func(G_OBJECT(widget), self_interface_background_changed, wid);
59             gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &(widget->style->light[GTK_STATE_NORMAL]));
60             g_signal_handlers_unblock_by_func(G_OBJECT(widget),self_interface_background_changed, wid);
61         }
62     /**
63      * Get the widget 
64      */
65     public
66         Gtk:Widget * 
67         new(Stuffkeeper:Data:Item *item)
68         {
69             Self *self = GET_NEW;
71             /* Get the schema  */
72             self->_priv->schema = stuffkeeper_data_item_get_schema(item);
73             /* Get backend */
74             self->_priv->skdb = (StuffkeeperDataBackend *)stuffkeeper_data_item_get_backend(item);
75             /* Get the item */
76             self->_priv->item = item;
78             /* The title */ 
79             {
80                 /* The title */
81                 GtkWidget *vbox,*vbox2,*buttonbox;
82                 GtkWidget *label1,*button, *image;
83                 /**
84                  * Header
85                  */
86                 GtkWidget *event2 = gtk_event_box_new();
87                 vbox = gtk_hbox_new(FALSE, 6);
88                 vbox2 = gtk_vbox_new(FALSE,0);
89                 gtk_container_set_border_width(GTK_CONTAINER(vbox2), 6);
90                 /* Title */
91                 label1 = gtk_label_new("");
92                 gtk_label_set_markup(GTK_LABEL(label1), _("<b>Title:</b>"));
93                 gtk_misc_set_alignment(GTK_MISC(label1), 1,0.5);
94                 gtk_box_pack_start(GTK_BOX(vbox),label1, FALSE,TRUE, 0);
95                 self_interface_color(label1);
97                 label1 = stuffkeeper_data_entry_new(item,NULL);
98                 gtk_box_pack_start(GTK_BOX(vbox),label1, TRUE,TRUE, 0);
100                 /* type */
101                 label1 =gtk_label_new("");
102                 gtk_label_set_markup(GTK_LABEL(label1), _("<b>Type:</b>"));
103                 gtk_box_pack_start(GTK_BOX(vbox),label1, FALSE,TRUE, 0);
104                 self_interface_color(label1);
106                 if(self->_priv->schema) {
107                     label1 = stuffkeeper_data_label_new_schema(self->_priv->schema);
108                 } else {
109                     label1 = gtk_label_new("N/A");
110                 }
111                 gtk_misc_set_alignment(GTK_MISC(label1), 0.0, 0.5);
113                 self_interface_color(label1);
114                 button = gtk_button_new();
115                 /* Vbox that packs label and image */
116                 buttonbox = gtk_hbox_new(FALSE, 3);
117                 gtk_container_add(GTK_CONTAINER(button), buttonbox);
118                 /* Add label */
119                 gtk_box_pack_end(GTK_BOX(buttonbox), label1, TRUE, TRUE, 0);
120                 /* create and add image */
121                 image = gtk_image_new_from_pixbuf(stuffkeeper_data_schema_get_pixbuf(self->_priv->schema));
122                 gtk_box_pack_start(GTK_BOX(buttonbox), image, FALSE, FALSE,0);
123                 /* Give button a pointer to schema */
124                 g_object_set_data(G_OBJECT(button), "schema", self->_priv->schema);
125                 gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE); 
126                 gtk_box_pack_start(GTK_BOX(vbox),button, FALSE,TRUE, 0);
127                 g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(self_schema_edit_button_clicked), self);
131                 self_interface_color(event2);
136                 gtk_box_pack_start(GTK_BOX(vbox2), vbox, FALSE, TRUE, 0);
139                 vbox = gtk_hbox_new(FALSE, 6);
140                 if(stuffkeeper_data_item_get_creation_time(item) > 0)
141                 {
142                     label1 = gtk_label_new("");
143                     time_t time = stuffkeeper_data_item_get_creation_time(item);
144                     struct tm *t  = localtime(&time);
145                     char buffer[256];
146                     strftime(buffer,256, "%x", t);
147                     gchar *markup = g_markup_printf_escaped("<b>%s:</b> %s",_("Created"), buffer); 
148                     gtk_misc_set_alignment(GTK_MISC(label1), 0,0.5);
149                     gtk_label_set_markup(GTK_LABEL(label1), markup);
150                     g_free(markup);
151                     gtk_box_pack_start(GTK_BOX(vbox),label1, FALSE,TRUE, 0);
152                     self_interface_color(label1);
153                 }
154                 if(stuffkeeper_data_item_get_modification_time(item) > 0)
155                 {
156                     label1 = gtk_label_new("");
157                     gchar *markup = g_markup_printf_escaped("<b>%s:</b>",_("Modified")); 
158                     gtk_misc_set_alignment(GTK_MISC(label1), 0,0.5);
159                     gtk_label_set_markup(GTK_LABEL(label1), markup);
160                     g_free(markup);
161                     gtk_box_pack_start(GTK_BOX(vbox),label1, FALSE,TRUE, 0);
162                     self_interface_color(label1);
164                     label1 = stuffkeeper_data_label_new_modifcation_time_item(item);
165                     gtk_box_pack_start(GTK_BOX(vbox),label1, FALSE,TRUE, 0);
166                     self_interface_color(label1);
167                 }
168                 gtk_box_pack_start(GTK_BOX(vbox2), vbox, FALSE, TRUE, 0);
169                 gtk_container_add(GTK_CONTAINER(event2), vbox2);
170                 gtk_box_pack_start(GTK_BOX(self),event2, FALSE,TRUE, 0);
173             }
174                 /**
175                  * The body 
176                  */
177             {
178                 
179                 GtkWidget *sw , *vbox, *event; 
182                 /* Scrolled window for the body */
183                 sw = gtk_scrolled_window_new(FALSE, FALSE);
184                 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
185                 /* vbox to color the background */
186                 event = gtk_event_box_new();
187                 g_signal_connect(G_OBJECT(event), "style-set", G_CALLBACK(self_interface_background_changed), event);
189                 /* contentwidget */
190                 vbox = stuffkeeper_show_item_new(item);
191 //                gtk_table_set_row_spacings(GTK_TABLE(vbox), 6);
192   //              gtk_table_set_col_spacings(GTK_TABLE(vbox), 6);
193 //                gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
195                 /* add them together */
196                 gtk_container_add(GTK_CONTAINER(event), vbox);
197                 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), event);
198                 gtk_container_set_focus_vadjustment(GTK_CONTAINER(vbox), gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw)));
199                 gtk_box_pack_start(GTK_BOX(self),sw, TRUE,TRUE, 0);
200             }
202             return GTK_WIDGET(self);
203         }
205         /**
206      * Destroying
207      */
208     override (G:Object)
209         void
210         finalize(G:Object *obj)
211         {
212             g_debug("Cleanup item view\n");
213             PARENT_HANDLER(obj);
214         }