index eda540a9d56d789cf72b115cea19b014a5db1fa7..70f66c41660c37995e4dc63f1b332797f5358ab0 100644 (file)
*/
/*
- * Authors:
+ * Author:
* Ted Gould <ted@gould.cx>
*
- * Copyright (C) 2005-2006 Authors
+ * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
+ * Copyright (C) 2005-2006 Author
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include "sp-object.h"
#include "parameter.h"
+#include "paramnotebook.h"
+#include "paramenum.h"
/** \brief The root directory in the preferences database for extension
related parameters. */
namespace Inkscape {
namespace Extension {
+/** \brief A description parameter */
+class ParamDescription : public Parameter {
+private:
+ /** \brief Internal value. */
+ gchar * _value;
+public:
+ ParamDescription(const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml);
+ Gtk::Widget * get_widget(SPDocument * doc, Inkscape::XML::Node * node);
+};
+
/** \brief A boolean parameter */
class ParamBool : public Parameter {
private:
Glib::ustring * string (void);
};
+class ParamEnum : public Parameter {
+private:
+ class Choice {
+ public:
+ gchar * _gui_name;
+ gchar * _value;
+ Choice(gchar * gui_name, gchar * value) : _gui_name(NULL), _value(NULL) {
+ if (gui_name != NULL)
+ _gui_name = g_strdup(_(gui_name));
+ if (value != NULL)
+ _value = g_strdup(value);
+ return;
+ };
+ ~Choice (void) {
+ g_free(_gui_name);
+ g_free(_value);
+ };
+ }; /* class Choice */
+ /** \brief Internal value. This should point to a string that has
+ been allocated in memory. And should be free'd. */
+ Choice * _current_choice;
+ typedef std::list<Choice *> choice_list_t;
+ choice_list_t _choice_list;
+public:
+ ParamEnum(const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml);
+ ~ParamEnum(void);
+ /** \brief Returns \c _value, with a \i const to protect it. */
+ const gchar * get (const SPDocument * doc, const Inkscape::XML::Node * node) { return _current_choice != NULL ? _current_choice->_value : NULL; }
+ const gchar * set (const gchar * in, SPDocument * doc, Inkscape::XML::Node * node);
+ Gtk::Widget * get_widget(SPDocument * doc, Inkscape::XML::Node * node);
+ Glib::ustring * string (void);
+}; /* class ParamEnum */
+
+
/**
\return None
\brief This function creates a parameter that can be used later. This
@@ -263,6 +310,12 @@ Parameter::make (Inkscape::XML::Node * in_repr, Inkscape::Extension::Extension *
param = new ParamFloat(name, guitext, desc, scope, in_ext, in_repr);
} else if (!strcmp(type, "string")) {
param = new ParamString(name, guitext, desc, scope, in_ext, in_repr);
+ } else if (!strcmp(type, "description")) {
+ param = new ParamDescription(name, guitext, desc, scope, in_ext, in_repr);
+ } else if (!strcmp(type, "enum")) {
+ param = new ParamComboBox(name, guitext, desc, scope, in_ext, in_repr);
+ } else if (!strcmp(type, "notebook")) {
+ param = new ParamNotebook(name, guitext, desc, scope, in_ext, in_repr);
}
/* Note: param could equal NULL */
Gtk::Widget *
ParamFloat::get_widget (SPDocument * doc, Inkscape::XML::Node * node)
{
- Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox());
+ Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_LEFT));
label->show();
Gtk::Widget *
ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node)
{
- Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox());
+ Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_LEFT));
label->show();
Gtk::Widget *
ParamBool::get_widget (SPDocument * doc, Inkscape::XML::Node * node)
{
- Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox());
+ Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_LEFT));
label->show();
Gtk::Widget *
ParamString::get_widget (SPDocument * doc, Inkscape::XML::Node * node)
{
- Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox());
+ Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_LEFT));
label->show();
- hbox->pack_start(*label, true, true);
+ hbox->pack_start(*label, false, false);
ParamStringEntry * textbox = new ParamStringEntry(this, doc, node);
textbox->show();
- hbox->pack_start(*textbox, false, false);
+ hbox->pack_start(*textbox, true, true);
hbox->show();
return mystring;
}
+/** \brief Create a label for the description */
+Gtk::Widget *
+ParamDescription::get_widget (SPDocument * doc, Inkscape::XML::Node * node)
+{
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_value)));
+ label->set_line_wrap();
+ label->show();
+
+ Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
+ hbox->pack_start(*label, true, true, 5);
+ hbox->show();
+
+ return hbox;
+}
+
+/** \brief Initialize the object, to do that, copy the data. */
+ParamDescription::ParamDescription (const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml) :
+ Parameter(name, guitext, desc, scope, ext), _value(NULL)
+{
+ // printf("Building Description\n");
+ const char * defaultval = NULL;
+ if (sp_repr_children(xml) != NULL)
+ defaultval = sp_repr_children(xml)->content();
+
+ if (defaultval != NULL)
+ _value = g_strdup(defaultval);
+
+ return;
+}
+
+ParamEnum::ParamEnum (const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, Inkscape::Extension::Extension * ext, Inkscape::XML::Node * xml) :
+ Parameter(name, guitext, desc, scope, ext), _current_choice(NULL)
+{
+ return;
+}
+
+ParamEnum::~ParamEnum (void)
+{
+
+}
+
+/** \brief Return the value as a string */
+Glib::ustring *
+ParamEnum::string (void)
+{
+ Glib::ustring * mystring = new Glib::ustring("");
+ *mystring += "\"";
+ *mystring += this->get(NULL, NULL);
+ *mystring += "\"";
+ return mystring;
+}
+
+Gtk::Widget *
+ParamEnum::get_widget (SPDocument * doc, Inkscape::XML::Node * node)
+{
+ return NULL;
+}
+
+const gchar *
+ParamEnum::set (const gchar * in, SPDocument * doc, Inkscape::XML::Node * node)
+{
+ return NULL;
+}
+
} /* namespace Extension */
} /* namespace Inkscape */