first try to journal_store_get_latest_id() for sqlite
[k8lowj.git] / src / draftstore_ui.c
blobbab078a3e05d6798dde3111ca363577c7f0f176c
1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2000-2003 Evan Martin <evan@livejournal.com>
3 */
4 #include "gtk-all.h"
5 #include "util-gtk.h"
7 #include "draftstore.h"
10 enum {
11 COL_DATE,
12 COL_SUBJECT,
13 COL_ITEMID,
14 COL_COUNT
18 typedef struct {
19 DraftStore *ds;
20 GtkWidget *win;
21 GtkListStore *store;
22 GtkWidget *view;
23 /*GtkWidget *lstats; */
24 /*GdkPixbuf *pb_friends, *pb_private; */
25 } DraftStoreUI;
28 static void row_activated_cb (GtkTreeView *treeview, GtkTreePath *arg1, GtkTreeViewColumn *arg2, DraftStoreUI *dsui) {
29 gtk_dialog_response(GTK_DIALOG(dsui->win), GTK_RESPONSE_OK);
33 static GtkWidget *make_view (DraftStoreUI *dsui) {
34 GtkCellRenderer *renderer;
35 GtkTreeViewColumn *column;
37 dsui->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(dsui->store));
38 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dsui->view), TRUE);
39 g_object_unref(G_OBJECT(dsui->store));
40 g_signal_connect(G_OBJECT(dsui->view), "row-activated", G_CALLBACK(row_activated_cb), dsui);
42 /*renderer = gtk_cell_renderer_pixbuf_new();
43 column = gtk_tree_view_column_new_with_attributes(_("Security"), renderer,
44 "pixbuf", COL_SECURITY,
45 NULL);
46 gtk_tree_view_append_column(GTK_TREE_VIEW(dsui->view), column); */
48 renderer = gtk_cell_renderer_text_new();
49 column = gtk_tree_view_column_new_with_attributes(_("Date"), renderer, "text", COL_DATE, NULL);
50 gtk_tree_view_column_set_sort_column_id(column, COL_DATE);
51 gtk_tree_view_append_column(GTK_TREE_VIEW(dsui->view), column);
53 renderer = gtk_cell_renderer_text_new();
54 column = gtk_tree_view_column_new_with_attributes(_("Subject"), renderer, "text", COL_SUBJECT, NULL);
55 gtk_tree_view_column_set_sort_column_id(column, COL_SUBJECT);
56 gtk_tree_view_append_column(GTK_TREE_VIEW(dsui->view), column);
58 return scroll_wrap(dsui->view);
62 static void delete_cb (GtkWidget *w, DraftStoreUI *dsui) {
63 GtkTreeModel *model;
64 GtkTreeIter iter;
65 int itemid;
66 if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(dsui->view)), &model, &iter)) return;
67 if (!jam_confirm(GTK_WINDOW(dsui->win), _("Delete"), _("Delete entry?"))) return;
68 gtk_tree_model_get(model, &iter, COL_ITEMID, &itemid, -1);
69 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
70 draft_store_remove_entry(dsui->ds, itemid, NULL);
74 static void dsui_destroy_cb (GtkWidget *w, DraftStoreUI *dsui) {
76 gdk_pixbuf_unref(dsui->pb_friends);
77 gdk_pixbuf_unref(dsui->pb_private);
82 static void make_dialog (DraftStoreUI *dsui, GtkWindow *parent) {
83 GtkWidget *vbox, *bbox, *button;
85 dsui->win = gtk_dialog_new_with_buttons(_("Entries"),
86 parent, GTK_DIALOG_MODAL,
87 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
88 g_signal_connect(G_OBJECT(dsui->win), "destroy", G_CALLBACK(dsui_destroy_cb), dsui);
89 gtk_window_set_default_size(GTK_WINDOW(dsui->win), 500, 400);
90 gtk_dialog_set_default_response(GTK_DIALOG(dsui->win), GTK_RESPONSE_OK);
92 vbox = gtk_vbox_new(FALSE, 5);
93 gtk_box_pack_start(GTK_BOX(vbox), make_view(dsui), TRUE, TRUE, 0);
95 dsui->lstats = gtk_label_new("");
96 gtk_label_set_selectable(GTK_LABEL(dsui->lstats), TRUE);
97 gtk_box_pack_start(GTK_BOX(vbox), dsui->lstats, FALSE, FALSE, 0);
100 bbox = jam_dialog_buttonbox_new();
101 button = jam_dialog_buttonbox_button_from_stock(bbox, GTK_STOCK_DELETE);
102 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(delete_cb), dsui);
104 jam_dialog_set_contents_buttonbox(dsui->win, vbox, bbox);
108 static void load_item_cb (DraftStore *ec, LJEntry *entry, gpointer data) {
109 DraftStoreUI *dsui = data;
110 GtkTreeIter iter;
111 /*GdkPixbuf *pb;*/
112 char *date;
113 #if 0
114 switch (entry->security.type) {
115 case SECURITY_FRIENDS:
116 case SECURITY_CUSTOM:
117 pb = dsui->pb_friends;
118 break;
119 case SECURITY_PRIVATE:
120 pb = dsui->pb_private;
121 break;
122 default:
123 pb = NULL; /* public: no icon */
125 #endif
126 date = lj_tm_to_ljdate_noseconds(&entry->time);
127 gtk_list_store_append(dsui->store, &iter);
128 gtk_list_store_set(dsui->store, &iter, /*COL_SECURITY, pb,*/ COL_DATE, date, COL_SUBJECT, entry->subject, COL_ITEMID, entry->itemid, -1);
129 g_free(date);
133 static gboolean load_items (DraftStoreUI *dsui) {
134 LJEntry *entry = lj_entry_new();
135 draft_store_each_header(dsui->ds, entry, load_item_cb, dsui);
136 lj_entry_free(entry);
137 return TRUE;
141 static LJEntry *load_selected (DraftStoreUI *dsui) {
142 GtkTreeModel *model;
143 GtkTreeIter iter;
144 int itemid;
145 if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(dsui->view)), &model, &iter)) return NULL;
146 gtk_tree_model_get(model, &iter, COL_ITEMID, &itemid, -1);
147 return draft_store_get_entry(dsui->ds, itemid, NULL);
151 LJEntry *draft_store_ui_select (DraftStore *ds, GtkWindow *parent) {
152 DraftStoreUI dsui_actual = {0}, *dsui = &dsui_actual;
153 LJEntry *entry = NULL;
154 dsui->ds = ds;
155 dsui->store = gtk_list_store_new(COL_COUNT, /*GDK_TYPE_PIXBUF,*/ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
156 make_dialog(dsui, parent);
158 dsui->pb_friends = gtk_widget_render_icon(dsui->win, "logjam-protected", GTK_ICON_SIZE_MENU, NULL);
159 dsui->pb_private = gtk_widget_render_icon(dsui->win, "logjam-private", GTK_ICON_SIZE_MENU, NULL);
161 if (!load_items(dsui)) return NULL;
162 if (gtk_dialog_run(GTK_DIALOG(dsui->win)) == GTK_RESPONSE_OK) entry = load_selected(dsui);
163 gtk_widget_destroy(dsui->win);
164 return entry;