FloatingBehavior::FloatingBehavior(Dialog &dialog) : Behavior(dialog), _d (new Gtk::Dialog(_dialog._title)) #if GTK_VERSION_GE(2, 12) ,_dialog_active(_d->property_is_active()) ,_steps(0) ,_trans_focus(Inkscape::Preferences::get()->getDoubleLimited("/dialogs/transparency/on-focus", 0.95, 0.0, 1.0)) ,_trans_blur(Inkscape::Preferences::get()->getDoubleLimited("/dialogs/transparency/on-blur", 0.50, 0.0, 1.0)) ,_trans_time(Inkscape::Preferences::get()->getIntLimited("/dialogs/transparency/animate-time", 100, 0, 5000)) #endif { hide(); _d->set_has_separator(false); signal_delete_event().connect(sigc::mem_fun(_dialog, &Inkscape::UI::Dialog::Dialog::_onDeleteEvent)); sp_transientize(GTK_WIDGET(_d->gobj())); _dialog.retransientize_suppress = false; #if GTK_VERSION_GE(2, 12) _focus_event(); _dialog_active.signal_changed().connect(sigc::mem_fun(this, &FloatingBehavior::_focus_event)); #endif }
void FontSubstitution::show(Glib::ustring out, GSList *l) { Gtk::MessageDialog warning(_("\nSome fonts are not available and have been substituted."), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, true); warning.set_resizable(true); warning.set_title(_("Font substitution")); GtkWidget *dlg = GTK_WIDGET(warning.gobj()); sp_transientize(dlg); Gtk::TextView * textview = new Gtk::TextView(); textview->set_editable(false); textview->set_wrap_mode(Gtk::WRAP_WORD); textview->show(); textview->get_buffer()->set_text(_(out.c_str())); Gtk::ScrolledWindow * scrollwindow = new Gtk::ScrolledWindow(); scrollwindow->add(*textview); scrollwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); scrollwindow->set_shadow_type(Gtk::SHADOW_IN); scrollwindow->set_size_request(0, 100); scrollwindow->show(); Gtk::CheckButton *cbSelect = new Gtk::CheckButton(); cbSelect->set_label(_("Select all the affected items")); cbSelect->set_active(true); cbSelect->show(); Gtk::CheckButton *cbWarning = new Gtk::CheckButton(); cbWarning->set_label(_("Don't show this warning again")); cbWarning->show(); #if GTK_CHECK_VERSION(3,0,0) Gtk::Box * box = warning.get_content_area(); #else Gtk::Box * box = warning.get_vbox(); #endif box->set_spacing(2); box->pack_start(*scrollwindow, true, true, 4); box->pack_start(*cbSelect, false, false, 0); box->pack_start(*cbWarning, false, false, 0); warning.run(); if (cbWarning->get_active()) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setInt("/options/font/substitutedlg", 0); } if (cbSelect->get_active()) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; Inkscape::Selection *selection = sp_desktop_selection (desktop); selection->clear(); selection->setList(l); } }
/** * \brief Dialog * */ void sp_item_dialog (void) { if (dlg == NULL) { gchar title[500]; sp_ui_dialog_title_string (Inkscape::Verb::get(SP_VERB_DIALOG_ITEM), title); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); dlg = sp_window_new (title, TRUE); if (x == -1000 || y == -1000) { x = prefs->getInt(prefs_path + "x", -1000); y = prefs->getInt(prefs_path + "y", -1000); } if (w ==0 || h == 0) { w = prefs->getInt(prefs_path + "w", 0); h = prefs->getInt(prefs_path + "h", 0); } // if (x<0) x=0; // if (y<0) y=0; if (w && h) { gtk_window_resize ((GtkWindow *) dlg, w, h); } if (x >= 0 && y >= 0 && (x < (gdk_screen_width()-MIN_ONSCREEN_DISTANCE)) && (y < (gdk_screen_height()-MIN_ONSCREEN_DISTANCE))) { gtk_window_move ((GtkWindow *) dlg, x, y); } else { gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER); } sp_transientize (dlg); wd.win = dlg; wd.stop = 0; g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd); gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg); gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_item_dialog_destroy), dlg); gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_item_dialog_delete), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_item_dialog_delete), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg); // Dialog-specific stuff GtkWidget *itemw = sp_item_widget_new (); gtk_widget_show (itemw); gtk_container_add (GTK_CONTAINER (dlg), itemw); } gtk_window_present ((GtkWindow *) dlg); }
void ColorPicker::setupDialog(const Glib::ustring &title) { GtkWidget *dlg = GTK_WIDGET(_colorSelectorDialog.gobj()); sp_transientize(dlg); _colorSelectorDialog.hide(); _colorSelectorDialog.set_title (title); _colorSelectorDialog.set_border_width (4); _colorSelector = (SPColorSelector*)sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK); _colorSelectorDialog.get_vbox()->pack_start ( *Glib::wrap(&_colorSelector->vbox), true, true, 0); g_signal_connect(G_OBJECT(_colorSelector), "dragged", G_CALLBACK(sp_color_picker_color_mod), (void *)this); g_signal_connect(G_OBJECT(_colorSelector), "released", G_CALLBACK(sp_color_picker_color_mod), (void *)this); g_signal_connect(G_OBJECT(_colorSelector), "changed", G_CALLBACK(sp_color_picker_color_mod), (void *)this); gtk_widget_show(GTK_WIDGET(_colorSelector)); }
void sp_text_edit_dialog (void) { if (!dlg) { GtkWidget *mainvb, *nb, *vb, *hb, *txt, *fontsel, *preview, *f, *tbl, *l, *px, *c, *b, *hs; GtkTextBuffer *tb; GList *sl; int i; gchar title[500]; sp_ui_dialog_title_string (SP_VERB_DIALOG_TEXT, title); dlg = sp_window_new (title, TRUE); if (x == -1000 || y == -1000) { x = prefs_get_int_attribute (prefs_path, "x", 0); y = prefs_get_int_attribute (prefs_path, "y", 0); } if (w ==0 || h == 0) { w = prefs_get_int_attribute (prefs_path, "w", 0); h = prefs_get_int_attribute (prefs_path, "h", 0); } if (x != 0 || y != 0) gtk_window_move ((GtkWindow *) dlg, x, y); else gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER); if (w && h) gtk_window_resize ((GtkWindow *) dlg, w, h); sp_transientize (dlg); wd.win = dlg; wd.stop = 0; g_signal_connect (G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd); gtk_signal_connect (GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg); gtk_signal_connect (GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_text_edit_dialog_destroy), dlg); gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_text_edit_dialog_delete), dlg); g_signal_connect (G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_text_edit_dialog_delete), dlg); gtk_window_set_policy (GTK_WINDOW (dlg), TRUE, TRUE, FALSE); mainvb = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (dlg), mainvb); nb = gtk_notebook_new (); gtk_container_set_border_width (GTK_CONTAINER (nb), 4); gtk_box_pack_start (GTK_BOX (mainvb), nb, TRUE, TRUE, 0); g_object_set_data (G_OBJECT (dlg), "notebook", nb); /* Vbox inside notebook */ vb = gtk_vbox_new (FALSE, 0); /* Textview */ f = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (f), GTK_SHADOW_IN); tb = gtk_text_buffer_new (NULL); txt = gtk_text_view_new_with_buffer (tb); gtk_widget_set_size_request (txt, -1, 64); gtk_text_view_set_editable (GTK_TEXT_VIEW (txt), TRUE); gtk_container_add (GTK_CONTAINER (f), txt); gtk_box_pack_start (GTK_BOX (vb), f, TRUE, TRUE, 0); g_signal_connect (G_OBJECT (tb), "changed", G_CALLBACK (sp_text_edit_dialog_text_changed), dlg); g_object_set_data (G_OBJECT (dlg), "text", tb); g_object_set_data (G_OBJECT (dlg), "textw", txt); /* HBox containing font selection and layout */ hb = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vb), hb, TRUE, TRUE, 0); fontsel = sp_font_selector_new (); g_signal_connect (G_OBJECT (fontsel), "font_set", G_CALLBACK (sp_text_edit_dialog_font_changed), dlg); gtk_box_pack_start (GTK_BOX (hb), fontsel, TRUE, TRUE, 0); g_object_set_data (G_OBJECT (dlg), "fontsel", fontsel); /* Layout */ f = gtk_frame_new (_("Layout")); gtk_box_pack_start (GTK_BOX (hb), f, FALSE, FALSE, 4); tbl = gtk_table_new (3, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (tbl), 4); gtk_table_set_col_spacings (GTK_TABLE (tbl), 4); gtk_container_add (GTK_CONTAINER (f), tbl); l = gtk_label_new (_("Alignment:")); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_table_attach (GTK_TABLE (tbl), l, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 0); px = gtk_image_new_from_stock (GTK_STOCK_JUSTIFY_LEFT, GTK_ICON_SIZE_LARGE_TOOLBAR); b = gtk_radio_button_new (NULL); g_signal_connect (G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_table_attach (GTK_TABLE (tbl), b, 1, 2, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 0, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_start", b); px = gtk_image_new_from_stock (GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_LARGE_TOOLBAR); b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (b))); g_signal_connect (G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_table_attach (GTK_TABLE (tbl), b, 2, 3, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 0, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_middle", b); px = gtk_image_new_from_stock (GTK_STOCK_JUSTIFY_RIGHT, GTK_ICON_SIZE_LARGE_TOOLBAR); b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (b))); g_signal_connect (G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_table_attach (GTK_TABLE (tbl), b, 3, 4, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 0, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_end", b); l = gtk_label_new (_("Orientation:")); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_table_attach (GTK_TABLE (tbl), l, 0, 1, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 0); px = gtk_image_new_from_stock (INKSCAPE_STOCK_WRITING_MODE_LR, GTK_ICON_SIZE_LARGE_TOOLBAR); b = gtk_radio_button_new (NULL); g_signal_connect (G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_table_attach (GTK_TABLE (tbl), b, 1, 2, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 0, 0); g_object_set_data (G_OBJECT (dlg), "writing_mode_lr", b); px = gtk_image_new_from_stock (INKSCAPE_STOCK_WRITING_MODE_TB, GTK_ICON_SIZE_LARGE_TOOLBAR); b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (b))); g_signal_connect (G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_table_attach (GTK_TABLE (tbl), b, 2, 3, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 0, 0); g_object_set_data (G_OBJECT (dlg), "writing_mode_tb", b); l = gtk_label_new (_("Line spacing:")); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_table_attach (GTK_TABLE (tbl), l, 0, 1, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 4, 0); c = gtk_combo_new (); gtk_combo_set_value_in_list ((GtkCombo *) c, FALSE, FALSE); gtk_combo_set_use_arrows ((GtkCombo *) c, TRUE); gtk_combo_set_use_arrows_always ((GtkCombo *) c, TRUE); gtk_widget_set_size_request (c, 64, -1); /* Setup strings */ sl = NULL; for (i = 0; spacings[i]; i++) { sl = g_list_prepend (sl, (void *) spacings[i]); } sl = g_list_reverse (sl); gtk_combo_set_popdown_strings ((GtkCombo *) c, sl); g_list_free (sl); g_signal_connect ((GObject *) ((GtkCombo *) c)->entry, "changed", (GCallback) sp_text_edit_dialog_line_spacing_changed, dlg); gtk_table_attach (GTK_TABLE (tbl), c, 1, 4, 2, 3, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 0); g_object_set_data (G_OBJECT (dlg), "line_spacing", c); /* Font preview */ preview = sp_font_preview_new (); gtk_box_pack_start (GTK_BOX (vb), preview, TRUE, TRUE, 4); g_object_set_data (G_OBJECT (dlg), "preview", preview); l = gtk_label_new (_("Text and font")); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); /* Buttons */ hs = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (mainvb), hs, FALSE, FALSE, 0); hb = gtk_hbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (hb), 4); gtk_box_pack_start (GTK_BOX (mainvb), hb, FALSE, FALSE, 0); b = gtk_button_new_with_label (_("Set as default")); g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (sp_text_edit_dialog_set_default), dlg); gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "default", b); b = gtk_button_new_from_stock (GTK_STOCK_CLOSE); g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (sp_text_edit_dialog_close), dlg); gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0); b = gtk_button_new_from_stock (GTK_STOCK_APPLY); g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (sp_text_edit_dialog_apply), dlg); gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "apply", b); g_signal_connect (G_OBJECT (INKSCAPE), "modify_selection", G_CALLBACK (sp_text_edit_dialog_modify_selection), dlg); g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (sp_text_edit_dialog_change_selection), dlg); sp_text_edit_dialog_read_selection (dlg, TRUE, TRUE); gtk_widget_show_all (dlg); } gtk_window_present ((GtkWindow *) dlg); }
/** \brief Creates a new preference dialog for extension preferences \param name Name of the Extension whose dialog this is \param help The help string for the extension (NULL if none) \param controls The extension specific widgets in the dialog This function initializes the dialog with the name of the extension in the title. It adds a few buttons and sets up handlers for them. It also places the passed-in widgets into the dialog. */ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * controls, Effect * effect) : #if WITH_GTKMM_3_0 Gtk::Dialog::Dialog(_(name.c_str()), true), #else Gtk::Dialog::Dialog(_(name.c_str()), true, true), #endif _help(help), _name(name), _button_ok(NULL), _button_cancel(NULL), _button_preview(NULL), _param_preview(NULL), _effect(effect), _exEnv(NULL) { Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox()); if (controls == NULL) { if (_effect == NULL) { std::cout << "AH!!! No controls and no effect!!!" << std::endl; return; } controls = _effect->get_imp()->prefs_effect(_effect, SP_ACTIVE_DESKTOP, &_signal_param_change, NULL); _signal_param_change.connect(sigc::mem_fun(this, &PrefDialog::param_change)); } hbox->pack_start(*controls, true, true, 6); hbox->show(); this->get_vbox()->pack_start(*hbox, true, true, 6); /* Gtk::Button * help_button = add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP); if (_help == NULL) help_button->set_sensitive(false); */ _button_cancel = add_button(_effect == NULL ? Gtk::Stock::CANCEL : Gtk::Stock::CLOSE, Gtk::RESPONSE_CANCEL); _button_cancel->set_use_stock(true); _button_ok = add_button(_effect == NULL ? Gtk::Stock::OK : Gtk::Stock::APPLY, Gtk::RESPONSE_OK); _button_ok->set_use_stock(true); set_default_response(Gtk::RESPONSE_OK); _button_ok->grab_focus(); if (_effect != NULL && !_effect->no_live_preview) { if (_param_preview == NULL) { XML::Document * doc = sp_repr_read_mem(live_param_xml, strlen(live_param_xml), NULL); _param_preview = Parameter::make(doc->root(), _effect); } Gtk::HSeparator * sep = Gtk::manage(new Gtk::HSeparator()); sep->show(); this->get_vbox()->pack_start(*sep, true, true, 4); hbox = Gtk::manage(new Gtk::HBox()); _button_preview = _param_preview->get_widget(NULL, NULL, &_signal_preview); _button_preview->show(); hbox->pack_start(*_button_preview, true, true,6); hbox->show(); this->get_vbox()->pack_start(*hbox, true, true, 6); Gtk::Box * hbox = dynamic_cast<Gtk::Box *>(_button_preview); if (hbox != NULL) { #if WITH_GTKMM_3_0 _checkbox_preview = dynamic_cast<Gtk::CheckButton *>(hbox->get_children().front()); #else _checkbox_preview = dynamic_cast<Gtk::CheckButton *>(hbox->children().back().get_widget()); #endif } preview_toggle(); _signal_preview.connect(sigc::mem_fun(this, &PrefDialog::preview_toggle)); } // Set window modality for effects that don't use live preview if (_effect != NULL && _effect->no_live_preview) { set_modal(false); } GtkWidget *dlg = GTK_WIDGET(gobj()); sp_transientize(dlg); return; }
GtkWidget * sp_find_dialog_old (void) { if (!dlg) { gchar title[500]; sp_ui_dialog_title_string (Inkscape::Verb::get(SP_VERB_DIALOG_FIND), title); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); dlg = sp_window_new (title, TRUE); if (x == -1000 || y == -1000) { x = prefs->getInt(prefs_path + "x", -1000); y = prefs->getInt(prefs_path + "y", -1000); } if (w ==0 || h == 0) { w = prefs->getInt(prefs_path + "w", 0); h = prefs->getInt(prefs_path + "h", 0); } // if (x<0) x=0; // if (y<0) y=0; if (w && h) gtk_window_resize ((GtkWindow *) dlg, w, h); if (x >= 0 && y >= 0 && (x < (gdk_screen_width()-MIN_ONSCREEN_DISTANCE)) && (y < (gdk_screen_height()-MIN_ONSCREEN_DISTANCE))) { gtk_window_move ((GtkWindow *) dlg, x, y); } else { gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER); } sp_transientize (dlg); wd.win = dlg; wd.stop = 0; g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd ); gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg); gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_find_dialog_destroy), NULL ); gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_find_dialog_delete), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_find_dialog_delete), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg); GtkTooltips *tt = gtk_tooltips_new (); gtk_container_set_border_width (GTK_CONTAINER (dlg), 4); /* Toplevel vbox */ GtkWidget *vb = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (dlg), vb); sp_find_new_searchfield (dlg, vb, _("_Text: "), "text", tt, _("Find objects by their text content (exact or partial match)")); sp_find_new_searchfield (dlg, vb, _("_ID: "), "id", tt, _("Find objects by the value of the id attribute (exact or partial match)")); sp_find_new_searchfield (dlg, vb, _("_Style: "), "style", tt, _("Find objects by the value of the style attribute (exact or partial match)")); sp_find_new_searchfield (dlg, vb, _("_Attribute: "), "attr", tt ,_("Find objects by the name of an attribute (exact or partial match)")); gtk_widget_show_all (vb); GtkWidget *types = sp_find_types (); gtk_object_set_data (GTK_OBJECT (dlg), "types", types); gtk_box_pack_start (GTK_BOX (vb), types, FALSE, FALSE, 0); { GtkWidget *w = gtk_hseparator_new (); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (vb), w, FALSE, FALSE, 3); { GtkWidget *b = gtk_check_button_new_with_mnemonic (_("Search in s_election")); gtk_widget_show (b); gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE); gtk_object_set_data (GTK_OBJECT (dlg), "inselection", b); gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Limit search to the current selection"), NULL); gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0); } { GtkWidget *b = gtk_check_button_new_with_mnemonic (_("Search in current _layer")); gtk_widget_show (b); gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE); gtk_object_set_data (GTK_OBJECT (dlg), "inlayer", b); gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Limit search to the current layer"), NULL); gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0); } { GtkWidget *b = gtk_check_button_new_with_mnemonic (_("Include _hidden")); gtk_widget_show (b); gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE); gtk_object_set_data (GTK_OBJECT (dlg), "includehidden", b); gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Include hidden objects in search"), NULL); gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0); } { GtkWidget *b = gtk_check_button_new_with_mnemonic (_("Include l_ocked")); gtk_widget_show (b); gtk_toggle_button_set_active ((GtkToggleButton *) b, FALSE); gtk_object_set_data (GTK_OBJECT (dlg), "includelocked", b); gtk_tooltips_set_tip (GTK_TOOLTIPS (tt), b, _("Include locked objects in search"), NULL); gtk_box_pack_start (GTK_BOX (vb), b, FALSE, FALSE, 0); } } { GtkWidget *hb = gtk_hbox_new (FALSE, 0); gtk_widget_show (hb); gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); // TRANSLATORS: "Clear" is a verb here sp_find_new_button (dlg, hb, _("_Clear"), tt, _("Clear values"), sp_find_dialog_reset); sp_find_new_button (dlg, hb, _("_Find"), tt, _("Select objects matching all of the fields you filled in"), sp_find_dialog_find); } } gtk_widget_show((GtkWidget *) dlg); gtk_window_present ((GtkWindow *) dlg); sp_find_dialog_reset (NULL, G_OBJECT (dlg)); return dlg; }
void sp_display_dialog (void) { GtkWidget *nb, *l, *vb, *hb, *om, *m, *i, *sb; GtkObject *a; if (!dlg) { gchar title[500]; sp_ui_dialog_title_string (SP_VERB_DIALOG_DISPLAY, title); dlg = sp_window_new (title, TRUE); if (x == -1000 || y == -1000) { x = prefs_get_int_attribute (prefs_path, "x", 0); y = prefs_get_int_attribute (prefs_path, "y", 0); } if (w ==0 || h == 0) { w = prefs_get_int_attribute (prefs_path, "w", 0); h = prefs_get_int_attribute (prefs_path, "h", 0); } if (x != 0 || y != 0) gtk_window_move ((GtkWindow *) dlg, x, y); else gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER); if (w && h) gtk_window_resize ((GtkWindow *) dlg, w, h); sp_transientize (dlg); wd.win = dlg; wd.stop = 0; g_signal_connect (G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd); gtk_signal_connect (GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg); gtk_signal_connect (GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_display_dialog_destroy), dlg); gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_display_dialog_delete), dlg); g_signal_connect (G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_display_dialog_delete), dlg); nb = gtk_notebook_new (); gtk_widget_show (nb); gtk_container_add (GTK_CONTAINER (dlg), nb); /* Rendering settings */ /* Notebook tab */ l = gtk_label_new (_("Rendering")); gtk_widget_show (l); vb = gtk_vbox_new (FALSE, 4); gtk_widget_show (vb); gtk_container_set_border_width (GTK_CONTAINER (vb), 4); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); /* Oversampling menu */ hb = gtk_hbox_new (FALSE, 4); gtk_widget_show (hb); gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); l = gtk_label_new (_("Oversample bitmaps:")); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_widget_show (l); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); om = gtk_option_menu_new (); gtk_widget_show (om); gtk_box_pack_start (GTK_BOX (hb), om, TRUE, TRUE, 0); m = gtk_menu_new (); gtk_widget_show (m); i = gtk_menu_item_new_with_label (_("None")); gtk_signal_connect (GTK_OBJECT (i), "activate", GTK_SIGNAL_FUNC (sp_display_dialog_set_oversample), GINT_TO_POINTER (0)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (m), i); i = gtk_menu_item_new_with_label (_("2x2")); gtk_signal_connect (GTK_OBJECT (i), "activate", GTK_SIGNAL_FUNC (sp_display_dialog_set_oversample), GINT_TO_POINTER (1)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (m), i); i = gtk_menu_item_new_with_label (_("4x4")); gtk_signal_connect (GTK_OBJECT (i), "activate", GTK_SIGNAL_FUNC (sp_display_dialog_set_oversample), GINT_TO_POINTER (2)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (m), i); i = gtk_menu_item_new_with_label (_("8x8")); gtk_signal_connect (GTK_OBJECT (i), "activate", GTK_SIGNAL_FUNC (sp_display_dialog_set_oversample), GINT_TO_POINTER (3)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (m), i); i = gtk_menu_item_new_with_label (_("16x16")); gtk_signal_connect (GTK_OBJECT (i), "activate", GTK_SIGNAL_FUNC (sp_display_dialog_set_oversample), GINT_TO_POINTER (4)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (m), i); gtk_option_menu_set_menu (GTK_OPTION_MENU (om), m); gtk_option_menu_set_history (GTK_OPTION_MENU (om), nr_arena_image_x_sample); /* Input settings */ /* Notebook tab */ l = gtk_label_new (_("Input")); gtk_widget_show (l); vb = gtk_vbox_new (FALSE, 4); gtk_widget_show (vb); gtk_container_set_border_width (GTK_CONTAINER (vb), 4); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); hb = gtk_hbox_new (FALSE, 4); gtk_widget_show (hb); gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); l = gtk_label_new (_("Default cursor tolerance:")); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_widget_show (l); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); a = gtk_adjustment_new (0.0, 0.0, 10.0, 0.1, 1.0, 1.0); gtk_adjustment_set_value (GTK_ADJUSTMENT (a), nr_arena_global_delta); sb = gtk_spin_button_new (GTK_ADJUSTMENT (a), 0.1, 1); gtk_widget_show (sb); gtk_box_pack_start (GTK_BOX (hb), sb, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (a), "value_changed", GTK_SIGNAL_FUNC (sp_display_dialog_cursor_tolerance_changed), NULL); } gtk_window_present ((GtkWindow *) dlg); }
void sp_quick_align_dialog (void) { if (!dlg) { GtkWidget *nb, *vb, *om, *t, *l; GtkTooltips * tt = gtk_tooltips_new (); gchar title[500]; sp_ui_dialog_title_string (SP_VERB_DIALOG_ALIGN_DISTRIBUTE, title); dlg = sp_window_new (title, TRUE); if (x == -1000 || y == -1000) { x = prefs_get_int_attribute (prefs_path, "x", 0); y = prefs_get_int_attribute (prefs_path, "y", 0); } if (w ==0 || h == 0) { w = prefs_get_int_attribute (prefs_path, "w", 0); h = prefs_get_int_attribute (prefs_path, "h", 0); } if (x != 0 || y != 0) gtk_window_move ((GtkWindow *) dlg, x, y); else gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER); if (w && h) gtk_window_resize ((GtkWindow *) dlg, w, h); sp_transientize (dlg); wd.win = dlg; wd.stop = 0; g_signal_connect (G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd); gtk_signal_connect (GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg); gtk_signal_connect (GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_quick_align_dialog_destroy), dlg); gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_align_dialog_delete), dlg); g_signal_connect (G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_align_dialog_delete), dlg); nb = gtk_notebook_new (); gtk_container_add (GTK_CONTAINER (dlg), nb); /* Align */ vb = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (vb), 4); om = gtk_option_menu_new (); gtk_box_pack_start (GTK_BOX (vb), om, FALSE, FALSE, 0); gtk_option_menu_set_menu (GTK_OPTION_MENU (om), sp_align_dialog_create_base_menu ()); t = gtk_table_new (2, 5, TRUE); gtk_box_pack_start (GTK_BOX (vb), t, FALSE, FALSE, 0); sp_align_add_button (t, 0, 0, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_LEFT_OUT], "al_left_out", _("Right side of aligned objects to left side of anchor"), tt); sp_align_add_button (t, 1, 0, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_LEFT_IN], "al_left_in", _("Left side of aligned objects to left side of anchor"), tt); sp_align_add_button (t, 2, 0, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_CENTER_HOR], "al_center_hor", _("Center horizontally"), tt); sp_align_add_button (t, 3, 0, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_RIGHT_IN], "al_right_in", _("Right side of aligned objects to right side of anchor"), tt); sp_align_add_button (t, 4, 0, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_RIGHT_OUT], "al_right_out", _("Left side of aligned objects to right side of anchor"), tt); sp_align_add_button (t, 0, 1, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_TOP_OUT], "al_top_out", _("Bottom of aligned objects to top of anchor"), tt); sp_align_add_button (t, 1, 1, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_TOP_IN], "al_top_in", _("Top of aligned objects to top of anchor"), tt); sp_align_add_button (t, 2, 1, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_CENTER_VER], "al_center_ver", _("Center vertically"), tt); sp_align_add_button (t, 3, 1, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_BOTTOM_IN], "al_bottom_in", _("Bottom of aligned objects to bottom of anchor"), tt); sp_align_add_button (t, 4, 1, G_CALLBACK (sp_align_arrange_clicked), aligns[SP_ALIGN_BOTTOM_OUT], "al_bottom_out", _("Top of aligned objects to bottom of anchor"), tt); l = gtk_label_new (_("Align")); gtk_widget_show (l); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); /* Distribute */ vb = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (vb), 4); om = gtk_option_menu_new (); gtk_box_pack_start (GTK_BOX (vb), om, FALSE, FALSE, 0); gtk_option_menu_set_menu (GTK_OPTION_MENU (om), sp_align_dialog_create_base_menu ()); gtk_widget_set_sensitive (om, FALSE); t = gtk_table_new (2, 4, TRUE); gtk_box_pack_start (GTK_BOX (vb), t, FALSE, FALSE, 0); sp_align_add_button (t, 0, 0, G_CALLBACK (sp_align_distribute_h_clicked), hdist[SP_DISTRIBUTE_LEFT], "distribute_left", _("Distribute left sides of objects at even distances"), tt); sp_align_add_button (t, 1, 0, G_CALLBACK (sp_align_distribute_h_clicked), hdist[SP_DISTRIBUTE_HCENTRE], "distribute_hcentre", _("Distribute centres of objects at even distances horizontally"), tt); sp_align_add_button (t, 2, 0, G_CALLBACK (sp_align_distribute_h_clicked), hdist[SP_DISTRIBUTE_RIGHT], "distribute_right", _("Distribute right sides of objects at even distances"), tt); sp_align_add_button (t, 3, 0, G_CALLBACK (sp_align_distribute_h_clicked), hdist[SP_DISTRIBUTE_HDIST], "distribute_hdist", _("Distribute horizontal distance between objects equally"), tt); sp_align_add_button (t, 0, 1, G_CALLBACK (sp_align_distribute_v_clicked), vdist[SP_DISTRIBUTE_TOP], "distribute_top", _("Distribute top sides of objects at even distances"), tt); sp_align_add_button (t, 1, 1, G_CALLBACK (sp_align_distribute_v_clicked), vdist[SP_DISTRIBUTE_VCENTRE], "distribute_vcentre", _("Distribute centres of objects at even distances vertically"), tt); sp_align_add_button (t, 2, 1, G_CALLBACK (sp_align_distribute_v_clicked), vdist[SP_DISTRIBUTE_BOTTOM], "distribute_bottom", _("Distribute bottom sides of objects at even distances"), tt); sp_align_add_button (t, 3, 1, G_CALLBACK (sp_align_distribute_v_clicked), vdist[SP_DISTRIBUTE_VDIST], "distribute_vdist", _("Distribute vertical distance between objects equally"), tt); l = gtk_label_new (_("Distribute")); gtk_widget_show (l); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); gtk_widget_show_all (nb); } gtk_window_present ((GtkWindow *) dlg); }
void sp_text_edit_dialog (void) { if (!dlg) { gchar title[500]; sp_ui_dialog_title_string (Inkscape::Verb::get(SP_VERB_DIALOG_TEXT), title); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); dlg = sp_window_new (title, TRUE); if (x == -1000 || y == -1000) { x = prefs->getInt(prefs_path + "x", -1000); y = prefs->getInt(prefs_path + "y", -1000); } if (w ==0 || h == 0) { w = prefs->getInt(prefs_path + "w", 0); h = prefs->getInt(prefs_path + "h", 0); } // if (x<0) x=0; // if (y<0) y=0; if (w && h) gtk_window_resize ((GtkWindow *) dlg, w, h); if (x >= 0 && y >= 0 && (x < (gdk_screen_width()-MIN_ONSCREEN_DISTANCE)) && (y < (gdk_screen_height()-MIN_ONSCREEN_DISTANCE))) { gtk_window_move ((GtkWindow *) dlg, x, y); } else { gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER); } sp_transientize (dlg); wd.win = dlg; wd.stop = 0; g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd ); gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg ); gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_text_edit_dialog_destroy), dlg ); gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_text_edit_dialog_delete), dlg ); g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_text_edit_dialog_delete), dlg ); g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg ); g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg ); gtk_window_set_policy (GTK_WINDOW (dlg), TRUE, TRUE, FALSE); GtkTooltips *tt = gtk_tooltips_new(); // box containing the notebook and the bottom buttons GtkWidget *mainvb = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (dlg), mainvb); // notebook GtkWidget *nb = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (mainvb), nb, TRUE, TRUE, 0); g_object_set_data (G_OBJECT (dlg), "notebook", nb); // Font tab { GtkWidget *l = gtk_label_new (_("Font")); GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN); gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); /* HBox containing font selection and layout */ GtkWidget *hb = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vb), hb, TRUE, TRUE, 0); // font and style selector GtkWidget *fontsel = sp_font_selector_new (); g_signal_connect ( G_OBJECT (fontsel), "font_set", G_CALLBACK (sp_text_edit_dialog_font_changed), dlg ); g_signal_connect_swapped ( G_OBJECT (g_object_get_data (G_OBJECT(fontsel), "family-treeview")), "row-activated", G_CALLBACK (gtk_window_activate_default), dlg); gtk_box_pack_start (GTK_BOX (hb), fontsel, TRUE, TRUE, 0); g_object_set_data (G_OBJECT (dlg), "fontsel", fontsel); // Layout { GtkWidget *f = gtk_frame_new (_("Layout")); gtk_box_pack_start (GTK_BOX (hb), f, FALSE, FALSE, 4); GtkWidget *l_vb = gtk_vbox_new (FALSE, VB_MARGIN); gtk_container_add (GTK_CONTAINER (f), l_vb); { GtkWidget *row = gtk_hbox_new (FALSE, VB_MARGIN); GtkWidget *group; // align left { // TODO - replace with Inkscape-specific call GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_LEFT, GTK_ICON_SIZE_LARGE_TOOLBAR ); GtkWidget *b = group = gtk_radio_button_new (NULL); gtk_tooltips_set_tip (tt, b, _("Align lines left"), NULL); gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE); g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE ); gtk_container_add (GTK_CONTAINER (b), px); gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_start", b); } // align center { // TODO - replace with Inkscape-specific call GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_LARGE_TOOLBAR ); GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group))); /* TRANSLATORS: `Center' here is a verb. */ gtk_tooltips_set_tip (tt, b, _("Center lines"), NULL); gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE); g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg ); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_middle", b); } // align right { // TODO - replace with Inkscape-specific call GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_RIGHT, GTK_ICON_SIZE_LARGE_TOOLBAR ); GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group))); gtk_tooltips_set_tip (tt, b, _("Align lines right"), NULL); gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE); g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg ); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_end", b); } // align justify { // TODO - replace with Inkscape-specific call GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_FILL, GTK_ICON_SIZE_LARGE_TOOLBAR ); GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group))); gtk_tooltips_set_tip (tt, b, _("Justify lines"), NULL); gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE); g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg ); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "text_anchor_justify", b); } gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, 0); } { GtkWidget *row = gtk_hbox_new (FALSE, VB_MARGIN); GtkWidget *group; // horizontal { GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_STOCK_WRITING_MODE_LR ); GtkWidget *b = group = gtk_radio_button_new (NULL); gtk_tooltips_set_tip (tt, b, _("Horizontal text"), NULL); gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE); g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg ); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_LR, b); } // vertical { GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_STOCK_WRITING_MODE_TB ); GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group))); gtk_tooltips_set_tip (tt, b, _("Vertical text"), NULL); gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE); g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg ); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE); gtk_container_add (GTK_CONTAINER (b), px); gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_TB, b); } gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, 0); } { GtkWidget *row = gtk_hbox_new (FALSE, VB_MARGIN); l = gtk_label_new (_("Line spacing:")); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_box_pack_start (GTK_BOX (row), l, FALSE, FALSE, VB_MARGIN); gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, 0); } { GtkWidget *row = gtk_hbox_new (FALSE, VB_MARGIN); GtkWidget *c = gtk_combo_new (); gtk_combo_set_value_in_list ((GtkCombo *) c, FALSE, FALSE); gtk_combo_set_use_arrows ((GtkCombo *) c, TRUE); gtk_combo_set_use_arrows_always ((GtkCombo *) c, TRUE); gtk_widget_set_size_request (c, 90, -1); { /* Setup strings */ GList *sl = NULL; for (int i = 0; spacings[i]; i++) { sl = g_list_prepend (sl, (void *) spacings[i]); } sl = g_list_reverse (sl); gtk_combo_set_popdown_strings ((GtkCombo *) c, sl); g_list_free (sl); } g_signal_connect ( (GObject *) ((GtkCombo *) c)->entry, "changed", (GCallback) sp_text_edit_dialog_line_spacing_changed, dlg ); gtk_box_pack_start (GTK_BOX (row), c, FALSE, FALSE, VB_MARGIN); g_object_set_data (G_OBJECT (dlg), "line_spacing", c); gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, VB_MARGIN); } } /* Font preview */ GtkWidget *preview = sp_font_preview_new (); gtk_box_pack_start (GTK_BOX (vb), preview, TRUE, TRUE, 4); g_object_set_data (G_OBJECT (dlg), "preview", preview); } // Text tab { GtkWidget *l = gtk_label_new (_("Text")); GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN); gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); GtkWidget *scroller = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (scroller), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW(scroller), GTK_SHADOW_IN ); gtk_widget_show (scroller); GtkTextBuffer *tb = gtk_text_buffer_new (NULL); GtkWidget *txt = gtk_text_view_new_with_buffer (tb); gtk_text_view_set_wrap_mode ((GtkTextView *) txt, GTK_WRAP_WORD); #ifdef WITH_GTKSPELL GError *error = NULL; char *errortext = NULL; /* todo: Use computed xml:lang attribute of relevant element, if present, to specify the language (either as 2nd arg of gtkspell_new_attach, or with explicit gtkspell_set_language call in; see advanced.c example in gtkspell docs). sp_text_edit_dialog_read_selection looks like a suitable place. */ if (gtkspell_new_attach(GTK_TEXT_VIEW(txt), NULL, &error) == NULL) { g_print("gtkspell error: %s\n", error->message); errortext = g_strdup_printf("GtkSpell was unable to initialize.\n" "%s", error->message); g_error_free(error); } #endif gtk_widget_set_size_request (txt, -1, 64); gtk_text_view_set_editable (GTK_TEXT_VIEW (txt), TRUE); gtk_container_add (GTK_CONTAINER (scroller), txt); gtk_box_pack_start (GTK_BOX (vb), scroller, TRUE, TRUE, 0); g_signal_connect ( G_OBJECT (tb), "changed", G_CALLBACK (sp_text_edit_dialog_text_changed), dlg ); g_signal_connect (G_OBJECT (txt), "focus-in-event", G_CALLBACK (text_view_focus_in), dlg); g_signal_connect (G_OBJECT (txt), "focus-out-event", G_CALLBACK (text_view_focus_out), dlg); g_object_set_data (G_OBJECT (dlg), "text", tb); g_object_set_data (G_OBJECT (dlg), "textw", txt); } /* Buttons */ GtkWidget *hb = gtk_hbox_new (FALSE, VB_MARGIN); gtk_container_set_border_width (GTK_CONTAINER (hb), 4); gtk_box_pack_start (GTK_BOX (mainvb), hb, FALSE, FALSE, 0); { GtkWidget *b = gtk_button_new_with_label (_("Set as default")); g_signal_connect ( G_OBJECT (b), "clicked", G_CALLBACK (sp_text_edit_dialog_set_default), dlg ); gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (dlg), "default", b); } { GtkWidget *b = gtk_button_new_from_stock (GTK_STOCK_CLOSE); g_signal_connect ( G_OBJECT (b), "clicked", G_CALLBACK (sp_text_edit_dialog_close), dlg ); gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0); } { GtkWidget *b = gtk_button_new_from_stock (GTK_STOCK_APPLY); GTK_WIDGET_SET_FLAGS (b, GTK_CAN_DEFAULT | GTK_HAS_DEFAULT); g_signal_connect ( G_OBJECT (b), "clicked", G_CALLBACK (sp_text_edit_dialog_apply), dlg ); gtk_box_pack_end ( GTK_BOX (hb), b, FALSE, FALSE, 0 ); g_object_set_data (G_OBJECT (dlg), "apply", b); } g_signal_connect ( G_OBJECT (INKSCAPE), "modify_selection", G_CALLBACK (sp_text_edit_dialog_selection_modified), dlg); g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (sp_text_edit_dialog_selection_changed), dlg); g_signal_connect (INKSCAPE, "change_subselection", G_CALLBACK (sp_text_edit_dialog_subselection_changed), dlg); gtk_widget_show_all (dlg); sp_text_edit_dialog_read_selection (dlg, TRUE, TRUE); } gtk_window_present ((GtkWindow *) dlg); } // end of sp_text_edit_dialog()