From 6b958fd1779e1882dbd91f714719cfae08752f67 Mon Sep 17 00:00:00 2001 From: Denis Declara Date: Mon, 26 Mar 2012 17:30:27 +0200 Subject: Added anchor-selection widget, it doesn't do much at the moment, next step will be to wire everything together, btw, you can see the widget in the 'rows and columns' panel (bzr r11073.1.3) --- src/ui/widget/anchor-selector.cpp | 123 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/ui/widget/anchor-selector.cpp (limited to 'src/ui/widget/anchor-selector.cpp') diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp new file mode 100644 index 000000000..f32346436 --- /dev/null +++ b/src/ui/widget/anchor-selector.cpp @@ -0,0 +1,123 @@ +/* + * anchor-selector.cpp + * + * Created on: Mar 22, 2012 + * Author: denis + */ + +#include +#include "widgets/icon.h" +#include "ui/icon-names.h" +#include "ui/widget/anchor-selector.h" + +void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& button) { + Gtk::Widget* buttonIcon = Gtk::manage(sp_icon_get_icon(icon, Inkscape::ICON_SIZE_LARGE_TOOLBAR)); + buttonIcon->show(); + + button.set_relief(Gtk::RELIEF_NONE); + button.show(); + button.add(*buttonIcon); + button.set_can_focus(false); +} + +AnchorSelector::AnchorSelector() + : Gtk::Alignment(0.5, 0, 0, 0), + _container(3, 3, true) +{ + setupButton(INKSCAPE_ICON("boundingbox_top_left"), _buttons[0]); + setupButton(INKSCAPE_ICON("boundingbox_top"), _buttons[1]); + setupButton(INKSCAPE_ICON("boundingbox_top_right"), _buttons[2]); + setupButton(INKSCAPE_ICON("boundingbox_left"), _buttons[3]); + setupButton(INKSCAPE_ICON("boundingbox_center"), _buttons[4]); + setupButton(INKSCAPE_ICON("boundingbox_right"), _buttons[5]); + setupButton(INKSCAPE_ICON("boundingbox_bottom_left"), _buttons[6]); + setupButton(INKSCAPE_ICON("boundingbox_bottom"), _buttons[7]); + setupButton(INKSCAPE_ICON("boundingbox_bottom_right"), _buttons[8]); + + _buttons[0].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_tl_activated)); + _buttons[1].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_t_activated)); + _buttons[2].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_tr_activated)); + _buttons[3].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_l_activated)); + _buttons[4].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_c_activated)); + _buttons[5].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_r_activated)); + _buttons[6].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_bl_activated)); + _buttons[7].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_b_activated)); + _buttons[8].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_br_activated)); + + for(int i = 0; i < 9; ++i) { + _container.attach(_buttons[i], i % 3, i % 3+1, i / 3, i / 3+1, Gtk::FILL, Gtk::FILL); + } + _selection = 4; + _buttons[4].set_active(); + + this->add(_container); +} + +AnchorSelector::~AnchorSelector() +{ + // TODO Auto-generated destructor stub +} + +void AnchorSelector::btn_activated(int index) +{ + if(_buttons[index].get_active()) + { + std::cout << "btn_activated(" << index << ", old=" << _selection << ");" << std::endl; + if(index != _selection) + { + _buttons[_selection].set_active(false); + _buttons[index].set_active(); + _selection = index; + } else { + _buttons[index].set_active(); + } + } +} + +void AnchorSelector::btn_tl_activated() +{ + btn_activated(0); +} + +void AnchorSelector::btn_t_activated() +{ + btn_activated(1); +} + +void AnchorSelector::btn_tr_activated() +{ + btn_activated(2); +} + +void AnchorSelector::btn_l_activated() +{ + btn_activated(3); +} + +void AnchorSelector::btn_c_activated() +{ + btn_activated(4); +} + +void AnchorSelector::btn_r_activated() +{ + btn_activated(5); +} + +void AnchorSelector::btn_bl_activated() +{ + btn_activated(6); +} + +void AnchorSelector::btn_b_activated() +{ + btn_activated(7); +} + +void AnchorSelector::btn_br_activated() +{ + btn_activated(8); +} + + + -- cgit v1.2.3 From 3f7eff8696693c9b946fe47c2831c8706bffb68d Mon Sep 17 00:00:00 2001 From: Denis Declara Date: Wed, 28 Mar 2012 17:44:47 +0200 Subject: Integrated the newly created Anchor-Selection-Widget with the existing "Rows and Columns" panel. Code still needs documentation and cleenup however. (bzr r11073.1.5) --- src/ui/widget/anchor-selector.cpp | 82 +++++++-------------------------------- 1 file changed, 14 insertions(+), 68 deletions(-) (limited to 'src/ui/widget/anchor-selector.cpp') diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index f32346436..aa173e0a0 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -3,6 +3,8 @@ * * Created on: Mar 22, 2012 * Author: denis + * + * Released under GNU GPL. Read the file 'COPYING' for more information. */ #include @@ -34,17 +36,9 @@ AnchorSelector::AnchorSelector() setupButton(INKSCAPE_ICON("boundingbox_bottom"), _buttons[7]); setupButton(INKSCAPE_ICON("boundingbox_bottom_right"), _buttons[8]); - _buttons[0].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_tl_activated)); - _buttons[1].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_t_activated)); - _buttons[2].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_tr_activated)); - _buttons[3].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_l_activated)); - _buttons[4].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_c_activated)); - _buttons[5].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_r_activated)); - _buttons[6].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_bl_activated)); - _buttons[7].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_b_activated)); - _buttons[8].signal_clicked().connect(sigc::mem_fun(*this, &AnchorSelector::btn_br_activated)); - for(int i = 0; i < 9; ++i) { + _buttons[i].signal_clicked().connect( + sigc::bind(sigc::mem_fun(*this, &AnchorSelector::btn_activated), i)); _container.attach(_buttons[i], i % 3, i % 3+1, i / 3, i / 3+1, Gtk::FILL, Gtk::FILL); } _selection = 4; @@ -60,64 +54,16 @@ AnchorSelector::~AnchorSelector() void AnchorSelector::btn_activated(int index) { - if(_buttons[index].get_active()) + + if(_selection == index && _buttons[index].get_active() == false) { - std::cout << "btn_activated(" << index << ", old=" << _selection << ");" << std::endl; - if(index != _selection) - { - _buttons[_selection].set_active(false); - _buttons[index].set_active(); - _selection = index; - } else { - _buttons[index].set_active(); - } + _buttons[index].set_active(true); + } + else if(_selection != index && _buttons[index].get_active()) + { + int old_selection = _selection; + _selection = index; + _buttons[old_selection].set_active(false); + _selectionChanged.emit(); } } - -void AnchorSelector::btn_tl_activated() -{ - btn_activated(0); -} - -void AnchorSelector::btn_t_activated() -{ - btn_activated(1); -} - -void AnchorSelector::btn_tr_activated() -{ - btn_activated(2); -} - -void AnchorSelector::btn_l_activated() -{ - btn_activated(3); -} - -void AnchorSelector::btn_c_activated() -{ - btn_activated(4); -} - -void AnchorSelector::btn_r_activated() -{ - btn_activated(5); -} - -void AnchorSelector::btn_bl_activated() -{ - btn_activated(6); -} - -void AnchorSelector::btn_b_activated() -{ - btn_activated(7); -} - -void AnchorSelector::btn_br_activated() -{ - btn_activated(8); -} - - - -- cgit v1.2.3 From 13a67ac44b1120308c2fc607715ddf0cf3d516e9 Mon Sep 17 00:00:00 2001 From: Denis Declara Date: Mon, 2 Apr 2012 12:08:22 +0200 Subject: Anchor widget now reads the last alignment from the settings. Anchor selection widget is also smaller now. (bzr r11073.1.10) --- src/ui/widget/anchor-selector.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/ui/widget/anchor-selector.cpp') diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index aa173e0a0..49387fc34 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -13,7 +13,7 @@ #include "ui/widget/anchor-selector.h" void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& button) { - Gtk::Widget* buttonIcon = Gtk::manage(sp_icon_get_icon(icon, Inkscape::ICON_SIZE_LARGE_TOOLBAR)); + Gtk::Widget* buttonIcon = Gtk::manage(sp_icon_get_icon(icon, Inkscape::ICON_SIZE_SMALL_TOOLBAR)); buttonIcon->show(); button.set_relief(Gtk::RELIEF_NONE); @@ -67,3 +67,12 @@ void AnchorSelector::btn_activated(int index) _selectionChanged.emit(); } } + +void AnchorSelector::setAlignment(int horizontal, int vertical) +{ + int index = 3 * vertical + horizontal; + if(index >= 0 && index < 9) + { + _buttons[index].set_active(!_buttons[index].get_active()); + } +} -- cgit v1.2.3 From 88a55277617ed0a8ded158fb212669e45f19ff1c Mon Sep 17 00:00:00 2001 From: Denis Declara Date: Mon, 16 Apr 2012 15:27:44 +0200 Subject: Edited include order (putting gtkmm in first place) in the hope that it will fix the compilation issues on launchpad. (bzr r11073.1.17) --- src/ui/widget/anchor-selector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/ui/widget/anchor-selector.cpp') diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index 49387fc34..87f50cf5f 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -7,10 +7,10 @@ * Released under GNU GPL. Read the file 'COPYING' for more information. */ +#include "ui/widget/anchor-selector.h" #include #include "widgets/icon.h" #include "ui/icon-names.h" -#include "ui/widget/anchor-selector.h" void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& button) { Gtk::Widget* buttonIcon = Gtk::manage(sp_icon_get_icon(icon, Inkscape::ICON_SIZE_SMALL_TOOLBAR)); -- cgit v1.2.3 From 2b693f8037ad4b25b368376274811f20f5864c1b Mon Sep 17 00:00:00 2001 From: Denis Declara Date: Wed, 9 May 2012 17:03:55 +0200 Subject: Renamed files to better match coding conventions (bzr r11073.1.31) --- src/ui/widget/anchor-selector.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/ui/widget/anchor-selector.cpp') diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index 87f50cf5f..82e27ee89 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -12,6 +12,10 @@ #include "widgets/icon.h" #include "ui/icon-names.h" +namespace Inkscape { +namespace UI { +namespace Widget { + void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& button) { Gtk::Widget* buttonIcon = Gtk::manage(sp_icon_get_icon(icon, Inkscape::ICON_SIZE_SMALL_TOOLBAR)); buttonIcon->show(); @@ -76,3 +80,18 @@ void AnchorSelector::setAlignment(int horizontal, int vertical) _buttons[index].set_active(!_buttons[index].get_active()); } } + +} // namespace Widget +} // namespace UI +} // namespace Inkscape + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : -- cgit v1.2.3