9 #include <QApplication>
11 #include <QDragEnterEvent>
13 #include <QListIterator>
15 #include <QMouseEvent>
17 #include <QPropertyAnimation>
21 QPoint DockBar::sDragStartPosition;
22 DockButton* DockBar::sDragButton =
nullptr;
23 int DockBar::sBeginDropRange = 0;
24 int DockBar::sEndDropRange = 0;
25 int DockBar::sDropSpacing = 0;
26 DockButton* DockBar::sMoveMarker =
nullptr;
30 mOrientation = orientation;
65 sDragButton =
nullptr;
70 const DockMimeData* mime_data = qobject_cast<const DockMimeData*>(
event->mimeData());
73 event->acceptProposedAction();
76 sMoveMarker =
nullptr;
84 cursor_position =
event->pos().x();
86 cursor_position =
event->pos().y();
88 if (cursor_position < sBeginDropRange || cursor_position > sEndDropRange)
90 int button_position = mButtonOffset;
93 bool already_executed =
false;
94 bool move_marker_reached =
false;
96 for (button_iterator = mButtons.begin(); button_iterator != mButtons.end(); ++button_iterator)
98 if ((*button_iterator)->available())
100 if (button_position + (*button_iterator)->relativeWidth() < cursor_position)
102 if (*button_iterator == sMoveMarker)
103 move_marker_reached =
true;
105 if (move_marker_reached)
123 if (!already_executed)
125 sBeginDropRange = button_position;
126 sEndDropRange = button_position + (*button_iterator)->relativeWidth();
127 sMoveMarker = *button_iterator;
128 already_executed =
true;
143 animations.
append(animation);
145 button_position += (*button_iterator)->relativeWidth() + mButtonSpacing;
152 if (already_executed)
156 sMoveMarker =
nullptr;
168 const DockMimeData* mimedata = qobject_cast<const DockMimeData*>(
event->mimeData());
171 event->acceptProposedAction();
175 if (sMoveMarker ==
nullptr)
184 if (button == sMoveMarker)
202 sDragButton =
static_cast<DockButton*
>(watched);
214 width += button->width();
216 width += mButtons.size() * mButtonSpacing;
223 height += button->height();
225 height += mButtons.size() * mButtonSpacing;
237 width += button->width();
239 width += mButtons.size() * mButtonSpacing;
246 height += button->height();
248 height += mButtons.size() * mButtonSpacing;
260 mAutohide = autohide;
265 bool no_button_visible =
true;
268 if (!button->hidden())
270 no_button_visible =
false;
274 if (no_button_visible)
281 return mButtons.length();
289 if (button->widget() == widget)
298 int position = mButtonOffset;
301 if (button->available())
305 button->move(position, 0);
306 position += button->relativeWidth() + mButtonSpacing;
310 button->move(0, position);
311 position += button->relativeWidth() + mButtonSpacing;
319 int position = mButtonOffset;
322 if (button->available())
336 position += button->relativeWidth() + mButtonSpacing;
351 mButtons.insert(
index, button);
363 if (button->widget() == widget)
365 mButtons.removeOne(button);
370 if (mAutohide &&
unused())
385 mButtons.removeAt(
index);
388 if (mAutohide &&
unused())
400 if (button->widget() == widget)
403 button->setAvailable(
false);
404 button->setChecked(
false);
407 if (mAutohide &&
unused())
418 if (button->widget() == widget)
420 button->setAvailable(
true);
433 if (button->widget() == widget)
435 button->setChecked(
true);
445 if (button->widget() == widget)
447 button->setChecked(
false);
456 return mButtons.at(
index)->widget();
466 if (!button->hidden())
467 return button->widget();
471 if (
index >= mButtons.size())
476 if (!button->hidden())
477 widget = button->widget();
481 int current_index = 0;
485 if (!button->hidden())
487 widget = button->widget();
488 if (current_index >=
index)
500 button->widget()->hide();
501 button->widget()->setParent(
nullptr);
504 button->setParent(
nullptr);
522 if (mAutohide &&
unused())
An abstract class that provides the interface for specific anchors (see SplitterAnchor or TabWidget )...
virtual void add(ContentWidget *widget, int index)=0
static ContentDragRelay * instance()
Abstract class for Widgets within HAL's ContentArea.
void mouseMoveEvent(QMouseEvent *event) override
void dropEvent(QDropEvent *event) override
QSize sizeHint() const override
void dragEnterEvent(QDragEnterEvent *event) override
bool removeButton(ContentWidget *widget)
void setAnchor(ContentAnchor *anchor)
QSize minimumSizeHint() const override
int index(ContentWidget *widget)
void checkButton(ContentWidget *widget)
bool eventFilter(QObject *watched, QEvent *event) override
void setAutohide(bool autohide)
void reattachButton(ContentWidget *widget)
DockBar(Qt::Orientation orientation, button_orientation b_orientation, QWidget *parent=nullptr)
void uncheckButton(ContentWidget *widget)
void dragLeaveEvent(QDragLeaveEvent *event) override
ContentWidget * nextAvailableWidget(int index)
void detachButton(ContentWidget *widget)
void dragMoveEvent(QDragMoveEvent *event) override
void addButton(ContentWidget *widget, int index)
ContentWidget * widgetAt(int index)
QMineData to store and transfer information while dragging a DockButton.
ContentWidget * widget() const
void start(QAbstractAnimation::DeletionPolicy policy)
Qt::DropAction exec(Qt::DropActions supportedActions)
QPixmap pixmap() const const
void setHotSpot(const QPoint &hotspot)
void setMimeData(QMimeData *data)
void setPixmap(const QPixmap &pixmap)
virtual bool event(QEvent *e) override
void append(const T &value)
QPoint globalPos() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void setDuration(int msecs)
void setEndValue(const QVariant &value)
void setStartValue(const QVariant &value)