#ifndef NOTEBOOKPAGE_H #define NOTEBOOKPAGE_H #include "widgets/chatwidget.h" #include "widgets/notebookpage.h" #include "widgets/notebookpagedroppreview.h" #include "widgets/notebooktab.h" #include #include #include #include #include #include #include #include namespace chatterino { namespace widgets { class NotebookPage : public QWidget { Q_OBJECT public: NotebookPage(QWidget *parent, NotebookTab *tab); NotebookTab *tab; std::pair removeFromLayout(ChatWidget *widget); void addToLayout(ChatWidget *widget, std::pair position); const std::vector & getChatWidgets() const { return chatWidgets; } static bool isDraggingSplit; static ChatWidget *draggingSplit; static std::pair dropPosition; protected: void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; void enterEvent(QEvent *) override; void leaveEvent(QEvent *) override; void mouseReleaseEvent(QMouseEvent *event) override; void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; struct DropRegion { QRect rect; std::pair position; DropRegion(QRect rect, std::pair position) { this->rect = rect; this->position = position; } }; QVBoxLayout parentbox; QHBoxLayout hbox; std::vector chatWidgets; std::vector dropRegions; NotebookPageDropPreview preview; private: void setPreviewRect(QPoint mousePos); std::pair getChatPosition(const ChatWidget *chatWidget); public: void load(const boost::property_tree::ptree &tree); boost::property_tree::ptree save(); }; } // namespace widgets } // namespace chatterino #endif // NOTEBOOKPAGE_H