1 /**
2 * \brief A desktop dock pane to dock dialogs, a custom wrapper around gdl-dock.
3 *
4 * Author:
5 * Gustav Broberg <broberg@kth.se>
6 *
7 * Copyright (C) 2007 Authors
8 *
9 * Released under GNU GPL. Read the file 'COPYING' for more information.
10 */
12 #ifndef INKSCAPE_UI_WIDGET_DOCK_H
13 #define INKSCAPE_UI_WIDGET_DOCK_H
15 #include <gtkmm/scrolledwindow.h>
16 #include <gtkmm/box.h>
17 #include <gtkmm/paned.h>
19 #include <list>
21 #include "ui/widget/dock-item.h"
23 #include "libgdl/libgdl.h"
25 namespace Inkscape {
26 namespace UI {
27 namespace Widget {
29 class Dock {
31 public:
33 Dock(Gtk::Orientation orientation=Gtk::ORIENTATION_VERTICAL);
34 ~Dock();
36 void addItem(DockItem& item, DockItem::Placement placement);
38 Gtk::Widget& getWidget(); //< return the top widget
39 Gtk::Paned *getParentPaned();
40 Gtk::Paned *getPaned();
42 GtkWidget* getGdlWidget(); //< return the top gdl widget
44 bool isEmpty() const; //< true iff none of the dock's items are in a docked state
45 bool hasIconifiedItems() const;
47 Glib::SignalProxy0<void> signal_layout_changed();
49 void hide();
50 void show();
52 /** Toggle size of dock between the previous dimensions and the ones sent as parameters */
53 void toggleDockable(int width=0, int height=0);
55 /** Scrolls the scrolled window container to make the provided dock item visible, if needed */
56 void scrollToItem(DockItem& item);
58 protected:
60 std::list<const DockItem *> _dock_items; //< added dock items
62 /** Interface widgets, will be packed like
63 * _scrolled_window -> (_dock_box -> (_paned -> (_dock -> _filler) | _dock_bar))
64 */
65 Gtk::Box *_dock_box;
66 Gtk::Paned* _paned;
67 GdlDock *_gdl_dock;
68 GdlDockBar *_gdl_dock_bar;
69 Gtk::VBox _filler;
70 Gtk::ScrolledWindow *_scrolled_window;
72 /** Internal signal handlers */
73 void _onLayoutChanged();
75 /** GdlDock signal proxy structures */
76 static const Glib::SignalProxyInfo _signal_layout_changed_proxy;
78 /** Standard widths */
79 static const int _default_empty_width;
80 static const int _default_dock_bar_width;
81 };
83 } // namespace Widget
84 } // namespace UI
85 } // namespace Inkscape
87 #endif //INKSCAPE_UI_DIALOG_BEHAVIOUR_H
89 /*
90 Local Variables:
91 mode:c++
92 c-file-style:"stroustrup"
93 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
94 indent-tabs-mode:nil
95 fill-column:99
96 End:
97 */
98 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99