#pragma once #include "widgets/basewidget.hpp" #include "widgets/helper/droppreview.hpp" #include "widgets/helper/notebooktab.hpp" #include "widgets/split.hpp" #include #include #include #include #include #include namespace chatterino { namespace widgets { class SplitContainer : public BaseWidget { Q_OBJECT const std::string uuid; const std::string settingRoot; public: SplitContainer(Notebook *parent, NotebookTab *_tab, const std::string &_uuid); const std::string &getUUID() const { return this->uuid; } std::pair removeFromLayout(Split *widget); void addToLayout(Split *widget, std::pair position = std::pair(-1, -1)); const std::vector &getSplits() const; NotebookTab *getTab() const; void addChat(bool openChannelNameDialog = false, std::string chatUUID = std::string()); static bool isDraggingSplit; static Split *draggingSplit; static std::pair dropPosition; int currentX = 0; int currentY = 0; std::map lastRequestedY; void refreshCurrentFocusCoordinates(bool alsoSetLastRequested = false); void requestFocus(int x, int y); void updateFlexValues(); int splitCount() const; protected: virtual bool eventFilter(QObject *object, QEvent *event) override; virtual void paintEvent(QPaintEvent *) override; virtual void showEvent(QShowEvent *) override; virtual void enterEvent(QEvent *) override; virtual void leaveEvent(QEvent *) override; virtual void mouseReleaseEvent(QMouseEvent *event) override; virtual void dragEnterEvent(QDragEnterEvent *event) override; virtual void dragMoveEvent(QDragMoveEvent *event) override; virtual void dragLeaveEvent(QDragLeaveEvent *event) override; virtual void dropEvent(QDropEvent *event) override; private: struct DropRegion { QRect rect; std::pair position; DropRegion(QRect rect, std::pair position) { this->rect = rect; this->position = position; } }; NotebookTab *tab; struct { QVBoxLayout parentLayout; QHBoxLayout hbox; } ui; std::vector splits; std::vector dropRegions; pajlada::Settings::Setting>> chats; NotebookPageDropPreview dropPreview; void setPreviewRect(QPoint mousePos); std::pair getChatPosition(const Split *chatWidget); Split *createChatWidget(const std::string &uuid); public: void refreshTitle(); void loadSplits(); void save(); }; } // namespace widgets } // namespace chatterino