1 #ifndef __SP_NODE_CONTEXT_H__
2 #define __SP_NODE_CONTEXT_H__
4 /*
5 * Node editing context
6 *
7 * Authors:
8 * Lauris Kaplinski <lauris@kaplinski.com>
9 * bulia byak <buliabyak@users.sf.net>
10 *
11 * This code is in public domain
12 */
14 #include <gtk/gtktypeutils.h>
15 #include <sigc++/sigc++.h>
16 #include "event-context.h"
17 #include "forward.h"
18 #include "display/display-forward.h"
19 #include "nodepath.h"
20 namespace Inkscape { class Selection; }
22 #define SP_TYPE_NODE_CONTEXT (sp_node_context_get_type ())
23 #define SP_NODE_CONTEXT(obj) (GTK_CHECK_CAST ((obj), SP_TYPE_NODE_CONTEXT, SPNodeContext))
24 #define SP_NODE_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), SP_TYPE_NODE_CONTEXT, SPNodeContextClass))
25 #define SP_IS_NODE_CONTEXT(obj) (GTK_CHECK_TYPE ((obj), SP_TYPE_NODE_CONTEXT))
26 #define SP_IS_NODE_CONTEXT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), SP_TYPE_NODE_CONTEXT))
28 enum { SP_NODE_CONTEXT_INACTIVE,
29 SP_NODE_CONTEXT_NODE_DRAGGING,
30 SP_NODE_CONTEXT_RUBBERBAND_DRAGGING };
32 class SPNodeContext;
33 class SPNodeContextClass;
35 struct SPNodeContext {
36 // FIXME: shouldn't this be a pointer???
37 SPEventContext event_context;
39 guint drag : 1;
41 ShapeEditor* shape_editor;
43 gboolean leftalt;
44 gboolean rightalt;
45 gboolean leftctrl;
46 gboolean rightctrl;
48 /// If true, rubberband was cancelled by esc, so the next button release should not deselect.
49 bool rb_escaped;
51 sigc::connection sel_changed_connection;
53 Inkscape::MessageContext *_node_message_context;
55 bool cursor_drag;
57 bool added_node;
59 unsigned int current_state;
61 SPItem * flashed_item;
62 Inkscape::Display::TemporaryItem * flash_tempitem;
63 int remove_flash_counter;
64 };
66 struct SPNodeContextClass {
67 SPEventContextClass parent_class;
68 };
70 /* Standard Gtk function */
72 GtkType sp_node_context_get_type (void);
74 void sp_node_context_selection_changed (Inkscape::Selection * selection, gpointer data);
75 void sp_node_context_selection_modified (Inkscape::Selection * selection, guint flags, gpointer data);
77 #endif
79 /*
80 Local Variables:
81 mode:c++
82 c-file-style:"stroustrup"
83 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
84 indent-tabs-mode:nil
85 fill-column:99
86 End:
87 */
88 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :