From: <si...@us...> - 2010-01-02 18:10:16
|
Revision: 847 http://osmo-pim.svn.sourceforge.net/osmo-pim/?rev=847&view=rev Author: silloz Date: 2010-01-02 18:10:09 +0000 (Sat, 02 Jan 2010) Log Message: ----------- * Second attempt to use LibGtkHtml to render contact details (works in progress) Modified Paths: -------------- trunk/src/contacts.c trunk/src/gui.c Modified: trunk/src/contacts.c =================================================================== --- trunk/src/contacts.c 2010-01-01 17:30:18 UTC (rev 846) +++ trunk/src/contacts.c 2010-01-02 18:10:09 UTC (rev 847) @@ -289,258 +289,189 @@ /*------------------------------------------------------------------------------*/ void -contacts_item_selected_cb (GtkTreeSelection *selection, gpointer data) { +contacts_item_selected_cb (GtkTreeSelection *selection, GUI *appGUI) +{ + GtkTreeModel *model; + GtkTreeIter iter; + gboolean address_available = FALSE; + guint32 date; + gchar *fname, *sname, *lname; + gchar tmpbuf[BUFFER_SIZE], htmpbuf[BUFFER_SIZE]; + gchar *html, *html_buffer; + gchar *text; + gint i; -GtkTreeIter iter; -GtkTreeModel *model; -gint i; -gchar *text; -char tmpbuf[BUFFER_SIZE], htmpbuf[BUFFER_SIZE]; -gboolean activate_home_phone, activate_work_phone, activate_cell_phone; -gboolean activate_email, activate_www; -guint32 date; -gboolean address_available = FALSE; -gchar *fname, *sname, *lname; -gchar *html_buffer = NULL; + if (gtk_tree_selection_get_selected (selection, &model, &iter) == FALSE) { - GUI *appGUI = (GUI *)data; + gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/edit"), FALSE); + gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/delete"), FALSE); + gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/map_location"), FALSE); + set_export_active (appGUI); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { + return; + } - gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, - "/toolbar/edit"), TRUE); - gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, - "/toolbar/delete"), TRUE); + gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/edit"), TRUE); + gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/delete"), TRUE); - address_available = check_address (HOME_ADDRESS, appGUI); - if (address_available == FALSE) { - address_available = check_address (WORK_ADDRESS, appGUI); - } + address_available = check_address (HOME_ADDRESS, appGUI); + if (address_available == FALSE) { + address_available = check_address (WORK_ADDRESS, appGUI); + } - gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, - "/toolbar/map_location"), address_available); - set_export_active (appGUI); + gtk_widget_set_sensitive (gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/map_location"), address_available); + set_export_active (appGUI); - g_snprintf (htmpbuf, BUFFER_SIZE, "<html><head>"); - html_buffer = g_strconcat (htmpbuf, NULL); + /****************************************************************/ - /****************************************************************/ - /* header */ + html = g_strdup_printf ( + "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<style type=\"text/css\">\n" +/* "h1 { font-size: 24px; font-weight: bold; text-transform: capitalize; font-style: italic; }\n"*/ + "h1 { font-size: 24px; font-weight: bold; font-style: italic; }\n" + "a { color: %s; }\n" + "table { width: 100%%; }\n" + "td.tag { width: 30%%; }\n" + "td.value { width: 70%%; }\n" +/* ".tag { text-transform: uppercase; font-weight: bold; color: %s; }\n"*/ + ".tag { font-weight: bold; color: %s; }\n" + ".value { color: #000; }\n" + ".photo { position: absolute; top: 0; right: 0; width: %dpx; border: 1px solid #000; float: right; }\n" + "</style>\n</head>\n\n<body>\n", config.contact_link_color, config.contact_tag_color, config.photo_width); - g_snprintf (htmpbuf, BUFFER_SIZE, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + /****************************************************************/ - /* css */ - g_snprintf (htmpbuf, BUFFER_SIZE, "<style>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + gtk_tree_model_get (model, &iter, + COLUMN_FIRST_NAME, &fname, + COLUMN_SECOND_NAME, &sname, + COLUMN_LAST_NAME, &lname, + COLUMN_PHOTO, &text, + -1); - g_snprintf (htmpbuf, BUFFER_SIZE, "h1 { font-size: 18px; font-weight: bold; text-transform: capitalize; }"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + if (!fname) fname = g_strdup (""); + if (!sname) sname = g_strdup (""); + if (!lname) lname = g_strdup (""); - g_snprintf (htmpbuf, BUFFER_SIZE, ".field1 { text-transform: uppercase; font-weight: bold; color: %s;}", config.contact_tag_color); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + g_snprintf (htmpbuf, BUFFER_SIZE, "<h1>%s %s %s</h1>\n", fname, sname, lname); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); + g_free (fname); + g_free (sname); + g_free (lname); - g_snprintf (htmpbuf, BUFFER_SIZE, ".field2 { color: #000; }"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + /* insert photo */ + if (text != NULL) { + g_snprintf (htmpbuf, BUFFER_SIZE, "<img src=\"%s\" alt=\"\" class=\"photo\">", text); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); + g_free (text); + } - g_snprintf (htmpbuf, BUFFER_SIZE, ".photo { position: absolute; top: 0; right: 0; width: %dpx; border: 1px solid #000; float: right; }", config.photo_width); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + g_snprintf (htmpbuf, BUFFER_SIZE, "<table>\n"); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - g_snprintf (htmpbuf, BUFFER_SIZE, "</style>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + for (i = 0; i < CONTACTS_NUM_COLUMNS; i++) { - g_snprintf (htmpbuf, BUFFER_SIZE, "</head><body>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + if ((i == COLUMN_ID) || + (i == COLUMN_PHOTO) || + (i == COLUMN_FIRST_NAME) || + (i == COLUMN_SECOND_NAME) || + (i == COLUMN_LAST_NAME) || + (i == COLUMN_GROUP)) + continue; - /****************************************************************/ + if (i == COLUMN_BIRTH_DAY_DATE || i == COLUMN_NAME_DAY_DATE) { + gtk_tree_model_get (model, &iter, i, &date, -1); + if (date == 0) { + text = NULL; + } else { + if (i == COLUMN_BIRTH_DAY_DATE) { + text = g_strdup((const gchar *)julian_to_str(date, DATE_FULL, config.override_locale_settings)); + } else { + text = g_strdup((const gchar *)julian_to_str(date, DATE_NAME_DAY, config.override_locale_settings)); + } + } + } else { + gtk_tree_model_get (model, &iter, i, &text, -1); + } - gtk_tree_model_get (model, &iter, - COLUMN_FIRST_NAME, &fname, - COLUMN_SECOND_NAME, &sname, - COLUMN_LAST_NAME, &lname, - COLUMN_PHOTO, &text, - -1); + if (text == NULL || !strlen (text)) continue; - g_snprintf (htmpbuf, BUFFER_SIZE, "<h1><i>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + g_snprintf (htmpbuf, BUFFER_SIZE, "<tr>"); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - if (fname != NULL) { - g_snprintf (htmpbuf, BUFFER_SIZE, "%s ", fname); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - g_free (fname); + if ((i >= COLUMN_HOME_PHONE_2 && i <= COLUMN_HOME_PHONE_4) || + (i >= COLUMN_WORK_PHONE_2 && i <= COLUMN_WORK_PHONE_4) || + (i >= COLUMN_CELL_PHONE_2 && i <= COLUMN_CELL_PHONE_4) || + (i >= COLUMN_EMAIL_2 && i <= COLUMN_EMAIL_4) || + (i >= COLUMN_WWW_2 && i <= COLUMN_WWW_4)) { + tmpbuf[0] = '\0'; + } else { + sprintf (tmpbuf, "%s:", gettext (appGUI->cnt->contact_fields_tags_name[2*i])); } - if (sname != NULL) { - g_snprintf (htmpbuf, BUFFER_SIZE, "%s ", sname); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - g_free (sname); - } - if (lname != NULL) { - g_snprintf (htmpbuf, BUFFER_SIZE, "%s ", lname); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - g_free (lname); - } - g_snprintf (htmpbuf, BUFFER_SIZE, "</i></h1>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + if (i == COLUMN_INFO) { - /* insert photo */ + g_snprintf (htmpbuf, BUFFER_SIZE, "<td colspan=\"2\" class=\"tag\">%s</td></tr>\n" + "<tr><td colspan=\"2\" class=\"value\">%s</td></tr>\n", tmpbuf, text); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - if (text != NULL) { - g_snprintf (htmpbuf, BUFFER_SIZE, "<img src=\"%s\" alt=\"\" class=\"photo\">", text); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - g_free(text); - } + } else { - g_snprintf (htmpbuf, BUFFER_SIZE, "<br /><br /><br /><table>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + g_snprintf (htmpbuf, BUFFER_SIZE, "<td class=\"tag\">%s</td>", tmpbuf); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - for(i=0; i < CONTACTS_NUM_COLUMNS; i++) { + } - if (i != COLUMN_ID) { + if (i == COLUMN_BLOG || (i >= COLUMN_EMAIL_1 && i <= COLUMN_EMAIL_4) || (i >= COLUMN_WWW_1 && i <= COLUMN_WWW_4)) { - if (i == COLUMN_BIRTH_DAY_DATE || i == COLUMN_NAME_DAY_DATE) { - gtk_tree_model_get (model, &iter, i, &date, -1); - if (date == 0) { - text = NULL; - } else { - if (i == COLUMN_BIRTH_DAY_DATE) { - text = g_strdup((const gchar *)julian_to_str(date, DATE_FULL, config.override_locale_settings)); - } else { - text = g_strdup((const gchar *)julian_to_str(date, DATE_NAME_DAY, config.override_locale_settings)); - } - } - } else { - gtk_tree_model_get (model, &iter, i, &text, -1); - } + g_snprintf (htmpbuf, BUFFER_SIZE, "<td class=\"value\"><a href=\"%s\">%s</a></td></tr>\n", text, text); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - if (i != COLUMN_PHOTO && i != COLUMN_FIRST_NAME && i != COLUMN_SECOND_NAME && i != COLUMN_LAST_NAME) { + } else if (i != COLUMN_INFO) { - if (text != NULL && i != COLUMN_GROUP) { + g_snprintf (htmpbuf, BUFFER_SIZE, "<td class=\"value\">%s</td></tr>\n", text); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - g_snprintf (htmpbuf, BUFFER_SIZE, "<tr>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); + } - activate_home_phone = (i == COLUMN_HOME_PHONE_2 || i == COLUMN_HOME_PHONE_3 || i == COLUMN_HOME_PHONE_4) && strlen(text); - activate_work_phone = (i == COLUMN_WORK_PHONE_2 || i == COLUMN_WORK_PHONE_3 || i == COLUMN_WORK_PHONE_4) && strlen(text); - activate_cell_phone = (i == COLUMN_WORK_PHONE_2 || i == COLUMN_WORK_PHONE_3 || i == COLUMN_WORK_PHONE_4) && strlen(text); - activate_email = (i == COLUMN_EMAIL_2 || i == COLUMN_EMAIL_3 || i == COLUMN_EMAIL_4) && strlen(text); - activate_www = (i == COLUMN_WWW_2 || i == COLUMN_WWW_3 || i == COLUMN_WWW_4) && strlen(text); + } - if ((i >= COLUMN_HOME_PHONE_1 && i <= COLUMN_HOME_PHONE_4) || - (i >= COLUMN_WORK_PHONE_1 && i <= COLUMN_WORK_PHONE_4) || - (i >= COLUMN_CELL_PHONE_1 && i <= COLUMN_CELL_PHONE_4) || - (i >= COLUMN_EMAIL_1 && i <= COLUMN_EMAIL_4) || - (i >= COLUMN_WWW_1 && i <= COLUMN_WWW_4)) { + g_snprintf (htmpbuf, BUFFER_SIZE, "</table>\n</body>\n</html>\n"); + html_buffer = html; + html = g_strconcat (html_buffer, htmpbuf, NULL); + g_free (html_buffer); - if ((activate_home_phone == FALSE && i == COLUMN_HOME_PHONE_1) || - (activate_work_phone == FALSE && i == COLUMN_WORK_PHONE_1) || - (activate_cell_phone == FALSE && i == COLUMN_CELL_PHONE_1) || - (activate_email == FALSE && i == COLUMN_EMAIL_1) || - (activate_www == FALSE && i == COLUMN_WWW_1)) { + printf ("%s\n", html); - sprintf(tmpbuf, "%s: ", gettext(appGUI->cnt->contact_fields_tags_name[2*i])); - } else { - tmpbuf[0] = 0; - } + if (html_document_open_stream (appGUI->cnt->html_document, "text/html")) { - } else { - sprintf(tmpbuf, "%s: ", gettext(appGUI->cnt->contact_fields_tags_name[2*i])); - } + html_view_set_document (HTML_VIEW (appGUI->cnt->html_view), NULL); + html_document_clear (appGUI->cnt->html_document); + html_document_write_stream (appGUI->cnt->html_document, html, strlen (html)); + html_view_set_document (HTML_VIEW (appGUI->cnt->html_view), appGUI->cnt->html_document); - if (text != NULL) { + html_document_close_stream (appGUI->cnt->html_document); + } - if (i == COLUMN_BLOG || (i >= COLUMN_EMAIL_1 && i <= COLUMN_EMAIL_4) || (i >= COLUMN_WWW_1 && i <= COLUMN_WWW_4)) { /* insert link */ - - if (i == COLUMN_WWW_1 || i == COLUMN_EMAIL_1 || i == COLUMN_BLOG) { - g_snprintf (htmpbuf, BUFFER_SIZE, "<td class=\"field1\">%s</td><td class=\"field2\"><a href='%s'>%s</a></td>", tmpbuf, text, text); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - } - if ((i >= COLUMN_WWW_2 && i <= COLUMN_WWW_4) || (i >= COLUMN_EMAIL_2 && i <= COLUMN_EMAIL_4)) { - g_snprintf (htmpbuf, BUFFER_SIZE, "<td></td><td class=\"field2\"><a href='%s'>%s</a></td>", text, text); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - } - - } else { - - if (strlen(tmpbuf)) { - if (i != COLUMN_INFO) { - g_snprintf (htmpbuf, BUFFER_SIZE, "<td class=\"field1\">%s</td>", tmpbuf); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - } - } - - if (i == COLUMN_INFO) { - g_snprintf (htmpbuf, BUFFER_SIZE, "<td colspan=\"2\"><span class=\"field1\">%s</span><br/><span class=\"field2\">%s</span>", tmpbuf, text); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - } else { - g_snprintf (htmpbuf, BUFFER_SIZE, "<td class=\"field2\">%s</td>", text); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - } - } - } - - g_snprintf (htmpbuf, BUFFER_SIZE, "</tr>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - } - } - - g_free(text); - } - - } - - g_snprintf (htmpbuf, BUFFER_SIZE, "</table>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - - g_snprintf (htmpbuf, BUFFER_SIZE, "</body></html>"); - html_buffer = g_strconcat (html_buffer, htmpbuf, NULL); - - printf("%s\n", html_buffer); - - if (html_document_open_stream(appGUI->cnt->html_document, "text/html")) { - - html_view_set_document (HTML_VIEW (appGUI->cnt->html_view), NULL); - html_document_clear (appGUI->cnt->html_document); - html_document_write_stream (appGUI->cnt->html_document, html_buffer, strlen(html_buffer)); - html_view_set_document (HTML_VIEW (appGUI->cnt->html_view), appGUI->cnt->html_document); - - html_document_close_stream(appGUI->cnt->html_document); - } - - } else { - gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/edit"), FALSE); - gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/delete"), FALSE); - gtk_widget_set_sensitive(gtk_ui_manager_get_widget (appGUI->cnt->contacts_uim_widget, "/toolbar/map_location"), FALSE); - set_export_active (appGUI); - } + g_free (html); } /*------------------------------------------------------------------------------*/ -/*void*/ -/*contacts_desc_scrolled (GtkAdjustment *adj, gpointer data) {*/ - -/*gint x, y;*/ - - /*GUI *appGUI = (GUI *)data;*/ - - /*if (appGUI->cnt->photo_image != NULL) {*/ - /*gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(appGUI->cnt->contacts_desc_textview), GTK_TEXT_WINDOW_TEXT,*/ - /*appGUI->cnt->contacts_desc_textview->allocation.width-config.photo_width-5, 5, &x, &y);*/ - /*gtk_text_view_move_child(GTK_TEXT_VIEW(appGUI->cnt->contacts_desc_textview), appGUI->cnt->photo_image,*/ - /*appGUI->cnt->contacts_desc_textview->allocation.width-config.photo_width-5, y);*/ - /*}*/ -/*}*/ - -/*void*/ -/*contacts_desc_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data) {*/ - - /*GUI *appGUI = (GUI *)data;*/ - /*contacts_desc_scrolled(NULL, appGUI);*/ -/*}*/ - -/*------------------------------------------------------------------------------*/ - void add_contacts_toolbar_widget (GtkUIManager *contacts_uim_widget, GtkWidget *widget, gpointer user_data) { Modified: trunk/src/gui.c =================================================================== --- trunk/src/gui.c 2010-01-01 17:30:18 UTC (rev 846) +++ trunk/src/gui.c 2010-01-02 18:10:09 UTC (rev 847) @@ -1229,7 +1229,7 @@ tstr = utl_time_print_default (utl_time_get_current_seconds (), FALSE); text = g_strdup_printf ("%s, %s", dstr, tstr); - gtk_status_icon_set_tooltip_text (appGUI->osmo_trayicon, text); + gtk_status_icon_set_tooltip (appGUI->osmo_trayicon, text); g_free (tstr); g_free (dstr); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |