diff options
author | Shaun McCance <shaunm@src.gnome.org> | 2003-11-11 15:02:52 +0000 |
---|---|---|
committer | Shaun McCance <shaunm@src.gnome.org> | 2003-11-11 15:02:52 +0000 |
commit | 9550a34d165dfcb1726b2a40cf8472cda4ec827f (patch) | |
tree | 0949ef7bc0fac72cb2cf8544d641d25270d51c27 | |
parent | 62c8e4b45c2937263fa8b86e52788d0b8999ed3f (diff) | |
download | yelp-9550a34d165dfcb1726b2a40cf8472cda4ec827f.tar.gz |
- Breaking things more for the new transformations
* src/Makefile.am:
* src/yelp-base.c:
* src/yelp-history.c:
* src/yelp-window.c:
* src/yelp-window.h:
- Breaking things more for the new transformations
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/yelp-base.c | 12 | ||||
-rw-r--r-- | src/yelp-history.c | 6 | ||||
-rw-r--r-- | src/yelp-window.c | 1066 | ||||
-rw-r--r-- | src/yelp-window.h | 17 |
6 files changed, 536 insertions, 578 deletions
@@ -1,3 +1,12 @@ +2003-11-11 Shaun McCance <shaunm@gnome.org> + + * src/Makefile.am: + * src/yelp-base.c: + * src/yelp-history.c: + * src/yelp-window.c: + * src/yelp-window.h: + - Breaking things more for the new transformations + 2003-11-06 Shaun McCance <shaunm@gnome.org> * configure.in: diff --git a/src/Makefile.am b/src/Makefile.am index e1be5a14..c73a81ae 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -96,10 +96,6 @@ yelp_SOURCES = \ yelp-scrollkeeper.c yelp-scrollkeeper.h \ yelp-pager.c yelp-pager.h \ yelp-util.c yelp-util.h \ - yelp-view.c yelp-view.h \ - yelp-view-content.c yelp-view-content.h \ - yelp-view-index.c yelp-view-index.h \ - yelp-view-toc.c yelp-view-toc.h \ yelp-window.c yelp-window.h \ yelp-uri.c yelp-uri.h diff --git a/src/yelp-base.c b/src/yelp-base.c index f61db65d..9bb9de6e 100644 --- a/src/yelp-base.c +++ b/src/yelp-base.c @@ -175,6 +175,7 @@ GtkWidget * yelp_base_new_window (YelpBase *base, const gchar *str_uri) { YelpBasePriv *priv; + YelpURI *uri; GtkWidget *window; g_return_val_if_fail (YELP_IS_BASE (base), NULL); @@ -196,11 +197,12 @@ yelp_base_new_window (YelpBase *base, const gchar *str_uri) gtk_widget_show_all (window); - if (str_uri && strcmp (str_uri, "")) { - yelp_window_open_uri (YELP_WINDOW (window), str_uri); - } else { - yelp_window_open_uri (YELP_WINDOW (window), "toc:"); - } + if (str_uri && strcmp (str_uri, "")) + uri = yelp_uri_new (str_uri); + else + uri = yelp_uri_new ("toc:"); + + yelp_window_open_uri (YELP_WINDOW (window), uri); return window; } diff --git a/src/yelp-history.c b/src/yelp-history.c index 355a1c3c..b3db89a5 100644 --- a/src/yelp-history.c +++ b/src/yelp-history.c @@ -136,7 +136,7 @@ history_finalize (GObject *object) priv = history->priv; for (node = priv->history_list; node; node = node->next) { - yelp_uri_unref (YELP_URI (node->data)); + g_object_unref (G_OBJECT (node->data)); } g_list_free (priv->history_list); @@ -152,7 +152,7 @@ history_free_history_list (GList *history_list) GList *node; for (node = history_list; node; node = node->next) { - yelp_uri_unref (YELP_URI (node->data)); + g_object_unref (G_OBJECT (node->data)); } g_list_free (history_list); @@ -209,7 +209,7 @@ yelp_history_goto (YelpHistory *history, YelpURI *uri) } priv->history_list = g_list_append (priv->history_list, - yelp_uri_ref (uri)); + g_object_ref (uri)); priv->current = g_list_last (priv->history_list); diff --git a/src/yelp-window.c b/src/yelp-window.c index ead71fc9..ab4fe45a 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -1,6 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /* - * Copyright (C) 2001-2002 Mikael Hallendal <micke@imendio.com> + * Copyright (C) 2003 Shaun McCance <shaunm@gnome.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -17,7 +17,8 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * - * Author: Mikael Hallendal <micke@imendio.com> + * Author: Shaun McCance <shaunm@gnome.org> + * Based on implementation by Mikael Hallendal <micke@imendio.com> */ #ifdef HAVE_CONFIG_H @@ -41,9 +42,6 @@ #include "yelp-util.h" #include "yelp-section.h" #include "yelp-history.h" -#include "yelp-view-content.h" -#include "yelp-view-index.h" -#include "yelp-view-toc.h" #include "yelp-window.h" #define d(x) @@ -65,16 +63,31 @@ static void window_init (YelpWindow *window); static void window_class_init (YelpWindowClass *klass); static void window_populate (YelpWindow *window); - +static GtkWidget * window_create_toolbar (YelpWindow *window); +static GdkPixbuf * window_load_icon (void); static gboolean window_handle_uri (YelpWindow *window, YelpURI *uri); -static void window_uri_selected_cb (gpointer view, - YelpURI *uri, - gboolean handled, + +static void window_new_window_cb (gpointer data, + guint section, + GtkWidget *widget); +static void window_close_window_cb (gpointer data, + guint section, + GtkWidget *widget); +static void window_about_cb (gpointer data, + guint section, + GtkWidget *widget); +static gboolean window_configure_cb (GtkWidget *widget, + GdkEventConfigure *event, + gpointer data); + +static void window_back_button_clicked (GtkWidget *button, YelpWindow *window); -static void window_title_changed_cb (gpointer view, - const gchar *title, +static void window_forward_button_clicked (GtkWidget *button, + YelpWindow *window); +static void window_home_button_clicked (GtkWidget *button, YelpWindow *window); + static void window_toggle_history_back (YelpHistory *history, gboolean sensitive, YelpWindow *window); @@ -82,23 +95,20 @@ static void window_toggle_history_back (YelpHistory *history, static void window_toggle_history_forward (YelpHistory *history, gboolean sensitive, YelpWindow *window); - static void window_history_action (YelpWindow *window, YelpHistoryAction action); -static void window_back_button_clicked (GtkWidget *button, - YelpWindow *window); -static void window_forward_button_clicked (GtkWidget *button, + +/* +static void window_uri_selected_cb (gpointer view, + YelpURI *uri, + gboolean handled, YelpWindow *window); -static void window_home_button_clicked (GtkWidget *button, +static void window_title_changed_cb (gpointer view, + const gchar *title, YelpWindow *window); + static void window_index_button_clicked (GtkWidget *button, YelpWindow *window); -static void window_new_window_cb (gpointer data, - guint section, - GtkWidget *widget); -static void window_close_window_cb (gpointer data, - guint section, - GtkWidget *widget); static void window_find_cb (gpointer data, guint section, GtkWidget *widget); static void window_find_again_cb (gpointer data, guint section, @@ -112,351 +122,499 @@ static void window_go_home_cb (gpointer data, static void window_go_index_cb (gpointer data, guint section, GtkWidget *widget); -static void window_about_cb (gpointer data, - guint section, - GtkWidget *widget); static gboolean window_find_delete_event_cb (GtkWidget *widget, gpointer user_data); static void window_find_response_cb (GtkWidget *dialog , gint response, YelpWindow *window); static YelpView * window_get_active_view (YelpWindow *window); -static GtkWidget * window_create_toolbar (YelpWindow *window); -static GdkPixbuf * window_load_icon (void); -static gboolean window_configure_cb (GtkWidget *widget, - GdkEventConfigure *event, - gpointer data); - +*/ +/* enum { - PAGE_TOC_VIEW, - PAGE_CONTENT_VIEW, - PAGE_INDEX_VIEW + PAGE_TOC_VIEW, + PAGE_CONTENT_VIEW, + PAGE_INDEX_VIEW }; +*/ enum { - NEW_WINDOW_REQUESTED, - LAST_SIGNAL + NEW_WINDOW_REQUESTED, + LAST_SIGNAL }; static gint signals[LAST_SIGNAL] = { 0 }; struct _YelpWindowPriv { - GNode *doc_tree; - GList *index; + GNode *doc_tree; + GList *index; - GtkWidget *notebook; + GtkWidget *pane; + GtkWidget *side_sects; + YelpHtml *html_view; - YelpView *toc_view; - YelpView *content_view; - YelpView *index_view; - - GtkWidget *find_dialog; - GtkWidget *find_entry; - GtkWidget *case_checkbutton; - GtkWidget *wrap_checkbutton; - gchar *find_string; - gboolean match_case; - gboolean wrap; - - YelpHistory *history; + YelpHistory *history; - GtkItemFactory *item_factory; + GtkItemFactory *item_factory; - GtkWidget *forward_button; - GtkWidget *back_button; + GtkWidget *forward_button; + GtkWidget *back_button; }; static GtkItemFactoryEntry menu_items[] = { - {N_("/_File"), NULL, 0, 0, "<Branch>"}, - {N_("/File/_New window"), NULL, window_new_window_cb, 0, "<StockItem>", GTK_STOCK_NEW }, - {N_("/File/_Close window"), NULL, window_close_window_cb, 0, "<StockItem>", GTK_STOCK_CLOSE }, - - {N_("/_Edit"), NULL, 0, 0, "<Branch>"}, - {N_("/Edit/_Find in page..."), NULL, window_find_cb, 0, "<StockItem>", GTK_STOCK_FIND }, - {N_("/Edit/_Find again"), "<Control>g", window_find_again_cb, 0, "<StockItem>", GTK_STOCK_FIND }, - - {N_("/_Go"), NULL, 0, 0, "<Branch>"}, - {N_("/Go/_Back"), NULL, window_history_go_cb, YELP_WINDOW_ACTION_BACK, "<StockItem>", GTK_STOCK_GO_BACK }, - {N_("/Go/_Forward"), NULL, window_history_go_cb, YELP_WINDOW_ACTION_FORWARD, "<StockItem>", GTK_STOCK_GO_FORWARD }, - {N_("/Go/_Home"), NULL, window_go_home_cb, 0, "<StockItem>", GTK_STOCK_HOME }, - {N_("/Go/_Index"), NULL, window_go_index_cb, 0, "<StockItem>", GTK_STOCK_INDEX }, - - {N_("/_Help"), NULL, 0, 0, "<Branch>"}, - {N_("/Help/_About"), NULL, window_about_cb, 0, "<StockItem>", GNOME_STOCK_ABOUT }, + {N_("/_File"), NULL, 0, 0, "<Branch>" }, + {N_("/File/_New window"), NULL, + window_new_window_cb, 0, + "<StockItem>", GTK_STOCK_NEW }, + {N_("/File/_Close window"), NULL, + window_close_window_cb, 0, + "<StockItem>", GTK_STOCK_CLOSE }, + + {N_("/_Edit"), NULL, 0, 0, "<Branch>" }, + /* + {N_("/Edit/_Find in page..."), NULL, + window_find_cb, 0, + "<StockItem>", GTK_STOCK_FIND }, + {N_("/Edit/_Find again"), "<Control>g", + window_find_again_cb, 0, + "<StockItem>", GTK_STOCK_FIND }, + */ + + {N_("/_Go"), NULL, 0, 0, "<Branch>" }, + /* + {N_("/Go/_Back"), NULL, + window_history_go_cb, YELP_WINDOW_ACTION_BACK, + "<StockItem>", GTK_STOCK_GO_BACK }, + {N_("/Go/_Forward"), NULL, + window_history_go_cb, YELP_WINDOW_ACTION_FORWARD, + "<StockItem>", GTK_STOCK_GO_FORWARD }, + {N_("/Go/_Home"), NULL, + window_go_home_cb, 0, + "<StockItem>", GTK_STOCK_HOME }, + {N_("/Go/_Index"), NULL, + window_go_index_cb, 0, + "<StockItem>", GTK_STOCK_INDEX }, + */ + + {N_("/_Help"), NULL, 0, 0, "<Branch>" }, + {N_("/Help/_About"), NULL, + window_about_cb, 0, + "<StockItem>", GNOME_STOCK_ABOUT }, }; GType yelp_window_get_type (void) { - static GType window_type = 0; - - if (!window_type) { - static const GTypeInfo window_info = - { - sizeof (YelpWindowClass), - NULL, - NULL, - (GClassInitFunc) window_class_init, - NULL, - NULL, - sizeof (YelpWindow), - 0, - (GInstanceInitFunc) window_init, - }; - - window_type = g_type_register_static (GNOME_TYPE_APP, - "YelpWindow", - &window_info, 0); - } - - return window_type; + static GType window_type = 0; + + if (!window_type) { + static const GTypeInfo window_info = { + sizeof (YelpWindowClass), + NULL, + NULL, + (GClassInitFunc) window_class_init, + NULL, + NULL, + sizeof (YelpWindow), + 0, + (GInstanceInitFunc) window_init, + }; + + window_type = g_type_register_static (GTK_TYPE_WINDOW, + "YelpWindow", + &window_info, 0); + } + + return window_type; } static void window_init (YelpWindow *window) { - YelpWindowPriv *priv; -/* YelpURI *uri; */ - gint width, height; - - priv = g_new0 (YelpWindowPriv, 1); - window->priv = priv; - - priv->toc_view = NULL; - priv->content_view = NULL; - priv->index_view = NULL; - - priv->match_case = FALSE; - priv->wrap = TRUE; - - priv->history = yelp_history_new (); - - g_signal_connect (priv->history, - "back_exists_changed", - G_CALLBACK (window_toggle_history_back), - window); - - g_signal_connect (priv->history, - "forward_exists_changed", - G_CALLBACK (window_toggle_history_forward), - window); - - width = gnome_config_get_int (YELP_CONFIG_WIDTH - "=" YELP_CONFIG_WIDTH_DEFAULT); - height = gnome_config_get_int (YELP_CONFIG_HEIGHT - "=" YELP_CONFIG_HEIGHT_DEFAULT); - gtk_window_set_default_size (GTK_WINDOW (window), width, height); - g_signal_connect (window, - "configure-event", - G_CALLBACK (window_configure_cb), - NULL); - - gtk_window_set_title (GTK_WINDOW (window), _("Help Browser")); + YelpWindowPriv *priv; + gint width, height; + + priv = g_new0 (YelpWindowPriv, 1); + window->priv = priv; + + priv->history = yelp_history_new (); + + g_signal_connect (priv->history, + "back_exists_changed", + G_CALLBACK (window_toggle_history_back), + window); + + g_signal_connect (priv->history, + "forward_exists_changed", + G_CALLBACK (window_toggle_history_forward), + window); + + width = gnome_config_get_int (YELP_CONFIG_WIDTH + "=" YELP_CONFIG_WIDTH_DEFAULT); + height = gnome_config_get_int (YELP_CONFIG_HEIGHT + "=" YELP_CONFIG_HEIGHT_DEFAULT); + gtk_window_set_default_size (GTK_WINDOW (window), width, height); + g_signal_connect (window, + "configure-event", + G_CALLBACK (window_configure_cb), + NULL); + + gtk_window_set_title (GTK_WINDOW (window), _("Help Browser")); } static void window_class_init (YelpWindowClass *klass) { - signals[NEW_WINDOW_REQUESTED] = - g_signal_new ("new_window_requested", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (YelpWindowClass, - new_window_requested), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + signals[NEW_WINDOW_REQUESTED] = + g_signal_new ("new_window_requested", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (YelpWindowClass, + new_window_requested), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } -static void -window_populate (YelpWindow *window) +/******************************************************************************/ + +GtkWidget * +yelp_window_new (GNode *doc_tree, GList *index) { - YelpWindowPriv *priv; - GtkWidget *toolbar; - GtkWidget *main_box; - GtkWidget *sw; - GtkAccelGroup *accel_group; - GtkWidget *menu_item; + YelpWindow *window; + YelpWindowPriv *priv; - priv = window->priv; + window = g_object_new (YELP_TYPE_WINDOW, NULL); + + priv = window->priv; + + priv->doc_tree = doc_tree; + priv->index = index; + + window_populate (window); + + gtk_window_set_icon (GTK_WINDOW (window), window_load_icon ()); + + return GTK_WIDGET (window); +} + +void +yelp_window_open_uri (YelpWindow *window, + YelpURI *uri) +{ + g_return_if_fail (YELP_IS_WINDOW (window)); + + yelp_history_goto (window->priv->history, uri); + + window_handle_uri (window, uri); +} - main_box = gtk_vbox_new (FALSE, 0); +YelpURI * +yelp_window_get_current_uri (YelpWindow *window) +{ + g_return_val_if_fail (YELP_IS_WINDOW (window), NULL); - gnome_app_set_contents (GNOME_APP (window), main_box); + return yelp_history_get_current (window->priv->history); +} + +/******************************************************************************/ + +static void +window_populate (YelpWindow *window) +{ + YelpWindowPriv *priv; + GtkWidget *main_box; + GtkWidget *toolbar; + GtkWidget *sw; + GtkAccelGroup *accel_group; + GtkWidget *menu_item; + + priv = window->priv; + + main_box = gtk_vbox_new (FALSE, 0); + + gtk_container_add (GTK_CONTAINER (window), main_box); - accel_group = gtk_accel_group_new (); - priv->item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, - "<main>", accel_group); + accel_group = gtk_accel_group_new (); + priv->item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, + "<main>", accel_group); - gtk_item_factory_set_translate_func (priv->item_factory, - (GtkTranslateFunc) gettext, - NULL, NULL); + gtk_item_factory_set_translate_func (priv->item_factory, + (GtkTranslateFunc) gettext, + NULL, NULL); - gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); + gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); - gtk_item_factory_create_items (priv->item_factory, - G_N_ELEMENTS (menu_items), - menu_items, - window); + gtk_item_factory_create_items (priv->item_factory, + G_N_ELEMENTS (menu_items), + menu_items, + window); - menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, - YELP_WINDOW_ACTION_BACK); - gtk_widget_set_sensitive (menu_item, FALSE); + menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, + YELP_WINDOW_ACTION_BACK); + gtk_widget_set_sensitive (menu_item, FALSE); - menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, - YELP_WINDOW_ACTION_FORWARD); - gtk_widget_set_sensitive (menu_item, FALSE); + menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, + YELP_WINDOW_ACTION_FORWARD); + gtk_widget_set_sensitive (menu_item, FALSE); - gnome_app_set_menus (GNOME_APP (window), GTK_MENU_BAR ( - gtk_item_factory_get_widget (priv->item_factory, "<main>"))); + gtk_box_pack_start (GTK_BOX (main_box), + GTK_WIDGET (gtk_item_factory_get_widget (priv->item_factory, "<main>")), + FALSE, FALSE, 0); - toolbar = window_create_toolbar (window); + toolbar = window_create_toolbar (window); - gnome_app_set_toolbar (GNOME_APP (window), GTK_TOOLBAR (toolbar)); + gtk_box_pack_start (GTK_BOX (main_box), + GTK_WIDGET (toolbar), + FALSE, FALSE, 0); - priv->notebook = gtk_notebook_new (); + priv->pane = gtk_hpaned_new (); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE); + priv->side_sects = gtk_tree_view_new (); + gtk_paned_add1 (GTK_PANED (priv->pane), priv->side_sects); - sw = gtk_scrolled_window_new (NULL, NULL); - - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); - gtk_container_add (GTK_CONTAINER (sw), - priv->toc_view->widget); + priv->html_view = yelp_html_new (); + gtk_container_add (GTK_CONTAINER (sw), + yelp_html_get_widget (priv->html_view)); - gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook), - sw, NULL, PAGE_TOC_VIEW); - - gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook), - priv->content_view->widget, - NULL, PAGE_CONTENT_VIEW); - - if (priv->index) { - gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook), - priv->index_view->widget, - NULL, PAGE_INDEX_VIEW); - } - - gtk_box_pack_end (GTK_BOX (main_box), priv->notebook, - TRUE, TRUE, 0); + gtk_paned_add2 (GTK_PANED (priv->pane), sw); - gtk_widget_grab_focus (priv->content_view->widget); + gtk_box_pack_start (GTK_BOX (main_box), + priv->pane, + TRUE, TRUE, 0); + + gtk_widget_grab_focus (yelp_html_get_widget (priv->html_view)); } -static gboolean -window_handle_uri (YelpWindow *window, YelpURI *uri) +static GtkWidget * +window_create_toolbar (YelpWindow *window) { - YelpWindowPriv *priv; - GError *error = NULL; - gboolean handled = FALSE; + YelpWindowPriv *priv; + GtkWidget *toolbar; + GtkWidget *button; + GtkWidget *icon; + + g_return_val_if_fail (YELP_IS_WINDOW (window), NULL); + + priv = window->priv; + + toolbar = gtk_toolbar_new (); + + icon = gtk_image_new_from_stock ("gtk-go-back", + GTK_ICON_SIZE_LARGE_TOOLBAR); + priv->back_button = + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + _("Back"), + _("Show previous page in history"), + NULL, icon, + G_CALLBACK (window_back_button_clicked), + window); + gtk_widget_set_sensitive (priv->back_button, FALSE); + + icon = gtk_image_new_from_stock ("gtk-go-forward", + GTK_ICON_SIZE_LARGE_TOOLBAR); + priv->forward_button = + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + _("Forward"), + _("Show next page in history"), + NULL, icon, + G_CALLBACK (window_forward_button_clicked), + window); + gtk_widget_set_sensitive (priv->forward_button, FALSE); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + icon = gtk_image_new_from_stock ("gtk-home", + GTK_ICON_SIZE_LARGE_TOOLBAR); + button = + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), + _("Home"), + _("Go to home view"), + NULL, icon, + G_CALLBACK (window_home_button_clicked), + window); + + return toolbar; +} - priv = window->priv; +static GdkPixbuf * +window_load_icon (void) +{ + static GdkPixbuf *pixbuf = NULL; - d(g_print ("Handling URL: %s\n", yelp_uri_to_string (uri))); + if (!pixbuf) { + gchar *file; - if (!yelp_uri_exists (uri)) { - gchar *str_uri = yelp_uri_to_string (uri); - - g_set_error (&error, - YELP_ERROR, - YELP_ERROR_URI_NOT_EXIST, - _("The document '%s' does not exist"), str_uri); - g_free (str_uri); - } - else if (yelp_uri_get_type (uri) == YELP_URI_TYPE_TOC) { - d(g_print ("[TOC]\n")); - - yelp_view_show_uri (priv->toc_view, uri, NULL); + file = gnome_program_locate_file (NULL, + GNOME_FILE_DOMAIN_PIXMAP, + "gnome-help.png", + TRUE, + NULL); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), - PAGE_TOC_VIEW); - handled = TRUE; - } - else if (yelp_uri_get_type (uri) == YELP_URI_TYPE_INDEX) { - d(g_print ("[INDEX]\n")); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), - PAGE_INDEX_VIEW); - yelp_view_show_uri (priv->index_view, uri, &error); - handled = TRUE; - } - else if (yelp_uri_get_type (uri) == YELP_URI_TYPE_MAN || - yelp_uri_get_type (uri) == YELP_URI_TYPE_INFO || - yelp_uri_get_type (uri) == YELP_URI_TYPE_DOCBOOK_XML || - yelp_uri_get_type (uri) == YELP_URI_TYPE_DOCBOOK_SGML || - yelp_uri_get_type (uri) == YELP_URI_TYPE_HTML || - yelp_uri_get_type (uri) == YELP_URI_TYPE_PATH) { - d(g_print ("[CONTENT]\n")); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), - PAGE_CONTENT_VIEW); - yelp_view_show_uri (priv->content_view, - uri, &error); - handled = TRUE; - } else { - gnome_url_show (yelp_uri_to_string (uri), &error); - handled = FALSE; + if (file) { + pixbuf = gdk_pixbuf_new_from_file (file, + NULL); + g_free (file); } + } + + return pixbuf; +} + +static gboolean +window_handle_uri (YelpWindow *window, + YelpURI *uri) +{ + YelpWindowPriv *priv; + GError *error = NULL; + gboolean handled = FALSE; + + priv = window->priv; - if (error) { - GtkWidget *dialog; + if (!yelp_uri_exists (uri)) { + gchar *str_uri = yelp_uri_to_string (uri); - dialog = gtk_message_dialog_new (GTK_WINDOW (window), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - error->message); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + g_set_error (&error, + YELP_ERROR, + YELP_ERROR_URI_NOT_EXIST, + _("The document '%s' does not exist"), str_uri); + g_free (str_uri); + } else { + //FIXME + switch (yelp_uri_get_resource_type (uri)) { + case YELP_URI_TYPE_DOCBOOK_XML: + case YELP_URI_TYPE_DOCBOOK_SGML: + case YELP_URI_TYPE_HTML: + case YELP_URI_TYPE_MAN: + case YELP_URI_TYPE_INFO: + case YELP_URI_TYPE_GHELP: + case YELP_URI_TYPE_GHELP_OTHER: + case YELP_URI_TYPE_TOC: + case YELP_URI_TYPE_INDEX: + case YELP_URI_TYPE_PATH: + case YELP_URI_TYPE_FILE: + case YELP_URI_TYPE_UNKNOWN: + case YELP_URI_TYPE_RELATIVE: + default: + break; } + } - return handled; + return handled; } +/******************************************************************************/ + static void -window_uri_selected_cb (gpointer view, - YelpURI *uri, - gboolean handled, - YelpWindow *window) +window_new_window_cb (gpointer data, guint section, GtkWidget *widget) { - YelpWindowPriv *priv; + g_return_if_fail (YELP_IS_WINDOW (data)); - g_return_if_fail (YELP_IS_WINDOW (window)); + g_signal_emit (data, signals[NEW_WINDOW_REQUESTED], 0); +} - d(g_print ("uri_selected: %s, handled: %d\n", - yelp_uri_to_string (uri), handled)); +static void +window_close_window_cb (gpointer data, + guint section, + GtkWidget *widget) +{ + gtk_widget_destroy (GTK_WIDGET (data)); +} - priv = window->priv; +static void +window_about_cb (gpointer data, guint section, GtkWidget *widget) +{ + static GtkWidget *about = NULL; + + if (about == NULL) { + const gchar *authors[] = { + "Mikael Hallendal <micke@imendio.com>", + "Alexander Larsson <alexl@redhat.com>", + "Shaun McCance <shaunm@gnome.org>", + NULL + }; + /* Note to translators: put here your name (and address) so it + * will shop up in the "about" box */ + gchar *translator_credits = _("translator_credits"); + + about = gnome_about_new + (PACKAGE, VERSION, + "Copyright 2001-2003 Mikael Hallendal <micke@imendio.com>\n", + _("A Help Browser for GNOME"), + authors, + NULL, + strcmp (translator_credits, "translator_credits") != 0 + ? translator_credits : NULL, + window_load_icon ()); + + /* set the widget pointer to NULL when the widget is destroyed */ + g_signal_connect (G_OBJECT (about), "destroy", + G_CALLBACK (gtk_widget_destroyed), + &about); + gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (data)); + } + gtk_window_present (GTK_WINDOW (about)); +} - yelp_uri_ref (uri); - - if (handled) { - yelp_history_goto (priv->history, uri); - } else { - if (window_handle_uri (window, uri)) { - yelp_history_goto (priv->history, uri); - } - } +static gboolean +window_configure_cb (GtkWidget *widget, + GdkEventConfigure *event, + gpointer data) +{ + gint width, height; + gtk_window_get_size (GTK_WINDOW (widget), &width, &height); + gnome_config_set_int (YELP_CONFIG_WIDTH, width); + gnome_config_set_int (YELP_CONFIG_HEIGHT, height); + gnome_config_sync (); - yelp_uri_unref (uri); + return FALSE; } static void -window_title_changed_cb (gpointer view, const gchar *title, YelpWindow *window) +window_back_button_clicked (GtkWidget *button, + YelpWindow *window) { - gchar *new_title; + g_return_if_fail (GTK_IS_BUTTON (button)); + g_return_if_fail (YELP_IS_WINDOW (window)); + + window_history_action (window, YELP_WINDOW_ACTION_BACK); +} + +static void +window_forward_button_clicked (GtkWidget *button, + YelpWindow *window) +{ + g_return_if_fail (GTK_IS_BUTTON (button)); + g_return_if_fail (YELP_IS_WINDOW (window)); + + window_history_action (window, YELP_WINDOW_ACTION_FORWARD); +} + +static void +window_home_button_clicked (GtkWidget *button, + YelpWindow *window) +{ + YelpURI *uri; - g_return_if_fail (title != NULL); - g_return_if_fail (YELP_IS_WINDOW (window)); + g_return_if_fail (YELP_IS_WINDOW (window)); - new_title = g_strconcat (title, " - ", _("Help Browser"), NULL); + uri = yelp_uri_new ("toc:"); - gtk_window_set_title (GTK_WINDOW (window), new_title); + // FIXME + /* + yelp_history_goto (window->priv->history, uri); + yelp_view_show_uri (window->priv->toc_view, uri, NULL); - g_free (new_title); + yelp_uri_unref (uri); + + gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook), + PAGE_TOC_VIEW); + */ } static void @@ -464,19 +622,19 @@ window_toggle_history_back (YelpHistory *history, gboolean sensitive, YelpWindow *window) { - YelpWindowPriv *priv; - GtkWidget *menu_item; + YelpWindowPriv *priv; + GtkWidget *menu_item; - g_return_if_fail (YELP_IS_HISTORY (history)); - g_return_if_fail (YELP_IS_WINDOW (window)); + g_return_if_fail (YELP_IS_HISTORY (history)); + g_return_if_fail (YELP_IS_WINDOW (window)); - priv = window->priv; + priv = window->priv; - gtk_widget_set_sensitive (priv->back_button, sensitive); + gtk_widget_set_sensitive (priv->back_button, sensitive); - menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, - YELP_WINDOW_ACTION_BACK); - gtk_widget_set_sensitive (menu_item, sensitive); + menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, + YELP_WINDOW_ACTION_BACK); + gtk_widget_set_sensitive (menu_item, sensitive); } static void @@ -484,83 +642,97 @@ window_toggle_history_forward (YelpHistory *history, gboolean sensitive, YelpWindow *window) { - YelpWindowPriv *priv; - GtkWidget *menu_item; + YelpWindowPriv *priv; + GtkWidget *menu_item; - g_return_if_fail (YELP_IS_HISTORY (history)); - g_return_if_fail (YELP_IS_WINDOW (window)); + g_return_if_fail (YELP_IS_HISTORY (history)); + g_return_if_fail (YELP_IS_WINDOW (window)); - priv = window->priv; + priv = window->priv; - gtk_widget_set_sensitive (priv->forward_button, sensitive); + gtk_widget_set_sensitive (priv->forward_button, sensitive); - menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, - YELP_WINDOW_ACTION_FORWARD); - gtk_widget_set_sensitive (menu_item, sensitive); + menu_item = gtk_item_factory_get_item_by_action (priv->item_factory, + YELP_WINDOW_ACTION_FORWARD); + gtk_widget_set_sensitive (menu_item, sensitive); } static void -window_history_action (YelpWindow *window, YelpHistoryAction action) +window_history_action (YelpWindow *window, + YelpHistoryAction action) { - YelpWindowPriv *priv; - YelpURI *uri; - - g_return_if_fail (YELP_IS_WINDOW (window)); + YelpWindowPriv *priv; + YelpURI *uri; - priv = window->priv; + g_return_if_fail (YELP_IS_WINDOW (window)); - switch (action) { - case YELP_WINDOW_ACTION_BACK: - uri = yelp_history_go_back (priv->history); - break; - case YELP_WINDOW_ACTION_FORWARD: - uri = yelp_history_go_forward (priv->history); - break; - default: - return; - } + priv = window->priv; + + switch (action) { + case YELP_WINDOW_ACTION_BACK: + uri = yelp_history_go_back (priv->history); + break; + case YELP_WINDOW_ACTION_FORWARD: + uri = yelp_history_go_forward (priv->history); + break; + default: + return; + } - if (uri) { - window_handle_uri (window, uri); - } + if (uri) { + window_handle_uri (window, uri); + } } +/***************************** FIXME below + static void -window_back_button_clicked (GtkWidget *button, YelpWindow *window) +window_uri_selected_cb (gpointer view, + YelpURI *uri, + gboolean handled, + YelpWindow *window) { - g_return_if_fail (GTK_IS_BUTTON (button)); + YelpWindowPriv *priv; + g_return_if_fail (YELP_IS_WINDOW (window)); - window_history_action (window, YELP_WINDOW_ACTION_BACK); -} + d(g_print ("uri_selected: %s, handled: %d\n", + yelp_uri_to_string (uri), handled)); -static void -window_forward_button_clicked (GtkWidget *button, YelpWindow *window) -{ - g_return_if_fail (GTK_IS_BUTTON (button)); - g_return_if_fail (YELP_IS_WINDOW (window)); + priv = window->priv; - window_history_action (window, YELP_WINDOW_ACTION_FORWARD); + yelp_uri_ref (uri); + + if (handled) { + yelp_history_goto (priv->history, uri); + } else { + if (window_handle_uri (window, uri)) { + yelp_history_goto (priv->history, uri); + } + } + + yelp_uri_unref (uri); } static void -window_home_button_clicked (GtkWidget *button, YelpWindow *window) +window_title_changed_cb (gpointer view, const gchar *title, YelpWindow *window) { - YelpURI *uri; + gchar *new_title; + g_return_if_fail (title != NULL); g_return_if_fail (YELP_IS_WINDOW (window)); - uri = yelp_uri_new ("toc:"); - - yelp_history_goto (window->priv->history, uri); - yelp_view_show_uri (window->priv->toc_view, uri, NULL); + new_title = g_strconcat (title, " - ", _("Help Browser"), NULL); - yelp_uri_unref (uri); + gtk_window_set_title (GTK_WINDOW (window), new_title); - gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook), - PAGE_TOC_VIEW); + g_free (new_title); } + + + + static void window_index_button_clicked (GtkWidget *button, YelpWindow *window) { @@ -576,21 +748,6 @@ window_index_button_clicked (GtkWidget *button, YelpWindow *window) PAGE_INDEX_VIEW); } -static void -window_new_window_cb (gpointer data, guint section, GtkWidget *widget) -{ - g_return_if_fail (YELP_IS_WINDOW (data)); - - g_signal_emit (data, signals[NEW_WINDOW_REQUESTED], 0); -} - -static void -window_close_window_cb (gpointer data, - guint section, - GtkWidget *widget) -{ - gtk_widget_destroy (GTK_WIDGET (data)); -} static void window_find_cb (gpointer data, guint section, GtkWidget *widget) @@ -678,38 +835,6 @@ window_go_index_cb (gpointer data, guint section, GtkWidget *widget) window_index_button_clicked (NULL, YELP_WINDOW (data)); } -static void -window_about_cb (gpointer data, guint section, GtkWidget *widget) -{ - static GtkWidget *about = NULL; - - if (about == NULL) { - const gchar *authors[] = { - "Mikael Hallendal <micke@imendio.com>", - "Alexander Larsson <alexl@redhat.com>", - "Shaun McCance <shaunm@gnome.org>", - NULL - }; - /* Note to translators: put here your name (and address) so it - * will shop up in the "about" box */ - gchar *translator_credits = _("translator_credits"); - - about = gnome_about_new (PACKAGE, VERSION, - "Copyright 2001-2003 Mikael Hallendal <micke@imendio.com>", - _("A Help Browser for GNOME"), - authors, - NULL, - strcmp (translator_credits, "translator_credits") != 0 ? translator_credits : NULL, - window_load_icon ()); - - /* set the widget pointer to NULL when the widget is destroyed */ - g_signal_connect (G_OBJECT (about), "destroy", - G_CALLBACK (gtk_widget_destroyed), - &about); - gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (data)); - } - gtk_window_present (GTK_WINDOW (about)); -} static gboolean window_find_delete_event_cb (GtkWidget *widget, gpointer user_data) @@ -792,182 +917,9 @@ window_get_active_view (YelpWindow *window) return NULL; } -static GtkWidget * -window_create_toolbar (YelpWindow *window) -{ - YelpWindowPriv *priv; - GtkWidget *toolbar; - GtkWidget *button; - GtkWidget *icon; - - g_return_val_if_fail (YELP_IS_WINDOW (window), NULL); - priv = window->priv; - - toolbar = gtk_toolbar_new (); - - icon = gtk_image_new_from_stock ("gtk-go-back", - GTK_ICON_SIZE_LARGE_TOOLBAR); - - priv->back_button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), - _("Back"), - _("Show previous page in history"), - NULL, icon, - G_CALLBACK (window_back_button_clicked), - window); - - gtk_widget_set_sensitive (priv->back_button, FALSE); - - icon = gtk_image_new_from_stock ("gtk-go-forward", - GTK_ICON_SIZE_LARGE_TOOLBAR); - priv->forward_button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), - _("Forward"), - _("Show next page in history"), - NULL, icon, - G_CALLBACK (window_forward_button_clicked), - window); - gtk_widget_set_sensitive (priv->forward_button, FALSE); - - gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); - - icon = gtk_image_new_from_stock ("gtk-home", - GTK_ICON_SIZE_LARGE_TOOLBAR); - - button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), - _("Home"), - _("Go to home view"), - NULL, icon, - G_CALLBACK (window_home_button_clicked), - window); - - if (priv->index) { - icon = gtk_image_new_from_stock ("gtk-index", - GTK_ICON_SIZE_LARGE_TOOLBAR); - - button = gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), - _("Index"), - _("Search in the index"), - NULL, icon, - G_CALLBACK (window_index_button_clicked), - window); - - } - - return toolbar; -} - -static GdkPixbuf * -window_load_icon (void) -{ - static GdkPixbuf *pixbuf = NULL; - - if (!pixbuf) { - gchar *file; - - file = gnome_program_locate_file (NULL, - GNOME_FILE_DOMAIN_PIXMAP, - "gnome-help.png", - TRUE, - NULL); - - if (file) { - pixbuf = gdk_pixbuf_new_from_file (file, - NULL); - g_free (file); - } - } - - return pixbuf; -} - -static gboolean -window_configure_cb (GtkWidget *widget, - GdkEventConfigure *event, - gpointer data) -{ - gint width, height; - gtk_window_get_size (GTK_WINDOW (widget), &width, &height); - gnome_config_set_int (YELP_CONFIG_WIDTH, width); - gnome_config_set_int (YELP_CONFIG_HEIGHT, height); - gnome_config_sync (); - - return FALSE; -} -GtkWidget * -yelp_window_new (GNode *doc_tree, GList *index) -{ - YelpWindow *window; - YelpWindowPriv *priv; - - window = g_object_new (YELP_TYPE_WINDOW, - "app_id", PACKAGE, NULL); - priv = window->priv; - - priv->doc_tree = doc_tree; - priv->index = index; - - priv->toc_view = yelp_view_toc_new (doc_tree); - priv->content_view = yelp_view_content_new (doc_tree); - - if (priv->index) { - priv->index_view = yelp_view_index_new (index); - - g_signal_connect (priv->index_view, "uri_selected", - G_CALLBACK (window_uri_selected_cb), - window); - } - - g_signal_connect (priv->toc_view, "uri_selected", - G_CALLBACK (window_uri_selected_cb), - window); - - g_signal_connect (priv->toc_view, "title_changed", - G_CALLBACK (window_title_changed_cb), - window); - - g_signal_connect (priv->content_view, "uri_selected", - G_CALLBACK (window_uri_selected_cb), - window); - - g_signal_connect (priv->content_view, "title_changed", - G_CALLBACK (window_title_changed_cb), - window); - - window_populate (window); - - gtk_window_set_icon (GTK_WINDOW (window), window_load_icon ()); - - return GTK_WIDGET (window); -} - -void -yelp_window_open_uri (YelpWindow *window, - const gchar *str_uri) -{ - YelpWindowPriv *priv; - YelpURI *uri; - - g_return_if_fail (YELP_IS_WINDOW (window)); - - priv = window->priv; - - uri = yelp_uri_new (str_uri); - - yelp_history_goto (priv->history, uri); - - window_handle_uri (window, uri); - - yelp_uri_unref (uri); -} - -YelpURI * -yelp_window_get_current_uri (YelpWindow *window) -{ - g_return_val_if_fail (YELP_IS_WINDOW (window), NULL); - - return yelp_history_get_current (window->priv->history); -} +**************************/ diff --git a/src/yelp-window.h b/src/yelp-window.h index cc85f314..95bc0668 100644 --- a/src/yelp-window.h +++ b/src/yelp-window.h @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /* * Copyright (C) 2001-2002 Mikael Hallendal <micke@imendio.com> * @@ -41,25 +41,24 @@ typedef struct _YelpWindowPriv YelpWindowPriv; struct _YelpWindow { - GnomeApp parent; - - YelpWindowPriv *priv; + GtkWindow parent; + + YelpWindowPriv *priv; }; struct _YelpWindowClass { - GnomeAppClass parent_class; + GtkWindowClass paretn_class; - /* Signals */ - void (*new_window_requested) (YelpWindow *window); + /* Signals */ + void (*new_window_requested) (YelpWindow *window); }; GType yelp_window_get_type (void); GtkWidget * yelp_window_new (GNode *doc_tree, GList *index); - void yelp_window_open_uri (YelpWindow *window, - const gchar *str_uri); + YelpURI *uri); YelpURI * yelp_window_get_current_uri (YelpWindow *window); #endif /* __YELP_WINDOW_H__ */ |