#ifndef VMAINWINDOW_H #define VMAINWINDOW_H #include #include #include #include #include #include "vfile.h" #include "vedittab.h" class QLabel; class QComboBox; class VDirectoryTree; class QSplitter; class QListWidget; class QTabWidget; class QToolBar; class VNote; class QAction; class QPushButton; class VNotebook; class QActionGroup; class VFileList; class VEditArea; class QToolBox; class VOutline; class VNotebookSelector; class VAvatar; class VFindReplaceDialog; class VCaptain; class VVimIndicator; class VMainWindow : public QMainWindow { Q_OBJECT public: friend class VCaptain; VMainWindow(QWidget *parent = 0); const QVector > &getPalette() const; void locateFile(VFile *p_file); void locateCurrentFile(); private slots: void importNoteFromFile(); void viewSettings(); void changeMarkdownConverter(QAction *action); void aboutMessage(); void shortcutHelp(); void changeExpandTab(bool checked); void setTabStopWidth(QAction *action); void setEditorBackgroundColor(QAction *action); void setRenderBackgroundColor(QAction *action); void setRenderStyle(QAction *p_action); void setEditorStyle(QAction *p_action); void updateRenderStyleMenu(); void updateEditorStyleMenu(); void changeHighlightCursorLine(bool p_checked); void changeHighlightSelectedWord(bool p_checked); void changeHighlightSearchedWord(bool p_checked); void changeHighlightTrailingSapce(bool p_checked); void handleCurTabStatusChanged(const VFile *p_file, const VEditTab *p_editTab, bool p_editMode); void onePanelView(); void twoPanelView(); void expandPanelView(bool p_checked); void curEditFileInfo(); void deleteCurNote(); void handleCurrentDirectoryChanged(const VDirectory *p_dir); void handleCurrentNotebookChanged(const VNotebook *p_notebook); void insertImage(); void handleFindDialogTextChanged(const QString &p_text, uint p_options); void openFindDialog(); void enableMermaid(bool p_checked); void enableMathjax(bool p_checked); void handleCaptainModeChanged(bool p_enabled); void changeAutoIndent(bool p_checked); void changeAutoList(bool p_checked); void changeVimMode(bool p_checked); void enableCodeBlockHighlight(bool p_checked); void enableImagePreview(bool p_checked); void enableImagePreviewConstraint(bool p_checked); void enableImageConstraint(bool p_checked); void enableImageCaption(bool p_checked); void printNote(); void exportAsPDF(); // Show a temporary message in status bar. void showStatusMessage(const QString &p_msg); // Handle Vim status updated. void handleVimStatusUpdated(const VVim *p_vim); protected: void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; private: void setupUI(); QWidget *setupDirectoryPanel(); void initToolBar(); void initFileToolBar(); void initViewToolBar(); void initMenuBar(); void initFileMenu(); void initEditMenu(); void initViewMenu(); void initMarkdownMenu(); void initHelpMenu(); void initDockWindows(); void initAvatar(); void initPredefinedColorPixmaps(); void initRenderBackgroundMenu(QMenu *menu); void initRenderStyleMenu(QMenu *p_menu); void initEditorBackgroundMenu(QMenu *menu); void initEditorStyleMenu(QMenu *p_emnu); void changeSplitterView(int nrPanel); void updateWindowTitle(const QString &str); void updateActionStateFromTabStatusChange(const VFile *p_file, bool p_editMode); void saveStateAndGeometry(); void restoreStateAndGeometry(); void repositionAvatar(); void initCaptain(); void toggleOnePanelView(); void closeCurrentFile(); // Update status bar information according to m_curTab and m_curFile. void updateStatusInfo(bool p_editMode); // Wrapper to create a QAction. QAction *newAction(const QIcon &p_icon, const QString &p_text, QObject *p_parent = nullptr); VNote *vnote; QPointer m_curFile; QPointer m_curTab; VCaptain *m_captain; QLabel *notebookLabel; QLabel *directoryLabel; VNotebookSelector *notebookSelector; VFileList *fileList; VDirectoryTree *directoryTree; QSplitter *mainSplitter; VEditArea *editArea; QDockWidget *toolDock; QToolBox *toolBox; VOutline *outline; VAvatar *m_avatar; VFindReplaceDialog *m_findReplaceDialog; VVimIndicator *m_vimIndicator; // Whether it is one panel or two panles. bool m_onePanel; // Actions QAction *newRootDirAct; QAction *newNoteAct; QAction *noteInfoAct; QAction *deleteNoteAct; QAction *editNoteAct; QAction *saveNoteAct; QAction *saveExitAct; QAction *discardExitAct; QAction *expandViewAct; QAction *m_importNoteAct; QAction *m_printAct; QAction *m_exportAsPDFAct; QAction *m_insertImageAct; QAction *m_findReplaceAct; QAction *m_findNextAct; QAction *m_findPreviousAct; QAction *m_replaceAct; QAction *m_replaceFindAct; QAction *m_replaceAllAct; QAction *m_autoIndentAct; QActionGroup *m_renderStyleActs; QActionGroup *m_editorStyleActs; // Menus QMenu *viewMenu; QVector predefinedColorPixmaps; }; #endif // VMAINWINDOW_H