From be0e34af047138582978b032a7dd57c136421b18 Mon Sep 17 00:00:00 2001 From: cilix42 Date: Tue, 29 Jul 2008 18:00:46 +0000 Subject: [PATCH] New registered widget (text entry box). --- src/ui/widget/Makefile_insert | 2 + src/ui/widget/registered-widget.cpp | 44 +++++++++++++++ src/ui/widget/registered-widget.h | 16 ++++++ src/ui/widget/text.cpp | 86 +++++++++++++++++++++++++++++ src/ui/widget/text.h | 62 +++++++++++++++++++++ 5 files changed, 210 insertions(+) create mode 100644 src/ui/widget/text.cpp create mode 100644 src/ui/widget/text.h diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert index ef68f6114..a1af8a161 100644 --- a/src/ui/widget/Makefile_insert +++ b/src/ui/widget/Makefile_insert @@ -77,6 +77,8 @@ ui_widget_libuiwidget_a_SOURCES = \ ui/widget/style-swatch.cpp \ ui/widget/svg-canvas.cpp \ ui/widget/svg-canvas.h \ + ui/widget/text.cpp \ + ui/widget/text.h \ ui/widget/tolerance-slider.cpp \ ui/widget/tolerance-slider.h \ ui/widget/toolbox.cpp \ diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp index 6367ce218..b91e5d998 100644 --- a/src/ui/widget/registered-widget.cpp +++ b/src/ui/widget/registered-widget.cpp @@ -233,6 +233,50 @@ RegisteredScalar::on_value_changed() } +/*######################################### + * Registered TEXT + */ + +RegisteredText::~RegisteredText() +{ + _activate_connection.disconnect(); +} + +RegisteredText::RegisteredText ( const Glib::ustring& label, const Glib::ustring& tip, + const Glib::ustring& key, Registry& wr, Inkscape::XML::Node* repr_in, + SPDocument * doc_in ) + : RegisteredWidget(label, tip) +{ + init_parent(key, wr, repr_in, doc_in); + + setText(""); + _activate_connection = signal_activate().connect (sigc::mem_fun (*this, &RegisteredText::on_activate)); +} + +void +RegisteredText::on_activate() +{ + if (setProgrammatically) { + setProgrammatically = false; + return; + } + + if (_wr->isUpdating()) { + return; + } + _wr->setUpdating (true); + + Inkscape::SVGOStringStream os; + os << getText(); + + set_sensitive(false); + write_to_xml(os.str().c_str()); + set_sensitive(true); + + _wr->setUpdating (false); +} + + /*######################################### * Registered COLORPICKER */ diff --git a/src/ui/widget/registered-widget.h b/src/ui/widget/registered-widget.h index 67c7cfef6..a5c61f68a 100644 --- a/src/ui/widget/registered-widget.h +++ b/src/ui/widget/registered-widget.h @@ -24,6 +24,7 @@ #include "ui/widget/scalar.h" #include "ui/widget/scalar-unit.h" #include "ui/widget/point.h" +#include "ui/widget/text.h" #include "ui/widget/random.h" #include "ui/widget/unit-menu.h" #include "ui/widget/color-picker.h" @@ -210,6 +211,21 @@ protected: void on_value_changed(); }; +class RegisteredText : public RegisteredWidget { +public: + virtual ~RegisteredText(); + RegisteredText (const Glib::ustring& label, + const Glib::ustring& tip, + const Glib::ustring& key, + Registry& wr, + Inkscape::XML::Node* repr_in = NULL, + SPDocument *doc_in = NULL ); + +protected: + sigc::connection _activate_connection; + void on_activate(); +}; + class RegisteredColorPicker : public RegisteredWidget { public: virtual ~RegisteredColorPicker(); diff --git a/src/ui/widget/text.cpp b/src/ui/widget/text.cpp new file mode 100644 index 000000000..974e85054 --- /dev/null +++ b/src/ui/widget/text.cpp @@ -0,0 +1,86 @@ +/** + * \brief Text Widget - A labelled text box, with spin buttons and optional + * icon or suffix, for entering arbitrary number values. + * + * Authors: + * Carl Hetherington + * Maximilian Albert + * + * Copyright (C) 2004 Carl Hetherington + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + + +#include "text.h" + +namespace Inkscape { +namespace UI { +namespace Widget { + +/** + * Construct a Text Widget. + * + * \param label Label. + * \param suffix Suffix, placed after the widget (defaults to ""). + * \param icon Icon filename, placed before the label (defaults to ""). + * \param mnemonic Mnemonic toggle; if true, an underscore (_) in the label + * indicates the next character should be used for the + * mnemonic accelerator key (defaults to false). + */ +Text::Text(Glib::ustring const &label, Glib::ustring const &tooltip, + Glib::ustring const &suffix, + Glib::ustring const &icon, + bool mnemonic) + : Labelled(label, tooltip, new Gtk::Entry(), suffix, icon, mnemonic), + setProgrammatically(false) +{ + //static_cast(_widget)->set_numeric(); +} + +/** Get the text in the entry */ +const char * +Text::getText() const +{ + g_assert(_widget != NULL); + //return g_strdup_printf("%f", static_cast(_widget)->get_value()); + return static_cast(_widget)->get_text().c_str(); +} + +/** Sets the text of the text entry */ +void +Text::setText(char* text) +{ + g_assert(_widget != NULL); + setProgrammatically = true; // callback is supposed to reset back, if it cares + //static_cast(_widget)->set_value(42.43); // FIXME: set correctly + static_cast(_widget)->set_text(text); // FIXME: set correctly +} + +/** Signal raised when the spin button's value changes */ +Glib::SignalProxy0 +Text::signal_activate() +{ + //return static_cast(_widget)->signal_value_changed(); + return static_cast(_widget)->signal_activate(); +} + + +} // namespace Widget +} // namespace UI +} // namespace Inkscape + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : diff --git a/src/ui/widget/text.h b/src/ui/widget/text.h new file mode 100644 index 000000000..a1ec03355 --- /dev/null +++ b/src/ui/widget/text.h @@ -0,0 +1,62 @@ +/** + * \brief Text Widget - A labelled text box, with optional icon or + * suffix, for entering arbitrary number values. + * + * Authors: + * Carl Hetherington + * Maximilian Albert + * + * Copyright (C) 2004 Carl Hetherington + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_UI_WIDGET_TEXT_H +#define INKSCAPE_UI_WIDGET_TEXT_H + +#include +#include + +#include "labelled.h" + +namespace Inkscape { +namespace UI { +namespace Widget { + +class Text : public Labelled +{ +public: + Text(Glib::ustring const &label, + Glib::ustring const &tooltip, + Glib::ustring const &suffix = "", + Glib::ustring const &icon = "", + bool mnemonic = true); + + const char* getText() const; + + void setText(char* text); + + void update(); + + Glib::SignalProxy0 signal_activate(); + + bool setProgrammatically; // true if the value was set by setValue, not changed by the user; + // if a callback checks it, it must reset it back to false +}; + +} // namespace Widget +} // namespace UI +} // namespace Inkscape + +#endif // INKSCAPE_UI_WIDGET_TEXT_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : -- 2.30.2