From 635b96a2ae2c1ac0da030d446a2b8c63f021dcee Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Wed, 15 Feb 2017 21:54:26 +0100 Subject: [PATCH] Fixed some issues with mouse double clicks, remove unused and supefluous code --- AdvancedDockingSystem/include/ads/API.h | 2 - .../include/ads/ContainerWidget.h | 2 + .../include/ads/FloatingWidget.h | 7 -- .../include/ads/SectionTitleWidget.h | 9 --- AdvancedDockingSystem/src/API.cpp | 31 -------- AdvancedDockingSystem/src/ContainerWidget.cpp | 2 +- AdvancedDockingSystem/src/FloatingWidget.cpp | 28 +++----- .../src/MainContainerWidget.cpp | 8 +-- .../src/SectionTitleWidget.cpp | 70 +++++++++++-------- 9 files changed, 57 insertions(+), 102 deletions(-) diff --git a/AdvancedDockingSystem/include/ads/API.h b/AdvancedDockingSystem/include/ads/API.h index 0bffc8b..c20ef60 100644 --- a/AdvancedDockingSystem/include/ads/API.h +++ b/AdvancedDockingSystem/include/ads/API.h @@ -66,8 +66,6 @@ enum DropArea Q_DECLARE_FLAGS(DropAreas, DropArea) void deleteEmptySplitter(MainContainerWidget* container); -MainContainerWidget* findParentContainerWidget(QWidget* w); -SectionWidget* findParentSectionWidget(QWidget* w); QSplitter* findParentSplitter(QWidget* w); QSplitter* findImmediateSplitter(QWidget* w); diff --git a/AdvancedDockingSystem/include/ads/ContainerWidget.h b/AdvancedDockingSystem/include/ads/ContainerWidget.h index 9880654..33ffcbf 100644 --- a/AdvancedDockingSystem/include/ads/ContainerWidget.h +++ b/AdvancedDockingSystem/include/ads/ContainerWidget.h @@ -71,6 +71,8 @@ public: void dumpLayout(); + MainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;} + signals: /*! * Emits whenever the "isActiveTab" state of a SectionContent changes. diff --git a/AdvancedDockingSystem/include/ads/FloatingWidget.h b/AdvancedDockingSystem/include/ads/FloatingWidget.h index d4196e3..4766b0c 100644 --- a/AdvancedDockingSystem/include/ads/FloatingWidget.h +++ b/AdvancedDockingSystem/include/ads/FloatingWidget.h @@ -59,12 +59,6 @@ public: SectionContent::RefPtr content() const { return _content; } - /** - * 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 */ @@ -99,7 +93,6 @@ private: CContainerWidget* m_ContainerWidget; CContainerWidget* m_DropContainer; bool m_DraggingActive = false; - bool m_NonCLientDraggingActive = false; unsigned int m_zOrderIndex = 0; QPoint m_DragStartPosition; QPoint m_DragStartMousePosition; diff --git a/AdvancedDockingSystem/include/ads/SectionTitleWidget.h b/AdvancedDockingSystem/include/ads/SectionTitleWidget.h index f37d2b7..c930e19 100644 --- a/AdvancedDockingSystem/include/ads/SectionTitleWidget.h +++ b/AdvancedDockingSystem/include/ads/SectionTitleWidget.h @@ -27,7 +27,6 @@ class SectionTitleWidget : public QFrame SectionContent::RefPtr m_Content; // Drag & Drop (Floating) - QPointer m_FloatingWidget; QPoint m_DragStartMousePosition; QPoint m_DragStartGlobalMousePosition; QPoint m_DragStartPosition; @@ -45,14 +44,6 @@ public: bool isActiveTab() const; void setActiveTab(bool active); - /** - * Returns true, if this sections title widget is currently dragging - * a floating widget - */ - bool isDraggingFloatingWidget() const; - - virtual bool event(QEvent *e); - protected: virtual void mousePressEvent(QMouseEvent* ev); virtual void mouseReleaseEvent(QMouseEvent* ev); diff --git a/AdvancedDockingSystem/src/API.cpp b/AdvancedDockingSystem/src/API.cpp index 3cf46c7..8944462 100644 --- a/AdvancedDockingSystem/src/API.cpp +++ b/AdvancedDockingSystem/src/API.cpp @@ -47,37 +47,6 @@ void deleteEmptySplitter(MainContainerWidget* container) while (doAgain); } -MainContainerWidget* findParentContainerWidget(QWidget* w) -{ - MainContainerWidget* cw = 0; - QWidget* next = w; - do - { - if ((cw = dynamic_cast(next)) != 0) - { - break; - } - next = next->parentWidget(); - } - while (next); - return cw; -} - -SectionWidget* findParentSectionWidget(class QWidget* w) -{ - SectionWidget* cw = 0; - QWidget* next = w; - do - { - if ((cw = dynamic_cast(next)) != 0) - { - break; - } - next = next->parentWidget(); - } - while (next); - return cw; -} QSplitter* findParentSplitter(class QWidget* w) { diff --git a/AdvancedDockingSystem/src/ContainerWidget.cpp b/AdvancedDockingSystem/src/ContainerWidget.cpp index 5a2381a..0a1e305 100644 --- a/AdvancedDockingSystem/src/ContainerWidget.cpp +++ b/AdvancedDockingSystem/src/ContainerWidget.cpp @@ -183,7 +183,7 @@ void CContainerWidget::dropIntoContainer(FloatingWidget* FloatingWidget, DropAre l->addWidget(sp); for (auto SectionWidget : SectionWidgets) { - sp->insertWidget(0, SectionWidget); + sp->addWidget(SectionWidget); } } else if ((FloatingMainSplitter->orientation() == orientation) && diff --git a/AdvancedDockingSystem/src/FloatingWidget.cpp b/AdvancedDockingSystem/src/FloatingWidget.cpp index 1aab848..5a1c4e8 100644 --- a/AdvancedDockingSystem/src/FloatingWidget.cpp +++ b/AdvancedDockingSystem/src/FloatingWidget.cpp @@ -137,7 +137,7 @@ void CFloatingTitleWidget::onMaximizeButtonClicked() FloatingWidget::FloatingWidget(MainContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent) : - QWidget(parent, Qt::Window/*Qt::CustomizeWindowHint | Qt::Tool*/), + QWidget(0), m_MainContainerWidget(container), _content(sc), _titleWidget(titleWidget), @@ -208,34 +208,25 @@ void FloatingWidget::onCloseButtonClicked() m_MainContainerWidget->hideSectionContent(_content); } -bool FloatingWidget::isDraggingActive() const -{ - return _titleWidget->isDraggingFloatingWidget(); -} - void FloatingWidget::changeEvent(QEvent *event) { QWidget::changeEvent(event); - if (event->type() != QEvent::ActivationChange) + if (event->type() == QEvent::ActivationChange && isActiveWindow()) { std::cout << "FloatingWidget::changeEvent QEvent::ActivationChange " << std::endl; + m_zOrderIndex = ++zOrderCounter; return; } - - if (isActiveWindow()) - { - m_zOrderIndex = ++zOrderCounter; - } } void FloatingWidget::moveEvent(QMoveEvent *event) { QWidget::moveEvent(event); - if (m_DraggingActive) + if (m_DraggingActive && qApp->mouseButtons().testFlag(Qt::LeftButton)) { - std::cout << "Dragging" << std::endl; + //std::cout << "Dragging" << std::endl; updateDropOverlays(QCursor::pos()); } } @@ -270,12 +261,16 @@ bool FloatingWidget::event(QEvent *e) { std::cout << "FloatingWidget::event Event::NonClientAreaMouseButtonPress" << e->type() << std::endl; setDraggingActive(true); - m_NonCLientDraggingActive = true; } } + else if (e->type() == QEvent::NonClientAreaMouseButtonDblClick) + { + std::cout << "FloatingWidget::event QEvent::NonClientAreaMouseButtonDblClick" << std::endl; + setDraggingActive(false); + } else if ((e->type() == QEvent::NonClientAreaMouseButtonRelease) && m_DraggingActive) { - std::cout << "FloatingWidget::event QEvent::NonClientAreaMouseButtonRelease" << e->type() << std::endl; + std::cout << "FloatingWidget::event QEvent::NonClientAreaMouseButtonRelease" << std::endl; titleMouseReleaseEvent(); } return QWidget::event(e); @@ -318,7 +313,6 @@ void FloatingWidget::startFloating(const QPoint& Pos) void FloatingWidget::titleMouseReleaseEvent() { setDraggingActive(false); - m_NonCLientDraggingActive = false; if (!m_DropContainer) { return; diff --git a/AdvancedDockingSystem/src/MainContainerWidget.cpp b/AdvancedDockingSystem/src/MainContainerWidget.cpp index ef0f737..aa58b8d 100644 --- a/AdvancedDockingSystem/src/MainContainerWidget.cpp +++ b/AdvancedDockingSystem/src/MainContainerWidget.cpp @@ -33,13 +33,11 @@ QSplitter* MainContainerWidget::newSplitter(Qt::Orientation orientation, QWidget } - MainContainerWidget::MainContainerWidget(QWidget *parent) : CContainerWidget(this, parent) { - m_SectionDropOverlay = new DropOverlay(this, DropOverlay::ModeSectionOverlay); - - m_ContainerDropOverlay = new DropOverlay(this, DropOverlay::ModeContainerOverlay); + m_SectionDropOverlay = new DropOverlay(0, DropOverlay::ModeSectionOverlay); + m_ContainerDropOverlay = new DropOverlay(0, DropOverlay::ModeContainerOverlay); m_ContainerDropOverlay->setAttribute(Qt::WA_TransparentForMouseEvents); m_ContainerDropOverlay->setWindowFlags(m_ContainerDropOverlay->windowFlags() | Qt::WindowTransparentForInput); m_Containers.append(this); @@ -817,7 +815,7 @@ bool MainContainerWidget::restoreFloatingWidgets(QDataStream& in, int version, Q fw->_contentWidget->setVisible(visible); } floatings.append(fw); - data.titleWidget->m_FloatingWidget = fw; // $mfreiholz: Don't look at it :-< It's more than ugly... + //data.titleWidget->m_FloatingWidget = fw; // $mfreiholz: Don't look at it :-< It's more than ugly... } return true; } diff --git a/AdvancedDockingSystem/src/SectionTitleWidget.cpp b/AdvancedDockingSystem/src/SectionTitleWidget.cpp index a93015c..1727233 100644 --- a/AdvancedDockingSystem/src/SectionTitleWidget.cpp +++ b/AdvancedDockingSystem/src/SectionTitleWidget.cpp @@ -13,11 +13,6 @@ #include -#ifdef ADS_ANIMATIONS_ENABLED -#include -#include -#endif - #include "ads/Internal.h" #include "ads/DropOverlay.h" #include "ads/SectionContent.h" @@ -80,13 +75,47 @@ void SectionTitleWidget::mousePressEvent(QMouseEvent* ev) QFrame::mousePressEvent(ev); } + +CContainerWidget* findParentContainerWidget(QWidget* w) +{ + CContainerWidget* cw = 0; + QWidget* next = w; + do + { + if ((cw = dynamic_cast(next)) != 0) + { + break; + } + next = next->parentWidget(); + } + while (next); + return cw; +} + +SectionWidget* findParentSectionWidget(class QWidget* w) +{ + SectionWidget* cw = 0; + QWidget* next = w; + do + { + if ((cw = dynamic_cast(next)) != 0) + { + break; + } + next = next->parentWidget(); + } + while (next); + return cw; +} + void SectionTitleWidget::mouseReleaseEvent(QMouseEvent* ev) { SectionWidget* section = nullptr; - MainContainerWidget* cw = findParentContainerWidget(this); + CContainerWidget* cw = findParentContainerWidget(this); + MainContainerWidget* mcw = cw->mainContainerWidget(); std::cout << "SectionTitleWidget::mouseReleaseEvent" << std::endl; - m_FloatingWidget.clear(); + //m_FloatingWidget.clear(); // End of tab moving, change order now if (m_TabMoving && (section = findParentSectionWidget(this)) != nullptr) { @@ -111,8 +140,8 @@ void SectionTitleWidget::mouseReleaseEvent(QMouseEvent* ev) // Reset m_DragStartMousePosition = QPoint(); m_TabMoving = false; - cw->m_SectionDropOverlay->hideDropOverlay(); - cw->hideContainerOverlay(); + mcw->m_SectionDropOverlay->hideDropOverlay(); + mcw->hideContainerOverlay(); QFrame::mouseReleaseEvent(ev); } @@ -125,7 +154,7 @@ void SectionTitleWidget::moveFloatingWidget(QMouseEvent* ev, MainContainerWidget m_FloatingWidget->move(moveToGlobalPos);*/ const QPoint moveToPos = ev->globalPos() - m_DragStartMousePosition; - m_FloatingWidget->move(moveToPos); + //m_FloatingWidget->move(moveToPos); } @@ -202,11 +231,6 @@ void SectionTitleWidget::moveTab(QMouseEvent* ev) } -bool SectionTitleWidget::isDraggingFloatingWidget() const -{ - return !m_FloatingWidget.isNull(); -} - void SectionTitleWidget::mouseMoveEvent(QMouseEvent* ev) { std::cout << "SectionTitleWidget::mouseMoveEvent" << std::endl; @@ -218,17 +242,9 @@ void SectionTitleWidget::mouseMoveEvent(QMouseEvent* ev) // TODO make a member with the main container widget and assign it on // creation - MainContainerWidget* MainContainerWidget = findParentContainerWidget(this); + MainContainerWidget* MainContainerWidget = findParentContainerWidget(this)->mainContainerWidget(); ev->accept(); - // Move already existing FloatingWidget - if (isDraggingFloatingWidget()) - { - std::cout << "SectionTitleWidget isDraggingFloatingWidget()" << std::endl; - //moveFloatingWidget(ev, MainContainerWidget); - return; - } - SectionWidget* sectionwidget = findParentSectionWidget(this); if (!sectionwidget) @@ -267,10 +283,4 @@ void SectionTitleWidget::mouseMoveEvent(QMouseEvent* ev) QFrame::mouseMoveEvent(ev); } - -bool SectionTitleWidget::event(QEvent *e) -{ - return QFrame::event(e); -} - ADS_NAMESPACE_END