summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog
diff options
context:
space:
mode:
authorTim Dwyer <tgdwyer@gmail.com>2006-02-13 02:00:14 +0000
committertgdwyer <tgdwyer@users.sourceforge.net>2006-02-13 02:00:14 +0000
commit19a528cb8e524239aaeea16df87558ca4be4cced (patch)
treeb6fea2f930a3f6c9b78ac8bfc74a27fb50e24f46 /src/ui/dialog
parentoptimization: do not notify any listeners if attributes' new value is the sam... (diff)
downloadinkscape-19a528cb8e524239aaeea16df87558ca4be4cced.tar.gz
inkscape-19a528cb8e524239aaeea16df87558ca4be4cced.zip
Added connector graph layout functionality
(bzr r122)
Diffstat (limited to 'src/ui/dialog')
-rw-r--r--src/ui/dialog/align-and-distribute.cpp48
-rw-r--r--src/ui/dialog/align-and-distribute.h8
2 files changed, 54 insertions, 2 deletions
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index 262aa690b..35ee7b806 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -22,6 +22,7 @@
#include "dialogs/unclump.h"
#include "removeoverlap/removeoverlap.h"
+#include "graphlayout/graphlayout.h"
#include <gtkmm/spinbutton.h>
@@ -487,6 +488,35 @@ private :
}
};
+class ActionGraphLayout : public Action {
+public:
+ ActionGraphLayout(Glib::ustring const &id,
+ Glib::ustring const &tiptext,
+ guint row,
+ guint column,
+ AlignAndDistribute &dialog) :
+ Action(id, tiptext, row, column + 4,
+ dialog.graphLayout_table(), dialog.tooltips(), dialog)
+ {}
+
+private :
+ virtual void on_button_click()
+ {
+ if (!SP_ACTIVE_DESKTOP) return;
+
+ // see comment in ActionAlign above
+ 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_DT_SELECTION(SP_ACTIVE_DESKTOP)->itemList());
+
+ // restore compensation setting
+ prefs_set_int_attribute("options.clonecompensation", "value", saved_compensation);
+
+ sp_document_done(SP_DT_DOCUMENT(SP_ACTIVE_DESKTOP));
+ }
+};
+
class ActionUnclump : public Action {
public :
ActionUnclump(const Glib::ustring &id,
@@ -717,10 +747,12 @@ AlignAndDistribute::AlignAndDistribute()
_alignFrame(_("Align")),
_distributeFrame(_("Distribute")),
_removeOverlapFrame(_("Remove overlaps")),
+ _graphLayoutFrame(_("Connector network layout")),
_nodesFrame(_("Nodes")),
_alignTable(2, 6, true),
_distributeTable(3, 6, true),
_removeOverlapTable(1, 5, false),
+ _graphLayoutTable(1, 5, false),
_nodesTable(1, 4, true),
_anchorLabel(_("Relative to: "))
{
@@ -814,6 +846,10 @@ AlignAndDistribute::AlignAndDistribute()
addRemoveOverlapsButton("remove_overlaps",
_("Move objects as little as possible so that their bounding boxes do not overlap"),
0, 0);
+ //Graph Layout
+ addGraphLayoutButton("graph_layout",
+ _("Nicely arrange selected connector network"),
+ 0, 0);
//Node Mode buttons
addNodeButton("node_halign",
@@ -851,6 +887,7 @@ AlignAndDistribute::AlignAndDistribute()
_alignFrame.add(_alignBox);
_distributeFrame.add(_distributeTable);
_removeOverlapFrame.add(_removeOverlapTable);
+ _graphLayoutFrame.add(_graphLayoutTable);
_nodesFrame.add(_nodesTable);
// Top level vbox
@@ -862,6 +899,7 @@ AlignAndDistribute::AlignAndDistribute()
vbox->pack_start(_alignFrame, true, true);
vbox->pack_start(_distributeFrame, true, true);
vbox->pack_start(_removeOverlapFrame, true, true);
+ vbox->pack_start(_graphLayoutFrame, true, true);
vbox->pack_start(_nodesFrame, true, true);
//Connect to the global tool change signal
@@ -908,6 +946,7 @@ void AlignAndDistribute::setMode(bool nodeEdit)
((_alignFrame).*(mSel))();
((_distributeFrame).*(mSel))();
((_removeOverlapFrame).*(mSel))();
+ ((_graphLayoutFrame).*(mSel))();
((_nodesFrame).*(mNode))();
}
@@ -950,6 +989,15 @@ void AlignAndDistribute::addRemoveOverlapsButton(const Glib::ustring &id, const
);
}
+void AlignAndDistribute::addGraphLayoutButton(const Glib::ustring &id, const Glib::ustring tiptext,
+ guint row, guint col)
+{
+ _actionList.push_back(
+ new ActionGraphLayout(
+ id, tiptext, row, col, *this)
+ );
+}
+
void AlignAndDistribute::addUnclumpButton(const Glib::ustring &id, const Glib::ustring tiptext,
guint row, guint col)
{
diff --git a/src/ui/dialog/align-and-distribute.h b/src/ui/dialog/align-and-distribute.h
index 35ca3c7c3..69fc17673 100644
--- a/src/ui/dialog/align-and-distribute.h
+++ b/src/ui/dialog/align-and-distribute.h
@@ -58,6 +58,7 @@ public:
Gtk::Table &align_table(){return _alignTable;}
Gtk::Table &distribute_table(){return _distributeTable;}
Gtk::Table &removeOverlap_table(){return _removeOverlapTable;}
+ Gtk::Table &graphLayout_table(){return _graphLayoutTable;}
Gtk::Table &nodes_table(){return _nodesTable;}
Gtk::Tooltips &tooltips(){return _tooltips;}
@@ -81,6 +82,9 @@ protected:
void addRemoveOverlapsButton(const Glib::ustring &id,
const Glib::ustring tiptext,
guint row, guint col);
+ void addGraphLayoutButton(const Glib::ustring &id,
+ const Glib::ustring tiptext,
+ guint row, guint col);
void addUnclumpButton(const Glib::ustring &id, const Glib::ustring tiptext,
guint row, guint col);
void addRandomizeButton(const Glib::ustring &id, const Glib::ustring tiptext,
@@ -89,8 +93,8 @@ protected:
guint row, guint col, Gtk::Table &table, NR::Dim2 orientation, bool distribute);
std::list<Action *> _actionList;
- Gtk::Frame _alignFrame, _distributeFrame, _removeOverlapFrame, _nodesFrame;
- Gtk::Table _alignTable, _distributeTable, _removeOverlapTable, _nodesTable;
+ Gtk::Frame _alignFrame, _distributeFrame, _removeOverlapFrame, _graphLayoutFrame, _nodesFrame;
+ Gtk::Table _alignTable, _distributeTable, _removeOverlapTable, _graphLayoutTable, _nodesTable;
Gtk::HBox _anchorBox;
Gtk::VBox _alignBox;
Gtk::Label _anchorLabel;