/* * Authors: * Bryce Harrington * Jon A. Cruz * * Copyright (C) 2004 Bryce Harrington * Copyright (C) 2005 Jon A. Cruz * Copyright (C) 2012 Kris De Gussem * * Released under GNU GPL. Read the file 'COPYING' for more information. */ #ifndef SEEN_INKSCAPE_UI_WIDGET_PANEL_H #define SEEN_INKSCAPE_UI_WIDGET_PANEL_H #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "enums.h" #include #include class SPDesktop; class SPDocument; namespace Gtk { class CheckMenuItem; #if WITH_GTKMM_3_0 class ButtonBox; #else class HButtonBox; #endif class MenuItem; } namespace Inkscape { struct Application; class Selection; namespace UI { class PreviewFillable; namespace Widget { /** * A generic dockable container. * * Inkscape::UI::Widget::Panel is a base class from which dockable dialogs * are created. A new dockable dialog is created by deriving a class from panel. * Child widgets are private data members of Panel (no need to use pointers and * new). * * @see UI::Dialog::DesktopTracker to handle desktop change, selection change and selected object modifications. * @see UI::Dialog::DialogManager manages the dialogs within inkscape. */ class Panel : public Gtk::VBox { public: static void prep(); /** * Construct a Panel. * * @param label label for the panel of a dialog, shown at the top. * @param prefs_path characteristic path to load/save dialog position. * @param verb_num the dialog verb. */ Panel(Glib::ustring const &label = "", gchar const *prefs_path = 0, int verb_num = 0, Glib::ustring const &apply_label = "", bool menu_desired = false); virtual ~Panel(); gchar const *getPrefsPath() const; /** * Sets a label for the panel and displays it in the panel at the top (is not the title bar of a floating dialog). */ void setLabel(Glib::ustring const &label); Glib::ustring const &getLabel() const; int const &getVerb() const; Glib::ustring const &getApplyLabel() const; virtual void setOrientation(SPAnchorType how); virtual void present(); //< request to be present void restorePanelPrefs(); virtual void setDesktop(SPDesktop *desktop); SPDesktop *getDesktop() { return _desktop; } /* Signal accessors */ virtual sigc::signal &signalResponse(); virtual sigc::signal &signalPresent(); /* Methods providing a Gtk::Dialog like interface for adding buttons that emit Gtk::RESPONSE * signals on click. */ Gtk::Button* addResponseButton (const Glib::ustring &button_text, int response_id, bool pack_start=false); Gtk::Button* addResponseButton (const Gtk::StockID &stock_id, int response_id, bool pack_start=false); void setDefaultResponse(int response_id); void setResponseSensitive(int response_id, bool setting); virtual sigc::signal &signalDocumentReplaced(); virtual sigc::signal &signalActivateDesktop(); virtual sigc::signal &signalDeactiveDesktop(); protected: /** * Returns a pointer to a Gtk::Box containing the child widgets. */ Gtk::Box *_getContents() { return &_contents; } void _setTargetFillable(PreviewFillable *target); void _regItem(Gtk::MenuItem* item, int group, int id); virtual void _handleAction(int set_id, int item_id); virtual void _apply(); virtual void _handleResponse(int response_id); /* Helper methods */ void _addResponseButton(Gtk::Button *button, int response_id, bool pack_start=false); Inkscape::Selection *_getSelection(); /** * Stores characteristic path for loading/saving the dialog position. */ Glib::ustring const _prefs_path; bool _menu_desired; SPAnchorType _anchor; /* Signals */ sigc::signal _signal_response; sigc::signal _signal_present; sigc::signal _signal_document_replaced; sigc::signal _signal_activate_desktop; sigc::signal _signal_deactive_desktop; private: void _init(); void _bounceCall(int i, int j); void _popper(GdkEventButton *btn); void _wrapToggled(Gtk::CheckMenuItem *toggler); SPDesktop *_desktop; Glib::ustring _label; Glib::ustring _apply_label; int _verb_num; Gtk::HBox _top_bar; Gtk::VBox _right_bar; Gtk::VBox _contents; Gtk::Label _tab_title; Gtk::Arrow _temp_arrow; Gtk::EventBox _menu_popper; Gtk::Button _close_button; Gtk::Menu *_menu; #if WITH_GTKMM_3_0 Gtk::ButtonBox *_action_area; //< stores response buttons #else Gtk::HButtonBox *_action_area; //< stores response buttons #endif std::vector _non_horizontal; std::vector _non_vertical; PreviewFillable *_fillable; /* A map to store which widget that emits a certain response signal */ typedef std::map ResponseMap; ResponseMap _response_map; }; } // namespace Widget } // namespace UI } // namespace Inkscape #endif // SEEN_INKSCAPE_UI_WIDGET_PANEL_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:fileencoding=utf-8:textwidth=99 :