8 #include <QApplication>
10 #include <QDragEnterEvent>
12 #include <QListIterator>
14 #include <QMouseEvent>
16 #include <QPropertyAnimation>
20 QPoint DockBar::sDragStartPosition;
21 DockButton* DockBar::sDragButton =
nullptr;
22 int DockBar::sBeginDropRange = 0;
23 int DockBar::sEndDropRange = 0;
24 int DockBar::sDropSpacing = 0;
25 DockButton* DockBar::sMoveMarker =
nullptr;
29 mOrientation = orientation;
64 sDragButton =
nullptr;
69 const DockMimeData* mime_data = qobject_cast<const DockMimeData*>(
event->mimeData());
72 event->acceptProposedAction();
75 sMoveMarker =
nullptr;
83 cursor_position =
event->pos().x();
85 cursor_position =
event->pos().y();
87 if (cursor_position < sBeginDropRange || cursor_position > sEndDropRange)
89 int button_position = mButtonOffset;
92 bool already_executed =
false;
93 bool move_marker_reached =
false;
95 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())
383 return mButtons.at(
index)->hidden();
395 mButtons.removeAt(
index);
398 if (mAutohide &&
unused())
410 if (button->widget() == widget)
413 button->setAvailable(
false);
414 button->setChecked(
false);
417 if (mAutohide &&
unused())
428 if (button->widget() == widget)
430 button->setAvailable(
true);
443 if (button->widget() == widget)
445 button->setChecked(
true);
455 if (button->widget() == widget)
457 button->setChecked(
false);
466 return mButtons.at(
index)->widget();
476 if (!button->hidden())
477 return button->widget();
481 if (
index >= mButtons.size())
486 if (!button->hidden())
487 widget = button->widget();
491 int current_index = 0;
495 if (!button->hidden())
497 widget = button->widget();
498 if (current_index >=
index)
510 button->widget()->hide();
511 button->widget()->setParent(
nullptr);
514 button->setParent(
nullptr);
532 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)