/* * This file is part of NetSurf, http://netsurf.sourceforge.net/ * Licensed under the GNU General Public License, * http://www.opensource.org/licenses/gpl-license * Copyright 2006 Rob Kendrick */ #include #include #include "netsurf/utils/log.h" #include "netsurf/content/urldb.h" #include "netsurf/gtk/gtk_history.h" #include "netsurf/gtk/gtk_gui.h" enum { COL_TITLE = 0, COL_ADDRESS, COL_LASTVISIT, COL_TOTALVISITS, COL_THUMBNAIL, COL_NCOLS }; GtkWindow *wndHistory; static GtkTreeView *treeview; static GtkTreeStore *history_tree; static GtkTreeSelection *selection; static bool nsgtk_history_add_internal(const char *, const struct url_data *); static void nsgtk_history_selection_changed(GtkTreeSelection *, gpointer); void nsgtk_history_init(void) { GtkCellRenderer *renderer; wndHistory = GTK_WINDOW(glade_xml_get_widget(gladeWindows, "wndHistory")); treeview = GTK_TREE_VIEW(glade_xml_get_widget(gladeWindows, "treeHistory")); history_tree = gtk_tree_store_new(COL_NCOLS, G_TYPE_STRING, /* title */ G_TYPE_STRING, /* address */ G_TYPE_STRING, /* last visit */ G_TYPE_INT, /* nr. visits */ GDK_TYPE_PIXBUF); /* thumbnail */ selection = gtk_tree_view_get_selection(treeview); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(nsgtk_history_selection_changed), NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(treeview, -1, "Title", renderer, "text", COL_TITLE, NULL); gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(history_tree)); nsgtk_history_update(); } void nsgtk_history_update(void) { gtk_tree_store_clear(history_tree); urldb_iterate_entries(nsgtk_history_add_internal); } bool nsgtk_history_add_internal(const char *url, const struct url_data *data) { GtkTreeIter iter; if (data->visits > 0) { gtk_tree_store_append(history_tree, &iter, NULL); gtk_tree_store_set(history_tree, &iter, COL_TITLE, data->title, COL_ADDRESS, url, COL_LASTVISIT, "Unknown", COL_TOTALVISITS, data->visits, -1); } return true; } void nsgtk_history_selection_changed(GtkTreeSelection *treesel, gpointer g) { GtkTreeIter iter; if (gtk_tree_selection_get_selected(treesel, &history_tree, &iter)) { gchar *b; gint i; char buf[20]; gtk_tree_model_get(history_tree, &iter, COL_ADDRESS, &b, -1); gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeWindows, "labelHistoryAddress")), b); gtk_tree_model_get(history_tree, &iter, COL_LASTVISIT, &b, -1); gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeWindows, "labelHistoryLastVisit")), b); gtk_tree_model_get(history_tree, &iter, COL_TOTALVISITS, &i, -1); snprintf(buf, 20, "%d", i); gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeWindows, "labelHistoryVisits")), buf); } else { } } void nsgtk_history_row_activated(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *column, gpointer g) { GtkTreeModel *model; GtkTreeIter iter; model = gtk_tree_view_get_model(tv); if (gtk_tree_model_get_iter(model, &iter, path)) { gchar *b; gtk_tree_model_get(model, &iter, COL_ADDRESS, &b, -1); browser_window_create((const char *)b, NULL, NULL, true); } } void global_history_add(const char *url) { const struct url_data *data; data = urldb_get_url_data(url); if (!data) return; nsgtk_history_add_internal(url, data); }