fix #17 - get rid of static drop overlay

- holds one instance of DropOverlay for each ContainerWidget.
This commit is contained in:
mfreiholz
2016-04-15 08:21:23 +02:00
parent 823028c6aa
commit 5041f5076a
5 changed files with 112 additions and 107 deletions
@@ -18,6 +18,7 @@ class QGridLayout;
ADS_NAMESPACE_BEGIN
class SectionWidget;
class DropOverlay;
class InternalContentData;
@@ -178,6 +179,9 @@ private:
Qt::Orientation _orientation;
QPointer<QSplitter> _splitter; // $mfreiholz: I'd like to remove this variable entirely,
// because it changes during user interaction anyway.
// Drop overlay stuff.
QPointer<DropOverlay> _dropOverlay;
};
ADS_NAMESPACE_END
+13 -16
View File
@@ -1,6 +1,7 @@
#ifndef DROP_OVERLAY_H
#define DROP_OVERLAY_H
#include <QPointer>
#include <QRect>
#include <QFrame>
@@ -16,11 +17,17 @@ class DropOverlay : public QFrame
Q_OBJECT
public:
DropOverlay(DropAreas areas, QWidget* parent);
DropOverlay(QWidget* parent);
virtual ~DropOverlay();
void setDropAreas(DropAreas areas);
void setFullAreaDropEnabled(bool enabled) { _fullAreaDrop = enabled; }
DropArea cursorLocation() const;
DropArea showDropOverlay(QWidget* target, DropAreas areas = AllAreas);
void showDropOverlay(QWidget* target, const QRect& targetAreaRect, DropAreas areas = AllAreas);
void hideDropOverlay();
protected:
virtual void paintEvent(QPaintEvent *e);
virtual void resizeEvent(QResizeEvent* e);
@@ -29,24 +36,20 @@ protected:
private:
DropSplitAreas* _splitAreas;
bool _fullAreaDrop;
};
// AbstractDropAreas is used as base for drop area indicator widgets.
class AbstractDropAreas : public QWidget
{
public:
AbstractDropAreas(QWidget* parent) : QWidget(parent) {}
virtual DropArea cursorLocation() const = 0;
QPointer<QWidget> _target;
QRect _targetRect;
DropArea _lastLocation;
};
// DropSplitAreas shows a cross with 5 different drop area possibilities.
class DropSplitAreas : public AbstractDropAreas
class DropSplitAreas : public QWidget
{
Q_OBJECT
public:
DropSplitAreas(DropAreas areas, QWidget* parent);
virtual DropArea cursorLocation() const;
DropArea cursorLocation() const;
private:
QWidget* _top;
@@ -56,11 +59,5 @@ private:
QWidget* _center;
};
DropArea showDropOverlay(QWidget* parent, DropAreas areas = AllAreas);
void showDropOverlay(QWidget* parent, const QRect& areaRect, DropAreas areas = AllAreas);
void hideDropOverlay();
ADS_NAMESPACE_END
#endif