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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/*
* Authors:
* Ted Gould <ted@gould.cx>
*
* Copyright (C) 2002-2004 Authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#ifndef INKSCAPE_EXTENSION_EFFECT_H__
#define INKSCAPE_EXTENSION_EFFECT_H__
#include <config.h>
#include <glibmm/i18n.h>
#include <gtkmm/dialog.h>
#include <gtk/gtkdialog.h>
#include "verbs.h"
#include "prefdialog.h"
#include "extension.h"
struct SPDocument;
namespace Inkscape {
namespace UI {
namespace View {
typedef View View;
};
};
namespace Extension {
/** \brief Effects are extensions that take a document and do something
to it in place. This class adds the extra functions required
to make extensions effects.
*/
class Effect : public Extension {
/** \brief This is the last effect that was used. This is used in
a menu item to rapidly recall the same effect. */
static Effect * _last_effect;
/** \brief The location of the effects menu on the menu structure
XML file. This is saved so it only has to be discovered
once. */
static Inkscape::XML::Node * _effects_list;
bool find_effects_list (Inkscape::XML::Node * menustruct);
void merge_menu (Inkscape::XML::Node * base, Inkscape::XML::Node * start, Inkscape::XML::Node * patern, Inkscape::XML::Node * mergee);
/** \brief This is the verb type that is used for all effect's verbs.
It provides convience functions and maintains a pointer
back to the effect that created it. */
class EffectVerb : public Inkscape::Verb {
private:
static void perform (SPAction * action, void * mydata, void * otherdata);
/** \brief Function to call for specific actions */
static SPActionEventVector vector;
/** \brief The effect that this verb represents. */
Effect * _effect;
/** \brief Whether or not to show preferences on display */
bool _showPrefs;
/** \brief Name with elipses if that makes sense */
gchar * _elip_name;
protected:
virtual SPAction * make_action (Inkscape::UI::View::View * view);
public:
/** \brief Use the Verb initializer with the same parameters. */
EffectVerb(gchar const * id,
gchar const * name,
gchar const * tip,
gchar const * image,
Effect * effect,
bool showPrefs) :
Verb(id, _(name), _(tip), image),
_effect(effect),
_showPrefs(showPrefs),
_elip_name(NULL) {
/* No clue why, but this is required */
this->set_default_sensitive(true);
if (_showPrefs && effect != NULL && effect->param_visible_count() != 0) {
_elip_name = g_strdup_printf("%s...", _(name));
set_name(_elip_name);
}
}
/** \brief Destructor */
~EffectVerb() {
if (_elip_name != NULL) {
g_free(_elip_name);
}
}
};
/** \brief ID used for the verb without preferences */
Glib::ustring _id_noprefs;
/** \brief Name used for the verb without preferences */
Glib::ustring _name_noprefs;
/** \brief The verb representing this effect. */
EffectVerb _verb;
/** \brief The verb representing this effect. Without preferences. */
EffectVerb _verb_nopref;
/** \brief Menu node created for this effect */
Inkscape::XML::Node * _menu_node;
/** \brief Whehter a working dialog should be shown */
bool _workingDialog;
/** \brief The preference dialog if it is shown */
PrefDialog * _prefDialog;
public:
Effect (Inkscape::XML::Node * in_repr,
Implementation::Implementation * in_imp);
virtual ~Effect (void);
virtual bool check (void);
bool prefs (Inkscape::UI::View::View * doc);
void effect (Inkscape::UI::View::View * doc);
/** \brief Accessor function for a pointer to the verb */
Inkscape::Verb * get_verb (void) { return &_verb; };
/** \brief Static function to get the last effect used */
static Effect * get_last_effect (void) { return _last_effect; };
static void set_last_effect (Effect * in_effect);
static void place_menus (void);
void place_menu (Inkscape::XML::Node * menus);
Gtk::VBox * get_info_widget(void);
bool no_doc; // if true, the effect does not process SVG document at all, so no need to save, read, and watch for errors
bool no_live_preview; // if true, the effect does not need "live preview" checkbox in its dialog
void set_pref_dialog (PrefDialog * prefdialog);
private:
static gchar * remove_ (gchar * instr);
};
} } /* namespace Inkscape, Extension */
#endif /* INKSCAPE_EXTENSION_EFFECT_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 :
|