[Goodies-commits] r4137 - in xfce4-dict/trunk: . lib panel-plugin src
Enrico Troeger
enrico at xfce.org
Sun Mar 30 11:01:41 CEST 2008
Author: enrico
Date: 2008-03-30 09:01:41 +0000 (Sun, 30 Mar 2008)
New Revision: 4137
Added:
xfce4-dict/trunk/lib/gui.c
xfce4-dict/trunk/lib/gui.h
xfce4-dict/trunk/lib/inline-icon.h
xfce4-dict/trunk/lib/libdict.h
xfce4-dict/trunk/lib/prefs.c
xfce4-dict/trunk/lib/prefs.h
Modified:
xfce4-dict/trunk/ChangeLog
xfce4-dict/trunk/lib/Makefile.am
xfce4-dict/trunk/lib/aspell.c
xfce4-dict/trunk/lib/common.c
xfce4-dict/trunk/lib/common.h
xfce4-dict/trunk/lib/dictd.c
xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c
xfce4-dict/trunk/src/xfce4-dict.c
Log:
More code reorganisation and cleanup.
Modified: xfce4-dict/trunk/ChangeLog
===================================================================
--- xfce4-dict/trunk/ChangeLog 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/ChangeLog 2008-03-30 09:01:41 UTC (rev 4137)
@@ -1,3 +1,8 @@
+2008-03-30 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+
+ * More code reorganisation and cleanup.
+
+
2008-03-27 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* Reorganise most of the code base to separat commonly used code from the
Modified: xfce4-dict/trunk/lib/Makefile.am
===================================================================
--- xfce4-dict/trunk/lib/Makefile.am 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/lib/Makefile.am 2008-03-30 09:01:41 UTC (rev 4137)
@@ -1,17 +1,26 @@
+inline-icon.h: $(top_srcdir)/xfce4-dict.svg
+ gdk-pixbuf-csource --raw --name=dict_icon_data $(top_srcdir)/xfce4-dict.svg > $(srcdir)/inline-icon.h
+
+
noinst_LIBRARIES = \
libdict.a
libdict_a_SOURCES = \
inline-icon.h \
popup_def.h \
+ libdict.h \
aspell.c \
aspell.h \
common.c \
common.h \
+ dictd.c \
dictd.h \
- dictd.c
+ gui.c \
+ gui.h \
+ prefs.c \
+ prefs.h
libdict_a_CFLAGS = \
-I$(top_srcdir) \
@@ -19,6 +28,3 @@
$(LIBXFCE4PANEL_CFLAGS) \
-DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
@GTHREAD_CFLAGS@
-
-inline-icon.h: $(top_srcdir)/xfce4-dict.svg
- gdk-pixbuf-csource --raw --name=dict_icon_data $(top_srcdir)/xfce4-dict.svg > $(srcdir)/inline-icon.h
Modified: xfce4-dict/trunk/lib/aspell.c
===================================================================
--- xfce4-dict/trunk/lib/aspell.c 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/lib/aspell.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -1,6 +1,6 @@
/* $Id$
*
- * Copyright 2007-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -31,11 +31,9 @@
#include <libxfcegui4/libxfcegui4.h>
-/* Simple forward declaration to avoid inclusion of libxfce4panel headers */
-typedef struct XfcePanelPlugin_t XfcePanelPlugin;
-
#include "common.h"
#include "aspell.h"
+#include "gui.h"
static GIOChannel *set_up_io_channel(gint fd, GIOCondition cond, GIOFunc func, gconstpointer data)
@@ -142,17 +140,32 @@
gint stdout_fd;
gint stderr_fd;
gint stdin_fd;
+ gchar *tts;
if (! NZV(dd->spell_bin))
{
dict_status_add(dd, _("Please set an appropriate aspell command."));
return;
}
+
if (! NZV(word))
{
dict_status_add(dd, _("Invalid input."));
return;
}
+
+ /* TODO search only for the first word when working on a sentence,
+ * workout a better solution */
+ tts = g_strdup(word);
+ if ((tts = strchr(word, ' ')) ||
+ (tts = strchr(word, '-')) ||
+ (tts = strchr(word, '_')) ||
+ (tts = strchr(word, '.')) ||
+ (tts = strchr(word, ',')))
+ {
+ *tts = '\0';
+ }
+
locale_cmd = g_locale_from_utf8(dd->spell_bin, -1, NULL, NULL, NULL);
if (locale_cmd == NULL)
locale_cmd = g_strdup(dd->spell_bin);
@@ -164,13 +177,11 @@
argv[3] = g_strdup(dd->spell_dictionary);
argv[4] = NULL;
- dict_clear_text_buffer(dd);
-
if (g_spawn_async_with_pipes(NULL, argv, NULL,
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, NULL,
&stdin_fd, &stdout_fd, &stderr_fd, &error))
{
- set_up_io_channel(stdin_fd, G_IO_OUT, iofunc_write, word);
+ set_up_io_channel(stdin_fd, G_IO_OUT, iofunc_write, tts);
set_up_io_channel(stdout_fd, G_IO_IN|G_IO_PRI|G_IO_HUP|G_IO_ERR|G_IO_NVAL, iofunc_read, dd);
set_up_io_channel(stderr_fd, G_IO_IN|G_IO_PRI|G_IO_HUP|G_IO_ERR|G_IO_NVAL, iofunc_read_err, dd);
dict_status_add(dd, _("Ready."));
@@ -182,5 +193,6 @@
error = NULL;
}
+ g_free(tts);
g_strfreev(argv);
}
Modified: xfce4-dict/trunk/lib/common.c
===================================================================
--- xfce4-dict/trunk/lib/common.c 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/lib/common.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -36,25 +36,16 @@
-/* Simple forward declaration to avoid inclusion of libxfce4panel headers */
-typedef struct XfcePanelPlugin_t XfcePanelPlugin;
-
#include "common.h"
#include "aspell.h"
#include "dictd.h"
-#include "inline-icon.h"
+#include "gui.h"
-/* the following extern declared functions are called here for interaction with the panel
- * plugin (if in use) and to avoid to require linkage to libxfce4panel */
-extern void dict_panel_plugin_save_settings(DictData *dd);
-extern void dict_panel_plugin_unblock(DictData *dd);
-
-
/* TODO make me UTF-8 safe */
-static gint dict_str_pos(const gchar *haystack, const gchar *needle)
+static gint str_pos(const gchar *haystack, const gchar *needle)
{
gint haystack_length = strlen(haystack);
gint needle_length = strlen(needle);
@@ -93,7 +84,7 @@
/* Replaces all occurrences of needle in haystack with replacement.
* All strings have to be NULL-terminated and needle and replacement have to be different,
* e.g. needle "%" and replacement "%%" causes an endless loop */
-static gchar *dict_str_replace(gchar *haystack, const gchar *needle, const gchar *replacement)
+static gchar *str_replace(gchar *haystack, const gchar *needle, const gchar *replacement)
{
gint i;
gchar *start;
@@ -111,7 +102,7 @@
return haystack;
start = strstr(haystack, needle);
- lt_pos = dict_str_pos(haystack, needle);
+ lt_pos = str_pos(haystack, needle);
if (start == NULL || lt_pos == -1)
return haystack;
@@ -128,53 +119,12 @@
result = str->str;
g_free(haystack);
g_string_free(str, FALSE);
- return dict_str_replace(result, needle, replacement);
+ return str_replace(result, needle, replacement);
}
-void dict_set_panel_entry_text(DictData *dd, const gchar *text)
-{
- if (dd->panel_entry != NULL)
- gtk_entry_set_text(GTK_ENTRY(dd->panel_entry), text);
-}
-
-
-void dict_show_main_window(DictData *dd)
-{
- gtk_widget_show(dd->window);
- gtk_window_deiconify(GTK_WINDOW(dd->window));
- gtk_window_present(GTK_WINDOW(dd->window));
-}
-
-
-void dict_status_add(DictData *dd, const gchar *format, ...)
-{
- static gchar string[512];
- va_list args;
-
- string[0] = ' ';
- va_start(args, format);
- g_vsnprintf(string + 1, (sizeof string) - 1, format, args);
- va_end(args);
-
- gtk_statusbar_pop(GTK_STATUSBAR(dd->statusbar), 1);
- gtk_statusbar_push(GTK_STATUSBAR(dd->statusbar), 1, string);
-}
-
-
-void dict_clear_text_buffer(DictData *dd)
-{
- GtkTextIter start_iter, end_iter;
-
- /* clear the TextBuffer */
- gtk_text_buffer_get_start_iter(dd->main_textbuffer, &start_iter);
- gtk_text_buffer_get_end_iter(dd->main_textbuffer, &end_iter);
- gtk_text_buffer_delete(dd->main_textbuffer, &start_iter, &end_iter);
-}
-
-
/* taken from xarchiver, thanks Giuseppe */
-static gboolean dict_open_browser(DictData *dd, const gchar *uri)
+static gboolean open_browser(DictData *dd, const gchar *uri)
{
gchar *argv[3];
gchar *browser_path;
@@ -202,7 +152,7 @@
argv[1] = (gchar*) uri;
argv[2] = NULL;
- result = gdk_spawn_on_screen(gtk_widget_get_screen(GTK_WIDGET(dd->plugin)), NULL, argv, NULL,
+ result = gdk_spawn_on_screen(gtk_widget_get_screen(dd->window), NULL, argv, NULL,
G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
g_free (browser_path);
@@ -211,7 +161,7 @@
}
-static gboolean dict_start_web_query(DictData *dd, const gchar *word)
+static gboolean start_web_query(DictData *dd, const gchar *word)
{
gboolean use_leo = FALSE;
gboolean success = TRUE;
@@ -251,8 +201,8 @@
dd->searched_word = tmp;
}
}
- uri = dict_str_replace(g_strdup(base), "{word}", dd->searched_word);
- if (! dict_open_browser(dd, uri))
+ uri = str_replace(g_strdup(base), "{word}", dd->searched_word);
+ if (! open_browser(dd, uri))
{
xfce_err(_("Browser could not be opened. Please check your preferences."));
success = FALSE;
@@ -265,7 +215,6 @@
void dict_search_word(DictData *dd, const gchar *word)
{
- gboolean browser_started = FALSE;
/* sanity checks */
if (! NZV(word))
@@ -293,6 +242,8 @@
dd->searched_word = g_strdup(word);
}
+ dict_clear_text_buffer(dd);
+
switch (dd->mode)
{
case DICTMODE_DICT:
@@ -302,39 +253,23 @@
}
case DICTMODE_WEB:
{
- browser_started = dict_start_web_query(dd, dd->searched_word);
+ gboolean browser_started = start_web_query(dd, dd->searched_word);
+
+ /* If we started a web search, the browser was successfully started and we are not in the
+ * stand-alone app, then hide the main window in favour of the started browser.
+ * If we are in the stand-alone app, don't hide the main window, we don't want this */
+ if (browser_started && dd->is_plugin)
+ {
+ gtk_widget_hide(dd->window);
+ }
break;
}
case DICTMODE_SPELL:
{
- /* TODO search only for the first word when working on a sentence,
- * workout a better solution */
- gchar *first_word_end = dd->searched_word;
- if ((first_word_end = strchr(dd->searched_word, ' ')) ||
- (first_word_end = strchr(dd->searched_word, '-')) ||
- (first_word_end = strchr(dd->searched_word, '_')) ||
- (first_word_end = strchr(dd->searched_word, '.')) ||
- (first_word_end = strchr(dd->searched_word, ',')))
- {
- *first_word_end = '\0';
- }
-
dict_start_aspell_query(dd, dd->searched_word);
break;
}
}
-
- /* If we started a web search, the browser was successfully started and we are not in the
- * stand-alone app, then hide the main window in favour of the started browser.
- * If we are in the stand-alone app, don't hide the main window, we don't want this */
- if (browser_started && dd->plugin != NULL)
- {
- gtk_widget_hide(dd->window);
- }
- else
- {
- dict_show_main_window(dd);
- }
}
@@ -406,16 +341,9 @@
void dict_free_data(DictData *dd)
{
- if (dd->plugin != NULL)
- {
- /* Destroy the setting dialog, if this open */
- GtkWidget *dialog = g_object_get_data(G_OBJECT(dd->plugin), "dialog");
- if (dialog)
- gtk_widget_destroy(dialog);
- }
+ g_message("dict: destroy window");
+ gtk_widget_destroy(dd->window);
- gtk_widget_destroy(dd->window);
-
dict_write_rc_file(dd);
g_free(dd->searched_word);
g_free(dd->dictionary);
@@ -425,654 +353,11 @@
if (dd->icon != NULL)
g_object_unref(dd->icon);
- if (dd->tooltips != NULL)
- gtk_object_sink(GTK_OBJECT(dd->tooltips));
g_free(dd);
}
-
-
-static void dict_properties_dialog_response(GtkWidget *dlg, gint response, DictData *dd)
-{
- g_object_set_data(G_OBJECT(dd->plugin), "dialog", NULL);
-
- if (response == GTK_RESPONSE_OK)
- {
- gchar *tmp;
- /* MODE DICT */
- tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo));
- if (tmp == NULL || tmp[0] == '0' || tmp[0] == '-')
- {
- xfce_err(_("You have chosen an invalid dictionary entry."));
- g_free(tmp);
- return;
- }
-
- dd->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner));
-
- g_free(dd->server);
- dd->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->server_entry)));
-
- g_free(dd->dictionary);
- dd->dictionary = tmp;
-
- /* MODE WEB */
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng)))
- dd->web_mode = WEBMODE_LEO_GERENG;
- else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre)))
- dd->web_mode = WEBMODE_LEO_GERFRE;
- else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa)))
- dd->web_mode = WEBMODE_LEO_GERSPA;
- else
- {
- dd->web_mode = WEBMODE_OTHER;
-
- g_free(dd->web_url);
- dd->web_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->web_entry)));
- }
-
- /* MODE SPELL */
- tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->spell_combo));
- if (NZV(tmp))
- {
- g_free(dd->spell_dictionary);
- dd->spell_dictionary = tmp;
- }
-
- g_free(dd->spell_bin);
- dd->spell_bin = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->spell_entry)));
-
- /* general settings */
- dd->show_panel_entry = gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(dd->check_panel_entry));
- dd->panel_entry_size = gtk_spin_button_get_value_as_int(
- GTK_SPIN_BUTTON(dd->panel_entry_size_spinner));
-
- if (dd->plugin != NULL)
- dict_panel_plugin_save_settings(dd);
-
- /* save settings */
- dict_write_rc_file(dd);
- }
- gtk_widget_destroy(dlg);
-
- if (dd->plugin != NULL)
- dict_panel_plugin_unblock(dd);
-}
-
-
-static void dict_show_panel_entry_toggled(GtkToggleButton *tb, DictData *dd)
-{
- gtk_widget_set_sensitive(dd->panel_entry_size_spinner, gtk_toggle_button_get_active(tb));
- gtk_widget_set_sensitive(dd->panel_entry_size_label, gtk_toggle_button_get_active(tb));
-}
-
-
-static void dict_use_webserver_toggled(GtkToggleButton *tb, DictData *dd)
-{
- gtk_widget_set_sensitive(dd->web_entry, gtk_toggle_button_get_active(tb));
- gtk_widget_set_sensitive(dd->web_entry_label, gtk_toggle_button_get_active(tb));
-}
-
-
-void dict_get_spell_dictionaries(DictData *dd)
-{
- if (NZV(dd->spell_bin))
- {
- gchar *tmp = NULL, *cmd, *locale_cmd;
-
- cmd = g_strconcat(dd->spell_bin, " dump dicts", NULL);
- locale_cmd = g_locale_from_utf8(cmd, -1, NULL, NULL, NULL);
- if (locale_cmd == NULL)
- locale_cmd = g_strdup(cmd);
- g_spawn_command_line_sync(locale_cmd, &tmp, NULL, NULL, NULL);
- if (NZV(tmp))
- {
- gchar **list = g_strsplit_set(tmp, "\n\r", -1);
- gchar *item;
- guint i, len = g_strv_length(list);
- for (i = 0; i < len; i++)
- {
- item = g_strstrip(list[i]);
- gtk_combo_box_append_text(GTK_COMBO_BOX(dd->spell_combo), item);
- if (strcmp(dd->spell_dictionary, item) == 0)
- gtk_combo_box_set_active(GTK_COMBO_BOX(dd->spell_combo), i);
- }
- g_strfreev(list);
- }
-
- g_free(cmd);
- g_free(locale_cmd);
- g_free(tmp);
- }
-}
-
-
-void dict_properties_dialog(DictData *dd)
-{
- GtkWidget *dlg, *header, *vbox, *label3, *parent;
-
- parent = (dd->plugin != NULL) ? GTK_WIDGET(dd->plugin) : dd->window;
-
- dlg = gtk_dialog_new_with_buttons(_("Properties"),
- GTK_WINDOW(gtk_widget_get_toplevel(parent)),
- GTK_DIALOG_DESTROY_WITH_PARENT |
- GTK_DIALOG_NO_SEPARATOR,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
- NULL);
-
- if (dd->plugin != NULL)
- g_object_set_data(G_OBJECT(dd->plugin), "dialog", dlg);
-
- gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
-
- g_signal_connect(dlg, "response", G_CALLBACK(dict_properties_dialog_response), dd);
-
- gtk_container_set_border_width(GTK_CONTAINER(dlg), 2);
-
- header = xfce_create_header(NULL, _("Dictionary plugin"));
- gtk_container_set_border_width(GTK_CONTAINER(header), 6);
- gtk_widget_show(header);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dlg)->vbox), header, FALSE, TRUE, 0);
-
- vbox = gtk_vbox_new(FALSE, 3);
- gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
- gtk_widget_show(vbox);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), vbox, TRUE, TRUE, 0);
-
- /*
- * Mode: DICT
- */
- {
- GtkWidget *label1, *label2, *table, *button_get_list, *frame1;
-
- /* server address */
- label1 = gtk_label_new_with_mnemonic(_("Server:"));
- gtk_widget_show(label1);
-
- dd->server_entry = gtk_entry_new();
- gtk_entry_set_max_length(GTK_ENTRY(dd->server_entry), 256);
- if (dd->server != NULL)
- {
- gtk_entry_set_text(GTK_ENTRY(dd->server_entry), dd->server);
- }
- gtk_widget_show(dd->server_entry);
-
- /* server port */
- label2 = gtk_label_new_with_mnemonic(_("Server Port:"));
- gtk_widget_show(label2);
-
- dd->port_spinner = gtk_spin_button_new_with_range(0.0, 65536.0, 1.0);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(dd->port_spinner), dd->port);
- gtk_widget_show(dd->port_spinner);
-
- /* dictionary */
- label3 = gtk_label_new_with_mnemonic(_("Dictionary:"));
- gtk_widget_show(label3);
-
- dd->dict_combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), _("* (use all)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo),
- _("! (use all, stop after first match)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), "----------------");
- if (dd->dictionary != NULL)
- {
- if (dd->dictionary[0] == '*')
- gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 0);
- else if (dd->dictionary[0] == '!')
- gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 1);
- else
- {
- gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), dd->dictionary);
- gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 3);
- }
- }
-
- gtk_widget_show(dd->dict_combo);
-
- button_get_list = gtk_button_new_from_stock("gtk-find");
- gtk_widget_show(button_get_list);
- g_signal_connect(button_get_list, "clicked", G_CALLBACK(dict_get_dict_list_cb), dd);
-
-
- /* put it all together */
- table = gtk_table_new(3, 3, FALSE);
- gtk_widget_show(table);
- gtk_table_set_row_spacings(GTK_TABLE(table), 5);
- gtk_table_set_col_spacings(GTK_TABLE(table), 5);
-
- gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 5);
- gtk_misc_set_alignment(GTK_MISC(label1), 1, 0);
-
- gtk_table_attach(GTK_TABLE(table), dd->server_entry, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 5);
-
- gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 0);
- gtk_misc_set_alignment(GTK_MISC(label2), 1, 0);
-
- gtk_table_attach(GTK_TABLE(table), dd->port_spinner, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 5);
-
- gtk_table_attach(GTK_TABLE(table), label3, 0, 1, 2, 3,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 0);
- gtk_misc_set_alignment(GTK_MISC(label3), 1, 0);
-
- gtk_table_attach(GTK_TABLE(table), dd->dict_combo, 1, 2, 2, 3,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
-
- gtk_table_attach(GTK_TABLE(table), button_get_list, 2, 3, 2, 3,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 5);
-
-
- frame1 = gtk_frame_new(_("Use a DICT server"));
- gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_ETCHED_OUT);
- gtk_widget_show(frame1);
- gtk_container_set_border_width(GTK_CONTAINER(frame1), 3);
- gtk_container_add(GTK_CONTAINER(frame1), table);
- gtk_box_pack_start(GTK_BOX(vbox), frame1, FALSE, FALSE, 0);
- }
-
- /*
- * Mode: WEB
- */
- {
- GtkWidget *web_vbox, *entry_hbox, *help_label, *frame2;
- GSList *web_type;
-
- web_vbox = gtk_vbox_new(FALSE, 5);
- gtk_widget_show(web_vbox);
-
- dd->web_radio_leo_gereng = gtk_radio_button_new_with_label(NULL,
- _("dict.leo.org - German <-> English"));
- web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gereng));
- if (dd->web_mode == WEBMODE_LEO_GERENG)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng), TRUE);
- gtk_widget_show(dd->web_radio_leo_gereng);
- gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_leo_gereng, FALSE, FALSE, 0);
-
- dd->web_radio_leo_gerfre = gtk_radio_button_new_with_label(web_type,
- _("dict.leo.org - German <-> French"));
- web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gerfre));
- if (dd->web_mode == WEBMODE_LEO_GERFRE)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre), TRUE);
- gtk_widget_show(dd->web_radio_leo_gerfre);
- gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_leo_gerfre, FALSE, FALSE, 0);
-
- dd->web_radio_leo_gerspa = gtk_radio_button_new_with_label(web_type,
- _("dict.leo.org - German <-> Spanish"));
- web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gerspa));
- if (dd->web_mode == WEBMODE_LEO_GERSPA)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa), TRUE);
- gtk_widget_show(dd->web_radio_leo_gerspa);
- gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_leo_gerspa, FALSE, FALSE, 0);
-
- dd->web_radio_other = gtk_radio_button_new_with_label(web_type, _("Use another website"));
- if (dd->web_mode == WEBMODE_OTHER)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_other), TRUE);
- gtk_widget_show(dd->web_radio_other);
- g_signal_connect(G_OBJECT(dd->web_radio_other), "toggled",
- G_CALLBACK(dict_use_webserver_toggled), dd);
- gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_other, FALSE, FALSE, 0);
-
- dd->web_entry_label = gtk_label_new_with_mnemonic(_("URL:"));
- gtk_widget_show(dd->web_entry_label);
- dd->web_entry = gtk_entry_new();
- if (dd->web_url != NULL)
- gtk_entry_set_text(GTK_ENTRY(dd->web_entry), dd->web_url);
- gtk_widget_show(dd->web_entry);
-
- entry_hbox = gtk_hbox_new(FALSE, 0);
- gtk_widget_show(entry_hbox);
- gtk_box_pack_start(GTK_BOX(entry_hbox), dd->web_entry_label, FALSE, TRUE, 5);
- gtk_box_pack_start(GTK_BOX(entry_hbox), dd->web_entry, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(web_vbox), entry_hbox, FALSE, FALSE, 0);
-
- help_label = gtk_label_new(_("Enter an URL to a web site which offer translation services.\nUse {word} as placeholder for the searched word."));
- gtk_label_set_line_wrap(GTK_LABEL(help_label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(help_label), 0, 0);
- gtk_widget_show(help_label);
- gtk_box_pack_start(GTK_BOX(web_vbox), help_label, TRUE, TRUE, 0);
-
- frame2 = gtk_frame_new(_("Use a web site"));
- gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_OUT);
- gtk_widget_show(frame2);
- gtk_container_set_border_width(GTK_CONTAINER(frame2), 3);
- gtk_container_add(GTK_CONTAINER(frame2), web_vbox);
- gtk_box_pack_start(GTK_BOX(vbox), frame2, TRUE, TRUE, 0);
- }
-
- /*
- * Mode: ASPELL
- */
- {
- GtkWidget *label4, *label5, *table, *frame3;
-
- label4 = gtk_label_new_with_mnemonic(_("Aspell program:"));
- gtk_widget_show(label4);
-
- dd->spell_entry = gtk_entry_new();
- gtk_entry_set_max_length(GTK_ENTRY(dd->spell_entry), 256);
- if (dd->spell_bin != NULL)
- {
- gtk_entry_set_text(GTK_ENTRY(dd->spell_entry), dd->spell_bin);
- }
- gtk_widget_show(dd->spell_entry);
-
- label5 = gtk_label_new_with_mnemonic(_("Dictionary:"));
- gtk_widget_show(label5);
-
- dd->spell_combo = gtk_combo_box_new_text();
- dict_get_spell_dictionaries(dd);
- gtk_widget_show(dd->spell_combo);
-
- table = gtk_table_new(2, 2, FALSE);
- gtk_widget_show(table);
- gtk_table_set_row_spacings(GTK_TABLE(table), 5);
- gtk_table_set_col_spacings(GTK_TABLE(table), 5);
-
- gtk_table_attach(GTK_TABLE(table), label4, 0, 1, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 5);
- gtk_misc_set_alignment(GTK_MISC(label4), 1, 0);
-
- gtk_table_attach(GTK_TABLE(table), dd->spell_entry, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
- (GtkAttachOptions) (0), 5, 5);
-
- gtk_table_attach(GTK_TABLE(table), label5, 0, 1, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 5, 0);
- gtk_misc_set_alignment(GTK_MISC(label5), 1, 0);
-
- gtk_table_attach(GTK_TABLE(table), dd->spell_combo, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
- (GtkAttachOptions) (0), 5, 5);
-
- frame3 = gtk_frame_new(_("Use Aspell"));
- gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_OUT);
- gtk_widget_show(frame3);
- gtk_container_set_border_width(GTK_CONTAINER(frame3), 3);
- gtk_container_add(GTK_CONTAINER(frame3), table);
- gtk_box_pack_start(GTK_BOX(vbox), frame3, TRUE, FALSE, 0);
- }
-
- /* Display text entry in the panel */
- {
- GtkWidget *pe_hbox, *label;
-
- /* show panel entry check box */
- dd->check_panel_entry = gtk_check_button_new_with_label(
- _("Show text field in the panel"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->check_panel_entry), dd->show_panel_entry);
- gtk_tooltips_set_tip(dd->tooltips, dd->check_panel_entry,
- _("This option can only be used when the panel has a horizontal orientation."), NULL);
- gtk_widget_show(dd->check_panel_entry);
- g_signal_connect(G_OBJECT(dd->check_panel_entry), "toggled",
- G_CALLBACK(dict_show_panel_entry_toggled), dd);
-
- /* panel entry size */
- dd->panel_entry_size_label = gtk_label_new_with_mnemonic(_("Text field size:"));
- gtk_widget_show(dd->panel_entry_size_label);
- dd->panel_entry_size_spinner = gtk_spin_button_new_with_range(0.0, 500.0, 1.0);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(dd->panel_entry_size_spinner),
- dd->panel_entry_size);
- gtk_widget_show(dd->panel_entry_size_spinner);
-
- pe_hbox = gtk_hbox_new(FALSE, 0);
- gtk_widget_show(pe_hbox);
-
- gtk_box_pack_start(GTK_BOX(pe_hbox), dd->panel_entry_size_label, FALSE, FALSE, 10);
- gtk_box_pack_start(GTK_BOX(pe_hbox), dd->panel_entry_size_spinner, TRUE, TRUE, 0);
-
- label = gtk_label_new(""); /* just to make some space, should be done better */
- gtk_widget_show(label);
- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), dd->check_panel_entry, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), pe_hbox, FALSE, FALSE, 0);
-
- }
-
- /* init the sensitive widgets */
- dict_use_webserver_toggled(GTK_TOGGLE_BUTTON(dd->web_radio_other), dd);
- dict_show_panel_entry_toggled(GTK_TOGGLE_BUTTON(dd->check_panel_entry), dd);
-
- gtk_widget_show(dlg);
-}
-
-
-void dict_entry_activate_cb(GtkEntry *entry, DictData *dd)
-{
- const gchar *entered_text;
-
- if (entry != NULL && GTK_WIDGET(entry) == dd->panel_entry)
- {
- entered_text = gtk_entry_get_text(GTK_ENTRY(dd->panel_entry));
- gtk_entry_set_text(GTK_ENTRY(dd->main_entry), entered_text);
- }
- else
- entered_text = gtk_entry_get_text(GTK_ENTRY(dd->main_entry));
-
- dict_search_word(dd, entered_text);
-}
-
-
-void dict_entry_button_clicked_cb(GtkButton *button, DictData *dd)
-{
- dict_entry_activate_cb(NULL, dd);
- gtk_widget_grab_focus(dd->main_entry);
-}
-
-
-void dict_clear_button_clicked_cb(GtkButton *button, DictData *dd)
-{
- dict_clear_text_buffer(dd);
-
- /* clear the entries */
- gtk_entry_set_text(GTK_ENTRY(dd->main_entry), "");
- dict_set_panel_entry_text(dd, "");
-
- dict_status_add(dd, _("Ready."));
-}
-
-
-void dict_search_mode_dict_toggled(GtkToggleButton *togglebutton, DictData *dd)
-{
- if (gtk_toggle_button_get_active(togglebutton))
- {
- dd->mode = DICTMODE_DICT;
- gtk_widget_grab_focus(dd->main_entry);
- }
-}
-
-
-void dict_search_mode_web_toggled(GtkToggleButton *togglebutton, DictData *dd)
-{
- if (gtk_toggle_button_get_active(togglebutton))
- {
- dd->mode = DICTMODE_WEB;
- gtk_widget_grab_focus(dd->main_entry);
- }
-}
-
-
-void dict_search_mode_spell_toggled(GtkToggleButton *togglebutton, DictData *dd)
-{
- if (gtk_toggle_button_get_active(togglebutton))
- {
- dd->mode = DICTMODE_SPELL;
- gtk_widget_grab_focus(dd->main_entry);
- }
-}
-
-
-void dict_create_main_window(DictData *dd)
-{
- GtkWidget *main_box;
- GtkWidget *entry_box, *label_box, *entry_label, *entry_button, *clear_button;
- GtkWidget *sep, *align, *scrolledwindow_results;
- GdkPixbuf *icon;
- GtkWidget *method_chooser, *radio, *label;
-
- dd->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(dd->window), "Xfce Dictionary");
- gtk_window_set_default_size(GTK_WINDOW(dd->window), 500, 300);
-
- icon = gdk_pixbuf_new_from_inline(-1, dict_icon_data, FALSE, NULL);
- gtk_window_set_icon(GTK_WINDOW(dd->window), icon);
- g_object_unref(icon);
-
- main_box = gtk_vbox_new(FALSE, 0);
- gtk_widget_show(main_box);
- gtk_container_add(GTK_CONTAINER(dd->window), main_box);
-
- /* entry box (label, entry, buttons) */
- entry_box = gtk_hbox_new(FALSE, 10);
- gtk_widget_show(entry_box);
- gtk_container_set_border_width(GTK_CONTAINER(entry_box), 2);
- gtk_box_pack_start(GTK_BOX(main_box), entry_box, FALSE, TRUE, 5);
-
- label_box = gtk_hbox_new(FALSE, 5);
- gtk_widget_show(label_box);
- gtk_box_pack_start(GTK_BOX(entry_box), label_box, TRUE, TRUE, 0);
-
- entry_label = gtk_label_new(_("Text to search:"));
- gtk_widget_show(entry_label);
- gtk_misc_set_alignment(GTK_MISC(entry_label), 1, 0.5);
-
- align = gtk_alignment_new(1, 0.5, 0, 0);
- gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 5, 0);
- gtk_widget_show(align);
- gtk_container_add(GTK_CONTAINER(align), entry_label);
- gtk_box_pack_start(GTK_BOX(label_box), align, FALSE, FALSE, 2);
-
- dd->main_entry = gtk_entry_new();
- gtk_widget_show(dd->main_entry);
- gtk_box_pack_start(GTK_BOX(label_box), dd->main_entry, TRUE, TRUE, 0);
- g_signal_connect(dd->main_entry, "activate", G_CALLBACK(dict_entry_activate_cb), dd);
-
- entry_button = gtk_button_new_from_stock("gtk-find");
- gtk_widget_show(entry_button);
- gtk_box_pack_start(GTK_BOX(entry_box), entry_button, FALSE, FALSE, 0);
- g_signal_connect(entry_button, "clicked", G_CALLBACK(dict_entry_button_clicked_cb), dd);
-
- clear_button = gtk_button_new_from_stock("gtk-clear");
- gtk_widget_show(clear_button);
- gtk_box_pack_start(GTK_BOX(entry_box), clear_button, FALSE, FALSE, 0);
- g_signal_connect(clear_button, "clicked", G_CALLBACK(dict_clear_button_clicked_cb), dd);
-
- /* just make some space */
- align = gtk_alignment_new(1, 0.5, 0, 0);
- gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 10, 0);
- gtk_widget_show(align);
- gtk_container_add(GTK_CONTAINER(align), gtk_label_new(""));
- gtk_box_pack_start(GTK_BOX(entry_box), align, FALSE, FALSE, 0);
-
- dd->close_button = gtk_button_new_from_stock("gtk-close");
- gtk_widget_show(dd->close_button);
- gtk_box_pack_end(GTK_BOX(entry_box), dd->close_button, FALSE, FALSE, 2);
-
- /* insert it here and it will(hopefully) be placed before the Close button */
- sep = gtk_vseparator_new();
- gtk_widget_show(sep);
- gtk_box_pack_end(GTK_BOX(entry_box), sep, FALSE, FALSE, 5);
-
- /* search method chooser */
- method_chooser = gtk_hbox_new(FALSE, 0);
- gtk_widget_show(method_chooser);
- gtk_box_pack_start(GTK_BOX(main_box), method_chooser, FALSE, FALSE, 0);
-
- label = gtk_label_new(_("Search with:"));
- gtk_widget_show(label);
- gtk_box_pack_start(GTK_BOX(method_chooser), label, FALSE, FALSE, 6);
-
- radio = gtk_radio_button_new_with_label(NULL, _("Dict"));
- gtk_widget_show(radio);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_DICT));
- g_signal_connect(radio, "toggled", G_CALLBACK(dict_search_mode_dict_toggled), dd);
- gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6);
-
- radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Web"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_WEB));
- g_signal_connect(radio, "toggled", G_CALLBACK(dict_search_mode_web_toggled), dd);
- gtk_widget_show(radio);
- gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6);
-
- radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Spellcheck"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_SPELL));
- g_signal_connect(radio, "toggled", G_CALLBACK(dict_search_mode_spell_toggled), dd);
- gtk_widget_show(radio);
- gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6);
-
- /* results area */
- scrolledwindow_results = gtk_scrolled_window_new(NULL, NULL);
- gtk_widget_show(scrolledwindow_results);
- gtk_container_set_border_width(GTK_CONTAINER(scrolledwindow_results), 4);
- gtk_box_pack_start(GTK_BOX(main_box), scrolledwindow_results, TRUE, TRUE, 0);
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow_results),
- GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow_results),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- /* searched words textview stuff */
- dd->main_textview = gtk_text_view_new();
- gtk_text_view_set_editable(GTK_TEXT_VIEW(dd->main_textview), FALSE);
- gtk_text_view_set_left_margin(GTK_TEXT_VIEW(dd->main_textview), 5);
- gtk_text_view_set_right_margin(GTK_TEXT_VIEW(dd->main_textview), 5);
- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(dd->main_textview), GTK_WRAP_WORD);
- dd->main_textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dd->main_textview));
- dd->main_boldtag = gtk_text_buffer_create_tag(dd->main_textbuffer,
- "bold", "weight", PANGO_WEIGHT_BOLD, NULL);
-
- gtk_widget_show(dd->main_textview);
- gtk_container_add(GTK_CONTAINER(scrolledwindow_results), dd->main_textview);
-
- /* status bar */
- dd->statusbar = gtk_statusbar_new();
- gtk_widget_show(dd->statusbar);
- gtk_box_pack_end(GTK_BOX(main_box), dd->statusbar, FALSE, FALSE, 0);
-}
-
-
-const guint8 *dict_get_icon_data(void)
-{
- return dict_icon_data;
-}
-
-
-void dict_about_dialog(GtkWidget *widget, DictData *dd)
-{
- GtkWidget *dialog;
- XfceAboutInfo *info;
-
- info = xfce_about_info_new("xfce4-dict", VERSION,
- _("A client program to query different dictionaries."),
- XFCE_COPYRIGHT_TEXT("2006-2008", "Enrico Tröger"),
- XFCE_LICENSE_GPL);
-
- xfce_about_info_add_credit(info, "Enrico Tröger", "enrico(dot)troeger(at)uvena(dot)de", _("Developer"));
- xfce_about_info_set_homepage(info, "http://goodies.xfce.org");
-
- dialog = xfce_about_dialog_new_with_values(GTK_WINDOW(widget), info, dd->icon);
- g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
- gtk_window_set_title(GTK_WINDOW(dialog), "Xfce Dictionary");
- gtk_dialog_run(GTK_DIALOG(dialog));
-
- xfce_about_info_free(info);
-}
-
-
void dict_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y,
GtkSelectionData *data, guint info, guint ltime, DictData *dd)
{
@@ -1100,3 +385,18 @@
}
+DictData *dict_create_dictdata()
+{
+ DictData *dd = g_new0(DictData, 1);
+
+ /* create a new DictData structure and fill relevant fields with NULL */
+
+ dd->searched_word = NULL;
+ dd->query_is_running = FALSE;
+ dd->query_status = NO_ERROR;
+ dd->panel_entry = NULL;
+
+ return dd;
+}
+
+
Modified: xfce4-dict/trunk/lib/common.h
===================================================================
--- xfce4-dict/trunk/lib/common.h 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/lib/common.h 2008-03-30 09:01:41 UTC (rev 4137)
@@ -1,6 +1,6 @@
/* $Id$
*
- * Copyright 2007-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -52,8 +52,6 @@
typedef struct
{
- XfcePanelPlugin *plugin; /* only used when loaded as panel plugin */
-
dict_mode_t mode;
web_mode_t web_mode;
@@ -73,10 +71,6 @@
GtkWidget *panel_entry_size_spinner;
GtkWidget *check_panel_entry;
- GtkWidget *panel_button;
- GtkWidget *panel_button_image;
- GtkTooltips *tooltips;
-
gboolean show_panel_entry;
gint panel_entry_size;
gint port;
@@ -102,26 +96,20 @@
gchar *spell_dictionary;
GdkPixbuf *icon;
+
+ gboolean is_plugin; /* specify whether the panel plugin loaded or not */
} DictData;
-
-void dict_status_add(DictData *dd, const gchar *format, ...);
-void dict_set_panel_entry_text(DictData *dd, const gchar *text);
-void dict_clear_text_buffer(DictData *dd);
void dict_free_data(DictData *dd);
void dict_write_rc_file(DictData *dd);
void dict_read_rc_file(DictData *dd);
void dict_search_word(DictData *dd, const gchar *word);
-void dict_show_main_window(DictData *dd);
-void dict_properties_dialog(DictData *dd);
-void dict_about_dialog(GtkWidget *widget, DictData *dd);
-const guint8 *dict_get_icon_data(void);
void dict_signal_cb(gint sig);
-void dict_create_main_window(DictData *dd);
-void dict_entry_activate_cb(GtkEntry *entry, DictData *dd);
void dict_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y,
GtkSelectionData *data, guint info, guint ltime, DictData *dd);
+DictData *dict_create_dictdata();
+
#endif
Modified: xfce4-dict/trunk/lib/dictd.c
===================================================================
--- xfce4-dict/trunk/lib/dictd.c 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/lib/dictd.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -43,18 +43,17 @@
#include <signal.h>
#include <string.h>
-/* Simple forward declaration to avoid inclusion of libxfce4panel headers */
-typedef struct XfcePanelPlugin_t XfcePanelPlugin;
-
#include "common.h"
#include "dictd.h"
+#include "gui.h"
+
#define BUF_SIZE 256
-static gint dict_open_socket(const gchar *host_name, gint port)
+static gint open_socket(const gchar *host_name, gint port)
{
struct sockaddr_in addr;
struct hostent *host_p;
@@ -90,7 +89,7 @@
}
-static void dict_send_command(gint fd, const gchar *str)
+static void send_command(gint fd, const gchar *str)
{
gchar buf[256];
gint len = strlen (str);
@@ -100,7 +99,7 @@
}
-static gboolean dict_process_server_response(DictData *dd)
+static gboolean process_server_response(DictData *dd)
{
gint max_lines, i;
gint defs_found = 0;
@@ -216,13 +215,13 @@
}
-static gchar *dict_get_answer(gint fd)
+static gchar *get_answer(gint fd)
{
gboolean fol = FALSE;
gboolean sol = FALSE;
gboolean tol = FALSE;
GString *str = g_string_sized_new(100);
- gchar c, *tmp;
+ gchar c;
gchar ec[3];
alarm(10); /* abort after 5 seconds, there should went wrong something */
@@ -262,22 +261,20 @@
alarm(0);
g_string_append_c(str, '\0');
- tmp = str->str;
- g_string_free(str, FALSE);
- return tmp;
+ return g_string_free(str, FALSE);
}
-static void dict_ask_server(DictData *dd)
+static void ask_server(DictData *dd)
{
gint fd, i;
static gchar cmd[BUF_SIZE];
- if ((fd = dict_open_socket(dd->server, dd->port)) == -1)
+ if ((fd = open_socket(dd->server, dd->port)) == -1)
{
dd->query_status = NO_CONNECTION;
- g_idle_add((GSourceFunc) dict_process_server_response, dd);
+ g_idle_add((GSourceFunc) process_server_response, dd);
g_thread_exit(NULL);
return;
}
@@ -290,17 +287,17 @@
dd->dictionary[i] = '\0';
g_snprintf(cmd, BUF_SIZE, "define %s \"%s\"\n", dd->dictionary, dd->searched_word);
- dict_send_command(fd, cmd);
+ send_command(fd, cmd);
/* and now, "append" again the rest of the dictionary string again */
dd->dictionary[i] = ' ';
- dd->query_buffer = dict_get_answer(fd);
+ dd->query_buffer = get_answer(fd);
close(fd);
dd->query_is_running = FALSE;
/* delegate parsing the response and related GUI stuff to GTK's main thread through the main loop */
- g_idle_add((GSourceFunc) dict_process_server_response, dd);
+ g_idle_add((GSourceFunc) process_server_response, dd);
g_thread_exit(NULL);
}
@@ -314,12 +311,10 @@
}
else
{
- dict_clear_text_buffer(dd);
+ dict_status_add(dd, _("Querying %s..."), dd->server);
- dict_status_add(dd, _("Querying the server %s..."), dd->server);
-
/* start the thread to query the server */
- g_thread_create((GThreadFunc) dict_ask_server, dd, FALSE, NULL);
+ g_thread_create((GThreadFunc) ask_server, dd, FALSE, NULL);
}
}
@@ -337,16 +332,16 @@
host = gtk_entry_get_text(GTK_ENTRY(dd->server_entry));
port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner));
- if ((fd = dict_open_socket(host, port)) == -1)
+ if ((fd = open_socket(host, port)) == -1)
{
xfce_err(_("Could not connect to server."));
return FALSE;
}
- dict_send_command(fd, "show databases");
+ send_command(fd, "show databases");
/* read all server output */
- answer = buffer = dict_get_answer(fd);
+ answer = buffer = get_answer(fd);
close(fd);
/* go to next line */
Added: xfce4-dict/trunk/lib/gui.c
===================================================================
--- xfce4-dict/trunk/lib/gui.c (rev 0)
+++ xfce4-dict/trunk/lib/gui.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -0,0 +1,280 @@
+/* $Id$
+ *
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+/* Creation of main window and helper functions (GUI stuff). */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "common.h"
+#include "gui.h"
+#include "inline-icon.h"
+
+
+
+void dict_set_panel_entry_text(DictData *dd, const gchar *text)
+{
+ if (dd->panel_entry != NULL)
+ gtk_entry_set_text(GTK_ENTRY(dd->panel_entry), text);
+}
+
+
+void dict_status_add(DictData *dd, const gchar *format, ...)
+{
+ static gchar string[512];
+ va_list args;
+
+ string[0] = ' ';
+ va_start(args, format);
+ g_vsnprintf(string + 1, (sizeof string) - 1, format, args);
+ va_end(args);
+
+ gtk_statusbar_pop(GTK_STATUSBAR(dd->statusbar), 1);
+ gtk_statusbar_push(GTK_STATUSBAR(dd->statusbar), 1, string);
+}
+
+
+void dict_clear_text_buffer(DictData *dd)
+{
+ GtkTextIter start_iter, end_iter;
+
+ gtk_text_buffer_get_start_iter(dd->main_textbuffer, &start_iter);
+ gtk_text_buffer_get_end_iter(dd->main_textbuffer, &end_iter);
+ gtk_text_buffer_delete(dd->main_textbuffer, &start_iter, &end_iter);
+}
+
+
+static void entry_activate_cb(GtkEntry *entry, DictData *dd)
+{
+ const gchar *entered_text = gtk_entry_get_text(GTK_ENTRY(dd->main_entry));
+
+ dict_search_word(dd, entered_text);
+}
+
+
+static void entry_button_clicked_cb(GtkButton *button, DictData *dd)
+{
+ entry_activate_cb(NULL, dd);
+ gtk_widget_grab_focus(dd->main_entry);
+}
+
+
+static void clear_button_clicked_cb(GtkButton *button, DictData *dd)
+{
+ dict_clear_text_buffer(dd);
+
+ /* clear the entries */
+ gtk_entry_set_text(GTK_ENTRY(dd->main_entry), "");
+ dict_set_panel_entry_text(dd, "");
+
+ dict_status_add(dd, _("Ready."));
+}
+
+
+static void search_mode_dict_toggled(GtkToggleButton *togglebutton, DictData *dd)
+{
+ if (gtk_toggle_button_get_active(togglebutton))
+ {
+ dd->mode = DICTMODE_DICT;
+ gtk_widget_grab_focus(dd->main_entry);
+ }
+}
+
+
+static void search_mode_web_toggled(GtkToggleButton *togglebutton, DictData *dd)
+{
+ if (gtk_toggle_button_get_active(togglebutton))
+ {
+ dd->mode = DICTMODE_WEB;
+ gtk_widget_grab_focus(dd->main_entry);
+ }
+}
+
+
+static void search_mode_spell_toggled(GtkToggleButton *togglebutton, DictData *dd)
+{
+ if (gtk_toggle_button_get_active(togglebutton))
+ {
+ dd->mode = DICTMODE_SPELL;
+ gtk_widget_grab_focus(dd->main_entry);
+ }
+}
+
+
+const guint8 *dict_get_icon_data(void)
+{
+ return dict_icon_data;
+}
+
+
+void dict_create_main_window(DictData *dd)
+{
+ GtkWidget *main_box;
+ GtkWidget *entry_box, *label_box, *entry_label, *entry_button, *clear_button;
+ GtkWidget *sep, *align, *scrolledwindow_results;
+ GdkPixbuf *icon;
+ GtkWidget *method_chooser, *radio, *label;
+
+ dd->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(dd->window), "Xfce Dictionary");
+ gtk_window_set_default_size(GTK_WINDOW(dd->window), 500, 300);
+
+ icon = gdk_pixbuf_new_from_inline(-1, dict_icon_data, FALSE, NULL);
+ gtk_window_set_icon(GTK_WINDOW(dd->window), icon);
+ g_object_unref(icon);
+
+ main_box = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show(main_box);
+ gtk_container_add(GTK_CONTAINER(dd->window), main_box);
+
+ /* entry box (label, entry, buttons) */
+ entry_box = gtk_hbox_new(FALSE, 10);
+ gtk_widget_show(entry_box);
+ gtk_container_set_border_width(GTK_CONTAINER(entry_box), 2);
+ gtk_box_pack_start(GTK_BOX(main_box), entry_box, FALSE, TRUE, 5);
+
+ label_box = gtk_hbox_new(FALSE, 5);
+ gtk_widget_show(label_box);
+ gtk_box_pack_start(GTK_BOX(entry_box), label_box, TRUE, TRUE, 0);
+
+ entry_label = gtk_label_new(_("Text to search:"));
+ gtk_widget_show(entry_label);
+ gtk_misc_set_alignment(GTK_MISC(entry_label), 1, 0.5);
+
+ align = gtk_alignment_new(1, 0.5, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 5, 0);
+ gtk_widget_show(align);
+ gtk_container_add(GTK_CONTAINER(align), entry_label);
+ gtk_box_pack_start(GTK_BOX(label_box), align, FALSE, FALSE, 2);
+
+ dd->main_entry = gtk_entry_new();
+ gtk_widget_show(dd->main_entry);
+ gtk_box_pack_start(GTK_BOX(label_box), dd->main_entry, TRUE, TRUE, 0);
+ g_signal_connect(dd->main_entry, "activate", G_CALLBACK(entry_activate_cb), dd);
+
+ entry_button = gtk_button_new_from_stock("gtk-find");
+ gtk_widget_show(entry_button);
+ gtk_box_pack_start(GTK_BOX(entry_box), entry_button, FALSE, FALSE, 0);
+ g_signal_connect(entry_button, "clicked", G_CALLBACK(entry_button_clicked_cb), dd);
+
+ clear_button = gtk_button_new_from_stock("gtk-clear");
+ gtk_widget_show(clear_button);
+ gtk_box_pack_start(GTK_BOX(entry_box), clear_button, FALSE, FALSE, 0);
+ g_signal_connect(clear_button, "clicked", G_CALLBACK(clear_button_clicked_cb), dd);
+
+ /* just make some space */
+ align = gtk_alignment_new(1, 0.5, 0, 0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 10, 0);
+ gtk_widget_show(align);
+ gtk_container_add(GTK_CONTAINER(align), gtk_label_new(""));
+ gtk_box_pack_start(GTK_BOX(entry_box), align, FALSE, FALSE, 0);
+
+ dd->close_button = gtk_button_new_from_stock("gtk-close");
+ gtk_widget_show(dd->close_button);
+ gtk_box_pack_end(GTK_BOX(entry_box), dd->close_button, FALSE, FALSE, 2);
+
+ /* insert it here and it will(hopefully) be placed before the Close button */
+ sep = gtk_vseparator_new();
+ gtk_widget_show(sep);
+ gtk_box_pack_end(GTK_BOX(entry_box), sep, FALSE, FALSE, 5);
+
+ /* search method chooser */
+ method_chooser = gtk_hbox_new(FALSE, 0);
+ gtk_widget_show(method_chooser);
+ gtk_box_pack_start(GTK_BOX(main_box), method_chooser, FALSE, FALSE, 0);
+
+ label = gtk_label_new(_("Search with:"));
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(method_chooser), label, FALSE, FALSE, 6);
+
+ radio = gtk_radio_button_new_with_label(NULL, _("Dict"));
+ gtk_widget_show(radio);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_DICT));
+ g_signal_connect(radio, "toggled", G_CALLBACK(search_mode_dict_toggled), dd);
+ gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6);
+
+ radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Web"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_WEB));
+ g_signal_connect(radio, "toggled", G_CALLBACK(search_mode_web_toggled), dd);
+ gtk_widget_show(radio);
+ gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6);
+
+ radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Spellcheck"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_SPELL));
+ g_signal_connect(radio, "toggled", G_CALLBACK(search_mode_spell_toggled), dd);
+ gtk_widget_show(radio);
+ gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6);
+
+ /* results area */
+ scrolledwindow_results = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(scrolledwindow_results);
+ gtk_container_set_border_width(GTK_CONTAINER(scrolledwindow_results), 4);
+ gtk_box_pack_start(GTK_BOX(main_box), scrolledwindow_results, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow_results),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow_results),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ /* searched words textview stuff */
+ dd->main_textview = gtk_text_view_new();
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(dd->main_textview), FALSE);
+ gtk_text_view_set_left_margin(GTK_TEXT_VIEW(dd->main_textview), 5);
+ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(dd->main_textview), 5);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(dd->main_textview), GTK_WRAP_WORD);
+ dd->main_textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dd->main_textview));
+ dd->main_boldtag = gtk_text_buffer_create_tag(dd->main_textbuffer,
+ "bold", "weight", PANGO_WEIGHT_BOLD, NULL);
+
+ gtk_widget_show(dd->main_textview);
+ gtk_container_add(GTK_CONTAINER(scrolledwindow_results), dd->main_textview);
+
+ /* status bar */
+ dd->statusbar = gtk_statusbar_new();
+ gtk_widget_show(dd->statusbar);
+ gtk_box_pack_end(GTK_BOX(main_box), dd->statusbar, FALSE, FALSE, 0);
+}
+
+
+void dict_about_dialog(GtkWidget *widget, DictData *dd)
+{
+ GtkWidget *dialog;
+ XfceAboutInfo *info;
+
+ info = xfce_about_info_new("xfce4-dict", VERSION,
+ _("A client program to query different dictionaries."),
+ XFCE_COPYRIGHT_TEXT("2006-2008", "Enrico Tröger"),
+ XFCE_LICENSE_GPL);
+
+ xfce_about_info_add_credit(info, "Enrico Tröger", "enrico(dot)troeger(at)uvena(dot)de", _("Developer"));
+ xfce_about_info_set_homepage(info, "http://goodies.xfce.org");
+
+ dialog = xfce_about_dialog_new_with_values(GTK_WINDOW(widget), info, dd->icon);
+ g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
+ gtk_window_set_title(GTK_WINDOW(dialog), "Xfce Dictionary");
+ gtk_dialog_run(GTK_DIALOG(dialog));
+
+ xfce_about_info_free(info);
+}
Property changes on: xfce4-dict/trunk/lib/gui.c
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: xfce4-dict/trunk/lib/gui.h
===================================================================
--- xfce4-dict/trunk/lib/gui.h (rev 0)
+++ xfce4-dict/trunk/lib/gui.h 2008-03-30 09:01:41 UTC (rev 4137)
@@ -0,0 +1,33 @@
+/* $Id$
+ *
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef GUI_H
+#define GUI_H 1
+
+
+void dict_status_add(DictData *dd, const gchar *format, ...);
+void dict_create_main_window(DictData *dd);
+void dict_about_dialog(GtkWidget *widget, DictData *dd);
+void dict_clear_text_buffer(DictData *dd);
+void dict_set_panel_entry_text(DictData *dd, const gchar *text);
+const guint8 *dict_get_icon_data(void);
+
+
+#endif
Property changes on: xfce4-dict/trunk/lib/gui.h
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: xfce4-dict/trunk/lib/inline-icon.h
===================================================================
--- xfce4-dict/trunk/lib/inline-icon.h (rev 0)
+++ xfce4-dict/trunk/lib/inline-icon.h 2008-03-30 09:01:41 UTC (rev 4137)
@@ -0,0 +1,420 @@
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (dict_icon_data)
+#endif
+#ifdef __GNUC__
+static const guint8 dict_icon_data[] __attribute__ ((__aligned__ (4))) =
+#else
+static const guint8 dict_icon_data[] =
+#endif
+{ ""
+ /* Pixbuf magic (0x47646b50) */
+ "GdkP"
+ /* length: header (24) + pixel_data (9216) */
+ "\0\0$\30"
+ /* pixdata_type (0x1010002) */
+ "\1\1\0\2"
+ /* rowstride (192) */
+ "\0\0\0\300"
+ /* width (48) */
+ "\0\0\0""0"
+ /* height (48) */
+ "\0\0\0""0"
+ /* pixel_data: */
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\252\252"
+ "\3\312\312\3125\313\313\313l\317\317\317\243\320\320\320\324\320\320"
+ "\320\351\322\322\322\367\324\324\324\367\323\323\323\361\321\321\321"
+ "\337\317\317\317\241\313\313\313S\377\377\377\2\306\306\306\11\315\315"
+ "\315\\\320\320\320\251\321\321\321\341\323\323\323\356\324\324\324\364"
+ "\322\322\322\366\317\317\317\351\313\313\313\330\311\311\311\257\306"
+ "\306\306y\306\306\306G\304\304\304\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\317\317\317\20\315"
+ "\315\315`\317\317\317\300\315\315\315\366\326\326\326\362\350\350\350"
+ "\371\363\363\363\377\372\372\372\377\374\374\374\377\373\373\372\377"
+ "\367\370\367\377\364\365\363\377\361\362\360\377\351\352\350\377\333"
+ "\333\332\370\312\307\307\360y\0\0\377\330\331\327\370\352\353\352\377"
+ "\366\366\366\377\370\370\370\377\367\367\367\377\367\367\367\377\366"
+ "\366\366\377\364\364\364\377\355\355\355\377\341\341\341\374\320\320"
+ "\320\361\300\300\300\370\300\300\300\330\276\276\276\205\274\274\274"
+ ".\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\310\16\313\313\313]\317"
+ "\317\317\300\316\316\316\370\333\333\333\364\362\362\362\377\375\375"
+ "\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\375\375\375\377\366\366\365\377\357\360\355\377\346\347\344\377"
+ "\335\337\333\377\334\335\331\377\345\346\344\377\344\345\343\377y\0\0"
+ "\377\326\315\314\377\337\340\336\377\352\353\352\377\360\360\360\377"
+ "\356\356\356\377\355\355\355\377\354\354\354\377\353\353\353\377\355"
+ "\355\355\377\360\360\360\377\364\364\364\377\363\363\363\377\345\345"
+ "\345\377\320\320\320\371\274\274\274\363\271\271\271\343\266\266\266"
+ "t\270\270\270\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\314\314\314\5\314\314\314\377\326\326\326\365\352"
+ "\352\352\377\375\375\375\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\375\375\375\377\366\366\365\377\356\357\354\377\346\347\344\377"
+ "\335\337\333\377\324\326\321\377\311\314\306\377\313\315\307\377z\1\1"
+ "\377\256\223\220\377\331\332\327\377\352\353\352\377\357\357\357\377"
+ "\356\356\356\377\355\355\355\377\353\353\353\377\352\352\352\377\351"
+ "\351\351\377\350\350\350\377\346\346\346\377\351\351\351\377\357\357"
+ "\357\377\365\365\365\377\356\356\356\377\330\330\330\377\303\303\303"
+ "\365\261\261\261\377\231\231\231\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0""333\5Q<N\377\311\310\311\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\375\375\374\377\366\366\365\377\356\357\354\377\346\347\344"
+ "\377\335\337\333\377\324\326\321\377\311\314\306\377\277\302\273\377"
+ "}\4\4\377\230SR\377\331\333\330\377\353\353\352\377\357\357\357\377\356"
+ "\356\356\377\355\355\355\377\353\353\353\377\352\352\352\377\351\351"
+ "\351\377\347\347\347\377\346\346\346\377\345\345\345\377\343\343\343"
+ "\377\346\346\346\377\363\363\363\377\343\343\343\377\343\343\343\377"
+ "\254\253\254\377M8J\377333\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0;';'iZh\365\320\316\320\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\375\374"
+ "\377\364\365\364\377\355\357\354\377\345\347\344\377\334\336\332\377"
+ "\324\326\321\377\311\314\306\377\277\302\273\377\201\14\14\377\200\7"
+ "\7\377\332\333\330\377\352\352\351\377\357\357\357\377\356\356\356\377"
+ "\354\354\354\377\353\353\353\377\352\352\352\377\350\350\350\377\347"
+ "\347\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343"
+ "\343\377\364\364\364\377\344\344\344\377\343\343\343\377\261\257\261"
+ "\377`O_\365;';'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<%<L\201"
+ "r\200\366\330\327\330\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\374\374\373\377\364"
+ "\365\364\377\355\357\354\377\344\346\343\377\334\336\332\377\324\326"
+ "\321\377\311\314\306\377\277\302\273\377\221ea\377\202\11\11\377\321"
+ "\307\305\377\352\352\351\377\357\357\357\377\355\355\355\377\354\354"
+ "\354\377\353\353\353\377\352\352\352\377\350\350\350\377\347\347\347"
+ "\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343\343\377"
+ "\360\360\360\377\350\350\350\377\343\343\343\377\266\265\267\377qbp\366"
+ "<%<L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77&:r\224\212\224"
+ "\374\345\345\345\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\373\374\373\377\364\365"
+ "\363\377\354\355\353\377\344\346\343\377\334\335\331\377\323\325\320"
+ "\377\310\313\305\377\277\301\273\377\232\225\221\377\205\14\14\377\245"
+ "TS\377\352\353\352\377\356\356\356\377\355\355\355\377\354\354\354\377"
+ "\352\352\352\377\351\351\351\377\350\350\350\377\347\347\347\377\345"
+ "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\355\355"
+ "\355\377\354\354\354\377\343\343\343\377\302\302\302\377|q{\374\77&:"
+ "r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77'<\242\252\244\253"
+ "\377\354\354\354\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\373\374\373\377\364\365"
+ "\363\377\354\355\353\377\344\346\343\377\334\335\331\377\322\324\317"
+ "\377\310\313\305\377\277\301\273\377\234\235\231\377\240SR\377\210\17"
+ "\17\377\314\247\247\377\356\356\356\377\355\355\355\377\354\354\354\377"
+ "\352\352\352\377\351\351\351\377\350\350\350\377\346\346\346\377\345"
+ "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\351\351"
+ "\351\377\360\360\360\377\343\343\343\377\312\312\312\377\213\204\213"
+ "\377\77'<\242\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@'<\317"
+ "\275\271\275\377\362\362\362\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\374\373"
+ "\377\364\365\363\377\354\355\353\377\344\346\343\377\334\335\331\377"
+ "\322\324\317\377\310\313\305\377\277\301\273\377\234\235\231\377\273"
+ "\262\256\377\213\21\21\377\215\26\26\377\342\323\323\377\355\355\355"
+ "\377\353\353\353\377\352\352\352\377\351\351\351\377\347\347\347\377"
+ "\346\346\346\377\345\345\345\377\344\344\344\377\343\343\343\377\343"
+ "\343\343\377\345\345\345\377\364\364\364\377\343\343\343\377\322\322"
+ "\322\377\226\222\226\377@'<\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0>'<\356\304\302\304\377\371\371\371\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345\342\377"
+ "\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273\377\234"
+ "\237\231\377\300\302\276\377\275\216\214\377\216\24\24\377\24077\377"
+ "\344\333\333\377\353\353\353\377\352\352\352\377\351\351\351\377\347"
+ "\347\347\377\346\346\346\377\345\345\345\377\343\343\343\377\343\343"
+ "\343\377\343\343\343\377\343\343\343\377\363\363\363\377\345\345\345"
+ "\377\333\333\333\377\232\231\233\377>'<\356\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0 at +@\14E.B\372\303\303\303\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376"
+ "\376\376\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345"
+ "\342\377\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273"
+ "\377\235\237\232\377\300\302\276\377\332\332\330\377\251NN\377\227!!"
+ "\377\247BB\377\347\341\341\377\352\352\352\377\350\350\350\377\347\347"
+ "\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343\343"
+ "\377\343\343\343\377\343\343\343\377\360\360\360\377\351\351\351\377"
+ "\342\342\342\377\234\233\234\377D-A\372 at +@\14\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0@%:0\\HZ\363\300\277\300\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376"
+ "\376\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345\342"
+ "\377\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273\377"
+ "\234\236\231\377\300\302\276\377\333\334\331\377\345\335\334\377\242"
+ "66\377\24522\377\254NN\377\350\345\345\377\350\350\350\377\347\347\347"
+ "\377\345\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377"
+ "\343\343\343\377\343\343\343\377\354\354\354\377\355\355\355\377\343"
+ "\343\343\377\237\236\237\377VBT\363@%:0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0>&;Wn^n\366\304\302\304\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377"
+ "\372\372\372\377\363\364\362\377\354\355\352\377\343\345\342\377\333"
+ "\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377\235\237"
+ "\232\377\301\303\277\377\333\334\331\377\351\352\351\377\340\316\316"
+ "\377\240--\377\255<<\377\265``\377\347\345\345\377\346\346\346\377\345"
+ "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343"
+ "\343\377\343\343\343\377\350\350\350\377\361\361\361\377\343\343\343"
+ "\377\246\244\246\377dTd\366>&;W\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77';"
+ "}\177q\177\375\317\316\317\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377"
+ "\371\371\371\377\363\364\362\377\354\355\352\377\342\344\341\377\333"
+ "\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377\235\237"
+ "\233\377\301\303\277\377\332\333\331\377\351\352\351\377\355\355\355"
+ "\377\326\266\266\377\24411\377\260@@\377\275uu\377\346\346\346\377\345"
+ "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343"
+ "\343\377\343\343\343\377\344\344\344\377\364\364\364\377\343\343\343"
+ "\377\263\262\263\377ses\375\77';}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77"
+ "(<\256\217\205\220\377\334\334\334\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376"
+ "\376\377\371\371\371\377\363\364\362\377\354\355\352\377\342\344\341"
+ "\377\333\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377"
+ "\235\237\233\377\301\302\277\377\332\334\331\377\352\352\351\377\355"
+ "\355\355\377\353\353\353\377\311\222\222\377\271KK\377\260@@\377\316"
+ "\244\244\377\345\345\345\377\343\343\343\377\343\343\343\377\343\343"
+ "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\363\363\363"
+ "\377\346\346\346\377\301\301\301\377\177u\200\377\77(<\256\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\77)=\326\237\231\240\377\344\344\344\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\375\375\375\377\371\371\371\377\363\363\362\377\352"
+ "\353\351\377\342\344\340\377\332\335\330\377\321\323\316\377\310\312"
+ "\304\377\276\301\272\377\236\240\233\377\301\303\277\377\333\334\331"
+ "\377\352\352\351\377\354\354\354\377\353\353\353\377\352\351\351\377"
+ "\262QQ\377\316aa\377\253<<\377\337\325\325\377\343\343\343\377\343\343"
+ "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343"
+ "\377\357\357\357\377\352\352\352\377\312\312\312\377\216\210\217\377"
+ "\77)=\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77(<\365\250\245\251\377\355"
+ "\355\355\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\376\376\376\377\375\375\375\377\371\371\371\377"
+ "\362\362\361\377\352\353\351\377\342\344\340\377\332\335\330\377\321"
+ "\323\316\377\310\312\304\377\276\301\272\377\237\241\234\377\302\303"
+ "\277\377\333\334\331\377\351\351\351\377\354\354\354\377\353\353\353"
+ "\377\351\351\351\377\335\312\312\377\255<<\377\310XX\377\300tt\377\343"
+ "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
+ "\343\377\343\343\343\377\353\353\353\377\355\355\355\377\323\323\323"
+ "\377\227\224\230\377\77(<\365\0\0\0\0\0\0\0\0\0\0\0\0=$=\25D+A\370\252"
+ "\250\252\377\367\367\367\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\376\376\376\377\375\375\375\377"
+ "\370\370\367\377\361\362\361\377\352\353\351\377\342\344\340\377\331"
+ "\334\327\377\321\323\316\377\310\312\304\377\276\301\272\377\237\241"
+ "\235\377\302\303\277\377\332\333\331\377\351\352\351\377\354\354\354"
+ "\377\352\352\352\377\351\351\351\377\350\350\350\377\270\\\\\377\313"
+ "UU\377\255;;\377\335\323\323\377\343\343\343\377\343\343\343\377\343"
+ "\343\343\377\343\343\343\377\343\343\343\377\347\347\347\377\361\361"
+ "\361\377\335\335\335\377\233\231\233\377D+A\370=$=\25\0\0\0\0\0\0\0\0"
+ "='=;N9N\361\250\247\250\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377\375"
+ "\375\375\377\370\370\367\377\361\362\361\377\352\353\351\377\342\344"
+ "\340\377\331\334\327\377\321\323\316\377\307\312\304\377\275\300\272"
+ "\377\237\241\235\377\302\304\300\377\333\334\331\377\351\352\351\377"
+ "\354\354\354\377\352\352\352\377\351\351\351\377\350\350\350\377\316"
+ "\236\236\377\274FF\377\274EE\377\313\227\227\377\343\343\343\377\343"
+ "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\344\344"
+ "\344\377\364\364\364\377\343\343\343\377\233\233\233\377M8M\361='=;\0"
+ "\0\0\0\0\0\0\0=%:`_M_\366\252\251\252\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376"
+ "\376\376\377\374\374\374\377\370\370\367\377\361\362\361\377\351\352"
+ "\350\377\342\344\340\377\331\334\327\377\321\323\316\377\307\312\304"
+ "\377\275\300\272\377\240\242\235\377\303\304\301\377\333\334\331\377"
+ "\351\352\351\377\353\353\353\377\352\352\352\377\351\351\351\377\347"
+ "\347\347\377\334\306\306\377\262\77\77\377\302BB\377\273__\377\343\343"
+ "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343"
+ "\377\343\343\343\377\362\362\362\377\347\347\347\377\240\237\240\377"
+ "]K]\366=%:`\0\0\0\0\0\0\0\0\77%<\211m\\m\376\261\260\262\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\375\375\375\377\374\374\374\377\370\370\367\377\360"
+ "\361\357\377\351\352\347\377\342\344\340\377\331\333\327\377\320\323"
+ "\316\377\307\312\304\377\275\300\271\377\241\243\236\377\303\304\301"
+ "\377\333\334\332\377\351\351\350\377\353\353\353\377\352\352\352\377"
+ "\351\351\351\377\347\347\347\377\343\336\336\377\25788\377\30299\377"
+ "\264CC\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343"
+ "\377\343\343\343\377\343\343\343\377\356\356\356\377\352\352\352\377"
+ "\250\246\250\377kZk\376\77%<\211\0\0\0\0\0\0\0\0A'>\271xly\377\301\300"
+ "\301\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\376\376\376\377\376\376\376\377\375\375\375\377\372"
+ "\372\372\377\367\367\366\377\362\362\361\377\353\355\352\377\343\344"
+ "\341\377\323\326\321\377\307\312\304\377\275\300\271\377\241\243\236"
+ "\377\303\305\301\377\334\335\334\377\357\357\357\377\362\362\362\377"
+ "\362\362\362\377\362\362\362\377\361\361\361\377\360\360\360\377\260"
+ "66\377\272++\377\26199\377\344\344\344\377\343\343\343\377\343\343\343"
+ "\377\343\343\343\377\343\343\343\377\343\343\343\377\352\352\352\377"
+ "\356\356\356\377\265\264\265\377wkx\377A'>\271\0\0\0\0\0\0\0\0@'<\340"
+ "\206|\207\377\322\322\322\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\376\376\376\377\366\366\366\377\353\353\353\377\341\341\341\377"
+ "\332\332\332\377\322\322\322\377\321\321\321\377\333\333\332\377\341"
+ "\342\341\377\350\350\347\377\355\356\354\377\342\343\340\377\304\307"
+ "\300\377\254\255\251\377\340\341\337\377\360\361\360\377\350\350\350"
+ "\377\336\336\336\377\325\325\325\377\313\313\313\377\314\314\314\377"
+ "\320\313\313\377\26177\377\263\34\34\377\26066\377\364\364\364\377\362"
+ "\362\362\377\356\356\356\377\351\351\351\377\344\344\344\377\343\343"
+ "\343\377\347\347\347\377\362\362\362\377\303\303\303\377\206|\206\377"
+ "@'<\340\0\0\0\0\0\0\0\1@)>\372\223\215\224\377\340\340\340\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\372\372\372\377\353\353\353"
+ "\377\317\317\317\377\261\261\260\377\236\236\236\377\240\240\240\377"
+ "\241\242\240\377\240\242\237\377\240\242\236\377\242\244\240\377\242"
+ "\244\237\377\241\243\237\377\241\242\237\377\237\237\236\377\241\241"
+ "\241\377\315\315\313\377\351\352\350\377\337\337\335\377\306\307\306"
+ "\377\241\241\241\377\237\237\236\377\242\242\240\377\243\245\241\377"
+ "\245\247\243\377\245\247\243\377\247\206\204\377\25755\377\254\20\20"
+ "\377\26098\377\235\236\235\377\256\256\255\377\310\310\310\377\342\342"
+ "\342\377\360\360\360\377\360\360\360\377\352\352\352\377\365\365\365"
+ "\377\316\316\316\377\222\214\222\377@)>\372\0\0\0\1>#>\35D-C\365\231"
+ "\227\232\377\356\356\356\377\367\367\367\377\336\336\336\377\270\270"
+ "\270\377\241\241\241\377\235\235\233\377\237\240\233\377\250\254\244"
+ "\377\260\264\253\377\255\260\247\377\251\254\244\377\245\251\240\377"
+ "\244\251\237\377\244\250\237\377\245\251\240\377\247\253\242\377\252"
+ "\256\246\377\257\264\253\377\255\261\250\377\234\235\232\377\251\251"
+ "\250\377\243\243\242\377\234\235\233\377\257\261\253\377\263\267\256"
+ "\377\261\265\255\377\262\264\255\377\262\264\255\377\263\265\257\377"
+ "\261ro\377\252\37\37\377\246\12\12\377\261DC\377\270\273\264\377\262"
+ "\264\256\377\245\246\242\377\236\236\235\377\240\240\240\377\266\266"
+ "\266\377\330\330\330\377\357\357\357\377\333\333\333\377\230\225\230"
+ "\377D-C\365>#>\35@&<DK5I\361\233\233\233\377\246\246\246\377\242\243"
+ "\242\377\231\231\226\377\241\244\236\377\257\263\252\377\255\261\250"
+ "\377\245\251\237\377\237\243\230\377\232\236\224\377\232\237\224\377"
+ "\233\240\225\377\235\241\227\377\236\242\230\377\237\243\231\377\240"
+ "\245\233\377\242\246\234\377\243\247\235\377\245\251\241\377\256\261"
+ "\251\377\264\267\257\377\246\250\243\377\246\250\242\377\264\270\260"
+ "\377\262\264\255\377\256\261\251\377\256\261\251\377\257\263\253\377"
+ "\260\264\254\377\262\265\255\377\260EC\377\253\"\"\377\252\36\36\377"
+ "\260TR\377\270\273\264\377\271\274\265\377\272\275\266\377\272\275\266"
+ "\377\272\275\266\377\253\257\251\377\235\236\233\377\241\242\241\377"
+ "\245\245\245\377\233\233\233\377K5I\361@&<D\77&<jZGZ\367\222\223\221"
+ "\377\233\240\230\377\262\266\255\377\263\266\256\377\254\260\250\377"
+ "\245\251\237\377\242\247\234\377\245\251\240\377\247\253\241\377\251"
+ "\254\243\377\252\256\245\377\253\257\246\377\254\260\246\377\255\260"
+ "\250\377\253\257\246\377\251\255\244\377\247\253\242\377\255\262\251"
+ "\377\261\264\254\377\243\246\237\377\223\223\220\377\216\216\213\377"
+ "\215\215\213\377\223\223\220\377\243\246\240\377\262\266\257\377\264"
+ "\267\257\377\262\265\255\377\264\267\260\377\265\264\254\377\26066\377"
+ "\261DC\377\26066\377\262[Y\377\271\275\265\377\273\276\267\377\272\275"
+ "\266\377\272\275\266\377\272\275\266\377\272\275\266\377\272\275\266"
+ "\377\272\275\266\377\254\256\251\377\222\223\221\377ZGZ\367\77&<j>%;"
+ "\227gYg\377\207\210\204\377\246\252\241\377\262\266\255\377\252\255\245"
+ "\377\250\253\243\377\245\251\242\377\242\246\236\377\240\244\234\377"
+ "\236\241\232\377\232\234\226\377\227\231\224\377\227\231\223\377\225"
+ "\226\222\377\226\226\222\377\232\234\226\377\242\245\236\377\257\262"
+ "\253\377\237\243\235\377\210\211\206\377wov\377bQd\377YB\\\377YB\\\377"
+ "bQd\377wov\377\207\211\205\377\240\244\236\377\260\263\255\377\244\247"
+ "\240\377\235\232\224\377\231\222\217\377\227\230\224\377\236\202~\377"
+ "\243sp\377\233\235\230\377\241\243\236\377\244\247\241\377\250\252\245"
+ "\377\253\256\247\377\256\262\253\377\261\264\256\377\264\267\257\377"
+ "\267\271\263\377\220\221\216\377gYg\377>%;\227@'=\304sis\377\210\212"
+ "\205\377\206\207\203\377\204\204\202\377\203\202\200\377\201\177\177"
+ "\377~y{\377ysx\377tks\377nbo\377j]k\377gYi\377gYi\377gYi\377gYi\377i"
+ "\\k\377sjs\377\207\210\204\377\203\202\201\377hSk\377ZA^\377S9W\377R"
+ "8V\377R8V\377S9W\377ZA^\377hSk\377\203\202\202\377\210\211\205\377tk"
+ "t\377j\\k\377gYi\377gYi\377gYi\377gYi\377i\\k\377mam\377tjs\377ysx\377"
+ "\177y}\377\203\200\200\377\205\203\202\377\206\206\204\377\207\210\204"
+ "\377\210\212\205\377sis\377@'=\304\77(<\350fPi\377iSm\377hQk\377hQk\377"
+ "hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377"
+ "hQk\377hQk\377hQk\377iTm\377O9M\372G1E\373^G_\377hQk\377fOi\377fOi\377"
+ "hQk\377^G_\377G1E\373N8M\372iTm\377hQk\377hQk\377hQk\377hQk\377hQk\377"
+ "hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377"
+ "iSm\377fPi\377\77(<\350>&;\377\77'<\377@(=\377@(=\377@(=\377@(=\377@"
+ "(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377"
+ "@(=\377@(=\377@(=\377B-\77\316F8D\226A,\77\334A)=\365D,A\370D,A\370A"
+ ")=\365A,\77\334F8D\226B,A\315@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377"
+ "@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377"
+ "@(=\377\77'<\377>&;\377\0\0\0\0\0\0\0\0\0\0\0\0UUU\3```\10NNN\15UUU\22"
+ "Q]Q\26XXN\32RZR\37WWP#UUU'SYS+WWQ/WWR2UUU6UUU9UUU<VVR>TXT at UYQBTXTCVV"
+ "SDRRNKRRNKVVSDTXTCUYQBTXT at VVR>UUU<UUU9UUU6WWR2WWQ/SYS+UUU'WWP#RZR\37"
+ "XXN\32Q]Q\26UUU\22NNN\15```\10UUU\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1fff\5MMM\12[[[\16UUU\22U"
+ "UU\25R\\R\31R[R\34RZR\37SZS\"SZS%SYS(UUU*WWQ,SYS.WWQ/UUU0SXS1SXS1SXS"
+ "1SXS1UUU0WWQ/SYS.WWQ,UUU*SYS(SZS%SZS\"RZR\37R[R\34R\\R\31UUU\25UUU\22"
+ "[[[\16MMM\12fff\5\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\200\200\200\2fff\5UUU\11UUU\14UUU\17ZZZ\21YYY\24Q]Q\26UUU\30R"
+ "\\R\31UUU\33R[R\34XXO\35XXO\35UUU\36UUU\36XXO\35XXO\35R[R\34UUU\33R\\"
+ "R\31UUU\30Q]Q\26YYY\24ZZZ\21UUU\17UUU\14UUU\11fff\5\200\200\200\2\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\200\200"
+ "\200\2@@@\4fff\5UUU\6mmm\7```\10UUU\11MMM\12MMM\12UUU\11```\10mmm\7U"
+ "UU\6fff\5@@@\4\200\200\200\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
Property changes on: xfce4-dict/trunk/lib/inline-icon.h
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: xfce4-dict/trunk/lib/libdict.h
===================================================================
--- xfce4-dict/trunk/lib/libdict.h (rev 0)
+++ xfce4-dict/trunk/lib/libdict.h 2008-03-30 09:01:41 UTC (rev 4137)
@@ -0,0 +1,31 @@
+/* $Id$
+ *
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef LIBDICT_H
+#define LIBDICT_H 1
+
+#include "common.h"
+#include "aspell.h"
+#include "dictd.h"
+#include "prefs.h"
+#include "gui.h"
+
+
+#endif
Property changes on: xfce4-dict/trunk/lib/libdict.h
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: xfce4-dict/trunk/lib/prefs.c
===================================================================
--- xfce4-dict/trunk/lib/prefs.c (rev 0)
+++ xfce4-dict/trunk/lib/prefs.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -0,0 +1,432 @@
+/* $Id$
+ *
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+/* Preferences dialog and helper functions. */
+
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "common.h"
+#include "prefs.h"
+#include "dictd.h"
+
+
+
+static void show_panel_entry_toggled(GtkToggleButton *tb, DictData *dd)
+{
+ gtk_widget_set_sensitive(dd->panel_entry_size_spinner, gtk_toggle_button_get_active(tb));
+ gtk_widget_set_sensitive(dd->panel_entry_size_label, gtk_toggle_button_get_active(tb));
+}
+
+
+static void use_webserver_toggled(GtkToggleButton *tb, DictData *dd)
+{
+ gtk_widget_set_sensitive(dd->web_entry, gtk_toggle_button_get_active(tb));
+ gtk_widget_set_sensitive(dd->web_entry_label, gtk_toggle_button_get_active(tb));
+}
+
+
+static void get_spell_dictionaries(DictData *dd)
+{
+ if (NZV(dd->spell_bin))
+ {
+ gchar *tmp = NULL, *cmd, *locale_cmd;
+
+ cmd = g_strconcat(dd->spell_bin, " dump dicts", NULL);
+ locale_cmd = g_locale_from_utf8(cmd, -1, NULL, NULL, NULL);
+ if (locale_cmd == NULL)
+ locale_cmd = g_strdup(cmd);
+ g_spawn_command_line_sync(locale_cmd, &tmp, NULL, NULL, NULL);
+ if (NZV(tmp))
+ {
+ gchar **list = g_strsplit_set(tmp, "\n\r", -1);
+ gchar *item;
+ guint i, len = g_strv_length(list);
+ for (i = 0; i < len; i++)
+ {
+ item = g_strstrip(list[i]);
+ gtk_combo_box_append_text(GTK_COMBO_BOX(dd->spell_combo), item);
+ if (strcmp(dd->spell_dictionary, item) == 0)
+ gtk_combo_box_set_active(GTK_COMBO_BOX(dd->spell_combo), i);
+ }
+ g_strfreev(list);
+ }
+
+ g_free(cmd);
+ g_free(locale_cmd);
+ g_free(tmp);
+ }
+}
+
+
+void dict_prefs_dialog_response(GtkWidget *dlg, gint response, DictData *dd)
+{
+ if (response == GTK_RESPONSE_OK)
+ {
+ gchar *tmp;
+ /* MODE DICT */
+ tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo));
+ if (tmp == NULL || tmp[0] == '0' || tmp[0] == '-')
+ {
+ xfce_err(_("You have chosen an invalid dictionary entry."));
+ g_free(tmp);
+ return;
+ }
+
+ dd->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner));
+
+ g_free(dd->server);
+ dd->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->server_entry)));
+
+ g_free(dd->dictionary);
+ dd->dictionary = tmp;
+
+ /* MODE WEB */
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng)))
+ dd->web_mode = WEBMODE_LEO_GERENG;
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre)))
+ dd->web_mode = WEBMODE_LEO_GERFRE;
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa)))
+ dd->web_mode = WEBMODE_LEO_GERSPA;
+ else
+ {
+ dd->web_mode = WEBMODE_OTHER;
+
+ g_free(dd->web_url);
+ dd->web_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->web_entry)));
+ }
+
+ /* MODE SPELL */
+ tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->spell_combo));
+ if (NZV(tmp))
+ {
+ g_free(dd->spell_dictionary);
+ dd->spell_dictionary = tmp;
+ }
+
+ g_free(dd->spell_bin);
+ dd->spell_bin = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->spell_entry)));
+
+ /* general settings */
+ dd->show_panel_entry = gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(dd->check_panel_entry));
+ dd->panel_entry_size = gtk_spin_button_get_value_as_int(
+ GTK_SPIN_BUTTON(dd->panel_entry_size_spinner));
+
+ /* save settings */
+ dict_write_rc_file(dd);
+ }
+ gtk_widget_destroy(dlg);
+}
+
+
+GtkWidget *dict_prefs_dialog_show(DictData *dd)
+{
+ GtkWidget *dlg, *header, *vbox, *label3;
+
+ dlg = gtk_dialog_new_with_buttons(_("Properties"),
+ GTK_WINDOW(dd->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT |
+ GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
+ NULL);
+
+ gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
+
+ gtk_container_set_border_width(GTK_CONTAINER(dlg), 2);
+
+ header = xfce_create_header(NULL, _("Dictionary plugin"));
+ gtk_container_set_border_width(GTK_CONTAINER(header), 6);
+ gtk_widget_show(header);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG (dlg)->vbox), header, FALSE, TRUE, 0);
+
+ vbox = gtk_vbox_new(FALSE, 3);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
+ gtk_widget_show(vbox);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), vbox, TRUE, TRUE, 0);
+
+ /*
+ * Mode: DICT
+ */
+ {
+ GtkWidget *label1, *label2, *table, *button_get_list, *frame1;
+
+ /* server address */
+ label1 = gtk_label_new_with_mnemonic(_("Server:"));
+ gtk_widget_show(label1);
+
+ dd->server_entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dd->server_entry), 256);
+ if (dd->server != NULL)
+ {
+ gtk_entry_set_text(GTK_ENTRY(dd->server_entry), dd->server);
+ }
+ gtk_widget_show(dd->server_entry);
+
+ /* server port */
+ label2 = gtk_label_new_with_mnemonic(_("Server Port:"));
+ gtk_widget_show(label2);
+
+ dd->port_spinner = gtk_spin_button_new_with_range(0.0, 65536.0, 1.0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(dd->port_spinner), dd->port);
+ gtk_widget_show(dd->port_spinner);
+
+ /* dictionary */
+ label3 = gtk_label_new_with_mnemonic(_("Dictionary:"));
+ gtk_widget_show(label3);
+
+ dd->dict_combo = gtk_combo_box_new_text();
+ gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), _("* (use all)"));
+ gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo),
+ _("! (use all, stop after first match)"));
+ gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), "----------------");
+ if (dd->dictionary != NULL)
+ {
+ if (dd->dictionary[0] == '*')
+ gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 0);
+ else if (dd->dictionary[0] == '!')
+ gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 1);
+ else
+ {
+ gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), dd->dictionary);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 3);
+ }
+ }
+
+ gtk_widget_show(dd->dict_combo);
+
+ button_get_list = gtk_button_new_from_stock("gtk-find");
+ gtk_widget_show(button_get_list);
+ g_signal_connect(button_get_list, "clicked", G_CALLBACK(dict_get_dict_list_cb), dd);
+
+
+ /* put it all together */
+ table = gtk_table_new(3, 3, FALSE);
+ gtk_widget_show(table);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 5);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 5);
+
+ gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 5);
+ gtk_misc_set_alignment(GTK_MISC(label1), 1, 0);
+
+ gtk_table_attach(GTK_TABLE(table), dd->server_entry, 1, 2, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 5);
+
+ gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 0);
+ gtk_misc_set_alignment(GTK_MISC(label2), 1, 0);
+
+ gtk_table_attach(GTK_TABLE(table), dd->port_spinner, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 5);
+
+ gtk_table_attach(GTK_TABLE(table), label3, 0, 1, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 0);
+ gtk_misc_set_alignment(GTK_MISC(label3), 1, 0);
+
+ gtk_table_attach(GTK_TABLE(table), dd->dict_combo, 1, 2, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ gtk_table_attach(GTK_TABLE(table), button_get_list, 2, 3, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 5);
+
+
+ frame1 = gtk_frame_new(_("Use a DICT server"));
+ gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_ETCHED_OUT);
+ gtk_widget_show(frame1);
+ gtk_container_set_border_width(GTK_CONTAINER(frame1), 3);
+ gtk_container_add(GTK_CONTAINER(frame1), table);
+ gtk_box_pack_start(GTK_BOX(vbox), frame1, FALSE, FALSE, 0);
+ }
+
+ /*
+ * Mode: WEB
+ */
+ {
+ GtkWidget *web_vbox, *entry_hbox, *help_label, *frame2;
+ GSList *web_type;
+
+ web_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_widget_show(web_vbox);
+
+ dd->web_radio_leo_gereng = gtk_radio_button_new_with_label(NULL,
+ _("dict.leo.org - German <-> English"));
+ web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gereng));
+ if (dd->web_mode == WEBMODE_LEO_GERENG)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng), TRUE);
+ gtk_widget_show(dd->web_radio_leo_gereng);
+ gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_leo_gereng, FALSE, FALSE, 0);
+
+ dd->web_radio_leo_gerfre = gtk_radio_button_new_with_label(web_type,
+ _("dict.leo.org - German <-> French"));
+ web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gerfre));
+ if (dd->web_mode == WEBMODE_LEO_GERFRE)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre), TRUE);
+ gtk_widget_show(dd->web_radio_leo_gerfre);
+ gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_leo_gerfre, FALSE, FALSE, 0);
+
+ dd->web_radio_leo_gerspa = gtk_radio_button_new_with_label(web_type,
+ _("dict.leo.org - German <-> Spanish"));
+ web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gerspa));
+ if (dd->web_mode == WEBMODE_LEO_GERSPA)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa), TRUE);
+ gtk_widget_show(dd->web_radio_leo_gerspa);
+ gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_leo_gerspa, FALSE, FALSE, 0);
+
+ dd->web_radio_other = gtk_radio_button_new_with_label(web_type, _("Use another website"));
+ if (dd->web_mode == WEBMODE_OTHER)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->web_radio_other), TRUE);
+ gtk_widget_show(dd->web_radio_other);
+ g_signal_connect(G_OBJECT(dd->web_radio_other), "toggled",
+ G_CALLBACK(use_webserver_toggled), dd);
+ gtk_box_pack_start(GTK_BOX(web_vbox), dd->web_radio_other, FALSE, FALSE, 0);
+
+ dd->web_entry_label = gtk_label_new_with_mnemonic(_("URL:"));
+ gtk_widget_show(dd->web_entry_label);
+ dd->web_entry = gtk_entry_new();
+ if (dd->web_url != NULL)
+ gtk_entry_set_text(GTK_ENTRY(dd->web_entry), dd->web_url);
+ gtk_widget_show(dd->web_entry);
+
+ entry_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_widget_show(entry_hbox);
+ gtk_box_pack_start(GTK_BOX(entry_hbox), dd->web_entry_label, FALSE, TRUE, 5);
+ gtk_box_pack_start(GTK_BOX(entry_hbox), dd->web_entry, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(web_vbox), entry_hbox, FALSE, FALSE, 0);
+
+ help_label = gtk_label_new(_("Enter an URL to a web site which offer translation services.\nUse {word} as placeholder for the searched word."));
+ gtk_label_set_line_wrap(GTK_LABEL(help_label), TRUE);
+ gtk_misc_set_alignment(GTK_MISC(help_label), 0, 0);
+ gtk_widget_show(help_label);
+ gtk_box_pack_start(GTK_BOX(web_vbox), help_label, TRUE, TRUE, 0);
+
+ frame2 = gtk_frame_new(_("Use a web site"));
+ gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_OUT);
+ gtk_widget_show(frame2);
+ gtk_container_set_border_width(GTK_CONTAINER(frame2), 3);
+ gtk_container_add(GTK_CONTAINER(frame2), web_vbox);
+ gtk_box_pack_start(GTK_BOX(vbox), frame2, TRUE, TRUE, 0);
+ }
+
+ /*
+ * Mode: ASPELL
+ */
+ {
+ GtkWidget *label4, *label5, *table, *frame3;
+
+ label4 = gtk_label_new_with_mnemonic(_("Aspell program:"));
+ gtk_widget_show(label4);
+
+ dd->spell_entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(dd->spell_entry), 256);
+ if (dd->spell_bin != NULL)
+ {
+ gtk_entry_set_text(GTK_ENTRY(dd->spell_entry), dd->spell_bin);
+ }
+ gtk_widget_show(dd->spell_entry);
+
+ label5 = gtk_label_new_with_mnemonic(_("Dictionary:"));
+ gtk_widget_show(label5);
+
+ dd->spell_combo = gtk_combo_box_new_text();
+ get_spell_dictionaries(dd);
+ gtk_widget_show(dd->spell_combo);
+
+ table = gtk_table_new(2, 2, FALSE);
+ gtk_widget_show(table);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 5);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 5);
+
+ gtk_table_attach(GTK_TABLE(table), label4, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 5);
+ gtk_misc_set_alignment(GTK_MISC(label4), 1, 0);
+
+ gtk_table_attach(GTK_TABLE(table), dd->spell_entry, 1, 2, 0, 1,
+ (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
+ (GtkAttachOptions) (0), 5, 5);
+
+ gtk_table_attach(GTK_TABLE(table), label5, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 5, 0);
+ gtk_misc_set_alignment(GTK_MISC(label5), 1, 0);
+
+ gtk_table_attach(GTK_TABLE(table), dd->spell_combo, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
+ (GtkAttachOptions) (0), 5, 5);
+
+ frame3 = gtk_frame_new(_("Use Aspell"));
+ gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_OUT);
+ gtk_widget_show(frame3);
+ gtk_container_set_border_width(GTK_CONTAINER(frame3), 3);
+ gtk_container_add(GTK_CONTAINER(frame3), table);
+ gtk_box_pack_start(GTK_BOX(vbox), frame3, TRUE, FALSE, 0);
+ }
+
+ /* Display text entry in the panel */
+ {
+ GtkWidget *pe_hbox, *label;
+
+ /* show panel entry check box */
+ dd->check_panel_entry = gtk_check_button_new_with_label(
+ _("Show text field in the panel"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->check_panel_entry), dd->show_panel_entry);
+ gtk_widget_show(dd->check_panel_entry);
+ g_signal_connect(G_OBJECT(dd->check_panel_entry), "toggled",
+ G_CALLBACK(show_panel_entry_toggled), dd);
+
+ /* panel entry size */
+ dd->panel_entry_size_label = gtk_label_new_with_mnemonic(_("Text field size:"));
+ gtk_widget_show(dd->panel_entry_size_label);
+ dd->panel_entry_size_spinner = gtk_spin_button_new_with_range(0.0, 500.0, 1.0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(dd->panel_entry_size_spinner),
+ dd->panel_entry_size);
+ gtk_widget_show(dd->panel_entry_size_spinner);
+
+ pe_hbox = gtk_hbox_new(FALSE, 0);
+ gtk_widget_show(pe_hbox);
+
+ gtk_box_pack_start(GTK_BOX(pe_hbox), dd->panel_entry_size_label, FALSE, FALSE, 10);
+ gtk_box_pack_start(GTK_BOX(pe_hbox), dd->panel_entry_size_spinner, TRUE, TRUE, 0);
+
+ label = gtk_label_new(""); /* just to make some space, should be done better */
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), dd->check_panel_entry, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), pe_hbox, FALSE, FALSE, 0);
+
+ }
+
+ /* init the sensitive widgets */
+ use_webserver_toggled(GTK_TOGGLE_BUTTON(dd->web_radio_other), dd);
+ show_panel_entry_toggled(GTK_TOGGLE_BUTTON(dd->check_panel_entry), dd);
+
+ return dlg;
+}
Property changes on: xfce4-dict/trunk/lib/prefs.c
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: xfce4-dict/trunk/lib/prefs.h
===================================================================
--- xfce4-dict/trunk/lib/prefs.h (rev 0)
+++ xfce4-dict/trunk/lib/prefs.h 2008-03-30 09:01:41 UTC (rev 4137)
@@ -0,0 +1,28 @@
+/* $Id$
+ *
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef PREFS_H
+#define PREFS_H 1
+
+GtkWidget *dict_prefs_dialog_show(DictData *dd);
+void dict_prefs_dialog_response(GtkWidget *dlg, gint response, DictData *dd);
+
+
+#endif
Property changes on: xfce4-dict/trunk/lib/prefs.h
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c
===================================================================
--- xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -39,12 +39,23 @@
#include <signal.h>
#include <string.h>
-#include "common.h"
+#include "libdict.h"
#include "popup_def.h"
+typedef struct
+{
+ DictData *dd;
+ XfcePanelPlugin *plugin;
-static GdkPixbuf *dict_load_and_scale(const guint8 *data, gint dstw, gint dsth)
+ GtkTooltips *tooltips;
+
+ GtkWidget *panel_button;
+ GtkWidget *panel_button_image;
+} DictPanelData;
+
+
+static GdkPixbuf *dict_plugin_load_and_scale(const guint8 *data, gint dstw, gint dsth)
{
GdkPixbuf *pb, *pb_scaled;
int pb_w, pb_h;
@@ -67,21 +78,22 @@
}
-static gboolean dict_plugin_panel_set_size(XfcePanelPlugin *plugin, gint wsize, DictData *dd)
+static gboolean dict_plugin_panel_set_size(XfcePanelPlugin *plugin, gint wsize, DictPanelData *dpd)
{
gint width;
- gint size = wsize - 2 - (2 * MAX(dd->panel_button->style->xthickness,
- dd->panel_button->style->ythickness));
+ gint size = wsize - 2 - (2 * MAX(dpd->panel_button->style->xthickness,
+ dpd->panel_button->style->ythickness));
/*g_object_unref(G_OBJECT(dd->icon));*/
- dd->icon = dict_load_and_scale(dict_get_icon_data(), size, -1);
+ dpd->dd->icon = dict_plugin_load_and_scale(dict_get_icon_data(), size, -1);
- gtk_image_set_from_pixbuf(GTK_IMAGE(dd->panel_button_image), dd->icon);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(dpd->panel_button_image), dpd->dd->icon);
- if (dd->show_panel_entry && xfce_panel_plugin_get_orientation(dd->plugin) == GTK_ORIENTATION_HORIZONTAL)
+ if (dpd->dd->show_panel_entry &&
+ xfce_panel_plugin_get_orientation(plugin) == GTK_ORIENTATION_HORIZONTAL)
{
- width = size + dd->panel_entry_size;
- gtk_widget_set_size_request(dd->panel_entry, dd->panel_entry_size, -1);
+ width = size + dpd->dd->panel_entry_size;
+ gtk_widget_set_size_request(dpd->dd->panel_entry, dpd->dd->panel_entry_size, -1);
}
else
width = size;
@@ -92,7 +104,7 @@
}
-/* unused
+/* TODO remove me, unused
static void dict_toggle_main_window(GtkWidget *button, DictData *dd)
{
if (GTK_WIDGET_VISIBLE(dd->window))
@@ -116,42 +128,48 @@
*/
-static void dict_plugin_panel_button_clicked(GtkWidget *button, DictData *dd)
+static void dict_plugin_show_main_window(DictData *dd)
{
- if (GTK_WIDGET_VISIBLE(dd->window))
- gtk_widget_hide(dd->window);
+ gtk_widget_show(dd->window);
+ gtk_window_deiconify(GTK_WINDOW(dd->window));
+ gtk_window_present(GTK_WINDOW(dd->window));
+}
+
+
+static void dict_plugin_panel_button_clicked(GtkWidget *button, DictPanelData *dpd)
+{
+ if (GTK_WIDGET_VISIBLE(dpd->dd->window))
+ gtk_widget_hide(dpd->dd->window);
else
{
- const gchar *panel_text = gtk_entry_get_text(GTK_ENTRY(dd->panel_entry));
+ const gchar *panel_text = gtk_entry_get_text(GTK_ENTRY(dpd->dd->panel_entry));
- dict_show_main_window(dd);
+ dict_plugin_show_main_window(dpd->dd);
if (NZV(panel_text))
{
- dict_search_word(dd, panel_text);
- gtk_entry_set_text(GTK_ENTRY(dd->main_entry), panel_text);
+ dict_search_word(dpd->dd, panel_text);
+ gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), panel_text);
}
- gtk_widget_grab_focus(dd->main_entry);
+ gtk_widget_grab_focus(dpd->dd->main_entry);
}
}
/* Handle user messages (xfce4-popup-dict) */
-static gboolean dict_plugin_message_received(GtkWidget *w, GdkEventClient *ev, gpointer user_data)
+static gboolean dict_plugin_message_received(GtkWidget *w, GdkEventClient *ev, DictPanelData *dpd)
{
- DictData *dd = user_data;
-
if (ev->data_format == 8 && *(ev->data.b) != '\0')
{
if (strcmp(XFCE_DICT_WINDOW_MESSAGE, ev->data.b) == 0)
{ /* open the main window */
- dict_plugin_panel_button_clicked(NULL, dd);
+ dict_plugin_panel_button_clicked(NULL, dpd);
return TRUE;
}
if (strcmp(XFCE_DICT_TEXTFIELD_MESSAGE, ev->data.b) == 0)
{ /* put the focus onto the panel entry */
- if (dd->show_panel_entry)
- xfce_panel_plugin_focus_widget(dd->plugin, dd->panel_entry);
+ if (dpd->dd->show_panel_entry)
+ xfce_panel_plugin_focus_widget(dpd->plugin, dpd->dd->panel_entry);
}
}
@@ -159,7 +177,7 @@
}
-static gboolean dict_plugin_set_selection(DictData *dd)
+static gboolean dict_plugin_set_selection(DictPanelData *dpd)
{
GdkScreen *gscreen;
gchar selection_name[32];
@@ -185,41 +203,53 @@
XSelectInput(GDK_DISPLAY(), xwin, PropertyChangeMask);
XSetSelectionOwner(GDK_DISPLAY(), selection_atom, xwin, GDK_CURRENT_TIME);
- g_signal_connect(G_OBJECT(win), "client-event", G_CALLBACK(dict_plugin_message_received), dd);
+ g_signal_connect(G_OBJECT(win), "client-event", G_CALLBACK(dict_plugin_message_received), dpd);
return TRUE;
}
-void dict_plugin_close_button_clicked(GtkWidget *button, DictData *dd)
+void dict_plugin_close_button_clicked(GtkWidget *button, DictPanelData *dpd)
{
- gtk_widget_hide(dd->window);
+ gtk_widget_hide(dpd->dd->window);
}
-static void dict_plugin_free_data(XfcePanelPlugin *plugin, DictData *dd)
+static void dict_plugin_free_data(XfcePanelPlugin *plugin, DictPanelData *dpd)
{
- dict_free_data(dd);
+ /* Destroy the setting dialog, if this open */
+ GtkWidget *dialog = g_object_get_data(G_OBJECT(dpd->plugin), "dialog");
+
+ if (dialog != NULL)
+ {
+ g_message("dict: destroy dialog");
+ gtk_widget_destroy(dialog);
+ }
+
+ gtk_object_sink(GTK_OBJECT(dpd->tooltips));
+
+ dict_free_data(dpd->dd);
+ g_free(dpd);
}
-static void dict_plugin_panel_change_orientation(
- XfcePanelPlugin *plugin, GtkOrientation orientation, DictData *dd)
+static void dict_plugin_panel_change_orientation(XfcePanelPlugin *plugin,
+ GtkOrientation orientation, DictPanelData *dpd)
{
- if (! dd->show_panel_entry || orientation == GTK_ORIENTATION_VERTICAL)
- gtk_widget_hide(dd->panel_entry);
+ if (! dpd->dd->show_panel_entry || orientation == GTK_ORIENTATION_VERTICAL)
+ gtk_widget_hide(dpd->dd->panel_entry);
else
- gtk_widget_show(dd->panel_entry);
+ gtk_widget_show(dpd->dd->panel_entry);
}
-static void dict_plugin_style_set(XfcePanelPlugin *plugin, gpointer unused, DictData *dd)
+static void dict_plugin_style_set(XfcePanelPlugin *plugin, gpointer unused, DictPanelData *dpd)
{
- dict_plugin_panel_set_size(plugin, xfce_panel_plugin_get_size(plugin), dd);
+ dict_plugin_panel_set_size(plugin, xfce_panel_plugin_get_size(plugin), dpd);
}
-static gboolean dict_panel_entry_buttonpress_cb(GtkWidget *entry, GdkEventButton *event, DictData *dd)
+static gboolean dict_plugin_panel_entry_buttonpress_cb(GtkWidget *entry, GdkEventButton *event, DictPanelData *dpd)
{
GtkWidget *toplevel;
@@ -228,120 +258,145 @@
/* Grab entry focus if possible */
if (event->button != 3 && toplevel && toplevel->window)
- xfce_panel_plugin_focus_widget(dd->plugin, entry);
+ xfce_panel_plugin_focus_widget(dpd->plugin, entry);
return FALSE;
}
-static void dict_plugin_write_rc_file(XfcePanelPlugin *plugin, DictData *dd)
+static void dict_plugin_write_rc_file(XfcePanelPlugin *plugin, DictPanelData *dpd)
{
- dict_write_rc_file(dd);
+ dict_write_rc_file(dpd->dd);
}
-static void dict_plugin_properties_dialog(XfcePanelPlugin *plugin, DictData *dd)
+static void dict_plugin_panel_save_settings(DictPanelData *dpd)
{
- xfce_panel_plugin_block_menu(plugin);
+ if (dpd->dd->show_panel_entry &&
+ xfce_panel_plugin_get_orientation(dpd->plugin) == GTK_ORIENTATION_HORIZONTAL)
+ {
+ gtk_widget_show(dpd->dd->panel_entry);
+ }
+ else
+ gtk_widget_hide(dpd->dd->panel_entry);
- dict_properties_dialog(dd);
+ dict_plugin_panel_set_size(dpd->plugin, xfce_panel_plugin_get_size(dpd->plugin), dpd);
}
-/* the following extern declared functions are called in libdict when panel plugin is in use */
-extern void dict_panel_plugin_save_settings(DictData *dd)
+static void dict_plugin_properties_dialog_response(GtkWidget *dlg, gint response, DictPanelData *dpd)
{
- if (dd->show_panel_entry &&
- xfce_panel_plugin_get_orientation(dd->plugin) == GTK_ORIENTATION_HORIZONTAL)
- {
- gtk_widget_show(dd->panel_entry);
- }
- else
- gtk_widget_hide(dd->panel_entry);
+ if (response == GTK_RESPONSE_OK)
+ dict_plugin_panel_save_settings(dpd);
- dict_plugin_panel_set_size(dd->plugin, xfce_panel_plugin_get_size(dd->plugin), dd);
+ g_object_set_data(G_OBJECT(dpd->plugin), "dialog", NULL);
+ xfce_panel_plugin_unblock_menu(dpd->plugin);
}
-extern void dict_panel_plugin_unblock(DictData *dd)
+static void dict_plugin_properties_dialog(XfcePanelPlugin *plugin, DictPanelData *dpd)
{
- xfce_panel_plugin_unblock_menu(dd->plugin);
+ GtkWidget *dlg;
+
+ xfce_panel_plugin_block_menu(plugin);
+
+ dlg = dict_prefs_dialog_show(dpd->dd);
+
+ g_object_set_data(G_OBJECT(dpd->plugin), "dialog", dlg);
+
+ g_signal_connect(dlg, "response", G_CALLBACK(dict_plugin_properties_dialog_response), dpd);
+ g_signal_connect(dlg, "response", G_CALLBACK(dict_prefs_dialog_response), dpd->dd);
+
+ gtk_widget_show(dlg);
}
-static void dict_construct(XfcePanelPlugin *plugin)
+static void dict_plugin_panel_entry_activate_cb(GtkEntry *entry, DictPanelData *dpd)
{
- DictData *dd = g_new0(DictData, 1);
+ const gchar *entered_text = gtk_entry_get_text(GTK_ENTRY(dpd->dd->panel_entry));
+
+ gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), entered_text);
+
+ dict_search_word(dpd->dd, entered_text);
+}
+
+
+static void dict_plugin_construct(XfcePanelPlugin *plugin)
+{
+ DictPanelData *dpd = g_new0(DictPanelData, 1);
GtkWidget *hbox;
xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
g_thread_init(NULL);
- dd->plugin = plugin;
- dd->searched_word = NULL;
- dd->query_is_running = FALSE;
- dd->query_status = NO_ERROR;
+ dpd->dd = dict_create_dictdata();
+ dpd->plugin = plugin;
- dict_read_rc_file(dd);
+ dict_read_rc_file(dpd->dd);
- dd->panel_button = xfce_create_panel_button();
+ dpd->panel_button = xfce_create_panel_button();
- dd->tooltips = gtk_tooltips_new();
- gtk_tooltips_set_tip(dd->tooltips, dd->panel_button, _("Look up a word"), NULL);
+ dpd->tooltips = gtk_tooltips_new();
+ gtk_tooltips_set_tip(dpd->tooltips, dpd->panel_button, _("Look up a word"), NULL);
- dd->panel_button_image = gtk_image_new();
- gtk_container_add(GTK_CONTAINER(dd->panel_button), GTK_WIDGET(dd->panel_button_image));
+ dpd->panel_button_image = gtk_image_new();
+ gtk_container_add(GTK_CONTAINER(dpd->panel_button), GTK_WIDGET(dpd->panel_button_image));
- gtk_widget_show_all(dd->panel_button);
+ gtk_widget_show_all(dpd->panel_button);
- g_signal_connect(dd->panel_button, "clicked", G_CALLBACK(dict_plugin_panel_button_clicked), dd);
+ g_signal_connect(dpd->panel_button, "clicked", G_CALLBACK(dict_plugin_panel_button_clicked), dpd);
- dict_create_main_window(dd);
+ dict_create_main_window(dpd->dd);
- g_signal_connect(dd->window, "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
- g_signal_connect(dd->close_button, "clicked", G_CALLBACK(dict_plugin_close_button_clicked), dd);
- g_signal_connect(plugin, "free-data", G_CALLBACK(dict_plugin_free_data), dd);
- g_signal_connect(plugin, "size-changed", G_CALLBACK(dict_plugin_panel_set_size), dd);
- g_signal_connect(plugin, "orientation-changed", G_CALLBACK(dict_plugin_panel_change_orientation), dd);
- g_signal_connect(plugin, "style-set", G_CALLBACK(dict_plugin_style_set), dd);
- g_signal_connect(plugin, "save", G_CALLBACK(dict_plugin_write_rc_file), dd);
- g_signal_connect(plugin, "configure-plugin", G_CALLBACK(dict_plugin_properties_dialog), dd);
- g_signal_connect(plugin, "about", G_CALLBACK(dict_about_dialog), dd);
+ g_signal_connect(dpd->dd->window, "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+ g_signal_connect(dpd->dd->close_button, "clicked", G_CALLBACK(dict_plugin_close_button_clicked), dpd);
+ g_signal_connect(plugin, "free-data", G_CALLBACK(dict_plugin_free_data), dpd);
+ g_signal_connect(plugin, "size-changed", G_CALLBACK(dict_plugin_panel_set_size), dpd);
+ g_signal_connect(plugin, "orientation-changed", G_CALLBACK(dict_plugin_panel_change_orientation), dpd);
+ g_signal_connect(plugin, "style-set", G_CALLBACK(dict_plugin_style_set), dpd);
+ g_signal_connect(plugin, "save", G_CALLBACK(dict_plugin_write_rc_file), dpd);
+ g_signal_connect(plugin, "configure-plugin", G_CALLBACK(dict_plugin_properties_dialog), dpd);
+ g_signal_connect(plugin, "about", G_CALLBACK(dict_about_dialog), dpd->dd);
xfce_panel_plugin_menu_show_configure(plugin);
xfce_panel_plugin_menu_show_about(plugin);
/* panel entry */
- dd->panel_entry = gtk_entry_new();
- gtk_entry_set_width_chars(GTK_ENTRY(dd->panel_entry), 15);
- g_signal_connect(dd->panel_entry, "activate", G_CALLBACK(dict_entry_activate_cb), dd);
- g_signal_connect(dd->panel_entry, "button-press-event", G_CALLBACK(dict_panel_entry_buttonpress_cb), dd);
+ dpd->dd->panel_entry = gtk_entry_new();
+ gtk_entry_set_width_chars(GTK_ENTRY(dpd->dd->panel_entry), 15);
+ g_signal_connect(dpd->dd->panel_entry, "activate",
+ G_CALLBACK(dict_plugin_panel_entry_activate_cb), dpd);
+ g_signal_connect(dpd->dd->panel_entry, "button-press-event",
+ G_CALLBACK(dict_plugin_panel_entry_buttonpress_cb), dpd);
- if (dd->show_panel_entry && xfce_panel_plugin_get_orientation(dd->plugin) == GTK_ORIENTATION_HORIZONTAL)
- gtk_widget_show(dd->panel_entry);
+ if (dpd->dd->show_panel_entry &&
+ xfce_panel_plugin_get_orientation(dpd->plugin) == GTK_ORIENTATION_HORIZONTAL)
+ {
+ gtk_widget_show(dpd->dd->panel_entry);
+ }
hbox = gtk_hbox_new(FALSE, 0);
gtk_widget_show(hbox);
- gtk_container_add(GTK_CONTAINER(hbox), dd->panel_button);
- gtk_container_add(GTK_CONTAINER(hbox), dd->panel_entry);
+ gtk_container_add(GTK_CONTAINER(hbox), dpd->panel_button);
+ gtk_container_add(GTK_CONTAINER(hbox), dpd->dd->panel_entry);
gtk_container_add(GTK_CONTAINER(plugin), hbox);
- xfce_panel_plugin_add_action_widget(plugin, dd->panel_button);
- dict_plugin_set_selection(dd);
+ xfce_panel_plugin_add_action_widget(plugin, dpd->panel_button);
+ dict_plugin_set_selection(dpd);
/* DnD stuff */
- gtk_drag_dest_set(GTK_WIDGET(dd->panel_button), GTK_DEST_DEFAULT_ALL,
+ gtk_drag_dest_set(GTK_WIDGET(dpd->panel_button), GTK_DEST_DEFAULT_ALL,
NULL, 0, GDK_ACTION_COPY | GDK_ACTION_MOVE);
- gtk_drag_dest_add_text_targets(GTK_WIDGET(dd->panel_button));
- g_signal_connect(dd->panel_button, "drag-data-received", G_CALLBACK(dict_drag_data_received), dd);
- g_signal_connect(dd->main_entry, "drag-data-received", G_CALLBACK(dict_drag_data_received), dd);
- g_signal_connect(dd->panel_entry, "drag-data-received", G_CALLBACK(dict_drag_data_received), dd);
+ gtk_drag_dest_add_text_targets(GTK_WIDGET(dpd->panel_button));
+ g_signal_connect(dpd->panel_button, "drag-data-received", G_CALLBACK(dict_drag_data_received), dpd->dd);
+ g_signal_connect(dpd->dd->main_entry, "drag-data-received", G_CALLBACK(dict_drag_data_received), dpd->dd);
+ g_signal_connect(dpd->dd->panel_entry, "drag-data-received", G_CALLBACK(dict_drag_data_received), dpd->dd);
- dict_status_add(dd, _("Ready."));
+ dict_status_add(dpd->dd, _("Ready."));
siginterrupt(SIGALRM, 1);
signal(SIGALRM, dict_signal_cb);
}
-XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL(dict_construct);
+XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL(dict_plugin_construct);
Modified: xfce4-dict/trunk/src/xfce4-dict.c
===================================================================
--- xfce4-dict/trunk/src/xfce4-dict.c 2008-03-30 05:59:30 UTC (rev 4136)
+++ xfce4-dict/trunk/src/xfce4-dict.c 2008-03-30 09:01:41 UTC (rev 4137)
@@ -1,6 +1,6 @@
/* $Id$
*
- * Copyright 2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ * Copyright 2006-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -35,28 +35,13 @@
# include <locale.h>
#endif
-/* Simple forward declaration to avoid inclusion of libxfce4panel headers */
-typedef struct XfcePanelPlugin_t XfcePanelPlugin;
-
-#include "common.h"
+#include "libdict.h"
#include "popup_plugin.h"
-extern void dict_panel_plugin_unblock(DictData *dd)
+static gboolean main_quit(GtkWidget *widget, GdkEvent *event, DictData *dd)
{
- // no-op
-}
-
-
-extern void dict_panel_plugin_save_settings(DictData *dd)
-{
- // no-op
-}
-
-
-gboolean main_quit(GtkWidget *widget, GdkEvent *event, DictData *dd)
-{
dict_free_data(dd);
gtk_main_quit();
@@ -64,7 +49,7 @@
}
-void close_button_clicked(GtkWidget *button, DictData *dd)
+static void close_button_clicked(GtkWidget *button, DictData *dd)
{
main_quit(NULL, NULL, dd);
}
@@ -87,20 +72,10 @@
/* no plugin found, start usual stand-alone app */
- dd = g_new0(DictData, 1);
+ dd = dict_create_dictdata();
g_thread_init(NULL);
- /* initialise some pointers, unused panel plugins pointers defaults to NULL when not used */
- dd->plugin = NULL;
- dd->searched_word = NULL;
- dd->query_is_running = FALSE;
- dd->query_status = NO_ERROR;
- dd->panel_button = NULL;
- dd->tooltips = NULL;
- dd->panel_button_image = NULL;
- dd->panel_entry = NULL;
-
dict_read_rc_file(dd);
dict_create_main_window(dd);
More information about the Goodies-commits
mailing list