Qt-Advanced-Docking-System/AdvancedDockingSystem/include/ads/FloatingWidget.h

104 lines
2.8 KiB
C
Raw Normal View History

2015-12-09 19:21:38 +08:00
#ifndef FLOATINGWIDGET_H
#define FLOATINGWIDGET_H
#include <QWidget>
2017-02-08 06:51:29 +08:00
#include <QFrame>
class QBoxLayout;
2015-12-09 19:21:38 +08:00
#include "ads/API.h"
#include "ads/SectionContent.h"
2015-12-09 19:21:38 +08:00
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
2015-12-09 19:21:38 +08:00
class SectionTitleWidget;
class SectionContentWidget;
class InternalContentData;
class SectionWidget;
2017-02-08 06:51:29 +08:00
class CContainerWidget;
class FloatingWidget;
class CFloatingTitleWidget : public QFrame
{
Q_OBJECT
private:
QPoint m_DragStartPosition;
QPoint m_DragStartMousePosition;
2017-02-08 06:51:29 +08:00
FloatingWidget* floatingWidget() const;
MainContainerWidget* mainContainerWidget() const;
void moveFloatingWidget(QMouseEvent* ev);
private slots:
void onMaximizeButtonClicked();
2017-02-08 06:51:29 +08:00
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();
};
2015-12-09 19:21:38 +08:00
// FloatingWidget holds and displays SectionContent as a floating window.
// It can be resized, moved and dropped back into a SectionWidget.
class FloatingWidget : public QWidget
{
Q_OBJECT
friend class MainContainerWidget;
friend class CFloatingTitleWidget;
2015-12-09 19:21:38 +08:00
public:
FloatingWidget(MainContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent = NULL);
FloatingWidget(SectionWidget* sectionWidget);
virtual ~FloatingWidget();
SectionContent::RefPtr content() const { return _content; }
2015-12-09 19:21:38 +08:00
/**
* Returns true, if this floating widget is dragged right now.
* That means, left mouse button is down in the title widget
*/
bool isDraggingActive() const;
/**
* Returns the current zOrderIndex
*/
unsigned int zOrderIndex() const;
2017-02-08 06:51:29 +08:00
CContainerWidget* containerWidget() const {return m_ContainerWidget;}
MainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;}
public://private:
bool takeContent(InternalContentData& data);
2015-12-09 19:21:38 +08:00
protected:
virtual void changeEvent(QEvent *event) override;
virtual void moveEvent(QMoveEvent *event) override;
virtual bool event(QEvent *e);
void titleMouseReleaseEvent();
virtual bool eventFilter(QObject *watched, QEvent *event) override;
void updateDropOverlays(const QPoint& GlobalPos);
private slots:
void onCloseButtonClicked();
2015-12-09 19:21:38 +08:00
private:
2017-02-08 06:51:29 +08:00
MainContainerWidget* m_MainContainerWidget;
2015-12-09 19:21:38 +08:00
SectionContent::RefPtr _content;
SectionTitleWidget* _titleWidget;
SectionContentWidget* _contentWidget;
2017-02-08 06:51:29 +08:00
CContainerWidget* m_ContainerWidget;
CContainerWidget* m_DropContainer;
bool m_DraggingActive = false;
unsigned int m_zOrderIndex = 0;
static unsigned int zOrderCounter;
2015-12-09 19:21:38 +08:00
};
ADS_NAMESPACE_END
2016-02-12 14:15:10 +08:00
#endif