summaryrefslogtreecommitdiffstats
path: root/src/extension/param/parameter.h
blob: 1aeafbd7cf4bc37988974f79c2f9f4cf405409d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef __INK_EXTENSION_PARAM_H__
#define __INK_EXTENSION_PARAM_H__

/** \file
 * Parameters for extensions.
 */

/*
 * Authors:
 *   Ted Gould <ted@gould.cx>
 *
 * Copyright (C) 2005-2006 Authors
 *
 * Released under GNU GPL, read the file 'COPYING' for more information
 */

/** \brief  The root directory in the preferences database for extension-related parameters. */
#define PREF_DIR "extensions"

#include <gtkmm/widget.h>

#include "xml/document.h"
#include "xml/node.h"
#include "document.h"
#include <extension/extension-forward.h>
#include "prefs-utils.h"

#include <glibmm/i18n.h>

#include <color.h>

namespace Inkscape {
namespace Extension {

/** \brief  A class to represent the parameter of an extension

    This is really a super class that allows them to abstract all
    the different types of parameters into some that can be passed
    around.  There is also a few functions that are used by all the
    different parameters.
*/
class Parameter {
private:
    /** \brief  Which extension is this parameter attached to? */
    Inkscape::Extension::Extension * extension;
    /** \brief  The name of this parameter. */
    gchar *       _name;

protected:
    /** \brief  Description of the parameter. */
    gchar *       _desc;
    /** \brief  List of possible scopes. */
    typedef enum {
        SCOPE_USER,     /**<  Parameter value is saved in the user's configuration file. (default) */
        SCOPE_DOCUMENT, /**<  Parameter value is saved in the document. */
        SCOPE_NODE      /**<  Parameter value is attached to the node. */
    } _scope_t;
    /** \brief  Scope of the parameter. */
    _scope_t _scope;
    /** \brief  Text for the GUI selection of this. */
    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 :