//---------------------------------------------------------------------------- // $Id: QtRpl/RplBlockDlg.hpp 2017/07/23 16:20:44 philw $ // Editor dialog for RplBlock objects (Rule, Goal, Method) //---------------------------------------------------------------------------- #pragma once #ifndef RplViewerDlgINCLUDED #define RplViewerDlgINCLUDED #ifndef RplBaseDlgINCLUDED #include "RplBaseDlg.hpp" #endif #ifndef RplBlockINCLUDED #include "RplBlock.hpp" #endif #include "RplObjPanel.hpp" class QTabBar; class QVBoxLayout; class Ui_RplViewerDlgWidgets; class RplBlockPanel; class RplFunctionPanel; #include #include //-------------------------------------------------------------------------- //+class // // CLASS: // RplViewerDlg // // DESCRIPTION: // A tabbed view for hosting RplBlockPanels and RplFunctionPanels // //-------------------------------------------------------------------------- class RplViewerDlg : public RplBaseDlg { Q_OBJECT public: class RplTabBar; // : public QTabBar private: Ui_RplViewerDlgWidgets* _ui; QList _impPanels; // current tab list RplObjPanel* _activePanel; RplObj* _activeRplObj; // Tab bar RplTabBar* _rplTabBar; QWidget* _rplTabWidgets; QPushButton* _rplTabMenuBut; QActionGroup* _rplTabMenuActionGroup; bool _rebuildRplTabBar_inProgress; QList _viewerRplList; //Robynn todo: look into how this will work. QString _rplTabCtx_objName; // context menu, clicked tab RplObj name public: RplViewerDlg(BaseRWDlg* parent, RplObj*); ~RplViewerDlg(); virtual bool update() override; virtual bool updateDescr() override; virtual bool updateNotes() override; virtual bool updateLoadStatus() override; virtual bool rebuild() override; virtual void selectRplStatement(RplStatement* statement) override; virtual void showDescription(bool) override; virtual void showNotes(bool) override; virtual void selectStringInDescription( const Rpl::SearchSpec& searchSpec) override; virtual void selectStringInNotes( const Rpl::SearchSpec& searchSpec) override; const QList& viewerObjListRef() const { return _viewerRplList; } void addRplObject(RplObj*); void addRplObjects(const QList&); void removeRplObject(RplObj*, bool deleteWhenEmpty); void selectRplObjTab(RplObj*); public slots: virtual void updateEditActions() override; virtual void scrollToDebugCursor() override; public: virtual RplObj* getRplObj() const override; virtual void updateExternalDocButton() override; private: void buildQtWidgets(); void sensitizeMenus(); virtual QString nameEditorText() const override; RplObjPanel* getActiveFrame(); void deleteInternals(); void updateWindowTitle(); void rebuildRplTabBar(); // void updateRplTabIcons(); void updateRplTabStyles(); void installRplObj(RplObj*, bool force = false); RplObj* installedRplObj() const { return _activeRplObj; } RplObj* locateRplTabBarRplObj(int inx) const; // Robynn todo: is this applicable? int rplTabBarInxForRplObj(const RplObj*) const; // //private slots: // void rplTabBar_currentChanged(int index); // void rplTabBar_tabBarLeftClicked(int index); // void rplTabBar_tabBarDoubleClicked(int index); // void rplTabBar_tabCloseRequested(int index); // void rplTabBar_tabMoved(int from, int to); // void rplTabBar_customContextMenuRequested(const QPoint& pos); // void rplTabMenuBut_clicked(); // void rplTabMenuActionGroup_triggered(QAction*); }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // ********************************************************* // *** class RplViewerDlg::RplTabBar : public QTabBar *** // ********************************************************* class RplViewerDlg::RplTabBar : public QTabBar { Q_OBJECT private: RplViewerDlg* _parentDlg; bool _dragRplTabActive; // drag from tab, mouse button still down bool _dragRplTabArmed; // active drag of sufficient tear-off distance. bool _dragRplTabOverrideCursorSet; QPoint _dragRplTabStartPos; QString _dragRplTabName; QCursor _dragRplTabCursor; public: RplTabBar(RplViewerDlg* parentDlg); virtual ~RplTabBar(); private: bool tearArmedAtPos(const QPoint& pos); void updateOverrideCursor(); protected: // virtual from QTabBar virtual void mousePressEvent(QMouseEvent*) override; virtual void mouseMoveEvent(QMouseEvent*) override; virtual void mouseReleaseEvent(QMouseEvent*) override; signals: void tabBarLeftClicked(int tabIndex); void tabBarRightClicked(int tabIndex); }; #endif // RplViewerDlgINCLUDED //--- (end RplViewerDlg.hpp) ---