static void gdict_speller_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { GdictSpeller *speller = GDICT_SPELLER (gobject); switch (prop_id) { case PROP_DATABASE: g_value_set_string (value, speller->priv->database); break; case PROP_STRATEGY: g_value_set_string (value, speller->priv->strategy); break; case PROP_CONTEXT: g_value_set_object (value, speller->priv->context); break; case PROP_COUNT: g_value_set_int (value, speller->priv->results); default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } }
static void match_found_cb (GdictContext *context, GdictMatch *match, gpointer user_data) { GdictSpeller *speller = GDICT_SPELLER (user_data); GdictSpellerPrivate *priv = speller->priv; GtkTreeIter iter; GDICT_NOTE (SPELLER, "MATCH: `%s' (from `%s')", gdict_match_get_word (match), gdict_match_get_database (match)); gtk_list_store_append (priv->store, &iter); gtk_list_store_set (priv->store, &iter, MATCH_COLUMN_TYPE, MATCH_WORD, MATCH_COLUMN_DB_NAME, gdict_match_get_database (match), MATCH_COLUMN_WORD, gdict_match_get_word (match), -1); if (priv->results == -1) priv->results = 1; else priv->results += 1; }
static void gdict_speller_finalize (GObject *gobject) { GdictSpeller *speller = GDICT_SPELLER (gobject); GdictSpellerPrivate *priv = speller->priv; if (priv->context) set_gdict_context (speller, NULL); if (priv->busy_cursor) #if GTK_CHECK_VERSION (3, 0, 0) g_object_unref (priv->busy_cursor); #else gdk_cursor_unref (priv->busy_cursor); #endif g_free (priv->strategy); g_free (priv->database); g_free (priv->word); if (priv->store) g_object_unref (priv->store); G_OBJECT_CLASS (gdict_speller_parent_class)->finalize (gobject); }
static void gdict_speller_set_property (GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec) { GdictSpeller *speller = GDICT_SPELLER (gobject); GdictSpellerPrivate *priv = speller->priv; switch (prop_id) { case PROP_CONTEXT: set_gdict_context (speller, g_value_get_object (value)); break; case PROP_DATABASE: g_free (priv->database); priv->database = g_strdup (g_value_get_string (value)); break; case PROP_STRATEGY: g_free (priv->strategy); priv->strategy = g_strdup (g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } }
static void clear_button_clicked_cb (GtkWidget *widget, gpointer user_data) { GdictSpeller *speller = GDICT_SPELLER (user_data); gdict_speller_clear (speller); }
static void sidebar_page_changed_cb (GdictSidebar * sidebar, GtrDictPanel * panel) { GtrDictPanelPrivate *priv = panel->priv; const gchar *page_id; const gchar *message; page_id = gdict_sidebar_current_page (sidebar); switch (page_id[0]) { case 's': { switch (page_id[1]) { case 'p': /* speller */ message = _("Double-click on the word to look up"); if (priv->word) gdict_speller_match (GDICT_SPELLER (priv->speller), priv->word); break; case 't': /* strat-chooser */ message = _("Double-click on the matching strategy to use"); gdict_strategy_chooser_refresh (GDICT_STRATEGY_CHOOSER (priv->strat_chooser)); break; case 'o': /* source-chooser */ message = _("Double-click on the source to use"); gdict_source_chooser_refresh (GDICT_SOURCE_CHOOSER (priv->source_chooser)); break; default: message = NULL; } } break; case 'd': /* db-chooser */ message = _("Double-click on the database to use"); gdict_database_chooser_refresh (GDICT_DATABASE_CHOOSER (priv->db_chooser)); break; default: message = NULL; break; } if (message && priv->status) gtr_statusbar_flash_message (panel->priv->status, 0, "%s", message); }
static void lookup_end_cb (GdictContext *context, gpointer user_data) { GdictSpeller *speller = GDICT_SPELLER (user_data); GdictSpellerPrivate *priv = speller->priv; if (gtk_widget_get_window (GTK_WIDGET (speller))) gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (speller)), NULL); g_free (priv->word); priv->word = NULL; priv->is_searching = FALSE; }
static void lookup_start_cb (GdictContext *context, gpointer user_data) { GdictSpeller *speller = GDICT_SPELLER (user_data); GdictSpellerPrivate *priv = speller->priv; if (!priv->busy_cursor) priv->busy_cursor = gdk_cursor_new (GDK_WATCH); if (gtk_widget_get_window (GTK_WIDGET (speller))) gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (speller)), priv->busy_cursor); priv->is_searching = TRUE; }
static void sidebar_page_changed_cb (GdictSidebar *sidebar, GeditDictPanel *panel) { GeditDictPanelPrivate *priv = panel->priv; const gchar *page_id; const gchar *message; page_id = gdict_sidebar_current_page (sidebar); switch (page_id[0]) { case 's': { switch (page_id[1]) { case 'p': /* speller */ message = _("Double-click on the word to look up"); if (priv->word) gdict_speller_match (GDICT_SPELLER (priv->speller), priv->word); break; case 't': /* strat-chooser */ message = _("Double-click on the matching strategy to use"); gdict_strategy_chooser_refresh (GDICT_STRATEGY_CHOOSER (priv->strat_chooser)); break; default: message = NULL; } } break; case 'd': /* db-chooser */ message = _("Double-click on the database to use"); gdict_database_chooser_refresh (GDICT_DATABASE_CHOOSER (priv->db_chooser)); break; default: message = NULL; break; } /*if (message && window->status) gtk_statusbar_push (GTK_STATUSBAR (window->status), 0, message);*/ }
static void row_activated_cb (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GdictSpeller *speller = GDICT_SPELLER (user_data); GdictSpellerPrivate *priv = speller->priv; GtkTreeIter iter; gchar *word, *db_name; gboolean valid; valid = gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->store), &iter, path); if (!valid) { g_warning ("Invalid iterator found"); return; } gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, MATCH_COLUMN_WORD, &word, MATCH_COLUMN_DB_NAME, &db_name, -1); if (word) g_signal_emit (speller, speller_signals[WORD_ACTIVATED], 0, word, db_name); else { gchar *row = gtk_tree_path_to_string (path); g_warning ("Row %s activated, but no word attached", row); g_free (row); } g_free (word); g_free (db_name); }
static GObject * gdict_speller_constructor (GType type, guint n_params, GObjectConstructParam *params) { GObject *object; GdictSpeller *speller; GdictSpellerPrivate *priv; GtkWidget *sw; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *hbox; object = G_OBJECT_CLASS (gdict_speller_parent_class)->constructor (type, n_params, params); speller = GDICT_SPELLER (object); priv = speller->priv; sw = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_vexpand (sw, TRUE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (speller), sw, TRUE, TRUE, 0); gtk_widget_show (sw); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("matches", renderer, "text", MATCH_COLUMN_WORD, NULL); priv->treeview = gtk_tree_view_new (); gtk_tree_view_set_model (GTK_TREE_VIEW (priv->treeview), GTK_TREE_MODEL (priv->store)); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->treeview), FALSE); gtk_tree_view_append_column (GTK_TREE_VIEW (priv->treeview), column); g_signal_connect (priv->treeview, "row-activated", G_CALLBACK (row_activated_cb), speller); gtk_container_add (GTK_CONTAINER (sw), priv->treeview); gtk_widget_show (priv->treeview); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); priv->clear_button = gtk_button_new (); gtk_button_set_image (GTK_BUTTON (priv->clear_button), gtk_image_new_from_icon_name ("edit-clear", GTK_ICON_SIZE_SMALL_TOOLBAR)); g_signal_connect (priv->clear_button, "clicked", G_CALLBACK (clear_button_clicked_cb), speller); gtk_box_pack_start (GTK_BOX (hbox), priv->clear_button, FALSE, FALSE, 0); gtk_widget_show (priv->clear_button); gtk_widget_set_tooltip_text (priv->clear_button, _("Clear the list of similar words")); gtk_box_pack_end (GTK_BOX (speller), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); return object; }
static void gedit_dict_panel_draw (GeditDictPanel *panel) { GtkWidget *vbox; GtkWidget *hbox; vbox = gtk_vbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); gtk_widget_show (vbox); hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); /* * Look up Button */ panel->priv->button = gtk_button_new_with_mnemonic (_("Look _up:")); g_signal_connect(panel->priv->button, "clicked", G_CALLBACK (gedit_dict_panel_entry_activate_cb), panel); gtk_button_set_relief (GTK_BUTTON (panel->priv->button), GTK_RELIEF_NONE); gtk_box_pack_start (GTK_BOX (hbox), panel->priv->button, FALSE, FALSE, 0); gtk_widget_show(panel->priv->button); /* * Entry */ panel->priv->entry = gtk_entry_new (); if (panel->priv->word) gtk_entry_set_text (GTK_ENTRY (panel->priv->entry), panel->priv->word); g_signal_connect (panel->priv->entry, "activate", G_CALLBACK (gedit_dict_panel_entry_activate_cb), panel); gtk_box_pack_start (GTK_BOX (hbox), panel->priv->entry, TRUE, TRUE, 0); gtk_widget_show (panel->priv->entry); /* * Defbox */ panel->priv->defbox = gdict_defbox_new (); if (panel->priv->context) gdict_defbox_set_context (GDICT_DEFBOX (panel->priv->defbox), panel->priv->context); g_signal_connect(panel->priv->defbox, "link-clicked", G_CALLBACK(gedit_dict_panel_link_clicked), panel); gtk_container_add (GTK_CONTAINER (vbox), panel->priv->defbox); gtk_widget_show (panel->priv->defbox); panel->priv->sidebar = gdict_sidebar_new (); g_signal_connect (panel->priv->sidebar, "page-changed", G_CALLBACK (sidebar_page_changed_cb), panel); /* * Paned */ panel->priv->paned = GTK_PANED(gtk_vpaned_new()); gtk_box_pack_start (GTK_BOX (panel), GTK_WIDGET(panel->priv->paned), TRUE, TRUE, 0); gtk_paned_pack1 (panel->priv->paned, vbox, FALSE, TRUE); gtk_paned_pack2 (panel->priv->paned, panel->priv->sidebar, TRUE, TRUE); gtk_widget_show (GTK_WIDGET(panel->priv->paned)); g_signal_connect(panel->priv->paned, "notify::position", G_CALLBACK(store_position), NULL); /* * Speller */ panel->priv->speller = gdict_speller_new (); if (panel->priv->context) gdict_speller_set_context (GDICT_SPELLER (panel->priv->speller), panel->priv->context); g_signal_connect (panel->priv->speller, "word-activated", G_CALLBACK (speller_word_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_SPELLER_PAGE, _("Similar words"), panel->priv->speller); gtk_widget_show (panel->priv->speller); /* * db chooser */ panel->priv->db_chooser = gdict_database_chooser_new (); if (panel->priv->context) gdict_database_chooser_set_context (GDICT_DATABASE_CHOOSER (panel->priv->db_chooser), panel->priv->context); g_signal_connect (panel->priv->db_chooser, "database-activated", G_CALLBACK (database_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_DATABASES_PAGE, _("Available dictionaries"), panel->priv->db_chooser); gtk_widget_show (panel->priv->db_chooser); /* * Strategy chooser */ panel->priv->strat_chooser = gdict_strategy_chooser_new (); if (panel->priv->context) gdict_strategy_chooser_set_context (GDICT_STRATEGY_CHOOSER (panel->priv->strat_chooser), panel->priv->context); g_signal_connect (panel->priv->strat_chooser, "strategy-activated", G_CALLBACK (strategy_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_STRATEGIES_PAGE, _("Available strategies"), panel->priv->strat_chooser); gtk_widget_show (panel->priv->strat_chooser); gtk_widget_show (panel->priv->sidebar); }
static void gtr_dict_panel_init (GtrDictPanel * panel) { GtrDictPanelPrivate *priv; GtkWidget *vbox; GtkWidget *hbox; panel->priv = GTR_DICT_PANEL_GET_PRIVATE (panel); priv = panel->priv; priv->status = NULL; if (!priv->loader) panel->priv->loader = gdict_source_loader_new (); gtk_orientable_set_orientation (GTK_ORIENTABLE (panel), GTK_ORIENTATION_VERTICAL); /* add our data dir inside $HOME to the loader's search paths */ gdict_source_loader_add_search_path (priv->loader, gtr_dirs_get_user_config_dir ()); /* settings */ priv->settings = g_settings_new ("org.gnome.gtranslator.plugins.dictionary"); g_signal_connect (priv->settings, "changed", G_CALLBACK (on_settings_changed), panel); /* force retrieval of the configuration from gsettings */ gtr_dict_panel_set_source_name (panel, NULL); /* Draw widgets */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); gtk_widget_show (vbox); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); /* Look up Button */ panel->priv->button = gtk_button_new_with_mnemonic (_("Look _up:")); g_signal_connect (panel->priv->button, "clicked", G_CALLBACK (gtr_dict_panel_entry_activate_cb), panel); gtk_button_set_relief (GTK_BUTTON (panel->priv->button), GTK_RELIEF_NONE); gtk_box_pack_start (GTK_BOX (hbox), panel->priv->button, FALSE, FALSE, 0); gtk_widget_show (panel->priv->button); /* Entry */ panel->priv->entry = gtk_entry_new (); if (panel->priv->word) gtk_entry_set_text (GTK_ENTRY (panel->priv->entry), panel->priv->word); g_signal_connect (panel->priv->entry, "activate", G_CALLBACK (gtr_dict_panel_entry_activate_cb), panel); gtk_box_pack_start (GTK_BOX (hbox), panel->priv->entry, TRUE, TRUE, 0); gtk_widget_show (panel->priv->entry); /* Defbox */ panel->priv->defbox = gdict_defbox_new (); if (panel->priv->context) gdict_defbox_set_context (GDICT_DEFBOX (panel->priv->defbox), panel->priv->context); g_signal_connect (panel->priv->defbox, "link-clicked", G_CALLBACK (gtr_dict_panel_link_clicked), panel); gtk_container_add (GTK_CONTAINER (vbox), panel->priv->defbox); gtk_widget_show (panel->priv->defbox); /* Sidebar */ panel->priv->sidebar = gdict_sidebar_new (); g_signal_connect (panel->priv->sidebar, "page-changed", G_CALLBACK (sidebar_page_changed_cb), panel); /* Paned */ panel->priv->paned = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_VERTICAL)); gtk_box_pack_start (GTK_BOX (panel), GTK_WIDGET (panel->priv->paned), TRUE, TRUE, 0); gtk_paned_pack1 (panel->priv->paned, vbox, FALSE, TRUE); gtk_paned_pack2 (panel->priv->paned, panel->priv->sidebar, TRUE, TRUE); gtk_widget_show (GTK_WIDGET (panel->priv->paned)); g_settings_bind (panel->priv->settings, DICTIONARY_SETTINGS_POSITION_KEY, panel->priv->paned, "position", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET); /* Speller */ panel->priv->speller = gdict_speller_new (); if (panel->priv->context) gdict_speller_set_context (GDICT_SPELLER (panel->priv->speller), panel->priv->context); g_signal_connect (panel->priv->speller, "word-activated", G_CALLBACK (speller_word_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_SPELLER_PAGE, _("Similar words"), panel->priv->speller); gtk_widget_show (panel->priv->speller); /* db chooser */ panel->priv->db_chooser = gdict_database_chooser_new (); if (panel->priv->context) gdict_database_chooser_set_context (GDICT_DATABASE_CHOOSER (panel->priv->db_chooser), panel->priv->context); g_signal_connect (panel->priv->db_chooser, "database-activated", G_CALLBACK (database_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_DATABASES_PAGE, _("Available dictionaries"), panel->priv->db_chooser); gtk_widget_show (panel->priv->db_chooser); /* Strategy chooser */ panel->priv->strat_chooser = gdict_strategy_chooser_new (); if (panel->priv->context) gdict_strategy_chooser_set_context (GDICT_STRATEGY_CHOOSER (panel->priv->strat_chooser), panel->priv->context); g_signal_connect (panel->priv->strat_chooser, "strategy-activated", G_CALLBACK (strategy_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_STRATEGIES_PAGE, _("Available strategies"), panel->priv->strat_chooser); gtk_widget_show (panel->priv->strat_chooser); /* Source chooser */ panel->priv->source_chooser = gdict_source_chooser_new_with_loader (panel->priv->loader); g_signal_connect (panel->priv->source_chooser, "source-activated", G_CALLBACK (source_activated_cb), panel); gdict_sidebar_add_page (GDICT_SIDEBAR (panel->priv->sidebar), GDICT_SIDEBAR_SOURCES_PAGE, _("Dictionary sources"), panel->priv->source_chooser); gtk_widget_show (panel->priv->source_chooser); gtk_widget_show (panel->priv->sidebar); }