1 /**
2 * \brief This class implements the functionality of the window layout, menus,
3 * and signals.
4 *
5 * Authors:
6 * Bryce W. Harrington <bryce@bryceharrington.org>
7 * Derek P. Moore <derekm@hackunix.org>
8 * Ralf Stephan <ralf@ark.in-berlin.de>
9 * John Bintz <jcoswell@coswellproductions.org>
10 *
11 * Copyright (C) 2006 John Bintz
12 * Copyright (C) 2004 Bryce Harrington
13 *
14 * Released under GNU GPL. Read the file 'COPYING' for more information.
15 */
17 #ifndef INKSCAPE_UI_VIEW_EDIT_WIDGET_H
18 #define INKSCAPE_UI_VIEW_EDIT_WIDGET_H
20 #include <gtkmm/box.h>
21 #include <gtkmm/table.h>
22 #include <gtkmm/entry.h>
23 #include <gtkmm/scrollbar.h>
24 #include <gtkmm/actiongroup.h>
25 #include <gtkmm/uimanager.h>
26 #include <gtkmm/togglebutton.h>
28 #include "ui/dialog/dialog-manager.h"
29 #include "ui/view/edit-widget-interface.h"
30 #include "ui/widget/selected-style.h"
31 #include "ui/widget/ruler.h"
32 #include "ui/widget/toolbox.h"
33 #include "ui/widget/svg-canvas.h"
34 #include "ui/widget/zoom-status.h"
35 #include "widgets/layer-selector.h"
37 struct SPDesktop;
38 struct SPDocument;
39 struct SPNamedView;
41 namespace Inkscape {
42 namespace UI {
43 namespace View {
45 class EditWidget : public Gtk::Window,
46 public EditWidgetInterface {
47 public:
48 EditWidget (SPDocument*);
49 ~EditWidget();
51 // Initialization
52 void initActions();
53 void initUIManager();
54 void initLayout();
55 void initEdit (SPDocument*);
56 void destroyEdit();
58 // Actions
59 void onActionFileNew();
60 void onActionFileOpen();
61 void onActionFilePrint();
62 void onActionFileQuit();
63 void onToolbarItem();
64 void onSelectTool();
65 void onNodeTool();
67 // Menus
68 void onMenuItem();
70 void onDialogAbout();
71 void onDialogAlignAndDistribute();
72 void onDialogInkscapePreferences();
73 void onDialogDialog();
74 void onDialogDocumentProperties();
75 void onDialogExport();
76 void onDialogExtensionEditor();
77 void onDialogFillAndStroke();
78 void onDialogFind();
79 void onDialogLayerEditor();
80 void onDialogMessages();
81 void onDialogObjectProperties();
82 void onDialogTextProperties();
83 void onDialogTransform();
84 void onDialogTransformation();
85 void onDialogTrace();
86 void onDialogXmlEditor();
88 // Whiteboard (Inkboard)
89 #ifdef WITH_INKBOARD
90 void onDialogWhiteboardConnect();
91 void onDialogWhiteboardShareWithUser();
92 void onDialogWhiteboardShareWithChat();
93 void onDialogOpenSessionFile();
94 void onDumpXMLTracker();
95 #endif
97 void onUriChanged();
99 // from EditWidgetInterface
100 virtual void *getWindow();
101 virtual void setTitle (gchar const*);
102 virtual void layout();
103 virtual void present();
104 virtual void getGeometry (gint &x, gint &y, gint &w, gint &h);
105 virtual void setSize (gint w, gint h);
106 virtual void setPosition (NR::Point p);
107 virtual void setTransient (void*, int);
108 virtual NR::Point getPointer();
109 virtual void setFullscreen();
110 virtual bool shutdown();
111 virtual void destroy();
112 virtual void requestCanvasUpdate();
113 virtual void requestCanvasUpdateAndWait();
114 virtual void enableInteraction();
115 virtual void disableInteraction();
116 virtual void activateDesktop();
117 virtual void deactivateDesktop();
118 virtual void viewSetPosition (NR::Point p);
119 virtual void updateRulers();
120 virtual void updateScrollbars (double scale);
121 virtual void toggleRulers();
122 virtual void toggleScrollbars();
123 virtual void updateZoom();
124 virtual void letZoomGrabFocus();
125 virtual void setToolboxFocusTo (const gchar *);
126 virtual void setToolboxAdjustmentValue (const gchar *, double);
127 virtual bool isToolboxButtonActive (gchar const*);
128 virtual void setCoordinateStatus (NR::Point p);
129 virtual void setMessage (Inkscape::MessageType type, gchar const* msg);
130 virtual bool warnDialog (gchar*);
132 protected:
133 void _namedview_modified(SPObject *namedview, guint);
135 Gtk::Tooltips _tooltips;
137 // Child widgets:
138 Gtk::Table _main_window_table;
139 Gtk::VBox _toolbars_vbox;
140 Gtk::HBox _sub_window_hbox;
141 Gtk::Table _viewport_table;
143 UI::Widget::Toolbox *_tool_ctrl;
144 Gtk::Toolbar *_select_ctrl;
145 Gtk::Toolbar *_uri_ctrl;
146 Gtk::Label _uri_label;
147 Gtk::Entry _uri_entry;
148 Gtk::Toolbar *_node_ctrl;
150 UI::Widget::HRuler _top_ruler;
151 UI::Widget::VRuler _left_ruler;
152 Gtk::HScrollbar _bottom_scrollbar;
153 Gtk::VScrollbar _right_scrollbar;
154 Gtk::ToggleButton _sticky_zoom;
155 UI::Widget::SVGCanvas _svg_canvas;
156 Gtk::HBox _statusbar;
157 UI::Widget::SelectedStyle _selected_style_status;
158 UI::Widget::ZoomStatus _zoom_status;
159 Inkscape::Widgets::LayerSelector _layer_selector;
160 Gtk::EventBox _coord_eventbox;
161 Gtk::Table _coord_status;
162 Gtk::Label _coord_status_x, _coord_status_y;
163 Gtk::Label _select_status;
165 SPDesktop* _desktop;
166 SPNamedView* _namedview;
167 double _dt2r;
169 Glib::RefPtr<Gtk::ActionGroup> _act_grp;
170 Glib::RefPtr<Gtk::UIManager> _ui_mgr;
171 UI::Dialog::DialogManager _dlg_mgr;
173 void initMenuActions();
174 void initToolbarActions();
175 void initAccelMap();
176 void initMenuBar();
177 void initCommandsBar();
178 void initToolControlsBar();
179 void initUriBar();
180 void initToolsBar();
181 void initBottomScrollbar();
182 void initRightScrollbar();
183 void initLeftRuler();
184 void initTopRuler();
185 void initStickyZoom();
186 void initStatusbar();
188 virtual bool on_key_press_event (GdkEventKey*);
189 virtual bool on_delete_event (GdkEventAny*);
190 virtual bool on_focus_in_event (GdkEventFocus*);
192 private:
193 bool onEntryFocusIn (GdkEventFocus*);
194 bool onEntryFocusOut (GdkEventFocus*);
195 void onWindowSizeAllocate (Gtk::Allocation&);
196 void onWindowRealize();
197 void onAdjValueChanged();
199 bool _update_s_f, _update_a_f;
200 unsigned int _interaction_disabled_counter;
202 sigc::connection _namedview_modified_connection;
203 };
204 } // namespace View
205 } // namespace UI
206 } // namespace Inkscape
208 #endif // INKSCAPE_UI_VIEW_EDIT_WIDGET_H
210 /*
211 Local Variables:
212 mode:c++
213 c-file-style:"stroustrup"
214 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
215 indent-tabs-mode:nil
216 fill-column:99
217 End:
218 */
219 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :