first try to journal_store_get_latest_id() for sqlite
[k8lowj.git] / src / link-journal.c
blob0aa4f91a9cf196e7923f3a1434229477cd938379
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 "jamdoc.h"
8 #include "util.h"
11 static GtkWidget *add_menu_item (GtkMenuShell *ms, const gchar *id, const gchar *text) {
12 GtkWidget *hbox;
13 GtkWidget *item;
15 hbox = gtk_hbox_new(FALSE, 3);
16 gtk_box_pack_start(GTK_BOX(hbox), gtk_image_new_from_stock(id, GTK_ICON_SIZE_MENU), FALSE, FALSE, 0);
17 gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(text), FALSE, FALSE, 0);
19 item = gtk_menu_item_new();
20 gtk_container_add(GTK_CONTAINER(item), hbox);
21 gtk_menu_shell_append(ms, item);
22 return item;
26 static GtkWidget *make_usertype_omenu (void) {
27 GtkWidget *omenu, *menu;
29 menu = gtk_menu_new();
30 add_menu_item(GTK_MENU_SHELL(menu), "logjam-ljuser", _("LJR User"));
31 add_menu_item(GTK_MENU_SHELL(menu), "logjam-ljcomm", _("LJR Community"));
32 add_menu_item(GTK_MENU_SHELL(menu), "logjam-ljuser", _("User"));
33 add_menu_item(GTK_MENU_SHELL(menu), "logjam-ljcomm", _("Community"));
35 omenu = gtk_option_menu_new();
36 gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu);
37 return omenu;
41 void link_journal_dialog_run (GtkWindow *win, JamDoc *doc) {
42 GtkWidget *dlg;
43 GtkWidget *vbox, *hbox, *entry, *omenu;
44 GtkSizeGroup *sizegroup;
45 GtkTextBuffer *buffer;
46 GtkTextIter start, end;
47 char *username = NULL;
48 int usertype;
49 gboolean selection = FALSE;
51 buffer = jam_doc_get_text_buffer(doc);
52 if (gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) {
53 username = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
54 selection = TRUE;
57 dlg = gtk_dialog_new_with_buttons(_("Insert lj user / lj community Tag"), win, GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
58 gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_OK);
59 vbox = gtk_vbox_new(FALSE, 5);
60 gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
62 sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
64 entry = gtk_entry_new();
65 gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
66 if (username) {
67 gtk_entry_set_text(GTK_ENTRY(entry), username);
68 g_free(username);
70 hbox = labelled_box_new_sg(_("_Username:"), entry, sizegroup);
71 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
73 omenu = make_usertype_omenu();
74 hbox = labelled_box_new_sg(_("User _Type:"), omenu, sizegroup);
75 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
77 jam_dialog_set_contents(GTK_DIALOG(dlg), vbox);
79 if (gtk_dialog_run(GTK_DIALOG(dlg)) != GTK_RESPONSE_OK) {
80 gtk_widget_destroy(dlg);
81 return;
83 username = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
84 usertype = gtk_option_menu_get_history(GTK_OPTION_MENU(omenu));
85 gtk_widget_destroy(dlg);
86 if (username[0] == 0) {
87 g_free(username);
88 return;
91 if (selection) gtk_text_buffer_delete(buffer, &start, &end);
92 else gtk_text_buffer_get_iter_at_mark(buffer, &start, gtk_text_buffer_get_insert(buffer));
94 if (usertype > 1) gtk_text_buffer_insert(buffer, &start, "<lj ", -1);
95 else gtk_text_buffer_insert(buffer, &start, "<ljr ", -1);
97 if (usertype%2 == 0) gtk_text_buffer_insert(buffer, &start, "user=\"", -1);
98 else gtk_text_buffer_insert(buffer, &start, "comm=\"", -1);
100 xml_escape(&username);
101 gtk_text_buffer_insert(buffer, &start, username, -1);
102 g_free(username);
103 gtk_text_buffer_insert(buffer, &start, "\" />", -1);