Created CFloatingTitleWidget
This commit is contained in:
@@ -24,6 +24,7 @@ namespace ads
|
||||
class SectionWidget;
|
||||
class DropOverlay;
|
||||
class InternalContentData;
|
||||
class MainContainerWidget;
|
||||
|
||||
/**
|
||||
* @brief
|
||||
@@ -39,19 +40,54 @@ class CContainerWidget : public QFrame
|
||||
friend class ContainerWidgetPrivate;
|
||||
|
||||
public:
|
||||
explicit CContainerWidget(QWidget *parent = nullptr);
|
||||
explicit CContainerWidget(MainContainerWidget* MainContainerWidget, QWidget *parent = nullptr);
|
||||
virtual ~CContainerWidget();
|
||||
|
||||
void moveFloatingWidget(const QPoint& TargetPos);
|
||||
/**
|
||||
* Returns the current zOrderIndex
|
||||
*/
|
||||
unsigned int zOrderIndex() const;
|
||||
|
||||
void dropFloatingWidget(FloatingWidget* FloatingWidget,
|
||||
const QPoint& TargetPos);
|
||||
|
||||
SectionWidget* sectionWidgetAt(const QPoint& pos) const;
|
||||
|
||||
/**
|
||||
* This function returns true if this container widgets z order index is
|
||||
* higher than the index of the container widget given in Other parameter
|
||||
*/
|
||||
bool isInFrontOf(CContainerWidget* Other) const;
|
||||
|
||||
SectionWidget* dropContent(const InternalContentData& data, SectionWidget* targetSection, DropArea area, bool autoActive = true);
|
||||
|
||||
/*!
|
||||
* Adds the section-content <em>sc</em> to this container-widget into the section-widget <em>sw</em>.
|
||||
* If <em>sw</em> is not NULL, the <em>area</em> is used to indicate how the content should be arranged.
|
||||
* Returns a pointer to the SectionWidget of the added SectionContent. Do not use it for anything else than adding more
|
||||
* SectionContent elements with this method.
|
||||
*/
|
||||
SectionWidget* addSectionContent(const SectionContent::RefPtr& sc, SectionWidget* sw = NULL, DropArea area = CenterDropArea);
|
||||
|
||||
protected:
|
||||
virtual bool event(QEvent *e) override;
|
||||
SectionWidget* newSectionWidget();
|
||||
void addSectionWidget(SectionWidget* section);
|
||||
SectionWidget* dropContentOuterHelper(QLayout* l, const InternalContentData& data, Qt::Orientation orientation, bool append);
|
||||
SectionWidget* insertNewSectionWidget(const InternalContentData& data,
|
||||
SectionWidget* targetSection, SectionWidget* ret, Qt::Orientation Orientation, int InsertIndexOffset);
|
||||
|
||||
QList<SectionWidget*> m_Sections;
|
||||
// Layout stuff
|
||||
QGridLayout* m_MainLayout = nullptr;
|
||||
Qt::Orientation m_Orientation = Qt::Horizontal;
|
||||
QPointer<QSplitter> m_Splitter; // $mfreiholz: I'd like to remove this variable entirely,
|
||||
// because it changes during user interaction anyway.
|
||||
|
||||
// Drop overlay stuff.
|
||||
QPointer<DropOverlay> m_SectionDropOverlay;
|
||||
QPointer<DropOverlay> m_ContainerDropOverlay;
|
||||
MainContainerWidget* m_MainContainerWidget = 0;
|
||||
unsigned int m_zOrderIndex = 0;
|
||||
static unsigned int zOrderCounter;
|
||||
};
|
||||
|
||||
} // namespace ads
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define FLOATINGWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QFrame>
|
||||
class QBoxLayout;
|
||||
|
||||
#include "ads/API.h"
|
||||
@@ -13,6 +14,30 @@ class SectionTitleWidget;
|
||||
class SectionContentWidget;
|
||||
class InternalContentData;
|
||||
class SectionWidget;
|
||||
class CContainerWidget;
|
||||
class FloatingWidget;
|
||||
|
||||
class CFloatingTitleWidget : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
QPoint m_DragStartPosition;
|
||||
FloatingWidget* floatingWidget() const;
|
||||
MainContainerWidget* mainContainerWidget() const;
|
||||
void moveFloatingWidget(QMouseEvent* ev, MainContainerWidget* MainContainer);
|
||||
|
||||
protected:
|
||||
virtual void mousePressEvent(QMouseEvent* ev);
|
||||
virtual void mouseReleaseEvent(QMouseEvent* ev);
|
||||
virtual void mouseMoveEvent(QMouseEvent* ev);
|
||||
|
||||
public:
|
||||
CFloatingTitleWidget(SectionContent::Flags Flags, FloatingWidget* Parent);
|
||||
|
||||
signals:
|
||||
void closeButtonClicked();
|
||||
};
|
||||
|
||||
|
||||
// FloatingWidget holds and displays SectionContent as a floating window.
|
||||
// It can be resized, moved and dropped back into a SectionWidget.
|
||||
@@ -40,6 +65,9 @@ public:
|
||||
*/
|
||||
unsigned int zOrderIndex() const;
|
||||
|
||||
CContainerWidget* containerWidget() const {return m_ContainerWidget;}
|
||||
MainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;}
|
||||
|
||||
public://private:
|
||||
bool takeContent(InternalContentData& data);
|
||||
|
||||
@@ -50,12 +78,13 @@ private slots:
|
||||
void onCloseButtonClicked();
|
||||
|
||||
private:
|
||||
MainContainerWidget* _container;
|
||||
MainContainerWidget* m_MainContainerWidget;
|
||||
SectionContent::RefPtr _content;
|
||||
SectionTitleWidget* _titleWidget;
|
||||
SectionContentWidget* _contentWidget;
|
||||
CContainerWidget* m_ContainerWidget;
|
||||
|
||||
QBoxLayout* _titleLayout;
|
||||
//QBoxLayout* _titleLayout;
|
||||
unsigned int m_zOrderIndex = 0;
|
||||
static unsigned int zOrderCounter;
|
||||
};
|
||||
|
||||
@@ -39,6 +39,7 @@ class ADS_EXPORT_API MainContainerWidget : public CContainerWidget
|
||||
friend class FloatingWidget;
|
||||
friend class SectionTitleWidget;
|
||||
friend class ContainerWidgetPrivate;
|
||||
friend class CFloatingTitleWidget;
|
||||
|
||||
public:
|
||||
explicit MainContainerWidget(QWidget *parent = nullptr);
|
||||
@@ -119,6 +120,10 @@ public:
|
||||
*/
|
||||
QPointer<DropOverlay> sectionDropOverlay() const;
|
||||
|
||||
QPointer<DropOverlay> dropOverlay() const;
|
||||
|
||||
static QSplitter* newSplitter(Qt::Orientation orientation = Qt::Horizontal, QWidget* parent = 0);
|
||||
|
||||
/**
|
||||
* Filters the events of the floating widgets
|
||||
*/
|
||||
@@ -128,12 +133,8 @@ private:
|
||||
//
|
||||
// Internal Stuff Begins Here
|
||||
//
|
||||
|
||||
SectionWidget* newSectionWidget();
|
||||
SectionWidget* dropContent(const InternalContentData& data, SectionWidget* targetSection, DropArea area, bool autoActive = true);
|
||||
void addSectionWidget(SectionWidget* section);
|
||||
SectionWidget* sectionWidgetAt(const QPoint& pos) const;
|
||||
SectionWidget* dropContentOuterHelper(QLayout* l, const InternalContentData& data, Qt::Orientation orientation, bool append);
|
||||
|
||||
// Serialization
|
||||
QByteArray saveHierarchy() const;
|
||||
@@ -149,8 +150,6 @@ private:
|
||||
bool takeContent(const SectionContent::RefPtr& sc, InternalContentData& data);
|
||||
FloatingWidget* startFloating(SectionWidget* sectionwidget, int ContentUid, const QPoint& TargetPos);
|
||||
void hideContainerOverlay();
|
||||
SectionWidget* insertNewSectionWidget(const InternalContentData& data,
|
||||
SectionWidget* targetSection, SectionWidget* ret, Qt::Orientation Orientation, int InsertIndexOffset);
|
||||
void moveFloatingWidget(const QPoint& TargetPos);
|
||||
void dropFloatingWidget(FloatingWidget* FloatingWidget, const QPoint& TargetPos);
|
||||
|
||||
@@ -178,13 +177,16 @@ signals:
|
||||
private:
|
||||
QList<SectionWidget*> m_Sections;
|
||||
QList<FloatingWidget*> m_Floatings;
|
||||
QList<CContainerWidget*> m_Containers;
|
||||
QHash<int, HiddenSectionItem> m_HiddenSectionContents;
|
||||
|
||||
|
||||
// Helper lookup maps, restricted to this container.
|
||||
QHash<int, SectionContent::WeakPtr> m_SectionContentIdMap;
|
||||
QHash<QString, SectionContent::WeakPtr> m_SectionContentNameMap;
|
||||
QHash<int, SectionWidget*> m_SectionWidgetIdMap;
|
||||
|
||||
QPointer<DropOverlay> m_ContainerDropOverlay;
|
||||
QPointer<DropOverlay> m_SectionDropOverlay;
|
||||
};
|
||||
|
||||
ADS_NAMESPACE_END
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "ads/API.h"
|
||||
#include "ads/SectionContent.h"
|
||||
|
||||
class QPushButton;
|
||||
|
||||
ADS_NAMESPACE_BEGIN
|
||||
class MainContainerWidget;
|
||||
class SectionWidget;
|
||||
|
||||
@@ -28,14 +28,15 @@ class ADS_EXPORT_API SectionWidget : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
friend class MainContainerWidget;
|
||||
friend class CContainerWidget;
|
||||
|
||||
explicit SectionWidget(MainContainerWidget* parent);
|
||||
explicit SectionWidget(MainContainerWidget* MainContainer, CContainerWidget* parent);
|
||||
|
||||
public:
|
||||
virtual ~SectionWidget();
|
||||
|
||||
int uid() const;
|
||||
MainContainerWidget* containerWidget() const;
|
||||
CContainerWidget* containerWidget() const;
|
||||
|
||||
QRect titleAreaGeometry() const;
|
||||
QRect contentAreaGeometry() const;
|
||||
@@ -69,7 +70,8 @@ private slots:
|
||||
private:
|
||||
const int _uid;
|
||||
|
||||
QPointer<MainContainerWidget> _container;
|
||||
QPointer<CContainerWidget> m_ContainerWidget;
|
||||
QPointer<MainContainerWidget> m_MainContainerWidget;
|
||||
QList<SectionContent::RefPtr> _contents;
|
||||
QList<SectionTitleWidget*> _sectionTitles;
|
||||
QList<SectionContentWidget*> _sectionContents;
|
||||
|
||||
Reference in New Issue
Block a user