mirror of https://github.com/GNOME/gimp.git
plug-ins/helpbrowser/dialog.c added menu toolbar buttons; not functional
2005-04-15 Sven Neumann <sven@gimp.org> * plug-ins/helpbrowser/dialog.c * plug-ins/helpbrowser/queue.[ch]: added menu toolbar buttons; not functional yet.
This commit is contained in:
parent
4d06f1fa8f
commit
443b71cb68
|
@ -1,3 +1,9 @@
|
|||
2005-04-15 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* plug-ins/helpbrowser/dialog.c
|
||||
* plug-ins/helpbrowser/queue.[ch]: added menu toolbar buttons; not
|
||||
functional yet.
|
||||
|
||||
2005-04-15 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
Added loading of Photoshop brushes. Fixes bug #163047:
|
||||
|
|
|
@ -118,13 +118,15 @@ static gchar * filename_from_uri (const gchar *uri);
|
|||
|
||||
/* private variables */
|
||||
|
||||
static const gchar *eek_png_tag = "<h1>Eeek!</h1>";
|
||||
static const gchar *eek_png_tag = "<h1>Eeek!</h1>";
|
||||
|
||||
static Queue *queue = NULL;
|
||||
static gchar *current_ref = NULL;
|
||||
static Queue *queue = NULL;
|
||||
static gchar *current_ref = NULL;
|
||||
|
||||
static GtkWidget *html = NULL;
|
||||
static GtkUIManager *ui_manager = NULL;
|
||||
static GtkWidget *html = NULL;
|
||||
static GtkUIManager *ui_manager = NULL;
|
||||
static GtkWidget *button_prev = NULL;
|
||||
static GtkWidget *button_next = NULL;
|
||||
|
||||
static GtkTargetEntry help_dnd_target_table[] =
|
||||
{
|
||||
|
@ -145,6 +147,8 @@ browser_dialog_open (void)
|
|||
GtkWidget *drag_source;
|
||||
GtkWidget *image;
|
||||
GtkWidget *combo;
|
||||
GtkToolItem *item;
|
||||
GtkAction *action;
|
||||
GtkListStore *history;
|
||||
GtkCellRenderer *cell;
|
||||
gchar *eek_png_path;
|
||||
|
@ -181,6 +185,28 @@ browser_dialog_open (void)
|
|||
gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
|
||||
gtk_widget_show (toolbar);
|
||||
|
||||
item = gtk_separator_tool_item_new ();
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 0);
|
||||
gtk_widget_show (GTK_WIDGET (item));
|
||||
|
||||
item = g_object_new (GTK_TYPE_MENU_TOOL_BUTTON, NULL);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 0);
|
||||
gtk_widget_show (GTK_WIDGET (item));
|
||||
|
||||
action = gtk_ui_manager_get_action (ui_manager,
|
||||
"/ui/help-browser-popup/forward");
|
||||
gtk_action_connect_proxy (action, GTK_WIDGET (item));
|
||||
button_next = GTK_WIDGET (item);
|
||||
|
||||
item = g_object_new (GTK_TYPE_MENU_TOOL_BUTTON, NULL);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 0);
|
||||
gtk_widget_show (GTK_WIDGET (item));
|
||||
|
||||
action = gtk_ui_manager_get_action (ui_manager,
|
||||
"/ui/help-browser-popup/back");
|
||||
gtk_action_connect_proxy (action, GTK_WIDGET (item));
|
||||
button_prev = GTK_WIDGET (item);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 2);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
@ -394,6 +420,7 @@ ui_manager_new (GtkWidget *window)
|
|||
|
||||
GtkUIManager *ui_manager = gtk_ui_manager_new ();
|
||||
GtkActionGroup *group = gtk_action_group_new ("Actions");
|
||||
GError *error = NULL;
|
||||
|
||||
gtk_action_group_set_translation_domain (group, NULL);
|
||||
gtk_action_group_add_actions (group, actions, G_N_ELEMENTS (actions), window);
|
||||
|
@ -408,15 +435,15 @@ ui_manager_new (GtkWidget *window)
|
|||
gtk_ui_manager_add_ui_from_string (ui_manager,
|
||||
"<ui>"
|
||||
" <toolbar name=\"help-browser-toolbar\">"
|
||||
" <toolitem action=\"back\" />"
|
||||
" <toolitem action=\"forward\" />"
|
||||
" <separator />"
|
||||
" <toolitem action=\"index\" />"
|
||||
" <separator />"
|
||||
" <toolitem action=\"close\" />"
|
||||
" </toolbar>"
|
||||
"</ui>",
|
||||
-1, NULL);
|
||||
-1, &error);
|
||||
|
||||
if (error)
|
||||
g_warning ("error parsing ui: %s", error->message);
|
||||
|
||||
gtk_ui_manager_add_ui_from_string (ui_manager,
|
||||
"<ui>"
|
||||
|
@ -503,18 +530,51 @@ close_callback (GtkAction *action,
|
|||
gtk_widget_destroy (GTK_WIDGET (data));
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
build_menu (GList *list)
|
||||
{
|
||||
GtkMenuShell *menu;
|
||||
|
||||
if (! list)
|
||||
return NULL;
|
||||
|
||||
menu = GTK_MENU_SHELL (gtk_menu_new ());
|
||||
|
||||
for (; list; list = g_list_next (list))
|
||||
{
|
||||
GtkWidget *menu_item = gtk_menu_item_new_with_label (list->data);
|
||||
|
||||
gtk_menu_shell_append (menu, menu_item);
|
||||
gtk_widget_show (menu_item);
|
||||
}
|
||||
|
||||
g_list_free (list);
|
||||
|
||||
return GTK_WIDGET (menu);
|
||||
}
|
||||
|
||||
static void
|
||||
update_toolbar (void)
|
||||
{
|
||||
GtkAction *action;
|
||||
|
||||
action = gtk_ui_manager_get_action (ui_manager,
|
||||
"/ui/help-browser-toolbar/back");
|
||||
gtk_action_set_sensitive (action, queue_has_prev (queue));
|
||||
/* update the back button and its menu */
|
||||
|
||||
action = gtk_ui_manager_get_action (ui_manager,
|
||||
"/ui/help-browser-toolbar/forward");
|
||||
"/ui/help-browser-popup/back");
|
||||
gtk_action_set_sensitive (action, queue_has_prev (queue));
|
||||
|
||||
gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev),
|
||||
build_menu (queue_list_prev (queue)));
|
||||
|
||||
/* update the forward button and its menu */
|
||||
|
||||
action = gtk_ui_manager_get_action (ui_manager,
|
||||
"/ui/help-browser-popup/forward");
|
||||
gtk_action_set_sensitive (action, queue_has_next (queue));
|
||||
|
||||
gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev),
|
||||
build_menu (queue_list_next (queue)));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -603,6 +663,9 @@ title_changed (HtmlDocument *doc,
|
|||
history_add (GTK_COMBO_BOX (data), current_ref,
|
||||
title ? title : _("Untitled"));
|
||||
|
||||
if (title)
|
||||
queue_set_title (queue, title);
|
||||
|
||||
g_free (title);
|
||||
}
|
||||
|
||||
|
|
|
@ -34,17 +34,37 @@ struct _Queue
|
|||
GList *current;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gchar *uri;
|
||||
gchar *title;
|
||||
} Item;
|
||||
|
||||
|
||||
static Item *
|
||||
item_new (const gchar *uri)
|
||||
{
|
||||
Item *item = g_new0 (Item, 1);
|
||||
|
||||
item->uri = g_strdup (uri);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
static void
|
||||
item_free (Item *item)
|
||||
{
|
||||
g_free (item->uri);
|
||||
g_free (item->title);
|
||||
|
||||
g_free (item);
|
||||
}
|
||||
|
||||
|
||||
Queue *
|
||||
queue_new (void)
|
||||
{
|
||||
Queue *h;
|
||||
|
||||
h = g_malloc (sizeof (Queue));
|
||||
|
||||
h->queue = NULL;
|
||||
h->current = NULL;
|
||||
|
||||
return (h);
|
||||
return g_new0 (Queue, 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -84,36 +104,42 @@ const gchar *
|
|||
queue_prev (Queue *h)
|
||||
{
|
||||
GList *p;
|
||||
Item *item;
|
||||
|
||||
if (!h || !h->queue || (h->current == g_list_first (h->queue)))
|
||||
return NULL;
|
||||
|
||||
p = g_list_previous (h->current);
|
||||
|
||||
return (const gchar *) p->data;
|
||||
item = p->data;
|
||||
|
||||
return (const gchar *) item->uri;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
queue_next (Queue *h)
|
||||
{
|
||||
GList *p;
|
||||
Item *item;
|
||||
|
||||
if (!h || !h->queue || (h->current == g_list_last(h->queue)))
|
||||
return NULL;
|
||||
|
||||
p = g_list_next (h->current);
|
||||
|
||||
return (const gchar *) p->data;
|
||||
item = p->data;
|
||||
|
||||
return (const gchar *) item->uri;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
queue_add (Queue *h,
|
||||
const gchar *ref)
|
||||
const gchar *uri)
|
||||
{
|
||||
GList *trash = NULL;
|
||||
|
||||
g_return_if_fail (h != NULL);
|
||||
g_return_if_fail (ref != NULL);
|
||||
g_return_if_fail (uri != NULL);
|
||||
|
||||
if (h->current)
|
||||
{
|
||||
|
@ -121,14 +147,34 @@ queue_add (Queue *h,
|
|||
h->current->next = NULL;
|
||||
}
|
||||
|
||||
h->queue = g_list_append (h->queue, g_strdup (ref));
|
||||
h->queue = g_list_append (h->queue, item_new (uri));
|
||||
h->current = g_list_last (h->queue);
|
||||
|
||||
if (trash)
|
||||
{
|
||||
g_list_foreach (trash, (GFunc) g_free, NULL);
|
||||
g_list_foreach (trash, (GFunc) item_free, NULL);
|
||||
g_list_free (trash);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
queue_set_title (Queue *h,
|
||||
const gchar *title)
|
||||
{
|
||||
Item *item;
|
||||
|
||||
g_return_if_fail (h != NULL);
|
||||
g_return_if_fail (title != NULL);
|
||||
|
||||
if (! h->current || ! h->current->data)
|
||||
return;
|
||||
|
||||
item = h->current->data;
|
||||
|
||||
if (item->title)
|
||||
g_free (item->title);
|
||||
|
||||
item->title = g_strdup (title);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -136,7 +182,7 @@ queue_has_next (Queue *h)
|
|||
{
|
||||
if (!h || !h->queue || (h->current == g_list_last (h->queue)))
|
||||
return FALSE;
|
||||
|
||||
|
||||
return (g_list_next (h->current) != NULL);
|
||||
}
|
||||
|
||||
|
@ -145,6 +191,52 @@ queue_has_prev (Queue *h)
|
|||
{
|
||||
if (!h || !h->queue || (h->current == g_list_first (h->queue)))
|
||||
return FALSE;
|
||||
|
||||
|
||||
return (g_list_previous (h->current) != NULL);
|
||||
}
|
||||
|
||||
GList *
|
||||
queue_list_next (Queue *h)
|
||||
{
|
||||
GList *result = NULL;
|
||||
|
||||
if (queue_has_next)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
for (list = g_list_next (h->current);
|
||||
list;
|
||||
list = g_list_next (list))
|
||||
{
|
||||
Item *item = list->data;
|
||||
|
||||
result = g_list_prepend (result,
|
||||
item->title ? item->title : item->uri);
|
||||
}
|
||||
}
|
||||
|
||||
return g_list_reverse (result);
|
||||
}
|
||||
|
||||
GList *
|
||||
queue_list_prev (Queue *h)
|
||||
{
|
||||
GList *result = NULL;
|
||||
|
||||
if (queue_has_prev)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
for (list = g_list_previous (h->current);
|
||||
list;
|
||||
list = g_list_previous (list))
|
||||
{
|
||||
Item *item = list->data;
|
||||
|
||||
result = g_list_prepend (result,
|
||||
item->title ? item->title : item->uri);
|
||||
}
|
||||
}
|
||||
|
||||
return g_list_reverse (result);
|
||||
}
|
||||
|
|
|
@ -25,17 +25,23 @@
|
|||
#ifndef _GIMP_HELP_QUEUE_H_
|
||||
#define _GIMP_HELP_QUEUE_H_
|
||||
|
||||
|
||||
typedef struct _Queue Queue;
|
||||
|
||||
Queue * queue_new (void);
|
||||
void queue_free (Queue *queue);
|
||||
void queue_add (Queue *queue,
|
||||
const gchar *ref);
|
||||
const gchar *uri);
|
||||
void queue_set_title (Queue *queue,
|
||||
const gchar *title);
|
||||
const gchar * queue_prev (Queue *queue);
|
||||
const gchar * queue_next (Queue *queue);
|
||||
void queue_move_prev (Queue *queue);
|
||||
void queue_move_next (Queue *queue);
|
||||
gboolean queue_has_next (Queue *queue);
|
||||
gboolean queue_has_prev (Queue *queue);
|
||||
GList * queue_list_prev (Queue *queue);
|
||||
GList * queue_list_next (Queue *queue);
|
||||
|
||||
|
||||
#endif /* _GIMP_HELP_QUEUE_H_ */
|
||||
|
|
Loading…
Reference in New Issue