Commit 5f0d76ed authored by Elliot Lee's avatar Elliot Lee
Browse files

Attempt at a history view.



Attempt at a history view.
parent b91e3637
bin_PROGRAMS=ntl-history-view
INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GNOMEUI_CFLAGS) $(BONOBO_CFLAGS)
LDADD=$(top_builddir)/libnautilus/libnautilus.la $(BONOBO_LIBS) $(GNOMEUI_LIBS)
ntl_history_view_SOURCES=ntl-history-view.c
#include "config.h"
#include <libnautilus/libnautilus.h>
typedef struct {
NautilusViewClient *view;
GtkCList *clist;
gint notify_count, last_row;
} HistoryView;
static void
hyperbola_navigation_history_notify_location_change (NautilusViewClient *view,
Nautilus_NavigationInfo *loci,
HistoryView *hview)
{
char *cols[2];
int new_rownum;
GtkCList *clist;
hview->notify_count++;
clist = hview->clist;
if(hview->last_row > 0)
{
char *uri;
int i;
/* If we are moving 'forward' in history, must either just select a new row that is farther ahead in history,
or delete all the history ahead of this point */
gtk_clist_get_text(clist, hview->last_row - 1, 1, &uri);
if(!strcmp(uri, loci->requested_uri))
{
new_rownum = --hview->last_row;
goto skip_prepend;
}
for(i = 0; i <= hview->last_row; i++)
gtk_clist_remove(clist, 0);
}
gtk_clist_freeze(clist);
cols[0] = (char *)loci->requested_uri;
hview->last_row = new_rownum = gtk_clist_prepend(clist, cols);
skip_prepend:
gtk_clist_columns_autosize(clist);
if(gtk_clist_row_is_visible(clist, new_rownum) != GTK_VISIBILITY_FULL)
gtk_clist_moveto(clist, new_rownum, -1, 0.5, 0.0);
gtk_clist_select_row(clist, new_rownum, 0);
gtk_clist_thaw(clist);
hview->notify_count--;
}
static void
hyperbola_navigation_history_select_row(GtkCList *clist, gint row, gint column, GdkEvent *event,
HistoryView *hview)
{
Nautilus_NavigationRequestInfo reqi;
if(hview->notify_count > 0)
return;
gtk_clist_freeze(clist);
if(hview->last_row == row)
return;
hview->last_row = row;
if(gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
gtk_clist_moveto(clist, row, -1, 0.5, 0.0);
gtk_clist_get_text(clist, row, 0, &reqi.requested_uri);
reqi.new_window_default = reqi.new_window_suggested = Nautilus_V_FALSE;
reqi.new_window_enforced = Nautilus_V_FALSE;
nautilus_view_client_request_location_change(hview->view, &reqi);
gtk_clist_thaw(clist);
}
static GnomeObject * make_obj(GnomeGenericFactory *Factory, const char *goad_id, void *closure)
{
GtkWidget *client, *clist, *wtmp;
GnomeObject *ctl;
GnomePropertyBag *bag;
char *col_titles[1];
HistoryView *hview;
g_return_val_if_fail(!strcmp(goad_id, "ntl_history_view"), NULL);
hview = g_new0(HistoryView, 1);
client = gtk_widget_new(nautilus_meta_view_client_get_type(), NULL);
ctl = nautilus_view_client_get_gnome_object(NAUTILUS_VIEW_CLIENT(client));
/* create interface */
col_titles[0] = _("Path");
clist = gtk_clist_new_with_titles(2, col_titles);
gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_BROWSE);
gtk_clist_columns_autosize(GTK_CLIST(clist));
wtmp = gtk_scrolled_window_new(gtk_clist_get_hadjustment(GTK_CLIST(clist)),
gtk_clist_get_vadjustment(GTK_CLIST(clist)));
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(wtmp), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(client), wtmp);
gtk_container_add(GTK_CONTAINER(wtmp), clist);
gtk_widget_show_all(client);
/* handle events */
gtk_signal_connect(GTK_OBJECT(client), "notify_location_change", hyperbola_navigation_history_notify_location_change, clist);
gtk_signal_connect(GTK_OBJECT(clist), "select_row", hyperbola_navigation_history_select_row, client);
/* set description */
bag = gnome_control_get_property_bag(GNOME_CONTROL(ctl));
gnome_property_bag_add(bag, "description", "string", _("History"), _("History"), _("Description"),
GNOME_PROPERTY_READ_ONLY);
hview->view = (NautilusViewClient *)client;
hview->clist = (GtkCList *)clist;
return ctl;
}
int main(int argc, char *argv[])
{
GnomeGenericFactory *factory;
CORBA_ORB orb;
CORBA_Environment ev;
CORBA_exception_init(&ev);
orb = gnome_CORBA_init_with_popt_table("ntl-history-view", VERSION, &argc, argv, NULL, 0, NULL,
GNORBA_INIT_SERVER_FUNC, &ev);
bonobo_init(orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL);
factory = gnome_generic_factory_new("ntl_history_view_factory", make_obj, NULL);
gtk_main();
return 0;
}
#include "config.h"
#include <libnautilus/libnautilus.h>
typedef struct {
NautilusViewClient *view;
GtkCList *clist;
gint notify_count, last_row;
} HistoryView;
static void
hyperbola_navigation_history_notify_location_change (NautilusViewClient *view,
Nautilus_NavigationInfo *loci,
HistoryView *hview)
{
char *cols[2];
int new_rownum;
GtkCList *clist;
hview->notify_count++;
clist = hview->clist;
if(hview->last_row > 0)
{
char *uri;
int i;
/* If we are moving 'forward' in history, must either just select a new row that is farther ahead in history,
or delete all the history ahead of this point */
gtk_clist_get_text(clist, hview->last_row - 1, 1, &uri);
if(!strcmp(uri, loci->requested_uri))
{
new_rownum = --hview->last_row;
goto skip_prepend;
}
for(i = 0; i <= hview->last_row; i++)
gtk_clist_remove(clist, 0);
}
gtk_clist_freeze(clist);
cols[0] = (char *)loci->requested_uri;
hview->last_row = new_rownum = gtk_clist_prepend(clist, cols);
skip_prepend:
gtk_clist_columns_autosize(clist);
if(gtk_clist_row_is_visible(clist, new_rownum) != GTK_VISIBILITY_FULL)
gtk_clist_moveto(clist, new_rownum, -1, 0.5, 0.0);
gtk_clist_select_row(clist, new_rownum, 0);
gtk_clist_thaw(clist);
hview->notify_count--;
}
static void
hyperbola_navigation_history_select_row(GtkCList *clist, gint row, gint column, GdkEvent *event,
HistoryView *hview)
{
Nautilus_NavigationRequestInfo reqi;
if(hview->notify_count > 0)
return;
gtk_clist_freeze(clist);
if(hview->last_row == row)
return;
hview->last_row = row;
if(gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
gtk_clist_moveto(clist, row, -1, 0.5, 0.0);
gtk_clist_get_text(clist, row, 0, &reqi.requested_uri);
reqi.new_window_default = reqi.new_window_suggested = Nautilus_V_FALSE;
reqi.new_window_enforced = Nautilus_V_FALSE;
nautilus_view_client_request_location_change(hview->view, &reqi);
gtk_clist_thaw(clist);
}
static GnomeObject * make_obj(GnomeGenericFactory *Factory, const char *goad_id, void *closure)
{
GtkWidget *client, *clist, *wtmp;
GnomeObject *ctl;
GnomePropertyBag *bag;
char *col_titles[1];
HistoryView *hview;
g_return_val_if_fail(!strcmp(goad_id, "ntl_history_view"), NULL);
hview = g_new0(HistoryView, 1);
client = gtk_widget_new(nautilus_meta_view_client_get_type(), NULL);
ctl = nautilus_view_client_get_gnome_object(NAUTILUS_VIEW_CLIENT(client));
/* create interface */
col_titles[0] = _("Path");
clist = gtk_clist_new_with_titles(2, col_titles);
gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_BROWSE);
gtk_clist_columns_autosize(GTK_CLIST(clist));
wtmp = gtk_scrolled_window_new(gtk_clist_get_hadjustment(GTK_CLIST(clist)),
gtk_clist_get_vadjustment(GTK_CLIST(clist)));
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(wtmp), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(client), wtmp);
gtk_container_add(GTK_CONTAINER(wtmp), clist);
gtk_widget_show_all(client);
/* handle events */
gtk_signal_connect(GTK_OBJECT(client), "notify_location_change", hyperbola_navigation_history_notify_location_change, clist);
gtk_signal_connect(GTK_OBJECT(clist), "select_row", hyperbola_navigation_history_select_row, client);
/* set description */
bag = gnome_control_get_property_bag(GNOME_CONTROL(ctl));
gnome_property_bag_add(bag, "description", "string", _("History"), _("History"), _("Description"),
GNOME_PROPERTY_READ_ONLY);
hview->view = (NautilusViewClient *)client;
hview->clist = (GtkCList *)clist;
return ctl;
}
int main(int argc, char *argv[])
{
GnomeGenericFactory *factory;
CORBA_ORB orb;
CORBA_Environment ev;
CORBA_exception_init(&ev);
orb = gnome_CORBA_init_with_popt_table("ntl-history-view", VERSION, &argc, argv, NULL, 0, NULL,
GNORBA_INIT_SERVER_FUNC, &ev);
bonobo_init(orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL);
factory = gnome_generic_factory_new("ntl_history_view_factory", make_obj, NULL);
gtk_main();
return 0;
}
[ntl_history_view_factory]
type=exe
repo_id=IDL:GNOME/GenericFactory:1.0
description=Factory for history views
location_info=ntl-history-view
[ntl_history_view]
type=factory
repo_id=IDL:GNOME/Control:1.0 IDL:Nautilus/MetaView:1.0 IDL:Nautilus/View:1.0
description=History
location_info=ntl_history_view_factory
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment