summaryrefslogtreecommitdiffstats
path: root/src/ui/toolbar/connector-toolbar.cpp
diff options
context:
space:
mode:
authorAlexander Valavanis <valavanisalex@gmail.com>2019-01-19 13:58:46 +0000
committerAlexander Valavanis <valavanisalex@gmail.com>2019-01-19 13:58:46 +0000
commite77e650354daef5ced80adddf6d5a334bb6216d3 (patch)
treeac1237a3194056ac457b5a9a7468b0d61c3a7335 /src/ui/toolbar/connector-toolbar.cpp
parentMerge branch 'master' of gitlab.com:inkscape/inkscape (diff)
downloadinkscape-e77e650354daef5ced80adddf6d5a334bb6216d3.tar.gz
inkscape-e77e650354daef5ced80adddf6d5a334bb6216d3.zip
derive all toolbars from Inkscape::Toolbar
Diffstat (limited to 'src/ui/toolbar/connector-toolbar.cpp')
-rw-r--r--src/ui/toolbar/connector-toolbar.cpp441
1 files changed, 235 insertions, 206 deletions
diff --git a/src/ui/toolbar/connector-toolbar.cpp b/src/ui/toolbar/connector-toolbar.cpp
index 77308c9ec..1cf80cec8 100644
--- a/src/ui/toolbar/connector-toolbar.cpp
+++ b/src/ui/toolbar/connector-toolbar.cpp
@@ -57,38 +57,200 @@ using Inkscape::DocumentUndo;
using Inkscape::UI::ToolboxFactory;
using Inkscape::UI::PrefPusher;
-//#########################
-//## Connector ##
-//#########################
+static Inkscape::XML::NodeEventVector connector_tb_repr_events = {
+ nullptr, /* child_added */
+ nullptr, /* child_removed */
+ Inkscape::UI::Toolbar::ConnectorToolbar::event_attr_changed,
+ nullptr, /* content_changed */
+ nullptr /* order_changed */
+};
+
+namespace Inkscape {
+namespace UI {
+namespace Toolbar {
+GtkWidget *
+ConnectorToolbar::prep( SPDesktop *desktop, GtkActionGroup* mainActions)
+{
+ auto toolbar = new ConnectorToolbar(desktop);
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1);
+
+ {
+ InkAction* inky = ink_action_new( "ConnectorAvoidAction",
+ _("Avoid"),
+ _("Make connectors avoid selected objects"),
+ INKSCAPE_ICON("connector-avoid"),
+ secondarySize );
+ g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(path_set_avoid), (gpointer)toolbar);
+ gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
+ }
+
+ {
+ InkAction* inky = ink_action_new( "ConnectorIgnoreAction",
+ _("Ignore"),
+ _("Make connectors ignore selected objects"),
+ INKSCAPE_ICON("connector-ignore"),
+ secondarySize );
+ g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(path_set_ignore), (gpointer)toolbar);
+ gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
+ }
+
+ // Orthogonal connectors toggle button
+ {
+ toolbar->_orthogonal = ink_toggle_action_new( "ConnectorOrthogonalAction",
+ _("Orthogonal"),
+ _("Make connector orthogonal or polyline"),
+ INKSCAPE_ICON("connector-orthogonal"),
+ GTK_ICON_SIZE_MENU );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( toolbar->_orthogonal ) );
+
+ bool tbuttonstate = prefs->getBool("/tools/connector/orthogonal");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toolbar->_orthogonal), ( tbuttonstate ? TRUE : FALSE ));
+ g_signal_connect_after( G_OBJECT(toolbar->_orthogonal), "toggled", G_CALLBACK(orthogonal_toggled), (gpointer)toolbar );
+ }
+
+ EgeAdjustmentAction* eact = nullptr;
+ // Curvature spinbox
+ eact = create_adjustment_action( "ConnectorCurvatureAction",
+ _("Connector Curvature"), _("Curvature:"),
+ _("The amount of connectors curvature"),
+ "/tools/connector/curvature", defaultConnCurvature,
+ GTK_WIDGET(desktop->canvas),
+ nullptr, // dataKludge
+ TRUE, "inkscape:connector-curvature",
+ 0, 100, 1.0, 10.0,
+ nullptr, nullptr, 0,
+ nullptr, // callback
+ nullptr /*unit tracker*/, 1, 0 );
+ toolbar->_curvature_adj = Glib::wrap(ege_adjustment_action_get_adjustment(eact));
+ toolbar->_curvature_adj->signal_value_changed().connect(sigc::mem_fun(*toolbar, &ConnectorToolbar::curvature_changed));
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+
+ // Spacing spinbox
+ eact = create_adjustment_action( "ConnectorSpacingAction",
+ _("Connector Spacing"), _("Spacing:"),
+ _("The amount of space left around objects by auto-routing connectors"),
+ "/tools/connector/spacing", defaultConnSpacing,
+ GTK_WIDGET(desktop->canvas),
+ nullptr, // dataKludge
+ TRUE, "inkscape:connector-spacing",
+ 0, 100, 1.0, 10.0,
+ nullptr, nullptr, 0,
+ nullptr, // callback
+ nullptr /*unit tracker*/, 1, 0 );
+ toolbar->_spacing_adj = Glib::wrap(ege_adjustment_action_get_adjustment(eact));
+ toolbar->_spacing_adj->signal_value_changed().connect(sigc::mem_fun(*toolbar, &ConnectorToolbar::spacing_changed));
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+
+ // Graph (connector network) layout
+ {
+ InkAction* inky = ink_action_new( "ConnectorGraphAction",
+ _("Graph"),
+ _("Nicely arrange selected connector network"),
+ INKSCAPE_ICON("distribute-graph"),
+ secondarySize );
+ g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(graph_layout), (gpointer)toolbar);
+ gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
+ }
+
+ // Default connector length spinbox
+ eact = create_adjustment_action( "ConnectorLengthAction",
+ _("Connector Length"), _("Length:"),
+ _("Ideal length for connectors when layout is applied"),
+ "/tools/connector/length", 100,
+ GTK_WIDGET(desktop->canvas),
+ nullptr, // dataKludge
+ TRUE, "inkscape:connector-length",
+ 10, 1000, 10.0, 100.0,
+ nullptr, nullptr, 0,
+ nullptr, // callback
+ nullptr /*unit tracker*/, 1, 0 );
+ toolbar->_length_adj = Glib::wrap(ege_adjustment_action_get_adjustment(eact));
+ toolbar->_length_adj->signal_value_changed().connect(sigc::mem_fun(*toolbar, &ConnectorToolbar::length_changed));
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
+
+ // Directed edges toggle button
+ {
+ InkToggleAction* act = ink_toggle_action_new( "ConnectorDirectedAction",
+ _("Downwards"),
+ _("Make connectors with end-markers (arrows) point downwards"),
+ INKSCAPE_ICON("distribute-graph-directed"),
+ GTK_ICON_SIZE_MENU );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+
+ bool tbuttonstate = prefs->getBool("/tools/connector/directedlayout");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
+
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(directed_graph_layout_toggled), (gpointer)toolbar);
+ desktop->getSelection()->connectChanged(sigc::mem_fun(*toolbar, &ConnectorToolbar::selection_changed));
+ }
+
+ // Avoid overlaps toggle button
+ {
+ InkToggleAction* act = ink_toggle_action_new( "ConnectorOverlapAction",
+ _("Remove overlaps"),
+ _("Do not allow overlapping shapes"),
+ INKSCAPE_ICON("distribute-remove-overlaps"),
+ GTK_ICON_SIZE_MENU );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+
+ bool tbuttonstate = prefs->getBool("/tools/connector/avoidoverlaplayout");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), (tbuttonstate ? TRUE : FALSE ));
+
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(nooverlaps_graph_layout_toggled), (gpointer)toolbar);
+ }
+
+ // Code to watch for changes to the connector-spacing attribute in
+ // the XML.
+ Inkscape::XML::Node *repr = desktop->namedview->getRepr();
+ g_assert(repr != nullptr);
+
+ if(toolbar->_repr) {
+ toolbar->_repr->removeListenerByData(toolbar);
+ Inkscape::GC::release(toolbar->_repr);
+ toolbar->_repr = nullptr;
+ }
+
+ if (repr) {
+ toolbar->_repr = repr;
+ Inkscape::GC::anchor(toolbar->_repr);
+ toolbar->_repr->addListener(&connector_tb_repr_events, toolbar);
+ toolbar->_repr->synthesizeEvents(&connector_tb_repr_events, toolbar);
+ }
+
+ return GTK_WIDGET(toolbar->gobj());
+} // end of ConnectorToolbar::prep()
-static void sp_connector_path_set_avoid()
+void
+ConnectorToolbar::path_set_avoid()
{
Inkscape::UI::Tools::cc_selection_set_avoid(true);
}
-
-static void sp_connector_path_set_ignore()
+void
+ConnectorToolbar::path_set_ignore()
{
Inkscape::UI::Tools::cc_selection_set_avoid(false);
}
-static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl )
+void
+ConnectorToolbar::orthogonal_toggled( GtkToggleAction* act, gpointer data)
{
- SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data( tbl, "desktop" ));
- SPDocument *doc = desktop->getDocument();
+ auto toolbar = reinterpret_cast<ConnectorToolbar *>(data);
+ SPDocument *doc = toolbar->_desktop->getDocument();
if (!DocumentUndo::getUndoSensitive(doc)) {
return;
}
-
// quit if run by the _changed callbacks
- if (g_object_get_data( tbl, "freeze" )) {
+ if (toolbar->_freeze) {
return;
}
// in turn, prevent callbacks from responding
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
+ toolbar->_freeze = true;
bool is_orthog = gtk_toggle_action_get_active( act );
gchar orthog_str[] = "orthogonal";
@@ -96,7 +258,7 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
gchar *value = is_orthog ? orthog_str : polyline_str ;
bool modmade = false;
- auto itemlist= desktop->getSelection()->items();
+ auto itemlist= toolbar->_desktop->getSelection()->items();
for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
@@ -117,13 +279,13 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
is_orthog ? _("Set connector type: orthogonal"): _("Set connector type: polyline"));
}
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+ toolbar->_freeze = false;
}
-static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
+void
+ConnectorToolbar::curvature_changed()
{
- SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data( tbl, "desktop" ));
- SPDocument *doc = desktop->getDocument();
+ SPDocument *doc = _desktop->getDocument();
if (!DocumentUndo::getUndoSensitive(doc)) {
return;
@@ -131,19 +293,19 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
// quit if run by the _changed callbacks
- if (g_object_get_data( tbl, "freeze" )) {
+ if (_freeze) {
return;
}
// in turn, prevent callbacks from responding
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
+ _freeze = true;
- gdouble newValue = gtk_adjustment_get_value(adj);
+ auto newValue = _curvature_adj->get_value();
gchar value[G_ASCII_DTOSTR_BUF_SIZE];
g_ascii_dtostr(value, G_ASCII_DTOSTR_BUF_SIZE, newValue);
bool modmade = false;
- auto itemlist= desktop->getSelection()->items();
+ auto itemlist= _desktop->getSelection()->items();
for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
@@ -164,23 +326,22 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
_("Change connector curvature"));
}
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+ _freeze = false;
}
-
-static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
+void
+ConnectorToolbar::spacing_changed()
{
- SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data( tbl, "desktop" ));
- SPDocument *doc = desktop->getDocument();
+ SPDocument *doc = _desktop->getDocument();
if (!DocumentUndo::getUndoSensitive(doc)) {
return;
}
- Inkscape::XML::Node *repr = desktop->namedview->getRepr();
+ Inkscape::XML::Node *repr = _desktop->namedview->getRepr();
if ( !repr->attribute("inkscape:connector-spacing") &&
- ( gtk_adjustment_get_value(adj) == defaultConnSpacing )) {
+ ( _spacing_adj->get_value() == defaultConnSpacing )) {
// Don't need to update the repr if the attribute doesn't
// exist and it is being set to the default value -- as will
// happen at startup.
@@ -188,19 +349,19 @@ static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
}
// quit if run by the attr_changed listener
- if (g_object_get_data( tbl, "freeze" )) {
+ if (_freeze) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE));
+ _freeze = true;
- sp_repr_set_css_double(repr, "inkscape:connector-spacing", gtk_adjustment_get_value(adj));
- desktop->namedview->updateRepr();
+ sp_repr_set_css_double(repr, "inkscape:connector-spacing", _spacing_adj->get_value());
+ _desktop->namedview->updateRepr();
bool modmade = false;
std::vector<SPItem *> items;
- items = get_avoided_items(items, desktop->currentRoot(), desktop);
+ items = get_avoided_items(items, _desktop->currentRoot(), _desktop);
for (std::vector<SPItem *>::const_iterator iter = items.begin(); iter != items.end(); ++iter ) {
SPItem *item = *iter;
Geom::Affine m = Geom::identity();
@@ -212,10 +373,11 @@ static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR,
_("Change connector spacing"));
}
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+ _freeze = false;
}
-static void sp_connector_graph_layout()
+void
+ConnectorToolbar::graph_layout()
{
if (!SP_ACTIVE_DESKTOP) {
return;
@@ -235,205 +397,72 @@ static void sp_connector_graph_layout()
DocumentUndo::done(SP_ACTIVE_DESKTOP->getDocument(), SP_VERB_DIALOG_ALIGN_DISTRIBUTE, _("Arrange connector network"));
}
-static void sp_directed_graph_layout_toggled( GtkToggleAction* act, GObject * /*tbl*/ )
+void
+ConnectorToolbar::length_changed()
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("/tools/connector/directedlayout",
- gtk_toggle_action_get_active( act ));
+ prefs->setDouble("/tools/connector/length", _length_adj->get_value());
}
-static void sp_nooverlaps_graph_layout_toggled( GtkToggleAction* act, GObject * /*tbl*/ )
+void
+ConnectorToolbar::directed_graph_layout_toggled(GtkToggleAction *act,
+ gpointer data)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("/tools/connector/avoidoverlaplayout",
+ prefs->setBool("/tools/connector/directedlayout",
gtk_toggle_action_get_active( act ));
}
-
-static void connector_length_changed(GtkAdjustment *adj, GObject* /*tbl*/)
-{
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("/tools/connector/length", gtk_adjustment_get_value(adj));
-}
-
-static void connector_tb_event_attr_changed(Inkscape::XML::Node *repr,
- gchar const *name, gchar const * /*old_value*/, gchar const * /*new_value*/,
- bool /*is_interactive*/, gpointer data)
-{
- GtkWidget *tbl = GTK_WIDGET(data);
-
- if ( !g_object_get_data(G_OBJECT(tbl), "freeze")
- && (strcmp(name, "inkscape:connector-spacing") == 0) ) {
- GtkAdjustment *adj = static_cast<GtkAdjustment*>(g_object_get_data(G_OBJECT(tbl), "spacing"));
- gdouble spacing = defaultConnSpacing;
- sp_repr_get_double(repr, "inkscape:connector-spacing", &spacing);
-
- gtk_adjustment_set_value(adj, spacing);
-
-#if !GTK_CHECK_VERSION(3,18,0)
- gtk_adjustment_value_changed(adj);
-#endif
-
- spinbutton_defocus(tbl);
- }
-}
-
-static Inkscape::XML::NodeEventVector connector_tb_repr_events = {
- nullptr, /* child_added */
- nullptr, /* child_removed */
- connector_tb_event_attr_changed,
- nullptr, /* content_changed */
- nullptr /* order_changed */
-};
-
-static void sp_connector_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl)
+void
+ConnectorToolbar::selection_changed(Inkscape::Selection *selection)
{
- GtkAdjustment *adj = GTK_ADJUSTMENT( g_object_get_data( tbl, "curvature" ) );
- GtkToggleAction *act = GTK_TOGGLE_ACTION( g_object_get_data( tbl, "orthogonal" ) );
SPItem *item = selection->singleItem();
if (SP_IS_PATH(item))
{
gdouble curvature = SP_PATH(item)->connEndPair.getCurvature();
bool is_orthog = SP_PATH(item)->connEndPair.isOrthogonal();
- gtk_toggle_action_set_active(act, is_orthog);
- gtk_adjustment_set_value(adj, curvature);
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(_orthogonal), is_orthog);
+ _curvature_adj->set_value(curvature);
}
}
-void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder )
+void
+ConnectorToolbar::nooverlaps_graph_layout_toggled( GtkToggleAction* act, gpointer /* data */)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1);
-
- {
- InkAction* inky = ink_action_new( "ConnectorAvoidAction",
- _("Avoid"),
- _("Make connectors avoid selected objects"),
- INKSCAPE_ICON("connector-avoid"),
- secondarySize );
- g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_connector_path_set_avoid), holder );
- gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
- }
-
- {
- InkAction* inky = ink_action_new( "ConnectorIgnoreAction",
- _("Ignore"),
- _("Make connectors ignore selected objects"),
- INKSCAPE_ICON("connector-ignore"),
- secondarySize );
- g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_connector_path_set_ignore), holder );
- gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
- }
-
- // Orthogonal connectors toggle button
- {
- InkToggleAction* act = ink_toggle_action_new( "ConnectorOrthogonalAction",
- _("Orthogonal"),
- _("Make connector orthogonal or polyline"),
- INKSCAPE_ICON("connector-orthogonal"),
- GTK_ICON_SIZE_MENU );
- gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
-
- bool tbuttonstate = prefs->getBool("/tools/connector/orthogonal");
- gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
- g_object_set_data( holder, "orthogonal", act );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_connector_orthogonal_toggled), holder );
- }
-
- EgeAdjustmentAction* eact = nullptr;
- // Curvature spinbox
- eact = create_adjustment_action( "ConnectorCurvatureAction",
- _("Connector Curvature"), _("Curvature:"),
- _("The amount of connectors curvature"),
- "/tools/connector/curvature", defaultConnCurvature,
- GTK_WIDGET(desktop->canvas), holder, TRUE, "inkscape:connector-curvature",
- 0, 100, 1.0, 10.0,
- nullptr, nullptr, 0,
- connector_curvature_changed, nullptr /*unit tracker*/, 1, 0 );
- gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
-
- // Spacing spinbox
- eact = create_adjustment_action( "ConnectorSpacingAction",
- _("Connector Spacing"), _("Spacing:"),
- _("The amount of space left around objects by auto-routing connectors"),
- "/tools/connector/spacing", defaultConnSpacing,
- GTK_WIDGET(desktop->canvas), holder, TRUE, "inkscape:connector-spacing",
- 0, 100, 1.0, 10.0,
- nullptr, nullptr, 0,
- connector_spacing_changed, nullptr /*unit tracker*/, 1, 0 );
- gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
-
- // Graph (connector network) layout
- {
- InkAction* inky = ink_action_new( "ConnectorGraphAction",
- _("Graph"),
- _("Nicely arrange selected connector network"),
- INKSCAPE_ICON("distribute-graph"),
- secondarySize );
- g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_connector_graph_layout), holder );
- gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
- }
-
- // Default connector length spinbox
- eact = create_adjustment_action( "ConnectorLengthAction",
- _("Connector Length"), _("Length:"),
- _("Ideal length for connectors when layout is applied"),
- "/tools/connector/length", 100,
- GTK_WIDGET(desktop->canvas), holder, TRUE, "inkscape:connector-length",
- 10, 1000, 10.0, 100.0,
- nullptr, nullptr, 0,
- connector_length_changed, nullptr /*unit tracker*/, 1, 0 );
- gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
-
-
- // Directed edges toggle button
- {
- InkToggleAction* act = ink_toggle_action_new( "ConnectorDirectedAction",
- _("Downwards"),
- _("Make connectors with end-markers (arrows) point downwards"),
- INKSCAPE_ICON("distribute-graph-directed"),
- GTK_ICON_SIZE_MENU );
- gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
-
- bool tbuttonstate = prefs->getBool("/tools/connector/directedlayout");
- gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
-
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_directed_graph_layout_toggled), holder );
- desktop->getSelection()->connectChanged(sigc::bind(sigc::ptr_fun(sp_connector_toolbox_selection_changed), holder));
- }
-
- // Avoid overlaps toggle button
- {
- InkToggleAction* act = ink_toggle_action_new( "ConnectorOverlapAction",
- _("Remove overlaps"),
- _("Do not allow overlapping shapes"),
- INKSCAPE_ICON("distribute-remove-overlaps"),
- GTK_ICON_SIZE_MENU );
- gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
-
- bool tbuttonstate = prefs->getBool("/tools/connector/avoidoverlaplayout");
- gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), (tbuttonstate ? TRUE : FALSE ));
+ prefs->setBool("/tools/connector/avoidoverlaplayout",
+ gtk_toggle_action_get_active( act ));
+}
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_nooverlaps_graph_layout_toggled), holder );
- }
+void
+ConnectorToolbar::event_attr_changed(Inkscape::XML::Node *repr,
+ gchar const *name,
+ gchar const * /*old_value*/,
+ gchar const * /*new_value*/,
+ bool /*is_interactive*/,
+ gpointer data)
+{
+ auto toolbar = reinterpret_cast<ConnectorToolbar *>(data);
+ if ( !toolbar->_freeze
+ && (strcmp(name, "inkscape:connector-spacing") == 0) ) {
+ gdouble spacing = defaultConnSpacing;
+ sp_repr_get_double(repr, "inkscape:connector-spacing", &spacing);
- // Code to watch for changes to the connector-spacing attribute in
- // the XML.
- Inkscape::XML::Node *repr = desktop->namedview->getRepr();
- g_assert(repr != nullptr);
+ toolbar->_spacing_adj->set_value(spacing);
- purge_repr_listener( holder, holder );
+#if !GTK_CHECK_VERSION(3,18,0)
+ toolbar->_spacing_adj->value_changed();
+#endif
- if (repr) {
- g_object_set_data( holder, "repr", repr );
- Inkscape::GC::anchor(repr);
- sp_repr_add_listener( repr, &connector_tb_repr_events, holder );
- sp_repr_synthesize_events( repr, &connector_tb_repr_events, holder );
+ if(toolbar->_desktop->canvas) gtk_widget_grab_focus(GTK_WIDGET(toolbar->_desktop->canvas));
}
-} // end of sp_connector_toolbox_prep()
+}
+}
+}
+}
/*
Local Variables: