blob: a7b7d4fb6a13e8cc53669b2536f893a2b4a7aba9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#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();
QAction* getActiveTask() const;
QAction* getNextTask(QAction* from = nullptr) const;
QAction* getPrevTask(QAction* from = nullptr) const;
protected:
void mousePressEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
void dragEnterEvent(QDragEnterEvent* event);
void dragMoveEvent(QDragMoveEvent* event);
void dropEvent(QDropEvent* event);
bool eventFilter(QObject *obj, QEvent *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);
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 setActiveTask(QAction* task);
void initContextMenu(ExtActionContainer *mainWin);
private slots:
void taskBarMenuRequested(const QPoint& p);
void mousePressed();
void taskBarMenuAboutToShow();
void taskBarMenuAboutToHide();
};
#endif // TASKBAR_H
|