#ifndef VEDITWINDOW_H #define VEDITWINDOW_H #include #include #include #include #include #include "vnotebook.h" #include "vedittab.h" #include "vtoc.h" class VNote; class QPushButton; class QActionGroup; class VEditWindow : public QTabWidget { Q_OBJECT public: explicit VEditWindow(VNote *vnote, QWidget *parent = 0); int findTabByFile(const QString ¬ebook, const QString &relativePath) const; int openFile(const QString ¬ebook, const QString &relativePath, int mode); // Close the file forcely void closeFile(const QString ¬ebook, const QString &relativePath); void editFile(); void saveFile(); void readFile(); void saveAndReadFile(); void handleNotebookRenamed(const QVector ¬ebooks, const QString &oldName, const QString &newName); bool closeAllFiles(); void setRemoveSplitEnable(bool enabled); void getTabStatus(QString ¬ebook, QString &relativePath, bool &editMode, bool &modifiable) const; VToc getTabOutline() const; // Focus to current tab's editor void focusWindow(); void scrollCurTab(const VAnchor &anchor); protected: void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; signals: void tabStatusChanged(const QString ¬ebook, const QString &relativePath, bool editMode, bool modifiable); void requestSplitWindow(VEditWindow *curWindow); void requestRemoveSplit(VEditWindow *curWindow); // This widget or its children get the focus void getFocused(); void outlineChanged(const VToc &toc); void curHeaderChanged(const VAnchor &anchor); private slots: bool handleTabCloseRequest(int index); void splitWindow(); void removeSplit(); void handleTabbarClicked(int index); void contextMenuRequested(QPoint pos); void tabListJump(QAction *action); void handleOutlineChanged(const VToc &toc); void handleCurHeaderChanged(const VAnchor &anchor); private: void setupCornerWidget(); void openWelcomePage(); int insertTabWithData(int index, QWidget *page, const QJsonObject &tabData); int appendTabWithData(QWidget *page, const QJsonObject &tabData); int openFileInTab(const QString ¬ebook, const QString &relativePath, bool modifiable); inline QString getFileName(const QString &relativePath) const; inline VEditTab *getTab(int tabIndex) const; void noticeTabStatus(int index); void updateTabListMenu(); VNote *vnote; // Button in the right corner QPushButton *rightBtn; // Button in the left corner QPushButton *leftBtn; // Actions QAction *splitAct; QAction *removeSplitAct; QActionGroup *tabListAct; }; inline QString VEditWindow::getFileName(const QString &path) const { return QFileInfo(QDir::cleanPath(path)).fileName(); } inline VEditTab* VEditWindow::getTab(int tabIndex) const { return dynamic_cast(widget(tabIndex)); } #endif // VEDITWINDOW_H