00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GUI_PANEL_BAR_PANEL_MANAGER
00020 #define OST_GUI_PANEL_BAR_PANEL_MANAGER
00021
00022
00023 #include <ost/gui/widget.hh>
00024 #include <ost/gui/widget_pool.hh>
00025 #include <ost/gui/thin_splitter.hh>
00026
00027 #include "panel_widget_container.hh"
00028 #include "button_box.hh"
00029
00030 #include <QWidget>
00031 #include <QString>
00032 #include <QList>
00033 #include <QMenu>
00034 #include <QDragEnterEvent>
00035 namespace ost { namespace gui {
00036
00037 enum PanelPosition
00038 {
00039 LEFT_PANEL = 0,
00040 RIGHT_PANEL,
00041 BOTTOM_PANEL,
00042 NONE
00043 };
00044
00048 class DLLEXPORT_OST_GUI PanelManager : public Widget {
00049 Q_OBJECT
00050 public:
00051 PanelManager(QWidget* widget);
00052 ~PanelManager(){ }
00053 virtual bool Save(const QString& prefix);
00054 virtual bool Restore(const QString& prefix);
00055
00062 virtual void AddWidgetToPool(const QString& class_name, int limit=-1);
00068 virtual void AddWidgetToPool(const QString& name, Widget* widget);
00069
00076 void AddWidget(PanelPosition pos, Widget* widget, bool is_hidden=false);
00082 void AddWidgetByName(PanelPosition pos, const QString& class_name, bool is_hidden=false);
00083
00089 void ReplaceWidget(Widget* w1, Widget* w2);
00093 void ReplaceWidget(Widget* w1, QString& class_name);
00094
00098 QMenu* GetMenu();
00102 QList<QString> GetAvailableWidgets();
00103
00107 void StartDrag();
00110 void EndDrag();
00111
00112 public slots:
00116 QMenu* GetAvailableWidgetsMenu();
00117
00120 void ToggleViewMode(PanelPosition pos);
00121
00125 void MoveWidget(Widget * widget, PanelPosition pos, int index);
00126
00131 void MoveNextTo(Widget* target, Widget* widget);
00132
00136 void RemoveWidget(Widget * widget);
00137
00139 void ToggleHide();
00142 void ToggleHide(PanelPosition pos);
00143
00144 private slots:
00145 void UpdateAddMenu();
00146 void UpdateCurrentMenu();
00147 void AddWidgetFromMenu(QAction * action);
00148
00149 private:
00150 PanelPosition GetParentPanel(Widget* widget);
00151
00152 ThinSplitter* right_panel_splitter_;
00153 ThinSplitter* left_panel_splitter_;
00154 ThinSplitter* bottom_panel_splitter_;
00155 QMap<PanelPosition, PanelBar*> panels_;
00156 WidgetPool* pool_;
00157 QMenu* add_menu_;
00158 PanelPosition current_menu_;
00159 };
00160
00161 }}
00162
00163 #endif
00164