summaryrefslogtreecommitdiffstats
path: root/src/ui/widget/registered-widget.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-01-15 16:33:29 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-01-15 16:33:29 +0000
commitecb158a9d53ee78c83dc61c8cfb79e27ecec5958 (patch)
tree6aab72d928aa91f24a208a64f3df0be611c39e5d /src/ui/widget/registered-widget.cpp
parentprepare LPE parameter widgets to be owned by multiple dialogs, as it should be. (diff)
downloadinkscape-ecb158a9d53ee78c83dc61c8cfb79e27ecec5958.tar.gz
inkscape-ecb158a9d53ee78c83dc61c8cfb79e27ecec5958.zip
RegisteredWidget has been renamed to RegisteredWdg. This is a deprecated class, all that use it should be recoded and RegisteredWdg should be deleted as soon as possible.
The *new* RegisteredWidget is a template class and should be subclassed (eventually) from Gtk::Widget, for example RegisteredWidget<Scalar> will be subclassed from Scalar, which is subclassed from Labelled, => Gtk::HBox => Gtk::Widget. This way, a RegisteredWidget<T> can be directly used as Gtk::Widget, and gtk::manage works, etc! This all should solve the problem of having multiple widgets for the same parameters. (bzr r4496)
Diffstat (limited to 'src/ui/widget/registered-widget.cpp')
-rw-r--r--src/ui/widget/registered-widget.cpp78
1 files changed, 43 insertions, 35 deletions
diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp
index 1364e5a2a..a54c89292 100644
--- a/src/ui/widget/registered-widget.cpp
+++ b/src/ui/widget/registered-widget.cpp
@@ -18,6 +18,7 @@
# include <config.h>
#endif
+#include "registered-widget.h"
#include "ui/widget/color-picker.h"
#include "ui/widget/registry.h"
@@ -36,7 +37,6 @@
#include "desktop-handles.h"
#include "sp-namedview.h"
-#include "registered-widget.h"
#include "verbs.h"
// for interruptability bug:
@@ -51,8 +51,35 @@ namespace Widget {
//---------------------------------------------------
+
+template<class W>
+void RegisteredWidget<W>::write_to_xml(const char * svgstr)
+{
+ // Use local repr here. When repr is specified, use that one, but
+ // if repr==NULL, get the repr of namedview of active desktop.
+ Inkscape::XML::Node *local_repr = repr;
+ SPDocument *local_doc = doc;
+ if (!local_repr) {
+ // no repr specified, use active desktop's namedview's repr
+ SPDesktop* dt = SP_ACTIVE_DESKTOP;
+ local_repr = SP_OBJECT_REPR (sp_desktop_namedview(dt));
+ local_doc = sp_desktop_document(dt);
+ }
+
+ bool saved = sp_document_get_undo_sensitive (local_doc);
+ sp_document_set_undo_sensitive (local_doc, false);
+ if (!write_undo) local_repr->setAttribute(_key.c_str(), svgstr);
+ sp_document_set_undo_sensitive (local_doc, saved);
+
+ local_doc->setModifiedSinceSave();
+ if (write_undo) {
+ local_repr->setAttribute(_key.c_str(), svgstr);
+ sp_document_done (local_doc, event_type, event_description);
+ }
+}
+
void
-RegisteredWidget::write_to_xml(const char * svgstr)
+RegisteredWdg::write_to_xml(const char * svgstr)
{
// Use local repr here. When repr is specified, use that one, but
// if repr==NULL, get the repr of namedview of active desktop.
@@ -586,56 +613,38 @@ RegisteredPoint::on_value_changed()
* Registered RANDOM
*/
-RegisteredRandom::RegisteredRandom()
-{
- _widget = NULL;
-}
-
RegisteredRandom::~RegisteredRandom()
{
- if (_widget)
- delete _widget;
-
_value_changed_connection.disconnect();
_reseeded_connection.disconnect();
}
-void
-RegisteredRandom::init ( const Glib::ustring& label, const Glib::ustring& tip,
+RegisteredRandom::RegisteredRandom ( const Glib::ustring& label, const Glib::ustring& tip,
const Glib::ustring& key, Registry& wr, Inkscape::XML::Node* repr_in,
SPDocument * doc_in )
+ : RegisteredWidget<Random> (label, tip)
{
init_parent(key, wr, repr_in, doc_in);
- _widget = new Random (label, tip);
- _widget->setRange (-1e6, 1e6);
- _widget->setDigits (2);
- _widget->setIncrements(0.1, 1.0);
- _value_changed_connection = _widget->signal_value_changed().connect (sigc::mem_fun (*this, &RegisteredRandom::on_value_changed));
- _reseeded_connection = _widget->signal_reseeded.connect(sigc::mem_fun(*this, &RegisteredRandom::on_value_changed));
-}
-
-Random*
-RegisteredRandom::getR()
-{
- return _widget;
+ setRange (-1e6, 1e6);
+ setDigits (2);
+ setIncrements(0.1, 1.0);
+ _value_changed_connection = signal_value_changed().connect (sigc::mem_fun (*this, &RegisteredRandom::on_value_changed));
+ _reseeded_connection = signal_reseeded.connect(sigc::mem_fun(*this, &RegisteredRandom::on_value_changed));
}
void
RegisteredRandom::setValue (double val, long startseed)
{
- if (!_widget)
- return;
-
- _widget->setValue (val);
- _widget->setStartSeed(startseed);
+ static_cast<Scalar*>(this)->setValue (val);
+ setStartSeed(startseed);
}
void
RegisteredRandom::on_value_changed()
{
- if (_widget->setProgrammatically) {
- _widget->setProgrammatically = false;
+ if (setProgrammatically) {
+ setProgrammatically = false;
return;
}
@@ -645,16 +654,15 @@ RegisteredRandom::on_value_changed()
_wr->setUpdating (true);
Inkscape::SVGOStringStream os;
- os << _widget->getValue() << ';' << _widget->getStartSeed();
+ os << getValue() << ';' << getStartSeed();
- _widget->set_sensitive(false);
+ set_sensitive(false);
write_to_xml(os.str().c_str());
- _widget->set_sensitive(true);
+ set_sensitive(true);
_wr->setUpdating (false);
}
-
} // namespace Dialog
} // namespace UI
} // namespace Inkscape