parameter.h revision 09ba3247163582bf2e30e17c4c154aa259ce038a
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz/** @file
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * @brief Parameters for extensions.
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz/* Authors:
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * Ted Gould <ted@gould.cx>
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz *
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * Copyright (C) 2005-2006 Authors
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz *
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * Released under GNU GPL, read the file 'COPYING' for more information
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#ifndef SEEN_INK_EXTENSION_PARAM_H__
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#define SEEN_INK_EXTENSION_PARAM_H__
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include <gtkmm/widget.h>
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include <glibmm/i18n.h>
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include "xml/document.h"
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include "xml/node.h"
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include "document.h"
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include "extension/extension-forward.h"
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz#include <color.h>
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruznamespace Inkscape {
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruznamespace Extension {
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz/**
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * @brief The root directory in the preferences database for extension-related parameters
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz *
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * The directory path has both a leading and a trailing slash, so that extension_pref_root + pref_name works
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz * without having to append a separator.
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruzextern Glib::ustring const extension_pref_root;
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz/** \brief A class to represent the parameter of an extension
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz This is really a super class that allows them to abstract all
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz the different types of parameters into some that can be passed
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz around. There is also a few functions that are used by all the
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz different parameters.
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz*/
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruzclass Parameter {
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruzprivate:
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz /** \brief Which extension is this parameter attached to? */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz Inkscape::Extension::Extension * extension;
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz /** \brief The name of this parameter. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz gchar * _name;
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruzprotected:
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz /** \brief Description of the parameter. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz gchar * _desc;
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz /** \brief List of possible scopes. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz typedef enum {
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz SCOPE_USER, /**< Parameter value is saved in the user's configuration file. (default) */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz SCOPE_DOCUMENT, /**< Parameter value is saved in the document. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz SCOPE_NODE /**< Parameter value is attached to the node. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz } _scope_t;
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz /** \brief Scope of the parameter. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz _scope_t _scope;
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz /** \brief Text for the GUI selection of this. */
8ab2991a47c99fe39f45014a19f10be449839948Jon A. Cruz gchar * _text;
/** \brief Whether the GUI is visible */
bool _gui_hidden;
/** \brief A tip for the GUI if there is one */
gchar * _gui_tip;
/* **** funcs **** */
gchar * pref_name (void);
Inkscape::XML::Node * find_child (Inkscape::XML::Node * adult);
Inkscape::XML::Node * document_param_node (SPDocument * doc);
Inkscape::XML::Node * new_child (Inkscape::XML::Node * parent);
public:
Parameter (const gchar * name,
const gchar * guitext,
const gchar * desc,
const Parameter::_scope_t scope,
bool gui_hidden,
const gchar * gui_tip,
Inkscape::Extension::Extension * ext);
Parameter (const gchar * name,
const gchar * guitext,
Inkscape::Extension::Extension * ext) {
Parameter(name, guitext, NULL, Parameter::SCOPE_USER, false, NULL, ext);
};
virtual ~Parameter (void);
bool get_bool (const SPDocument * doc,
const Inkscape::XML::Node * node);
int get_int (const SPDocument * doc,
const Inkscape::XML::Node * node);
float get_float (const SPDocument * doc,
const Inkscape::XML::Node * node);
const gchar * get_string (const SPDocument * doc,
const Inkscape::XML::Node * node);
guint32 get_color (const SPDocument * doc,
const Inkscape::XML::Node * node);
const gchar * get_enum (const SPDocument * doc,
const Inkscape::XML::Node * node);
bool set_bool (bool in, SPDocument * doc, Inkscape::XML::Node * node);
int set_int (int in, SPDocument * doc, Inkscape::XML::Node * node);
float set_float (float in, SPDocument * doc, Inkscape::XML::Node * node);
const gchar * set_string (const gchar * in, SPDocument * doc, Inkscape::XML::Node * node);
guint32 set_color (guint32 in, SPDocument * doc, Inkscape::XML::Node * node);
const gchar * name (void) {return _name;}
static Parameter * make (Inkscape::XML::Node * in_repr, Inkscape::Extension::Extension * in_ext);
virtual Gtk::Widget * get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal<void> * changeSignal);
gchar const * get_tooltip (void) { return _desc; }
/** \brief Indicates if the GUI for this parameter is hidden or not */
bool get_gui_hidden () { return _gui_hidden; }
virtual void string (std::list <std::string> &list);
virtual void string (std::string &string);
};
} /* namespace Extension */
} /* namespace Inkscape */
#endif /* __INK_EXTENSION_PARAM_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 :