removed 'never-worked' blogger shit
[k8lowj.git] / src / draftstore_ui.c
blobc130369d10a28578e5f45b206a9dae4a5f6a03cf
1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2000-2003 Evan Martin <evan@livejournal.com>
4 * vim: tabstop=4 shiftwidth=4 noexpandtab :
5 */
7 #include "gtk-all.h"
9 #include "draftstore.h"
10 #include "util-gtk.h"
12 enum {
13 COL_DATE,
14 COL_SUBJECT,
15 COL_ITEMID,
16 COL_COUNT
19 typedef struct {
20 DraftStore *ds;
21 GtkWidget *win;
22 GtkListStore *store;
23 GtkWidget *view;
24 /*GtkWidget *lstats;*/
25 /*GdkPixbuf *pb_friends, *pb_private;*/
26 } DraftStoreUI;
28 static void
29 row_activated_cb(GtkTreeView *treeview, GtkTreePath *arg1,
30 GtkTreeViewColumn *arg2, DraftStoreUI* dsui) {
31 gtk_dialog_response(GTK_DIALOG(dsui->win), GTK_RESPONSE_OK);
34 static GtkWidget*
35 make_view(DraftStoreUI *dsui) {
36 GtkCellRenderer *renderer;
37 GtkTreeViewColumn *column;
39 dsui->view =
40 gtk_tree_view_new_with_model(GTK_TREE_MODEL(dsui->store));
41 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dsui->view), TRUE);
42 g_object_unref(G_OBJECT(dsui->store));
43 g_signal_connect(G_OBJECT(dsui->view), "row-activated",
44 G_CALLBACK(row_activated_cb), dsui);
46 /*renderer = gtk_cell_renderer_pixbuf_new();
47 column = gtk_tree_view_column_new_with_attributes(_("Security"), renderer,
48 "pixbuf", COL_SECURITY,
49 NULL);
50 gtk_tree_view_append_column(GTK_TREE_VIEW(dsui->view), column);*/
52 renderer = gtk_cell_renderer_text_new();
53 column = gtk_tree_view_column_new_with_attributes(_("Date"), renderer,
54 "text", COL_DATE,
55 NULL);
56 gtk_tree_view_column_set_sort_column_id(column, COL_DATE);
57 gtk_tree_view_append_column(GTK_TREE_VIEW(dsui->view), column);
59 renderer = gtk_cell_renderer_text_new();
60 column = gtk_tree_view_column_new_with_attributes(_("Subject"), renderer,
61 "text", COL_SUBJECT,
62 NULL);
63 gtk_tree_view_column_set_sort_column_id(column, COL_SUBJECT);
64 gtk_tree_view_append_column(GTK_TREE_VIEW(dsui->view), column);
66 return scroll_wrap(dsui->view);
69 static void
70 delete_cb(GtkWidget *w, DraftStoreUI *dsui) {
71 GtkTreeModel *model;
72 GtkTreeIter iter;
73 int itemid;
75 if (!gtk_tree_selection_get_selected(
76 gtk_tree_view_get_selection(GTK_TREE_VIEW(dsui->view)),
77 &model, &iter))
78 return;
80 if (!jam_confirm(GTK_WINDOW(dsui->win), _("Delete"), _("Delete entry?")))
81 return;
83 gtk_tree_model_get(model, &iter,
84 COL_ITEMID, &itemid,
85 -1);
87 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
89 draft_store_remove_entry(dsui->ds, itemid, NULL);
92 static void
93 dsui_destroy_cb(GtkWidget *w, DraftStoreUI *dsui) {
94 /*gdk_pixbuf_unref(dsui->pb_friends);
95 gdk_pixbuf_unref(dsui->pb_private);*/
98 static void
99 make_dialog(DraftStoreUI *dsui, GtkWindow *parent) {
100 GtkWidget *vbox, *bbox, *button;
102 dsui->win = gtk_dialog_new_with_buttons(_("Entries"),
103 parent, GTK_DIALOG_MODAL,
104 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
105 GTK_STOCK_OK, GTK_RESPONSE_OK,
106 NULL);
107 g_signal_connect(G_OBJECT(dsui->win), "destroy",
108 G_CALLBACK(dsui_destroy_cb), dsui);
109 gtk_window_set_default_size(GTK_WINDOW(dsui->win), 500, 400);
110 gtk_dialog_set_default_response(GTK_DIALOG(dsui->win), GTK_RESPONSE_OK);
112 vbox = gtk_vbox_new(FALSE, 5);
113 gtk_box_pack_start(GTK_BOX(vbox), make_view(dsui), TRUE, TRUE, 0);
114 /*dsui->lstats = gtk_label_new("");
115 gtk_label_set_selectable(GTK_LABEL(dsui->lstats), TRUE);
116 gtk_box_pack_start(GTK_BOX(vbox), dsui->lstats, FALSE, FALSE, 0);*/
118 bbox = jam_dialog_buttonbox_new();
119 button = jam_dialog_buttonbox_button_from_stock(bbox, GTK_STOCK_DELETE);
120 g_signal_connect(G_OBJECT(button), "clicked",
121 G_CALLBACK(delete_cb), dsui);
123 jam_dialog_set_contents_buttonbox(dsui->win, vbox, bbox);
126 static void
127 load_item_cb(DraftStore *ec, LJEntry *entry, gpointer data) {
128 DraftStoreUI *dsui = data;
129 GtkTreeIter iter;
130 /*GdkPixbuf *pb;*/
131 char *date;
133 #if 0
134 switch (entry->security.type) {
135 case SECURITY_FRIENDS:
136 case SECURITY_CUSTOM:
137 pb = dsui->pb_friends; break;
138 case SECURITY_PRIVATE:
139 pb = dsui->pb_private; break;
140 default:
141 pb = NULL; /* public: no icon */
143 #endif
144 date = lj_tm_to_ljdate_noseconds(&entry->time);
145 gtk_list_store_append(dsui->store, &iter);
146 gtk_list_store_set(dsui->store, &iter,
147 /*COL_SECURITY, pb,*/
148 COL_DATE, date,
149 COL_SUBJECT, entry->subject,
150 COL_ITEMID, entry->itemid,
151 -1);
152 g_free(date);
154 static gboolean
155 load_items(DraftStoreUI *dsui) {
156 LJEntry *entry;
157 entry = lj_entry_new();
158 draft_store_each_header(dsui->ds, entry, load_item_cb, dsui);
159 lj_entry_free(entry);
160 return TRUE;
163 static LJEntry*
164 load_selected(DraftStoreUI *dsui) {
165 GtkTreeModel *model;
166 GtkTreeIter iter;
167 int itemid;
169 if (!gtk_tree_selection_get_selected(
170 gtk_tree_view_get_selection(GTK_TREE_VIEW(dsui->view)),
171 &model, &iter))
172 return NULL;
173 gtk_tree_model_get(model, &iter,
174 COL_ITEMID, &itemid,
175 -1);
177 return draft_store_get_entry(dsui->ds, itemid, NULL);
180 LJEntry*
181 draft_store_ui_select(DraftStore *ds, GtkWindow *parent) {
182 DraftStoreUI dsui_actual = {0}, *dsui = &dsui_actual;
183 LJEntry *entry = NULL;
185 dsui->ds = ds;
186 dsui->store = gtk_list_store_new(COL_COUNT,
187 /*GDK_TYPE_PIXBUF, */G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
189 make_dialog(dsui, parent);
191 /*dsui->pb_friends = gtk_widget_render_icon(dsui->win,
192 "logjam-protected", GTK_ICON_SIZE_MENU, NULL);
193 dsui->pb_private = gtk_widget_render_icon(dsui->win,
194 "logjam-private", GTK_ICON_SIZE_MENU, NULL);*/
196 if (!load_items(dsui))
197 return NULL;
199 if (gtk_dialog_run(GTK_DIALOG(dsui->win)) == GTK_RESPONSE_OK)
200 entry = load_selected(dsui);
201 gtk_widget_destroy(dsui->win);
202 return entry;