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};
22 schema_edit_button_clicked(self, GtkWidget *button)
24 if(stuffkeeper_data_backend_get_locked(self->_priv->skdb))
26 printf("** ERROR ** should not be called here\n");
30 if(self->_priv->schema)
32 StuffkeeperEditSchema *skes = stuffkeeper_edit_schema_new();
33 stuffkeeper_edit_schema_set_schema(skes, self->_priv->schema);
39 interface_header_changed(GtkWidget *widget, GtkStyle *old, GtkWidget *wid)
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);
50 interface_color(GtkWidget *wid)
52 g_signal_connect(G_OBJECT(wid), "style-set", G_CALLBACK(self_interface_header_changed), wid);
56 interface_background_changed(GtkWidget *widget, GtkStyle *old, GtkWidget *wid)
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);
67 new(Stuffkeeper:Data:Item *item)
72 self->_priv->schema = stuffkeeper_data_item_get_schema(item);
74 self->_priv->skdb = (StuffkeeperDataBackend *)stuffkeeper_data_item_get_backend(item);
76 self->_priv->item = item;
81 GtkWidget *vbox,*vbox2,*buttonbox;
82 GtkWidget *label1,*button, *image;
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);
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);
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);
109 label1 = gtk_label_new("N/A");
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);
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)
142 label1 = gtk_label_new("");
143 time_t time = stuffkeeper_data_item_get_creation_time(item);
144 struct tm *t = localtime(&time);
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);
151 gtk_box_pack_start(GTK_BOX(vbox),label1, FALSE,TRUE, 0);
152 self_interface_color(label1);
154 if(stuffkeeper_data_item_get_modification_time(item) > 0)
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);
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);
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);
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);
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);
202 return GTK_WIDGET(self);
210 finalize(G:Object *obj)
212 g_debug("Cleanup item view\n");