[Goodies-commits] r2171 - in xfce4-dict-plugin/trunk: . panel-plugin
Enrico Troeger
enrico at xfce.org
Thu Nov 16 16:52:48 CET 2006
Author: enrico
Date: 2006-11-16 15:52:45 +0000 (Thu, 16 Nov 2006)
New Revision: 2171
Modified:
xfce4-dict-plugin/trunk/ChangeLog
xfce4-dict-plugin/trunk/configure.in.in
xfce4-dict-plugin/trunk/panel-plugin/Makefile.am
xfce4-dict-plugin/trunk/panel-plugin/dict.c
Log:
* Added dependency of libexo.
* Added alternative search mode via a web site dictionary and provide three
dictionary entries of dict.leo.org for convenience.
The web site will be opened with the help of libexo.
* Added UTF8_STRING as drop targt. Might be it helps.
Modified: xfce4-dict-plugin/trunk/ChangeLog
===================================================================
--- xfce4-dict-plugin/trunk/ChangeLog 2006-11-15 15:36:54 UTC (rev 2170)
+++ xfce4-dict-plugin/trunk/ChangeLog 2006-11-16 15:52:45 UTC (rev 2171)
@@ -1,3 +1,12 @@
+2006-11-16 enrico
+
+ * Added dependency of libexo.
+ * Added alternative search mode via a web site dictionary and provide three
+ dictionary entries of dict.leo.org for convenience.
+ The web site will be opened with the help of libexo.
+ * Added UTF8_STRING as drop targt. Might be it helps.
+
+
2006-11-07 enrico
* Prefixed all functions with dict.
@@ -19,7 +28,8 @@
2006-10-02 enrico
- * Again fixed display of panel text field when panel has no horizontal orientation.
+ * Again fixed display of panel text field when panel has no horizontal
+ orientation.
2006-10-01 enrico
Modified: xfce4-dict-plugin/trunk/configure.in.in
===================================================================
--- xfce4-dict-plugin/trunk/configure.in.in 2006-11-15 15:36:54 UTC (rev 2170)
+++ xfce4-dict-plugin/trunk/configure.in.in 2006-11-16 15:52:45 UTC (rev 2171)
@@ -37,6 +37,7 @@
XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.3.90.2])
XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.3.90.2])
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.3.99.1])
+XDT_CHECK_PACKAGE([EXO], [exo-0.3], [0.3.0])
dnl check for debugging support
XDT_FEATURE_DEBUG()
Modified: xfce4-dict-plugin/trunk/panel-plugin/Makefile.am
===================================================================
--- xfce4-dict-plugin/trunk/panel-plugin/Makefile.am 2006-11-15 15:36:54 UTC (rev 2170)
+++ xfce4-dict-plugin/trunk/panel-plugin/Makefile.am 2006-11-16 15:52:45 UTC (rev 2171)
@@ -6,15 +6,17 @@
dict.c
xfce4_dict_plugin_CFLAGS = \
- -I$(top_srcdir) \
+ -I$(top_srcdir) \
$(LIBXFCEGUI4_CFLAGS) \
$(LIBXFCE4PANEL_CFLAGS) \
+ $(EXO_CFLAGS) \
-DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
@GTHREAD_CFLAGS@
xfce4_dict_plugin_LDADD = \
$(LIBXFCE4PANEL_LIBS) \
$(LIBXFCEGUI4_LIBS) \
+ $(EXO_LIBS) \
@GTHREAD_LIBS@
inline-icon.h: $(srcdir)/dict-icon.svg
Modified: xfce4-dict-plugin/trunk/panel-plugin/dict.c
===================================================================
--- xfce4-dict-plugin/trunk/panel-plugin/dict.c 2006-11-15 15:36:54 UTC (rev 2170)
+++ xfce4-dict-plugin/trunk/panel-plugin/dict.c 2006-11-16 15:52:45 UTC (rev 2171)
@@ -27,6 +27,9 @@
#include <libxfce4panel/xfce-panel-plugin.h>
#include <libxfce4panel/xfce-panel-convenience.h>
+#define EXO_API_SUBJECT_TO_CHANGE
+#include <exo/exo.h>
+
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -40,10 +43,36 @@
#define BUF_SIZE 256
+typedef enum
+{
+ DICTMODE_DICT,
+ DICTMODE_WEB,
+ DICTMODE_SPELL
+} _dict_mode;
+
+typedef enum
+{
+ WEBMODE_OTHER,
+ WEBMODE_LEO_GERENG,
+ WEBMODE_LEO_GERFRE,
+ WEBMODE_LEO_GERSPA
+} _web_mode;
+
+
+enum
+{
+ NO_CONNECTION,
+ NO_ERROR
+};
+
+
typedef struct
{
XfcePanelPlugin *plugin;
+ _dict_mode mode;
+ _web_mode web_mode;
+
GtkWidget *window;
GtkWidget *statusbar;
GtkWidget *main_entry;
@@ -75,16 +104,24 @@
gint query_status;
gchar *query_buffer;
+ GtkWidget *radio_dict;
+ GtkWidget *radio_web;
+
+ GtkWidget *web_entry_label;
+ GtkWidget *web_entry;
+ GtkWidget *web_radio_leo_gereng;
+ GtkWidget *web_radio_leo_gerfre;
+ GtkWidget *web_radio_leo_gerspa;
+ GtkWidget *web_radio_other;
+ gchar *web_url;
+
+ GtkWidget *frame_dict;
+ GtkWidget *frame_web;
+
GdkPixbuf *icon;
} DictData;
-enum
-{
- NO_CONNECTION,
- NO_ERROR
-};
-
/* Panel Plugin Interface */
static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd);
@@ -96,6 +133,76 @@
/* internal functions */
+static gint dict_str_pos(const gchar *haystack, const gchar *needle)
+{
+ gint haystack_length = strlen(haystack);
+ gint needle_length = strlen(needle);
+ gint i, j, pos = -1;
+
+ if (needle_length > haystack_length)
+ {
+ return -1;
+ }
+ else
+ {
+ for (i = 0; (i < haystack_length) && pos == -1; i++)
+ {
+ if (haystack[i] == needle[0] && needle_length == 1) return i;
+ else if (haystack[i] == needle[0])
+ {
+ for (j = 1; (j < needle_length); j++)
+ {
+ if (haystack[i+j] == needle[j])
+ {
+ if (pos == -1) pos = i;
+ }
+ else
+ {
+ pos = -1;
+ break;
+ }
+ }
+ }
+ }
+ return pos;
+ }
+}
+
+
+/* replaces all occurrences of needle in haystack with replacement
+ * all strings have to 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)
+{
+ gint i;
+ gchar *start;
+ gint lt_pos;
+ gchar *result;
+ GString *str;
+
+ if (haystack == NULL) return NULL;
+
+ start = strstr(haystack, needle);
+ lt_pos = dict_str_pos(haystack, needle);
+
+ if (start == NULL || lt_pos == -1) return haystack;
+
+ // substitute by copying
+ str = g_string_sized_new(strlen(haystack));
+ for (i = 0; i < lt_pos; i++)
+ {
+ g_string_append_c(str, haystack[i]);
+ }
+ g_string_append(str, replacement);
+ g_string_append(str, haystack + lt_pos + strlen(needle));
+
+ result = str->str;
+ g_free(haystack);
+ g_string_free(str, FALSE);
+ return dict_str_replace(result, needle, replacement);
+}
+
+
static GdkPixbuf *dict_load_and_scale(const guint8 *data, int dstw, int dsth)
{
GdkPixbuf *pb, *pb_scaled;
@@ -235,8 +342,16 @@
*/
-void dict_status_add(DictData *dd, const gchar *format, ...)
+static 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));
+}
+
+
+static void dict_status_add(DictData *dd, const gchar *format, ...)
+{
static gchar string[512];
va_list args;
@@ -414,7 +529,7 @@
}
-static void dict_start_query(DictData *dd, const gchar *word)
+static void dict_start_server_query(DictData *dd, const gchar *word)
{
if (dd->query_is_running)
{
@@ -424,36 +539,110 @@
{
dict_clear_text_buffer(dd);
- if (word == NULL || strlen(word) == 0 || strlen(word) > (BUF_SIZE - 11))
+ 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);
+ }
+}
+
+
+static void dict_search_word(DictData *dd, const gchar *word)
+{
+ gboolean show = TRUE;
+
+ // sanity checks
+ if (word == NULL || strlen(word) == 0 || strlen(word) > (BUF_SIZE - 11))
+ {
+ dict_status_add(dd, _("Invalid input."));
+ return;
+ }
+
+ g_free(dd->searched_word);
+ if (! g_utf8_validate(word, -1, NULL))
+ { // try to convert non-UTF8 input otherwise stop the query
+ dd->searched_word = g_locale_to_utf8(word, -1, NULL, NULL, NULL);
+ if (dd->searched_word == NULL || ! g_utf8_validate(dd->searched_word, -1, NULL))
{
- dict_status_add(dd, _("Invalid input."));
+ dict_status_add(dd, _("Invalid non-UTF8 input."));
+ gtk_entry_set_text(GTK_ENTRY(dd->main_entry), "");
+ gtk_entry_set_text(GTK_ENTRY(dd->panel_entry), "");
return;
}
+ gtk_entry_set_text(GTK_ENTRY(dd->main_entry), dd->searched_word);
+ gtk_entry_set_text(GTK_ENTRY(dd->panel_entry), dd->searched_word);
+ }
+ else
+ {
+ dd->searched_word = g_strdup(word); // copy the string because it will be freed by the caller
+ }
- g_free(dd->searched_word);
- if (! g_utf8_validate(word, -1, NULL))
- { // try to convert non-UTF8 input otherwise stop the query
- dd->searched_word = g_locale_to_utf8(word, -1, NULL, NULL, NULL);
- if (dd->searched_word == NULL || ! g_utf8_validate(dd->searched_word, -1, NULL))
+
+ if (dd->mode == DICTMODE_DICT)
+ {
+ dict_start_server_query(dd, dd->searched_word);
+ }
+ else if (dd->mode == DICTMODE_WEB)
+ {
+ gboolean success;
+ gboolean use_leo = FALSE;
+ gchar *uri, *base;
+
+ switch (dd->web_mode)
+ {
+ case WEBMODE_LEO_GERENG:
{
- dict_status_add(dd, _("Invalid non-UTF8 input."));
- gtk_entry_set_text(GTK_ENTRY(dd->main_entry), "");
- gtk_entry_set_text(GTK_ENTRY(dd->panel_entry), "");
- return;
+ base = "http://dict.leo.org/ende?search={word}";
+ use_leo = TRUE;
+ break;
}
- gtk_entry_set_text(GTK_ENTRY(dd->main_entry), dd->searched_word);
- gtk_entry_set_text(GTK_ENTRY(dd->panel_entry), dd->searched_word);
+ case WEBMODE_LEO_GERFRE:
+ {
+ base = "http://dict.leo.org/frde?search={word}";
+ use_leo = TRUE;
+ break;
+ }
+ case WEBMODE_LEO_GERSPA:
+ {
+ base = "http://dict.leo.org/esde?search={word}";
+ use_leo = TRUE;
+ break;
+ }
+ default: base = dd->web_url;
}
- else
+
+ if (use_leo)
{
- dd->searched_word = g_strdup(word); // copy the string because it will be freed by the caller
+ // convert the text into ISO-8869-15 because dict.leo.org expects it ;-(
+ gchar *tmp = g_convert(dd->searched_word, -1,
+ "ISO-8859-15", "UTF-8", NULL, NULL, NULL);
+ if (tmp != NULL)
+ {
+ g_free(dd->searched_word);
+ dd->searched_word = tmp;
+ }
}
- dict_status_add(dd, _("Querying the server %s..."), dd->server);
+ uri = dict_str_replace(g_strdup(base), "{word}", dd->searched_word);
+ success = exo_url_show(uri, NULL, NULL);
+ if (! success)
+ {
+ xfce_err(_("Browser could not be opened. Please check your preferences."));
+ }
+ g_free(uri);
- // start the thread to query the server
- g_thread_create((GThreadFunc) dict_ask_server, dd, FALSE, NULL);
+ show = FALSE; // don't display main window
}
+
+ if (show)
+ {
+ dict_show_main_window(dd);
+ }
+ else
+ {
+ gtk_widget_hide(dd->window);
+ }
+
}
@@ -462,6 +651,7 @@
g_free(dd->searched_word);
g_free(dd->dictionary);
g_free(dd->server);
+ g_free(dd->web_url);
g_object_unref(dd->icon);
gtk_object_sink(GTK_OBJECT(dd->tooltips));
g_free(dd);
@@ -506,11 +696,14 @@
{
gchar *file;
XfceRc *rc;
+ gint mode = DICTMODE_DICT;
+ gint webmode = WEBMODE_LEO_GERENG;
gint port = 2628;
gint panel_entry_size = 120;
gboolean show_panel_entry = FALSE;
const gchar *server = "dict.org";
const gchar *dict = "*";
+ const gchar *weburl = NULL;
if ((file = xfce_panel_plugin_lookup_rc_file(plugin)) != NULL)
{
@@ -518,6 +711,9 @@
g_free(file);
if (rc != NULL)
{
+ mode = xfce_rc_read_int_entry(rc, "mode", mode);
+ webmode = xfce_rc_read_int_entry(rc, "web_mode", webmode);
+ weburl = xfce_rc_read_entry(rc, "web_url", weburl);
show_panel_entry = xfce_rc_read_bool_entry(rc, "show_panel_entry", show_panel_entry);
panel_entry_size = xfce_rc_read_int_entry(rc, "panel_entry_size", panel_entry_size);
port = xfce_rc_read_int_entry(rc, "port", port);
@@ -528,6 +724,9 @@
}
}
+ dd->mode = mode;
+ dd->web_mode = webmode;
+ dd->web_url = g_strdup(weburl);
dd->show_panel_entry = show_panel_entry;
dd->panel_entry_size = panel_entry_size;
dd->port = port;
@@ -548,6 +747,10 @@
if (! rc) return;
+ xfce_rc_write_int_entry(rc, "mode", dd->mode);
+ xfce_rc_write_int_entry(rc, "web_mode", dd->web_mode);
+ if (dd->web_url != NULL)
+ xfce_rc_write_entry(rc, "web_url", dd->web_url);
xfce_rc_write_bool_entry(rc, "show_panel_entry", dd->show_panel_entry);
xfce_rc_write_int_entry(rc, "panel_entry_size", dd->panel_entry_size);
xfce_rc_write_int_entry(rc, "port", dd->port);
@@ -633,38 +836,68 @@
}
-static void dict_dialog_response(GtkWidget *dlg, gint response, DictData *dd)
+static void dict_properties_dialog_response(GtkWidget *dlg, gint response, DictData *dd)
{
- gchar *tmp;
-
g_object_set_data(G_OBJECT(dd->plugin), "dialog", NULL);
if (response == GTK_RESPONSE_OK)
{
- tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo));
- if (tmp == NULL || tmp[0] == '-')
+ // MODE DICT
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->radio_dict)))
{
- xfce_err(_("You have chosen an invalid dictionary entry."));
- return;
+ gchar *tmp;
+
+ dd->mode = DICTMODE_DICT;
+
+ tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo));
+ if (tmp == NULL || tmp[0] == '-')
+ {
+ xfce_err(_("You have chosen an invalid dictionary entry."));
+ 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 = g_strdup(tmp);
}
+ // MODE WEB
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->radio_web)))
+ {
+ dd->mode = DICTMODE_WEB;
- dd->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner));
+ 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->server);
- dd->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->server_entry)));
+ g_free(dd->web_url);
+ dd->web_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->web_entry)));
+ }
+ }
- g_free(dd->dictionary);
- dd->dictionary = g_strdup(tmp);
+ // 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));
- 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->show_panel_entry && xfce_panel_plugin_get_orientation(dd->plugin) == GTK_ORIENTATION_HORIZONTAL)
- {
+ 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);
+
+ // save settings
dict_set_size(dd->plugin, xfce_panel_plugin_get_size(dd->plugin), dd);
dict_write_rc_file(dd->plugin, dd);
}
@@ -680,10 +913,17 @@
}
+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));
+}
+
+
static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd)
{
- GtkWidget *dlg, *header, *vbox, *table, *label1, *label2, *label3;
- GtkWidget *button_get_list;
+ GtkWidget *dlg, *header, *vbox, *label3;
+ GSList *radio_group;
xfce_panel_plugin_block_menu(plugin);
@@ -699,139 +939,245 @@
gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
- g_signal_connect(dlg, "response", G_CALLBACK(dict_dialog_response), dd);
+ 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_widget_set_size_request(GTK_BIN(header)->child, 200, 32);
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, 8);
+ 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);
- /* server address */
- label1 = gtk_label_new_with_mnemonic(_("Server :"));
- gtk_widget_show(label1);
+ /*
+ * Mode: DICT
+ */
+ {
+ GtkWidget *label1, *label2, *table, *button_get_list;
- 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 address */
+ label1 = gtk_label_new_with_mnemonic(_("Server :"));
+ gtk_widget_show(label1);
- /* server port */
- label2 = gtk_label_new_with_mnemonic(_("Server Port :"));
- gtk_widget_show(label2);
+ 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);
- 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);
+ /* server port */
+ label2 = gtk_label_new_with_mnemonic(_("Server Port :"));
+ gtk_widget_show(label2);
- /* dictionary */
- label3 = gtk_label_new_with_mnemonic(_("Dictionary :"));
- gtk_widget_show(label3);
+ 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);
- 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);
- }
- }
+ /* dictionary */
+ label3 = gtk_label_new_with_mnemonic(_("Dictionary :"));
+ gtk_widget_show(label3);
- gtk_widget_show(dd->dict_combo);
+ 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);
+ }
+ }
- 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);
+ 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);
- /* 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(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);
+ /* 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_widget_set_sensitive(dd->check_panel_entry, gtk_toggle_button_get_active(tb));
- gtk_widget_show(dd->panel_entry_size_spinner);
+ 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);
- /* put it all together */
- table = gtk_table_new(5, 3, FALSE);
- gtk_widget_show(table);
- gtk_table_set_row_spacings(GTK_TABLE(table), 10);
- gtk_table_set_col_spacings(GTK_TABLE(table), 10);
+ 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), label1, 0, 1, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label1), 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), dd->server_entry, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
+ 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), label2, 0, 1, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label2), 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), dd->port_spinner, 1, 2, 1, 2,
- (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);
- gtk_table_attach(GTK_TABLE(table), label3, 0, 1, 2, 3,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 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);
+ dd->radio_dict = gtk_radio_button_new_with_label(NULL, _("Use a DICT server"));
+ radio_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->radio_dict));
+ if (dd->mode == DICTMODE_DICT)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->radio_dict), TRUE);
- gtk_table_attach(GTK_TABLE(table), button_get_list, 2, 3, 2, 3,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_show(dd->radio_dict);
+ gtk_box_pack_start(GTK_BOX(vbox), dd->radio_dict, FALSE, FALSE, 0);
- gtk_table_attach(GTK_TABLE(table), dd->check_panel_entry, 1, 2, 3, 4,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
+ dd->frame_dict = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(dd->frame_dict), GTK_SHADOW_ETCHED_OUT);
+ gtk_widget_show(dd->frame_dict);
+ gtk_container_set_border_width(GTK_CONTAINER(dd->frame_dict), 5);
+ gtk_container_add(GTK_CONTAINER(dd->frame_dict), table);
+ gtk_box_pack_start(GTK_BOX(vbox), dd->frame_dict, FALSE, FALSE, 0);
+ }
- gtk_table_attach(GTK_TABLE(table), dd->panel_entry_size_label, 0, 1, 4, 5,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_misc_set_alignment(GTK_MISC(label3), 1, 0);
+ /*
+ * Mode: WEB
+ */
+ {
+ GtkWidget *web_vbox, *entry_hbox, *help_label;
+ GSList *web_type;
- gtk_table_attach(GTK_TABLE(table), dd->panel_entry_size_spinner, 1, 2, 4, 5,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
+ web_vbox = gtk_vbox_new(FALSE, 5);
+ gtk_widget_show(web_vbox);
- gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
+ 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, FALSE, FALSE, 0);
+
+ dd->radio_web = gtk_radio_button_new_with_label(radio_group, _("Use a web site"));
+ gtk_widget_show(dd->radio_web);
+ if (dd->mode == DICTMODE_WEB)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->radio_web), TRUE);
+ gtk_box_pack_start(GTK_BOX(vbox), dd->radio_web, FALSE, FALSE, 0);
+
+ dd->frame_web = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(dd->frame_web), GTK_SHADOW_ETCHED_OUT);
+ gtk_widget_show(dd->frame_web);
+ gtk_container_set_border_width(GTK_CONTAINER(dd->frame_web), 5);
+ gtk_container_add(GTK_CONTAINER(dd->frame_web), web_vbox);
+ gtk_box_pack_start(GTK_BOX(vbox), dd->frame_web, FALSE, 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);
}
@@ -844,14 +1190,11 @@
{
entered_text = gtk_entry_get_text(GTK_ENTRY(dd->panel_entry));
gtk_entry_set_text(GTK_ENTRY(dd->main_entry), entered_text);
- gtk_widget_show(dd->window);
- gtk_window_deiconify(GTK_WINDOW(dd->window));
- gtk_window_present(GTK_WINDOW(dd->window));
}
else
entered_text = gtk_entry_get_text(GTK_ENTRY(dd->main_entry));
- dict_start_query(dd, entered_text);
+ dict_search_word(dd, entered_text);
}
@@ -1036,10 +1379,7 @@
drag_context->action = GDK_ACTION_COPY;
}
gtk_entry_set_text(GTK_ENTRY(dd->main_entry), (const gchar*) data->data);
- dict_start_query(dd, (const gchar*) data->data);
- gtk_widget_show(dd->window);
- gtk_window_deiconify(GTK_WINDOW(dd->window));
- gtk_window_present(GTK_WINDOW(dd->window));
+ dict_search_word(dd, (const gchar*) data->data);
gtk_drag_finish(drag_context, TRUE, FALSE, time);
}
}
@@ -1052,13 +1392,14 @@
else
{
const gchar *panel_text = gtk_entry_get_text(GTK_ENTRY(dd->panel_entry));
+
+ dict_show_main_window(dd);
if (strcmp("", panel_text) != 0)
{
- dict_start_query(dd, panel_text);
+ dict_search_word(dd, panel_text);
gtk_entry_set_text(GTK_ENTRY(dd->main_entry), panel_text);
}
gtk_widget_grab_focus(dd->main_entry);
- gtk_widget_show(dd->window);
}
}
@@ -1152,7 +1493,8 @@
/* DnD stuff */
gtk_drag_dest_set(GTK_WIDGET(dd->panel_button), GTK_DEST_DEFAULT_ALL,
- (GtkTargetEntry[]) { { "STRING", 0, 0 }, { "text/plain", 0, 0 } }, 2, GDK_ACTION_COPY);
+ (GtkTargetEntry[]) { { "STRING", 0, 0 }, { "UTF8_STRING", 0, 0 }, { "text/plain", 0, 0 } },
+ 3, GDK_ACTION_COPY);
g_signal_connect(dd->panel_button, "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);
More information about the Goodies-commits
mailing list