index 5bdf60ce5b09a7ee99b56c8e4406bc0398e9792c..ed9259aef9b93d340e37f0124c0f5b859dbe2733 100644 (file)
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
#include "../prefs-utils.h"
#include "../inkscape-stock.h"
#include "icon.h"
+#include "graphlayout/graphlayout.h"
#include "mod360.h"
modmade = true;
}
}
- if (modmade) sp_document_done(sp_desktop_document(desktop));
+ if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ /* TODO: annotate */ "toolbox.cpp:854");
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
}
}
- if (modmade) sp_document_done(sp_desktop_document(desktop));
+ if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ /* TODO: annotate */ "toolbox.cpp:899");
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
}
}
}
- if (modmade) sp_document_done(sp_desktop_document(desktop));
+ if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ /* TODO: annotate */ "toolbox.cpp:953");
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
modmade = true;
}
}
- if (modmade) sp_document_done(sp_desktop_document(desktop));
+ if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ /* TODO: annotate */ "toolbox.cpp:990");
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
modmade = true;
}
}
- if (modmade) sp_document_done(sp_desktop_document(desktop));
+ if (modmade) sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ /* TODO: annotate */ "toolbox.cpp:1028");
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
@@ -1359,7 +1365,8 @@ sp_rtb_value_changed(GtkAdjustment *adj, GtkWidget *tbl, gchar const *value_name
sp_rtb_sensitivize (tbl);
if (modmade) {
- sp_document_done(sp_desktop_document(desktop));
+ sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_RECT,
+ /* TODO: annotate */ "toolbox.cpp:1368");
}
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
@@ -1675,7 +1682,8 @@ sp_spl_tb_value_changed(GtkAdjustment *adj, GtkWidget *tbl, gchar const *value_n
g_free(namespaced_name);
if (modmade) {
- sp_document_done(sp_desktop_document(desktop));
+ sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SPIRAL,
+ /* TODO: annotate */ "toolbox.cpp:1685");
}
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
@@ -2236,7 +2244,8 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GtkWidget *tbl, gchar const
sp_arctb_sensitivize (tbl, adj->value, other->value);
if (modmade) {
- sp_document_maybe_done(sp_desktop_document(desktop), value_name);
+ sp_document_maybe_done(sp_desktop_document(desktop), value_name, SP_VERB_CONTEXT_ARC,
+ /* TODO: annotate */ "toolbox.cpp:2247");
}
// defocus spinbuttons by moving focus to the canvas, unless "stay" is on
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop));
+ sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ARC,
+ /* TODO: annotate */ "toolbox.cpp:2320");
}
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
//## Dropper ##
//########################
-static void toggle_dropper_color_pick (GtkWidget *button, gpointer data) {
+static void toggle_dropper_pick_alpha (GtkWidget *button, gpointer tbl) {
prefs_set_int_attribute ("tools.dropper", "pick",
- // 0 and 1 are backwards here because of pref
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? 0 : 1);
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
+ GtkWidget *set_checkbox = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "set_checkbox");
+ if (set_checkbox) {
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) {
+ gtk_widget_set_sensitive (GTK_WIDGET (set_checkbox), TRUE);
+ } else {
+ gtk_widget_set_sensitive (GTK_WIDGET (set_checkbox), FALSE);
+ }
+ }
+}
+
+static void toggle_dropper_set_alpha (GtkWidget *button, gpointer data) {
+ prefs_set_int_attribute ("tools.dropper", "setalpha",
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? 1 : 0);
}
{
GtkWidget *hb = gtk_hbox_new(FALSE, 1);
-
- GtkWidget *button =
- sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION,
- SP_BUTTON_TYPE_TOGGLE,
- NULL,
- "pick_color",
- _("When pressed, picks visible color "
- "without alpha and when not pressed, "
- "picks color including its "
- "alpha"),
- tt);
+ GtkWidget *button = gtk_check_button_new_with_label(_("Pick alpha"));
+ gtk_tooltips_set_tip(tt, button, _("Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"), NULL);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
+ prefs_get_int_attribute ("tools.dropper",
+ "pick", 1));
gtk_widget_show(button);
gtk_container_add (GTK_CONTAINER (hb), button);
+ gtk_object_set_data(GTK_OBJECT(tbl), "pick_checkbox", button);
+ g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (toggle_dropper_pick_alpha), tbl);
+ gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE,
+ AUX_BETWEEN_BUTTON_GROUPS);
+ }
- g_signal_connect_after (G_OBJECT (button), "clicked",
- G_CALLBACK (toggle_dropper_color_pick), NULL);
+ {
+ GtkWidget *hb = gtk_hbox_new(FALSE, 1);
+
+ GtkWidget *button = gtk_check_button_new_with_label(_("Set alpha"));
+ gtk_tooltips_set_tip(tt, button, _("If alpha was picked, assign it to selection as fill or stroke transparency"), NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
- !prefs_get_int_attribute ("tools.dropper",
- "pick", 0));
+ prefs_get_int_attribute ("tools.dropper",
+ "setalpha", 1));
+ gtk_widget_show(button);
+ gtk_container_add (GTK_CONTAINER (hb), button);
+ gtk_object_set_data(GTK_OBJECT(tbl), "set_checkbox", button);
+ g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (toggle_dropper_set_alpha), tbl);
+
+ // make sure it's disabled if we're not picking alpha
+ GtkWidget *pick_checkbox = (GtkWidget*) g_object_get_data(G_OBJECT(tbl), "pick_checkbox");
+ if (pick_checkbox) {
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pick_checkbox))) {
+ gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
+ } else {
+ gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
+ }
+ }
+
gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE,
AUX_BETWEEN_BUTTON_GROUPS);
}
@@ -2928,20 +2967,23 @@ sp_text_toolbox_selection_changed (Inkscape::Selection *selection, GObject *tbl)
}
//Orientation
+ //locking both buttons, changing one affect all group (both)
+ GtkWidget *button = GTK_WIDGET (g_object_get_data (G_OBJECT (tbl), "orientation-horizontal"));
+ g_object_set_data (G_OBJECT (button), "block", gpointer(1));
+
+ GtkWidget *button1 = GTK_WIDGET (g_object_get_data (G_OBJECT (tbl), "orientation-vertical"));
+ g_object_set_data (G_OBJECT (button1), "block", gpointer(1));
+
if (query->writing_mode.computed == SP_CSS_WRITING_MODE_LR_TB)
{
- GtkWidget *button = GTK_WIDGET (g_object_get_data (G_OBJECT (tbl), "orientation-horizontal"));
- g_object_set_data (G_OBJECT (button), "block", gpointer(1));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
- g_object_set_data (G_OBJECT (button), "block", gpointer(0));
}
else
{
- GtkWidget *button = GTK_WIDGET (g_object_get_data (G_OBJECT (tbl), "orientation-vertical"));
- g_object_set_data (G_OBJECT (button), "block", gpointer(1));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
- g_object_set_data (G_OBJECT (button), "block", gpointer(0));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button1), TRUE);
}
+ g_object_set_data (G_OBJECT (button), "block", gpointer(0));
+ g_object_set_data (G_OBJECT (button1), "block", gpointer(0));
}
}
GObject *tbl)
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- GtkTreeModel *model;
+ GtkTreeModel *model = 0;
GtkWidget *popdown = GTK_WIDGET (g_object_get_data (tbl, "family-popdown-window"));
GtkWidget *entry = GTK_WIDGET (g_object_get_data (tbl, "family-entry"));
GtkTreeIter iter;
- char *family;
+ char *family = 0;
gdk_pointer_ungrab (GDK_CURRENT_TIME);
gdk_keyboard_ungrab (GDK_CURRENT_TIME);
- gtk_tree_selection_get_selected (selection, &model, &iter);
+ if ( !gtk_tree_selection_get_selected( selection, &model, &iter ) ) {
+ return;
+ }
+
gtk_tree_model_get (model, &iter, 0, &family, -1);
if (g_object_get_data (G_OBJECT (selection), "block"))
sp_desktop_set_style (desktop, css, true, true);
}
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP));
+ sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ /* TODO: annotate */ "toolbox.cpp:3024");
sp_repr_css_attr_unref (css);
free (family);
gtk_widget_hide (GTK_WIDGET (g_object_get_data (G_OBJECT(tbl), "warning-image")));
}
sp_desktop_set_style (desktop, css, true, true);
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP));
+ sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ /* TODO: annotate */ "toolbox.cpp:3107");
sp_repr_css_attr_unref (css);
gtk_widget_grab_focus (GTK_WIDGET(desktop->canvas));
}
sp_desktop_set_style (desktop, css, true, true);
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP));
+ sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ /* TODO: annotate */ "toolbox.cpp:3153");
sp_repr_css_attr_unref (css);
gtk_widget_grab_focus (GTK_WIDGET(desktop->canvas));
sp_text_toolbox_orientation_toggled (GtkRadioButton *button,
gpointer data)
{
- if (g_object_get_data (G_OBJECT (button), "block")) return;
-
+ if (g_object_get_data (G_OBJECT (button), "block")) {
+ g_object_set_data (G_OBJECT (button), "block", gpointer(0));
+ return;
+ }
+
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
SPCSSAttr *css = sp_repr_css_attr_new ();
int prop = GPOINTER_TO_INT(data);
}
sp_desktop_set_style (desktop, css, true, true);
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP));
+ sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ /* TODO: annotate */ "toolbox.cpp:3200");
sp_repr_css_attr_unref (css);
gtk_widget_grab_focus (GTK_WIDGET(desktop->canvas));
if (g_object_get_data (tbl, "size-block")) return;
+#if GTK_CHECK_VERSION(2,6,0)
char *text = gtk_combo_box_get_active_text (cbox);
+#else // GTK_CHECK_VERSION(2,6,0)
+ GtkTreeModel *model = gtk_combo_box_get_model (cbox);
+ GtkTreeIter iter;
+ char *text = NULL;
+
+ if (gtk_combo_box_get_active_iter (cbox, &iter) && model)
+ gtk_tree_model_get (model, &iter, 0, &text, -1);
+#endif // GTK_CHECK_VERSION(2,6,0)
SPCSSAttr *css = sp_repr_css_attr_new ();
sp_repr_css_set_property (css, "font-size", text);
}
sp_desktop_set_style (desktop, css, true, true);
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:size");
+ sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:size", SP_VERB_NONE,
+ /* TODO: annotate */ "toolbox.cpp:3296");
sp_repr_css_attr_unref (css);
free (sample_escaped);
}
+static void delete_completion(GObject *obj, GtkWidget *entry) {
+ GObject *completion = (GObject *) gtk_object_get_data(GTK_OBJECT(entry), "completion");
+ if (completion) {
+ gtk_entry_set_completion (GTK_ENTRY(entry), NULL);
+ g_object_unref (completion);
+ }
+}
+
GtkWidget*
sp_text_toolbox_new (SPDesktop *desktop)
{
gtk_entry_completion_set_minimum_key_length (completion, 1);
g_object_set (G_OBJECT(completion), "inline-completion", TRUE, "popup-completion", TRUE, NULL);
gtk_entry_set_completion (GTK_ENTRY(entry), completion);
+ gtk_object_set_data(GTK_OBJECT(entry), "completion", completion);
aux_toolbox_space (tbl, 1);
gtk_box_pack_start (GTK_BOX (tbl), entry, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(tbl), "destroy", G_CALLBACK(delete_completion), entry);
//Button
GtkWidget *button = gtk_button_new ();
gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (Glib::unwrap(store)));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
+#if GTK_CHECK_VERSION(2,6,0)
gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
+#endif // GTK_CHECK_VERSION(2,6,0)
//gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), TRUE);
gtk_box_pack_start (GTK_BOX (row), rbutton, FALSE, FALSE, 0);
g_object_set_data (G_OBJECT (tbl), "text-start", rbutton);
g_signal_connect (G_OBJECT (rbutton), "toggled", G_CALLBACK (sp_text_toolbox_anchoring_toggled), gpointer(0));
- gtk_tooltips_set_tip(tt, rbutton, _("Align right"), NULL);
+ gtk_tooltips_set_tip(tt, rbutton, _("Align left"), NULL);
// center
rbutton = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
gtk_box_pack_start (GTK_BOX (row), rbutton, FALSE, FALSE, 0);
g_object_set_data (G_OBJECT (tbl), "text-end", rbutton);
g_signal_connect (G_OBJECT (rbutton), "toggled", G_CALLBACK (sp_text_toolbox_anchoring_toggled), gpointer(2));
- gtk_tooltips_set_tip(tt, rbutton, _("Align left"), NULL);
+ gtk_tooltips_set_tip(tt, rbutton, _("Align right"), NULL);
// fill
rbutton = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
}
+
static void connector_spacing_changed(GtkAdjustment *adj, GtkWidget *tbl)
{
// quit if run by the _changed callbacks
g_slist_free(items);
}
- sp_document_done(doc);
+ sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ _("Change connector spacing distance"));
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
spinbutton_defocus(GTK_OBJECT(tbl));
}
+static void sp_connector_graph_layout(void)
+{
+ if (!SP_ACTIVE_DESKTOP) return;
+
+ // hack for clones, see comment in align-and-distribute.cpp
+ int saved_compensation = prefs_get_int_attribute("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
+ prefs_set_int_attribute("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
+
+ graphlayout(sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList());
+
+ prefs_set_int_attribute("options.clonecompensation", "value", saved_compensation);
+
+ sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_DIALOG_ALIGN_DISTRIBUTE, /* TODO: annotate */ "toolbox.cpp:129");
+}
+
+static void
+sp_directed_graph_layout_toggled(GtkWidget *widget, GtkObject *tbl)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+ prefs_set_string_attribute("tools.connector", "directedlayout",
+ "true");
+ } else {
+ prefs_set_string_attribute("tools.connector", "directedlayout",
+ "false");
+ }
+}
+static void
+sp_nooverlaps_graph_layout_toggled(GtkWidget *widget, GtkObject *tbl)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+ prefs_set_string_attribute("tools.connector", "avoidoverlaplayout",
+ "true");
+ } else {
+ prefs_set_string_attribute("tools.connector", "avoidoverlaplayout",
+ "false");
+ }
+}
+
+
+static void connector_length_changed(GtkAdjustment *adj, GtkWidget *tbl)
+{
+ prefs_set_double_attribute("tools.connector", "length", adj->value);
+ spinbutton_defocus(GTK_OBJECT(tbl));
+}
static void connector_tb_event_attr_changed(Inkscape::XML::Node *repr,
gchar const *name, gchar const *old_value, gchar const *new_value,
gtk_box_pack_start(GTK_BOX(tbl), object_spacing, FALSE, FALSE,
AUX_SPACING);
}
+ // Graph (connector network) layout
+ sp_toolbox_button_new(tbl, Inkscape::ICON_SIZE_SMALL_TOOLBAR,
+ "graph_layout", GTK_SIGNAL_FUNC(sp_connector_graph_layout),
+ tt, _("Nicely arrange selected connector network"));
+ // Default connector length spinbox
+ {
+ GtkWidget *connector_length = sp_tb_spinbutton(_("Length:"),
+ _("Ideal length for connectors when layout is applied"),
+ "tools.connector", "length", 100, NULL, tbl, TRUE,
+ "inkscape:connector-length", 10, 1000, 10.0, 100.0,
+ connector_length_changed, 1, 0);
+
+ gtk_box_pack_start(GTK_BOX(tbl), connector_length, FALSE, FALSE,
+ AUX_SPACING);
+ }
+ gchar const *tbuttonstate;
+ // Directed edges toggle button
+ {
+ GtkWidget *tbutton = gtk_toggle_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (tbutton), GTK_RELIEF_NONE);
+ gtk_container_add (GTK_CONTAINER (tbutton), sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, "directed_graph"));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (tbutton), FALSE);
+ gtk_tooltips_set_tip(tt, tbutton, _("Make connectors with end-markers (arrows) point downwards"), NULL);
+
+ gtk_box_pack_start (GTK_BOX (tbl), tbutton, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(tbutton), "toggled", GTK_SIGNAL_FUNC(sp_directed_graph_layout_toggled), tbl);
+ tbuttonstate = prefs_get_string_attribute("tools.connector", "directedlayout");
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(tbutton),
+ (tbuttonstate && !strcmp(tbuttonstate, "true"))?TRUE:FALSE );
+ }
+ // Avoid overlaps toggle button
+ {
+ GtkWidget *tbutton = gtk_toggle_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (tbutton), GTK_RELIEF_NONE);
+ gtk_container_add (GTK_CONTAINER (tbutton), sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, "remove_overlaps"));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (tbutton), FALSE);
+ gtk_tooltips_set_tip(tt, tbutton, _("Do not allow overlapping shapes"), NULL);
+
+ gtk_box_pack_start (GTK_BOX (tbl), tbutton, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(tbutton), "toggled", GTK_SIGNAL_FUNC(sp_nooverlaps_graph_layout_toggled), tbl);
+ tbuttonstate = prefs_get_string_attribute("tools.connector", "avoidoverlaplayout");
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(tbutton),
+ (tbuttonstate && !strcmp(tbuttonstate, "true"))?TRUE:FALSE );
+ }
gtk_widget_show_all(tbl);
sp_set_font_size_smaller (tbl);