summaryrefslogtreecommitdiffstats
path: root/src/extension/parameter.cpp
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2008-04-04 04:55:24 +0000
committergouldtj <gouldtj@users.sourceforge.net>2008-04-04 04:55:24 +0000
commit8a2ba4f29d0304fef7631e0efec8b10a2dc99121 (patch)
tree0eb2b0987084a55191da506c6c7e870bbe2d903d /src/extension/parameter.cpp
parent* packaging/macosx/ScriptExec/main.c: Add a comment to clarify what looks (diff)
downloadinkscape-8a2ba4f29d0304fef7631e0efec8b10a2dc99121.tar.gz
inkscape-8a2ba4f29d0304fef7631e0efec8b10a2dc99121.zip
r18381@shi: ted | 2008-03-07 20:11:34 -0800
New work branch r18391@shi: ted | 2008-03-08 21:36:03 -0800 Moving the parameters around to clean up the directories. r18392@shi: ted | 2008-03-08 21:57:14 -0800 Moving the 'get' function to cpp r18870@shi: ted | 2008-04-03 21:10:20 -0700 Adding in to the parameter prototype the ability to have a gui-tip and a gui-hidden parameter r18871@shi: ted | 2008-04-03 21:17:39 -0700 Using the _gui-hidden parameter to block the creation of the widget if set. r18890@shi: ted | 2008-04-03 21:53:55 -0700 Merge from r18024 which got lost in the shuffle. (bzr r5322)
Diffstat (limited to 'src/extension/parameter.cpp')
-rw-r--r--src/extension/parameter.cpp440
1 files changed, 0 insertions, 440 deletions
diff --git a/src/extension/parameter.cpp b/src/extension/parameter.cpp
deleted file mode 100644
index dd80cf59c..000000000
--- a/src/extension/parameter.cpp
+++ /dev/null
@@ -1,440 +0,0 @@
-/** \file
- * Parameters for extensions.
- */
-
-/*
- * Author:
- * Ted Gould <ted@gould.cx>
- * Johan Engelen <johan@shouraizou.nl>
- *
- * Copyright (C) 2005-2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifdef linux // does the dollar sign need escaping when passed as string parameter?
-# define ESCAPE_DOLLAR_COMMANDLINE
-#endif
-
-#include <gtkmm/adjustment.h>
-#include <gtkmm/box.h>
-#include <gtkmm/spinbutton.h>
-
-#include <xml/node.h>
-
-#include "extension.h"
-#include "document-private.h"
-#include "sp-object.h"
-#include "color.h"
-#include "widgets/sp-color-selector.h"
-#include "widgets/sp-color-notebook.h"
-
-#include "parameter.h"
-#include "parambool.h"
-#include "paramcolor.h"
-#include "paramdescription.h"
-#include "paramenum.h"
-#include "paramfloat.h"
-#include "paramint.h"
-#include "paramnotebook.h"
-#include "paramradiobutton.h"
-#include "paramstring.h"
-
-namespace Inkscape {
-namespace Extension {
-
-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, sigc::signal<void> * changeSignal);
- Glib::ustring * string (void);
-}; /* class ParamEnum */
-
-/**
- \return None
- \brief This function creates a parameter that can be used later. This
- is typically done in the creation of the extension and defined
- in the XML file describing the extension (it's private so people
- have to use the system) :)
- \param in_repr The XML describing the parameter
-
- This function first grabs all of the data out of the Repr and puts
- it into local variables. Actually, these are just pointers, and the
- data is not duplicated so we need to be careful with it. If there
- isn't a name or a type in the XML, then no parameter is created as
- the function just returns.
-
- From this point on, we're pretty committed as we've allocated an
- object and we're starting to fill it. The name is set first, and
- is created with a strdup to actually allocate memory for it. Then
- there is a case statement (roughly because strcmp requires 'ifs')
- based on what type of parameter this is. Depending which type it
- is, the value is interpreted differently, but they are relatively
- straight forward. In all cases the value is set to the default
- value from the XML and the type is set to the interpreted type.
-*/
-Parameter *
-Parameter::make (Inkscape::XML::Node * in_repr, Inkscape::Extension::Extension * in_ext)
-{
- const char * name;
- const char * type;
- const char * guitext;
- const char * desc;
- const char * scope_str;
- Parameter::_scope_t scope = Parameter::SCOPE_USER;
-
- name = in_repr->attribute("name");
- type = in_repr->attribute("type");
- guitext = in_repr->attribute("gui-text");
- if (guitext == NULL)
- guitext = in_repr->attribute("_gui-text");
- desc = in_repr->attribute("gui-description");
- if (desc == NULL)
- desc = in_repr->attribute("_gui-description");
- scope_str = in_repr->attribute("scope");
-
- /* In this case we just don't have enough information */
- if (name == NULL || type == NULL) {
- return NULL;
- }
-
- if (scope_str != NULL) {
- if (!strcmp(scope_str, "user")) {
- scope = Parameter::SCOPE_USER;
- } else if (!strcmp(scope_str, "document")) {
- scope = Parameter::SCOPE_DOCUMENT;
- } else if (!strcmp(scope_str, "node")) {
- scope = Parameter::SCOPE_NODE;
- }
- }
-
- Parameter * param = NULL;
- if (!strcmp(type, "boolean")) {
- param = new ParamBool(name, guitext, desc, scope, in_ext, in_repr);
- } else if (!strcmp(type, "int")) {
- param = new ParamInt(name, guitext, desc, scope, in_ext, in_repr);
- } else if (!strcmp(type, "float")) {
- 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);
- } else if (!strcmp(type, "optiongroup")) {
- param = new ParamRadioButton(name, guitext, desc, scope, in_ext, in_repr);
- } else if (!strcmp(type, "color")) {
- param = new ParamColor(name, guitext, desc, scope, in_ext, in_repr);
- }
-
- /* Note: param could equal NULL */
- return param;
-}
-
-
-
-/** \brief Wrapper to cast to the object and use it's function. */
-bool
-Parameter::get_bool (const SPDocument * doc, const Inkscape::XML::Node * node)
-{
- ParamBool * boolpntr = dynamic_cast<ParamBool *>(this);
- if (boolpntr == NULL)
- throw Extension::param_not_bool_param();
- return boolpntr->get(doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-int
-Parameter::get_int (const SPDocument * doc, const Inkscape::XML::Node * node)
-{
- ParamInt * intpntr = dynamic_cast<ParamInt *>(this);
- if (intpntr == NULL)
- throw Extension::param_not_int_param();
- return intpntr->get(doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-float
-Parameter::get_float (const SPDocument * doc, const Inkscape::XML::Node * node)
-{
- ParamFloat * floatpntr = dynamic_cast<ParamFloat *>(this);
- if (floatpntr == NULL)
- throw Extension::param_not_float_param();
- return floatpntr->get(doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-const gchar *
-Parameter::get_string (const SPDocument * doc, const Inkscape::XML::Node * node)
-{
- ParamString * stringpntr = dynamic_cast<ParamString *>(this);
- if (stringpntr == NULL)
- throw Extension::param_not_string_param();
- return stringpntr->get(doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-const gchar *
-Parameter::get_enum (const SPDocument * doc, const Inkscape::XML::Node * node)
-{
- ParamComboBox * param = dynamic_cast<ParamComboBox *>(this);
- if (param == NULL)
- throw Extension::param_not_enum_param();
- return param->get(doc, node);
-}
-
-guint32
-Parameter::get_color(const SPDocument* doc, const Inkscape::XML::Node* node)
-{
- ParamColor* param = dynamic_cast<ParamColor *>(this);
- if (param == NULL)
- throw Extension::param_not_color_param();
- return param->get(doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-bool
-Parameter::set_bool (bool in, SPDocument * doc, Inkscape::XML::Node * node)
-{
- ParamBool * boolpntr = dynamic_cast<ParamBool *>(this);
- if (boolpntr == NULL)
- throw Extension::param_not_bool_param();
- return boolpntr->set(in, doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-int
-Parameter::set_int (int in, SPDocument * doc, Inkscape::XML::Node * node)
-{
- ParamInt * intpntr = dynamic_cast<ParamInt *>(this);
- if (intpntr == NULL)
- throw Extension::param_not_int_param();
- return intpntr->set(in, doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-float
-Parameter::set_float (float in, SPDocument * doc, Inkscape::XML::Node * node)
-{
- ParamFloat * floatpntr;
- floatpntr = dynamic_cast<ParamFloat *>(this);
- if (floatpntr == NULL)
- throw Extension::param_not_float_param();
- return floatpntr->set(in, doc, node);
-}
-
-/** \brief Wrapper to cast to the object and use it's function. */
-const gchar *
-Parameter::set_string (const gchar * in, SPDocument * doc, Inkscape::XML::Node * node)
-{
- ParamString * stringpntr = dynamic_cast<ParamString *>(this);
- if (stringpntr == NULL)
- throw Extension::param_not_string_param();
- return stringpntr->set(in, doc, node);
-}
-/** \brief Wrapper to cast to the object and use it's function. */
-guint32
-Parameter::set_color (guint32 in, SPDocument * doc, Inkscape::XML::Node * node)
-{
- ParamColor* param = dynamic_cast<ParamColor *>(this);
- if (param == NULL)
- throw Extension::param_not_color_param();
- return param->set(in, doc, node);
-}
-
-
-/** \brief Oop, now that we need a parameter, we need it's name. */
-Parameter::Parameter (const gchar * name, const gchar * guitext, const gchar * desc, const Parameter::_scope_t scope, Inkscape::Extension::Extension * ext) :
- extension(ext), _name(NULL), _desc(NULL), _scope(scope), _text(NULL)
-{
- if (name != NULL)
- _name = g_strdup(name);
- if (desc != NULL) {
- _desc = g_strdup(desc);
- // printf("Adding description: '%s' on '%s'\n", _desc, _name);
- }
-
-
- if (guitext != NULL)
- _text = g_strdup(guitext);
- else
- _text = g_strdup(name);
-
- return;
-}
-
-/** \brief Just free the allocated name. */
-Parameter::~Parameter (void)
-{
- g_free(_name);
- g_free(_text);
-}
-
-/** \brief Build the name to write the parameter from the extension's
- ID and the name of this parameter. */
-gchar *
-Parameter::pref_name (void)
-{
- return g_strdup_printf("%s.%s", extension->get_id(), _name);
-}
-
-Inkscape::XML::Node *
-Parameter::find_child (Inkscape::XML::Node * adult)
-{
- return sp_repr_lookup_child(adult, "name", _name);
-}
-
-Inkscape::XML::Node *
-Parameter::new_child (Inkscape::XML::Node * parent)
-{
- Inkscape::XML::Node * retval;
- retval = parent->document()->createElement("inkscape:extension-param");
- retval->setAttribute("name", _name);
-
- parent->appendChild(retval);
- return retval;
-}
-
-Inkscape::XML::Node *
-Parameter::document_param_node (SPDocument * doc)
-{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
- Inkscape::XML::Node * defs = SP_OBJECT_REPR(SP_DOCUMENT_DEFS(doc));
- Inkscape::XML::Node * params = NULL;
-
- GQuark const name_quark = g_quark_from_string("inkscape:extension-params");
-
- for (Inkscape::XML::Node * child = defs->firstChild();
- child != NULL;
- child = child->next()) {
- if ((GQuark)child->code() == name_quark &&
- !strcmp(child->attribute("extension"), extension->get_id())) {
- params = child;
- break;
- }
- }
-
- if (params == NULL) {
- params = xml_doc->createElement("inkscape:extension-param");
- params->setAttribute("extension", extension->get_id());
- defs->appendChild(params);
- }
-
- return params;
-}
-
-/** \brief Basically, if there is no widget pass a NULL. */
-Gtk::Widget *
-Parameter::get_widget (SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/, sigc::signal<void> * /*changeSignal*/)
-{
- return NULL;
-}
-
-/** \brief If I'm not sure which it is, just don't return a value. */
-void
-Parameter::string (std::string &/*string*/)
-{
- return;
-}
-
-void
-Parameter::string (std::list <std::string> &list)
-{
- std::string value;
- string(value);
- if (value == "") {
- return;
- }
-
- std::string final;
- final += "--";
- final += name();
- final += "=";
- final += value;
-
- list.insert(list.end(), final);
- 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 += this->get(NULL, NULL);
- return mystring;
-}
-
-Gtk::Widget *
-ParamEnum::get_widget (SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/, sigc::signal<void> * /*changeSignal*/)
-{
- return NULL;
-}
-
-const gchar *
-ParamEnum::set (const gchar * /*in*/, SPDocument * /*doc*/, Inkscape::XML::Node * /*node*/)
-{
- return NULL;
-}
-
-
-} /* namespace Extension */
-} /* 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 :