//---------------------------------------------------------------------------- // $Id: QtRpl/RplBaseDlg.hpp 2017/07/23 16:20:43 philw $ //---------------------------------------------------------------------------- #pragma once #ifndef RplBaseDlgINCLUDED #define RplBaseDlgINCLUDED #include "BaseQtMainWin.hpp" #include "LoadSaveMgr.hpp" class QAction; class QCloseEvent; class QFrame; class QHideEvent; class QLineEdit; class QMenu; class QPushButton; class QShowEvent; class QString; class QTimer; class RplObj; class RplObjView; #include //-------------------------------------------------------------------------- //+class // // CLASS: // RplBaseDlg // // DESCRIPTION: // Virtual base class which provides the pure virtual update methods for // all RPL editor dialogs. // //-------------------------------------------------------------------------- class RplBaseDlg : public BaseQtMainWin { Q_OBJECT friend class RplBlockPanel; // QFrame friend class RplFunctionPanel; // QFrame public: RplBaseDlg (BaseRWDlg* rwParent=0, const char* name=0); virtual ~RplBaseDlg(); // Public update methods, which only update if the dialog is visible bool updateDlgLoadStatus (); bool updateDlg (); bool rebuildDlg (); void suspendUpdate (bool state) { _suspendUpdate = state; } void suspendRebuild (bool state) { _suspendRebuild = state; } virtual RplObj *getRplObj() const = 0; typedef LoadSaveMgr::FileItemMenu FileItemMenu; public slots: virtual void scrollToDebugCursor() { } protected: virtual bool updateLoadStatus () = 0; virtual bool updateDescr () = 0; virtual bool updateNotes() = 0; virtual bool update () = 0; virtual bool rebuild () = 0; virtual QString nameEditorText() const; void configureCloseDlgsButton (QPushButton* but) const; public slots: virtual void updateEditActions() = 0; protected slots: // Common menu handlers void printHandler (); void newRplSetHandler (); void openRplSetHandler (); void newGlobFuncSetHandler (); void openGlobFuncSetHandler (); void saveRplSetHandler (); void saveRplSetAsHandler (); void reopenSetMenu_aboutToShow(); void reopenGlobFuncSetMenu_aboutToShow(); void openAnalysisDlgHandler (); void compareSetHandler (); void openPaletteHandler (); void openDisplaySettingsDlgHandler (); void openSearchDlgHandler (); void openSearchReplaceDlgHandler (); void checkValidityHandler (); void closeDlgsHandler (); void openDebuggerDlgHandler (); void enableUserFnDiagBefore (); void enableUserFnDiagAfter (); void disableUserFnDiagBefore (); void disableUserFnDiagAfter (); void enablePredefFnDiagBefore (); void enablePredefFnDiagAfter (); void disablePredefFnDiagBefore (); void disablePredefFnDiagAfter (); void refreshHandler (); void closeOtherEditors (); void openRplSetDlg (); void viewExternalDocHandler(); void editExternalDocHandler(); void configureExternalDocHandler(); void fileTypeAssocHandler(); // Common GUI element handler void externalDocButtonHandler (); void loadButtonHandler (); void nameHandler (); void descriptionHandler (); void notesHandler(); // Deferred Notifications void schedDescrEditNotify (RplObj*); void cancelDescrEditNotify(); void descrEditNotifyTimeout(); void schedNotesEditNotify(RplObj*); void cancelNotesEditNotify(); void notesEditNotifyTimeout(); protected: // Helper methods for RPL dialogs void initExternalDocButton (QPushButton* button); void updateExternalDocOps (QPushButton* button, QMenu* extDocMenu, QAction* view, QAction* edit); void configNewSetAction (RplApplication::Type, QAction*); void configOpenSetAction (RplApplication::Type, QAction*); void configSaveSetAction (RplApplication::Type, QAction*); void configSaveSetAsAction (RplApplication::Type, QAction*); void configReopenSetMenu (RplApplication::Type, FileItemMenu*); void configReopenGlobFuncSetMenu (FileItemMenu*); public: virtual void updateExternalDocButton() = 0; virtual void debuggerStateChanged() {} void updateLoadWidgets (QFrame *frame, QPushButton *button); void setAllFnDiagnostics(bool enable, bool before, bool user); virtual RplObjView *getRplObjView () { return NULL; } virtual void selectRplObjViewRow(RplObj* rplObj); virtual void selectRplStatement(RplStatement* /* statement */) {}; void updateFileMenuAppText (QAction *printAction, QAction *closeAction); protected: // Virtual from QWidget virtual void showEvent (QShowEvent*) override; virtual void hideEvent (QHideEvent*) override; virtual void closeEvent (QCloseEvent*) override; public: static int _rplBaseDlgCnt; const int _rplBaseDlgNum; protected: bool _inDescrEdit; bool _settingDescrEdit; bool _inNotesEdit; bool _settingNotesEdit; bool _suspendRebuild; bool _suspendUpdate; bool _pendingRebuild; bool _pendingUpdate; private: // copies of subclass widget handles FileItemMenu* _reopenSetMenu; FileItemMenu* _reopenGlobFuncSetMenu; QTimer* _descrEditNotifyTimer; QList _descrEditNotifyForObjList; QTimer* _notesEditNotifyTimer; QList _notesEditNotifyForObjList; }; #endif // RplBaseDlgINCLUDED //--- (end RplBaseDlg.hpp) ---