Created CFloatingTitleWidget

This commit is contained in:
Uwe Kindler
2017-02-07 23:51:29 +01:00
parent 7f5e393cfb
commit 0716020ab4
12 changed files with 553 additions and 204 deletions

View File

@@ -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

View File

@@ -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;
};

View File

@@ -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

View File

@@ -8,6 +8,8 @@
#include "ads/API.h"
#include "ads/SectionContent.h"
class QPushButton;
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class SectionWidget;

View File

@@ -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;