veditwindow.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #ifndef VEDITWINDOW_H
  2. #define VEDITWINDOW_H
  3. #include <QTabWidget>
  4. #include <QJsonObject>
  5. #include <QString>
  6. #include <QFileInfo>
  7. #include <QDir>
  8. #include "vnotebook.h"
  9. #include "vedittab.h"
  10. #include "vtoc.h"
  11. class VNote;
  12. class QPushButton;
  13. class QActionGroup;
  14. class VEditWindow : public QTabWidget
  15. {
  16. Q_OBJECT
  17. public:
  18. explicit VEditWindow(VNote *vnote, QWidget *parent = 0);
  19. int findTabByFile(const QString &notebook, const QString &relativePath) const;
  20. int openFile(const QString &notebook, const QString &relativePath,
  21. int mode);
  22. bool closeFile(const QString &notebook, const QString &relativePath, bool isForced);
  23. void editFile();
  24. void saveFile();
  25. void readFile();
  26. void saveAndReadFile();
  27. void handleNotebookRenamed(const QVector<VNotebook> &notebooks, const QString &oldName,
  28. const QString &newName);
  29. bool closeAllFiles();
  30. void setRemoveSplitEnable(bool enabled);
  31. void requestUpdateTabStatus();
  32. void requestUpdateOutline();
  33. void requestUpdateCurHeader();
  34. // Focus to current tab's editor
  35. void focusWindow();
  36. void scrollCurTab(const VAnchor &anchor);
  37. void handleDirectoryRenamed(const QString &notebook,
  38. const QString &oldRelativePath, const QString &newRelativePath);
  39. void handleFileRenamed(const QString &notebook,
  40. const QString &oldRelativePath, const QString &newRelativePath);
  41. protected:
  42. void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
  43. signals:
  44. void tabStatusChanged(const QString &notebook, const QString &relativePath,
  45. bool editMode, bool modifiable, bool modified);
  46. void requestSplitWindow(VEditWindow *curWindow);
  47. void requestRemoveSplit(VEditWindow *curWindow);
  48. // This widget or its children get the focus
  49. void getFocused();
  50. void outlineChanged(const VToc &toc);
  51. void curHeaderChanged(const VAnchor &anchor);
  52. private slots:
  53. bool handleTabCloseRequest(int index);
  54. void splitWindow();
  55. void removeSplit();
  56. void handleTabbarClicked(int index);
  57. void contextMenuRequested(QPoint pos);
  58. void tabListJump(QAction *action);
  59. void handleOutlineChanged(const VToc &toc);
  60. void handleCurHeaderChanged(const VAnchor &anchor);
  61. void handleTabStatusChanged();
  62. private:
  63. void setupCornerWidget();
  64. void openWelcomePage();
  65. int insertTabWithData(int index, QWidget *page, const QJsonObject &tabData);
  66. int appendTabWithData(QWidget *page, const QJsonObject &tabData);
  67. int openFileInTab(const QString &notebook, const QString &relativePath, bool modifiable);
  68. inline VEditTab *getTab(int tabIndex) const;
  69. void noticeTabStatus(int index);
  70. void updateTabListMenu();
  71. void noticeStatus(int index);
  72. inline QString generateTooltip(const QJsonObject &tabData) const;
  73. VNote *vnote;
  74. // Button in the right corner
  75. QPushButton *rightBtn;
  76. // Button in the left corner
  77. QPushButton *leftBtn;
  78. // Actions
  79. QAction *splitAct;
  80. QAction *removeSplitAct;
  81. QActionGroup *tabListAct;
  82. };
  83. inline VEditTab* VEditWindow::getTab(int tabIndex) const
  84. {
  85. return dynamic_cast<VEditTab *>(widget(tabIndex));
  86. }
  87. inline QString VEditWindow::generateTooltip(const QJsonObject &tabData) const
  88. {
  89. // [Notebook]relativePath
  90. return QString("[%1] %2").arg(tabData["notebook"].toString()).arg(tabData["relative_path"].toString());
  91. }
  92. #endif // VEDITWINDOW_H