veditwindow.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. bool closeAllFiles(bool p_forced);
  28. void setRemoveSplitEnable(bool enabled);
  29. void requestUpdateTabStatus();
  30. void requestUpdateOutline();
  31. void requestUpdateCurHeader();
  32. // Focus to current tab's editor
  33. void focusWindow();
  34. void scrollCurTab(const VAnchor &anchor);
  35. void handleDirectoryRenamed(const QString &notebook,
  36. const QString &oldRelativePath, const QString &newRelativePath);
  37. void handleFileRenamed(const QString &p_srcNotebook, const QString &p_srcRelativePath,
  38. const QString &p_destNotebook, const QString &p_destRelativePath);
  39. protected:
  40. void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
  41. signals:
  42. void tabStatusChanged(const QString &notebook, const QString &relativePath,
  43. bool editMode, bool modifiable, bool modified);
  44. void requestSplitWindow(VEditWindow *curWindow);
  45. void requestRemoveSplit(VEditWindow *curWindow);
  46. // This widget or its children get the focus
  47. void getFocused();
  48. void outlineChanged(const VToc &toc);
  49. void curHeaderChanged(const VAnchor &anchor);
  50. private slots:
  51. bool handleTabCloseRequest(int index);
  52. void splitWindow();
  53. void removeSplit();
  54. void handleTabbarClicked(int index);
  55. void contextMenuRequested(QPoint pos);
  56. void tabListJump(QAction *action);
  57. void handleOutlineChanged(const VToc &toc);
  58. void handleCurHeaderChanged(const VAnchor &anchor);
  59. void handleTabStatusChanged();
  60. private:
  61. void setupCornerWidget();
  62. void openWelcomePage();
  63. int insertTabWithData(int index, QWidget *page, const QJsonObject &tabData);
  64. int appendTabWithData(QWidget *page, const QJsonObject &tabData);
  65. int openFileInTab(const QString &notebook, const QString &relativePath, bool modifiable);
  66. inline VEditTab *getTab(int tabIndex) const;
  67. void noticeTabStatus(int index);
  68. void updateTabListMenu();
  69. void noticeStatus(int index);
  70. inline QString generateTooltip(const QJsonObject &tabData) const;
  71. inline QString generateTabText(const QString &p_name, bool p_modified) const;
  72. VNote *vnote;
  73. // Button in the right corner
  74. QPushButton *rightBtn;
  75. // Button in the left corner
  76. QPushButton *leftBtn;
  77. // Actions
  78. QAction *splitAct;
  79. QAction *removeSplitAct;
  80. QActionGroup *tabListAct;
  81. };
  82. inline VEditTab* VEditWindow::getTab(int tabIndex) const
  83. {
  84. return dynamic_cast<VEditTab *>(widget(tabIndex));
  85. }
  86. inline QString VEditWindow::generateTooltip(const QJsonObject &tabData) const
  87. {
  88. // [Notebook]relativePath
  89. return QString("[%1] %2").arg(tabData["notebook"].toString()).arg(tabData["relative_path"].toString());
  90. }
  91. inline QString VEditWindow::generateTabText(const QString &p_name, bool p_modified) const
  92. {
  93. return p_modified ? (p_name + "*") : p_name;
  94. }
  95. #endif // VEDITWINDOW_H