summaryrefslogtreecommitdiffstats
path: root/src/ui
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
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')
-rw-r--r--src/ui/widget/registered-enums.h2
-rw-r--r--src/ui/widget/registered-widget.cpp78
-rw-r--r--src/ui/widget/registered-widget.h96
3 files changed, 115 insertions, 61 deletions
diff --git a/src/ui/widget/registered-enums.h b/src/ui/widget/registered-enums.h
index 0a17aeca3..e3c72e821 100644
--- a/src/ui/widget/registered-enums.h
+++ b/src/ui/widget/registered-enums.h
@@ -19,7 +19,7 @@ namespace Inkscape {
namespace UI {
namespace Widget {
-template<typename E> class RegisteredEnum : public RegisteredWidget
+template<typename E> class RegisteredEnum : public RegisteredWdg
{
public:
RegisteredEnum() {
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
diff --git a/src/ui/widget/registered-widget.h b/src/ui/widget/registered-widget.h
index 90fb44983..1a5501427 100644
--- a/src/ui/widget/registered-widget.h
+++ b/src/ui/widget/registered-widget.h
@@ -19,6 +19,8 @@
#include "xml/node.h"
#include "registry.h"
+#include "ui/widget/random.h"
+
class SPUnit;
class SPDocument;
@@ -39,9 +41,60 @@ class Scalar;
class ScalarUnit;
class UnitMenu;
class Point;
-class Random;
-class RegisteredWidget {
+template <class W>
+class RegisteredWidget : public W {
+public:
+ void set_undo_parameters(const unsigned int _event_type, Glib::ustring _event_description)
+ {
+ event_type = _event_type;
+ event_description = _event_description;
+ write_undo = true;
+ }
+
+ bool is_updating() {if (_wr) return _wr->isUpdating(); else return false;}
+
+protected:
+ RegisteredWidget() : W() { construct(); }
+ template< typename A >
+ explicit RegisteredWidget( A& a ): W( a ) { construct(); }
+ template< typename A, typename B >
+ RegisteredWidget( A& a, B& b ): W( a, b ) { construct(); }
+ template< typename A, typename B, typename C >
+ RegisteredWidget( A& a, B& b, C& c ): W( a, b, c ) { construct(); }
+
+ virtual ~RegisteredWidget() {};
+
+ void init_parent(const Glib::ustring& key, Registry& wr, Inkscape::XML::Node* repr_in, SPDocument *doc_in)
+ {
+ _wr = &wr;
+ _key = key;
+ repr = repr_in;
+ doc = doc_in;
+ if (repr && !doc) // doc cannot be NULL when repr is not NULL
+ g_warning("Initialization of registered widget using defined repr but with doc==NULL");
+ }
+
+ void write_to_xml(const char * svgstr);
+
+ Registry * _wr;
+ Glib::ustring _key;
+ Inkscape::XML::Node * repr;
+ SPDocument * doc;
+ unsigned int event_type;
+ Glib::ustring event_description;
+ bool write_undo;
+
+private:
+ void construct() {
+ _wr = NULL;
+ repr = NULL;
+ doc = NULL;
+ write_undo = false;
+ }
+};
+
+class RegisteredWdg {
public:
void set_undo_parameters(const unsigned int _event_type, Glib::ustring _event_description)
{
@@ -53,7 +106,7 @@ public:
bool is_updating() {if (_wr) return _wr->isUpdating(); else return false;}
protected:
- RegisteredWidget()
+ RegisteredWdg()
{
_wr = NULL;
repr = NULL;
@@ -84,7 +137,7 @@ protected:
//#######################################################
-class RegisteredCheckButton : public RegisteredWidget {
+class RegisteredCheckButton : public RegisteredWdg {
public:
RegisteredCheckButton();
~RegisteredCheckButton();
@@ -111,7 +164,7 @@ protected:
void on_toggled();
};
-class RegisteredUnitMenu : public RegisteredWidget {
+class RegisteredUnitMenu : public RegisteredWdg {
public:
RegisteredUnitMenu();
~RegisteredUnitMenu();
@@ -134,7 +187,7 @@ protected:
void on_changed();
};
-class RegisteredScalarUnit : public RegisteredWidget {
+class RegisteredScalarUnit : public RegisteredWdg {
public:
RegisteredScalarUnit();
~RegisteredScalarUnit();
@@ -162,7 +215,7 @@ protected:
void on_value_changed();
};
-class RegisteredScalar : public RegisteredWidget {
+class RegisteredScalar : public RegisteredWdg {
public:
RegisteredScalar();
~RegisteredScalar();
@@ -187,7 +240,7 @@ protected:
void on_value_changed();
};
-class RegisteredColorPicker : public RegisteredWidget {
+class RegisteredColorPicker : public RegisteredWdg {
public:
RegisteredColorPicker();
~RegisteredColorPicker();
@@ -219,7 +272,7 @@ protected:
sigc::connection _changed_connection;
};
-class RegisteredSuffixedInteger : public RegisteredWidget {
+class RegisteredSuffixedInteger : public RegisteredWdg {
public:
RegisteredSuffixedInteger();
~RegisteredSuffixedInteger();
@@ -249,7 +302,7 @@ protected:
void on_value_changed();
};
-class RegisteredRadioButtonPair : public RegisteredWidget {
+class RegisteredRadioButtonPair : public RegisteredWdg {
public:
RegisteredRadioButtonPair();
~RegisteredRadioButtonPair();
@@ -283,7 +336,7 @@ protected:
void on_value_changed();
};
-class RegisteredPoint : public RegisteredWidget {
+class RegisteredPoint : public RegisteredWdg {
public:
RegisteredPoint();
~RegisteredPoint();
@@ -309,27 +362,20 @@ protected:
void on_value_changed();
};
-class RegisteredRandom : public RegisteredWidget {
+
+class RegisteredRandom : public RegisteredWidget<Random> {
public:
- RegisteredRandom();
- ~RegisteredRandom();
- void init (const Glib::ustring& label,
- const Glib::ustring& tip,
- const Glib::ustring& key,
- Registry& wr,
- Inkscape::XML::Node* repr_in,
- SPDocument *doc_in);
- inline void init ( const Glib::ustring& label,
+ virtual ~RegisteredRandom();
+ RegisteredRandom ( const Glib::ustring& label,
const Glib::ustring& tip,
const Glib::ustring& key,
- Registry& wr)
- { init(label, tip, key, wr, NULL, NULL); };
+ Registry& wr,
+ Inkscape::XML::Node* repr_in = NULL,
+ SPDocument *doc_in = NULL);
- Random* getR();
void setValue (double val, long startseed);
protected:
- Random *_widget;
sigc::connection _value_changed_connection;
sigc::connection _reseeded_connection;
void on_value_changed();