aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/taskbar.h
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/taskbar.h')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.h b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
new file mode 100644
index 0000000..e858f7b
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
@@ -0,0 +1,73 @@
+#ifndef TASKBAR_H
+#define TASKBAR_H
+
+#include "guiSQLiteStudio_global.h"
+#include <QToolBar>
+#include <QActionGroup>
+
+class QMimeData;
+class QToolButton;
+class QRubberBand;
+class ExtActionContainer;
+
+// TODO enclose task<->mdiWindow relation inside a task class and make it managed by taskbar, not by mdiarea
+class GUI_API_EXPORT TaskBar : public QToolBar
+{
+ Q_OBJECT
+ public:
+ TaskBar(const QString& title, QWidget *parent = 0);
+ explicit TaskBar(QWidget *parent = 0);
+
+ QAction* addTask(const QIcon& icon, const QString& text);
+ void removeTask(QAction* action);
+ QList<QAction*> getTasks() const;
+ bool isEmpty();
+ int count();
+
+ protected:
+ void mousePressEvent(QMouseEvent* event);
+ void mouseMoveEvent(QMouseEvent* event);
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dropEvent(QDropEvent* event);
+
+ private:
+ void init();
+ bool handleMouseMoveEvent(QMouseEvent* event);
+ QToolButton* getToolButton(QAction* action);
+ QAction* getNextClosestAction(const QPoint& position);
+ void dragTaskTo(QAction* task, const QPoint& position);
+ void dragTaskTo(QAction* task, int positionIndex);
+ QAction* getDragTask(const QMimeData* data);
+ QMimeData* generateMimeData();
+ int getActiveTaskIdx();
+
+ constexpr static const char* mimeDataId = "application/x-sqlitestudio-taskbar-task";
+
+ /**
+ * @brief getDropPositionIndex
+ * @param task
+ * @param position
+ * @return Index of action in actions() that drag should be inserting dropped item just before, or -1 to indicate "at the end".
+ */
+ int getDropPositionIndex(QAction* task, const QPoint& position);
+
+ QActionGroup taskGroup;
+ QList<QAction*> tasks;
+ QAction* dragStartTask = nullptr;
+ QPoint dragStartPosition;
+ int dragStartIndex;
+ int dragCurrentIndex;
+ QMenu* taskMenu = nullptr;
+
+ public slots:
+ void nextTask();
+ void prevTask();
+ void initContextMenu(ExtActionContainer *mainWin);
+
+ private slots:
+ void taskBarMenuRequested(const QPoint& p);
+ void mousePressed();
+};
+
+#endif // TASKBAR_H