Refactorings to improve code, started to refactor secion content

This commit is contained in:
Uwe Kindler 2017-02-22 22:33:48 +01:00
parent 938afb7357
commit ad49745b18
22 changed files with 301 additions and 140 deletions

View File

@ -65,7 +65,7 @@ class QSplitter;
//#define ADS_ANIMATION_DURATION 150
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class CMainContainerWidget;
class SectionWidget;
enum DropArea
@ -82,7 +82,7 @@ enum DropArea
};
Q_DECLARE_FLAGS(DropAreas, DropArea)
void deleteEmptySplitter(MainContainerWidget* container);
void deleteEmptySplitter(CMainContainerWidget* container);
QSplitter* findParentSplitter(QWidget* w);
QSplitter* findImmediateSplitter(QWidget* w);

View File

@ -35,7 +35,7 @@ namespace ads
class SectionWidget;
class DropOverlay;
class InternalContentData;
class MainContainerWidget;
class CMainContainerWidget;
/**
* @brief
@ -51,7 +51,7 @@ class CContainerWidget : public QFrame
friend class ContainerWidgetPrivate;
public:
explicit CContainerWidget(MainContainerWidget* MainContainerWidget, QWidget *parent = nullptr);
explicit CContainerWidget(CMainContainerWidget* MainContainerWidget, QWidget *parent = nullptr);
virtual ~CContainerWidget();
/**
@ -82,7 +82,7 @@ public:
void dumpLayout();
MainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;}
CMainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;}
void addSectionWidget(SectionWidget* section);
@ -112,7 +112,7 @@ protected:
QPointer<QSplitter> m_Splitter; // $mfreiholz: I'd like to remove this variable entirely,
// because it changes during user interaction anyway.
MainContainerWidget* m_MainContainerWidget = 0;
CMainContainerWidget* m_MainContainerWidget = 0;
unsigned int m_zOrderIndex = 0;
static unsigned int zOrderCounter;

View File

@ -25,9 +25,9 @@ class QBoxLayout;
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class CMainContainerWidget;
class SectionTitleWidget;
class SectionContentWidget;
class CSectionContentWidget;
class InternalContentData;
class SectionWidget;
class CContainerWidget;
@ -40,7 +40,7 @@ private:
QPoint m_DragStartPosition;
QPoint m_DragStartMousePosition;
FloatingWidget* floatingWidget() const;
MainContainerWidget* mainContainerWidget() const;
CMainContainerWidget* mainContainerWidget() const;
void moveFloatingWidget(QMouseEvent* ev);
private slots:
@ -65,12 +65,12 @@ class FloatingWidget : public QWidget
{
Q_OBJECT
friend class MainContainerWidget;
friend class CMainContainerWidget;
friend class CFloatingTitleWidget;
public:
FloatingWidget(MainContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent = NULL);
FloatingWidget(MainContainerWidget* container, SectionWidget* sectionWidget);
FloatingWidget(CMainContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, CSectionContentWidget* contentWidget, QWidget* parent = NULL);
FloatingWidget(CMainContainerWidget* container, SectionWidget* sectionWidget);
virtual ~FloatingWidget();
/**
@ -79,7 +79,7 @@ public:
unsigned int zOrderIndex() const;
CContainerWidget* containerWidget() const {return m_ContainerWidget;}
MainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;}
CMainContainerWidget* mainContainerWidget() const {return m_MainContainerWidget;}
public://private:
bool takeContent(InternalContentData& data);
@ -100,7 +100,7 @@ private slots:
private:
void setDraggingActive(bool Active);
MainContainerWidget* m_MainContainerWidget;
CMainContainerWidget* m_MainContainerWidget;
CContainerWidget* m_ContainerWidget;
CContainerWidget* m_DropContainer;
bool m_DraggingActive = false;

View File

@ -31,7 +31,7 @@
ADS_NAMESPACE_BEGIN
class SectionContent;
class SectionTitleWidget;
class SectionContentWidget;
class CSectionContentWidget;
class InternalContentData
@ -45,7 +45,7 @@ public:
QSharedPointer<SectionContent> content;
SectionTitleWidget* titleWidget;
SectionContentWidget* contentWidget;
CSectionContentWidget* contentWidget;
};

View File

@ -46,7 +46,7 @@ class InternalContentData;
* ContainerWidget is the main container to provide the docking
* functionality. It manages multiple sections with all possible areas.
*/
class ADS_EXPORT_API MainContainerWidget : public CContainerWidget
class ADS_EXPORT_API CMainContainerWidget : public CContainerWidget
{
Q_OBJECT
@ -57,10 +57,11 @@ class ADS_EXPORT_API MainContainerWidget : public CContainerWidget
friend class ContainerWidgetPrivate;
friend class CFloatingTitleWidget;
friend class CContainerWidget;
friend class CSectionContentWidget;
public:
explicit MainContainerWidget(QWidget *parent = nullptr);
virtual ~MainContainerWidget();
explicit CMainContainerWidget(QWidget *parent = nullptr);
virtual ~CMainContainerWidget();
//
// Public API

View File

@ -25,11 +25,11 @@ class QWidget;
#include "ads/API.h"
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class CMainContainerWidget;
class ADS_EXPORT_API SectionContent
{
friend class MainContainerWidget;
friend class CMainContainerWidget;
private:
SectionContent();
@ -58,13 +58,13 @@ public:
* \param content The widget to use as content.
* \return May return a invalid ref-pointer in case of invalid parameters.
*/
static RefPtr newSectionContent(const QString& uniqueName, MainContainerWidget* container, QWidget* title, QWidget* content);
static RefPtr newSectionContent(const QString& uniqueName, CMainContainerWidget* container, QWidget* title, QWidget* content);
virtual ~SectionContent();
int uid() const;
QString uniqueName() const;
MainContainerWidget* containerWidget() const;
QWidget* titleWidget() const;
CMainContainerWidget* containerWidget() const;
QWidget* titleWidgetContent() const;
QWidget* contentWidget() const;
Flags flags() const;
@ -77,9 +77,9 @@ private:
const int _uid;
QString _uniqueName;
QPointer<MainContainerWidget> _containerWidget;
QPointer<QWidget> _titleWidget;
QPointer<QWidget> _contentWidget;
QPointer<CMainContainerWidget> m_MainContainerWidget;
QPointer<QWidget> m_TitleWidgetContent;
QPointer<QWidget> m_ContentWidget;
// Optional attributes
QString _title;

View File

@ -22,23 +22,64 @@
#include "ads/API.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
namespace ads
{
class CMainContainerWidget;
class SectionWidget;
class SectionTitleWidget;
class SectionContentWidget : public QFrame
struct SectionContentWidgetPrivate;
class CSectionContentWidget : public QFrame
{
Q_OBJECT
friend class MainContainerWidget;
private:
SectionContentWidgetPrivate* d;
friend class SectionContentWidgetPrivate;
friend class CMainContainerWidget;
public:
SectionContentWidget(SectionContent::RefPtr c, QWidget* parent = 0);
virtual ~SectionContentWidget();
enum Flag
{
None = 0,
Closeable = 1,
Maximizable = 2,
AllFlags = Closeable | Maximizable
};
Q_DECLARE_FLAGS(Flags, Flag)
CSectionContentWidget(SectionContent::RefPtr c = SectionContent::RefPtr(), QWidget* parent = 0);
virtual ~CSectionContentWidget();
/*!
* Creates new content, associates it to <em>container</em> and takes ownership of
* <em>title</em>- and <em>content</em>- widgets.
* \param uniqueName An unique identifier across the entire process.
* \param container The parent ContainerWidget in which this content will be active.
* \param title The widget to use as title.
* \param content The widget to use as content.
* \return May return a invalid ref-pointer in case of invalid parameters.
*/
static CSectionContentWidget* newSectionContent(const QString& uniqueName,
CMainContainerWidget* container, QWidget* title, QWidget* content);
int uid() const;
QString uniqueName() const;
CMainContainerWidget* containerWidget() const;
QWidget* titleWidgetContent() const;
QWidget* contentWidget() const;
Flags flags() const;
QString visibleTitle() const;
QString title() const;
void setTitle(const QString& title);
void setFlags(const Flags f);
private:
SectionContent::RefPtr _content;
};
ADS_NAMESPACE_END
} // namespace ads
#endif

View File

@ -27,7 +27,7 @@
class QPushButton;
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class CMainContainerWidget;
class SectionWidget;
class FloatingWidget;
@ -36,7 +36,7 @@ class SectionTitleWidget : public QFrame
Q_OBJECT
Q_PROPERTY(bool activeTab READ isActiveTab WRITE setActiveTab NOTIFY activeTabChanged)
friend class MainContainerWidget;
friend class CMainContainerWidget;
friend class SectionWidget;
friend class CContainerWidget;
@ -66,7 +66,7 @@ protected:
virtual void mouseMoveEvent(QMouseEvent* ev);
private:
void startFloating(QMouseEvent* ev, MainContainerWidget* cw, SectionWidget* sectionwidget);
void startFloating(QMouseEvent* ev, CMainContainerWidget* cw, SectionWidget* sectionwidget);
void moveTab(QMouseEvent* ev);
signals:

View File

@ -33,9 +33,9 @@ class QMenu;
#include "ads/FloatingWidget.h"
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class CMainContainerWidget;
class SectionTitleWidget;
class SectionContentWidget;
class CSectionContentWidget;
// SectionWidget manages multiple instances of SectionContent.
// It displays a title TAB, which is clickable and will switch to
@ -43,10 +43,10 @@ class SectionContentWidget;
class ADS_EXPORT_API SectionWidget : public QFrame
{
Q_OBJECT
friend class MainContainerWidget;
friend class CMainContainerWidget;
friend class CContainerWidget;
explicit SectionWidget(MainContainerWidget* MainContainer, CContainerWidget* parent);
explicit SectionWidget(CMainContainerWidget* MainContainer, CContainerWidget* parent);
public:
virtual ~SectionWidget();
@ -88,10 +88,10 @@ private slots:
private:
const int _uid;
QPointer<MainContainerWidget> m_MainContainerWidget;
QPointer<CMainContainerWidget> m_MainContainerWidget;
QList<SectionContent::RefPtr> m_Contents;
QList<SectionTitleWidget*> m_TitleWidgets;
QList<SectionContentWidget*> m_ContentWidgets;
QList<CSectionContentWidget*> m_ContentWidgets;
QBoxLayout* _topLayout;
QScrollArea* _tabsScrollArea;

View File

@ -44,7 +44,7 @@ static bool splitterContainsSectionWidget(QSplitter* splitter)
return false;
}
void deleteEmptySplitter(MainContainerWidget* container)
void deleteEmptySplitter(CMainContainerWidget* container)
{
bool doAgain = false;
do

View File

@ -20,6 +20,8 @@
//============================================================================
// INCLUDES
//============================================================================
#include <ads/MainContainerWidget.h>
#include <ads/SectionContentWidget.h>
#include "ads/ContainerWidget.h"
#include <QDebug>
@ -39,17 +41,15 @@
#include "ads/Internal.h"
#include "ads/SectionWidget.h"
#include "ads/SectionTitleWidget.h"
#include "ads/SectionContentWidget.h"
#include "ads/DropOverlay.h"
#include "ads/Serialization.h"
#include "ads/MainContainerWidget.h"
namespace ads
{
unsigned int CContainerWidget::zOrderCounter = 0;
//============================================================================
CContainerWidget::CContainerWidget(MainContainerWidget* MainContainer, QWidget *parent)
CContainerWidget::CContainerWidget(CMainContainerWidget* MainContainer, QWidget *parent)
: QFrame(parent),
m_MainContainerWidget(MainContainer)
{
@ -185,7 +185,7 @@ void CContainerWidget::dropIntoContainer(FloatingWidget* FloatingWidget, DropAre
{
std::cout << "Create new splitter" << std::endl;
// we have no splitter yet - let us create one
QSplitter* sp = MainContainerWidget::newSplitter(FloatingMainSplitter->orientation());
QSplitter* sp = CMainContainerWidget::newSplitter(FloatingMainSplitter->orientation());
if (l->count() > 0)
{
qWarning() << "Still items in layout. This should never happen.";
@ -221,7 +221,7 @@ void CContainerWidget::dropIntoContainer(FloatingWidget* FloatingWidget, DropAre
{
std::cout << "Splitter with wrong orientation" << std::endl;
// we have a splitter but with the wrong orientation
QSplitter* sp = MainContainerWidget::newSplitter(orientation);
QSplitter* sp = CMainContainerWidget::newSplitter(orientation);
if (append)
{
QLayoutItem* li = l->replaceWidget(OldSplitter, sp);
@ -313,7 +313,7 @@ void CContainerWidget::dropIntoSection(FloatingWidget* FloatingWidget,
else
{
std::cout << "targetSectionSplitter->orientation() != Orientation" << std::endl;
QSplitter* s = MainContainerWidget::newSplitter(Orientation);
QSplitter* s = CMainContainerWidget::newSplitter(Orientation);
if (FloatingMainSplitter->orientation() == Orientation || FloatingMainSplitter->count() == 1)
{
std::cout << "FloatingMainSplitter->orientation() == Orientation || FloatingMainSplitter->count() == 1" << std::endl;
@ -431,7 +431,7 @@ void CContainerWidget::addSectionWidget(SectionWidget* section)
// Create default splitter.
if (!m_Splitter)
{
m_Splitter = MainContainerWidget::newSplitter(m_Orientation);
m_Splitter = CMainContainerWidget::newSplitter(m_Orientation);
m_MainLayout->addWidget(m_Splitter, 0, 0);
}
if (m_Splitter->indexOf(section) != -1)
@ -459,7 +459,7 @@ SectionWidget* CContainerWidget::dropContentOuterHelper(QLayout* l, const Intern
QSplitter* oldsp = findImmediateSplitter(this);
if (!oldsp)
{
QSplitter* sp = MainContainerWidget::newSplitter(orientation);
QSplitter* sp = CMainContainerWidget::newSplitter(orientation);
if (l->count() > 0)
{
qWarning() << "Still items in layout. This should never happen.";
@ -480,7 +480,7 @@ SectionWidget* CContainerWidget::dropContentOuterHelper(QLayout* l, const Intern
}
else
{
QSplitter* sp = MainContainerWidget::newSplitter(orientation);
QSplitter* sp = CMainContainerWidget::newSplitter(orientation);
if (append)
{
QLayoutItem* li = l->replaceWidget(oldsp, sp);
@ -514,7 +514,7 @@ SectionWidget* CContainerWidget::insertNewSectionWidget(
else
{
const int index = targetSectionSplitter->indexOf(targetSection);
QSplitter* s = MainContainerWidget::newSplitter(Orientation);
QSplitter* s = CMainContainerWidget::newSplitter(Orientation);
s->addWidget(sw);
s->addWidget(targetSection);
targetSectionSplitter->insertWidget(index, s);
@ -531,7 +531,7 @@ SectionWidget* CContainerWidget::addSectionContent(const SectionContent::RefPtr&
InternalContentData data;
data.content = sc;
data.titleWidget = new SectionTitleWidget(sc, NULL);
data.contentWidget = new SectionContentWidget(sc, NULL);
data.contentWidget = new CSectionContentWidget(sc, NULL);
connect(data.titleWidget, SIGNAL(activeTabChanged()), this, SLOT(onActiveTabChanged()));
return dropContent(data, sw, area, false);

View File

@ -17,6 +17,7 @@
******************************************************************************/
#include <ads/MainContainerWidget.h>
#include <ads/SectionContentWidget.h>
#include "ads/FloatingWidget.h"
#include <QBoxLayout>
@ -28,7 +29,6 @@
#include <QGuiApplication>
#include "ads/SectionTitleWidget.h"
#include "ads/SectionContentWidget.h"
#include "ads/Internal.h"
#include "ads/SectionWidget.h"
#include "ads/ContainerWidget.h"
@ -92,7 +92,7 @@ FloatingWidget* CFloatingTitleWidget::floatingWidget() const
return dynamic_cast<FloatingWidget*>(parentWidget());
}
MainContainerWidget* CFloatingTitleWidget::mainContainerWidget() const
CMainContainerWidget* CFloatingTitleWidget::mainContainerWidget() const
{
return floatingWidget()->mainContainerWidget();
}
@ -154,7 +154,7 @@ void CFloatingTitleWidget::onMaximizeButtonClicked()
FloatingWidget::FloatingWidget(MainContainerWidget* MainContainer, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent) :
FloatingWidget::FloatingWidget(CMainContainerWidget* MainContainer, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, CSectionContentWidget* contentWidget, QWidget* parent) :
QWidget(MainContainer, Qt::Window),
m_MainContainerWidget(MainContainer)
{
@ -178,7 +178,7 @@ FloatingWidget::FloatingWidget(MainContainerWidget* MainContainer, SectionConten
}
FloatingWidget::FloatingWidget(MainContainerWidget* MainContainer, SectionWidget* sectionWidget)
FloatingWidget::FloatingWidget(CMainContainerWidget* MainContainer, SectionWidget* sectionWidget)
: QWidget(MainContainer, Qt::Window),
m_MainContainerWidget(MainContainer)
{
@ -338,7 +338,7 @@ void FloatingWidget::titleMouseReleaseEvent()
}
std::cout << "Dropped" << std::endl;
MainContainerWidget* MainContainerWidget = mainContainerWidget();
CMainContainerWidget* MainContainerWidget = mainContainerWidget();
m_DropContainer->dropFloatingWidget(this, QCursor::pos());
MainContainerWidget->dropOverlay()->hideDropOverlay();
MainContainerWidget->sectionDropOverlay()->hideDropOverlay();
@ -357,7 +357,7 @@ void FloatingWidget::updateDropOverlays(const QPoint& GlobalPos)
{
return;
}
MainContainerWidget* MainContainerWidget = mainContainerWidget();
CMainContainerWidget* MainContainerWidget = mainContainerWidget();
auto Containers = MainContainerWidget->m_Containers;
CContainerWidget* TopContainer = nullptr;
for (auto ContainerWidget : Containers)

View File

@ -16,7 +16,7 @@
** along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#include <ads/MainContainerWidget.h>
#include <ads/SectionContentWidget.h>
#include <QDebug>
#include <QPaintEvent>
#include <QPainter>
@ -32,16 +32,16 @@
#include "ads/Internal.h"
#include "ads/SectionWidget.h"
#include "ads/SectionTitleWidget.h"
#include "ads/SectionContentWidget.h"
#include "ads/DropOverlay.h"
#include "ads/Serialization.h"
#include <iostream>
#include "../include/ads/MainContainerWidget.h"
ADS_NAMESPACE_BEGIN
QSplitter* MainContainerWidget::newSplitter(Qt::Orientation orientation, QWidget* parent)
QSplitter* CMainContainerWidget::newSplitter(Qt::Orientation orientation, QWidget* parent)
{
QSplitter* s = new QSplitter(orientation, parent);
s->setProperty("ads-splitter", QVariant(true));
@ -51,7 +51,7 @@ QSplitter* MainContainerWidget::newSplitter(Qt::Orientation orientation, QWidget
}
MainContainerWidget::MainContainerWidget(QWidget *parent) :
CMainContainerWidget::CMainContainerWidget(QWidget *parent) :
CContainerWidget(this, parent)
{
m_SectionDropOverlay = new DropOverlay(this, DropOverlay::ModeSectionOverlay);
@ -61,7 +61,7 @@ MainContainerWidget::MainContainerWidget(QWidget *parent) :
m_Containers.append(this);
}
MainContainerWidget::~MainContainerWidget()
CMainContainerWidget::~CMainContainerWidget()
{
// Note: It's required to delete in 2 steps
// Remove from list, and then delete.
@ -83,7 +83,7 @@ MainContainerWidget::~MainContainerWidget()
}
bool MainContainerWidget::removeSectionContent(const SectionContent::RefPtr& sc)
bool CMainContainerWidget::removeSectionContent(const SectionContent::RefPtr& sc)
{
ADS_Expects(!sc.isNull());
@ -128,7 +128,7 @@ bool MainContainerWidget::removeSectionContent(const SectionContent::RefPtr& sc)
return true;
}
bool MainContainerWidget::showSectionContent(const SectionContent::RefPtr& sc)
bool CMainContainerWidget::showSectionContent(const SectionContent::RefPtr& sc)
{
ADS_Expects(!sc.isNull());
@ -183,7 +183,7 @@ bool MainContainerWidget::showSectionContent(const SectionContent::RefPtr& sc)
return false;
}
bool MainContainerWidget::hideSectionContent(const SectionContent::RefPtr& sc)
bool CMainContainerWidget::hideSectionContent(const SectionContent::RefPtr& sc)
{
ADS_Expects(!sc.isNull());
@ -239,7 +239,7 @@ bool MainContainerWidget::hideSectionContent(const SectionContent::RefPtr& sc)
return false;
}
bool MainContainerWidget::raiseSectionContent(const SectionContent::RefPtr& sc)
bool CMainContainerWidget::raiseSectionContent(const SectionContent::RefPtr& sc)
{
ADS_Expects(!sc.isNull());
@ -273,7 +273,7 @@ bool MainContainerWidget::raiseSectionContent(const SectionContent::RefPtr& sc)
return false;
}
bool MainContainerWidget::isSectionContentVisible(const SectionContent::RefPtr& sc)
bool CMainContainerWidget::isSectionContentVisible(const SectionContent::RefPtr& sc)
{
ADS_Expects(!sc.isNull());
@ -304,7 +304,7 @@ bool MainContainerWidget::isSectionContentVisible(const SectionContent::RefPtr&
return false;
}
QMenu* MainContainerWidget::createContextMenu() const
QMenu* CMainContainerWidget::createContextMenu() const
{
// Fill map with actions (sorted by key!)
QMap<QString, QAction*> actions;
@ -367,7 +367,7 @@ QMenu* MainContainerWidget::createContextMenu() const
return m;
}
QByteArray MainContainerWidget::saveState() const
QByteArray CMainContainerWidget::saveState() const
{
ADS_NS_SER::InMemoryWriter writer;
@ -390,7 +390,7 @@ QByteArray MainContainerWidget::saveState() const
return writer.toByteArray();
}
bool MainContainerWidget::restoreState(const QByteArray& data)
bool CMainContainerWidget::restoreState(const QByteArray& data)
{
if (data.isEmpty())
return false;
@ -409,7 +409,7 @@ bool MainContainerWidget::restoreState(const QByteArray& data)
}
QList<SectionContent::RefPtr> MainContainerWidget::contents() const
QList<SectionContent::RefPtr> CMainContainerWidget::contents() const
{
QList<SectionContent::WeakPtr> wl = m_SectionContentIdMap.values();
QList<SectionContent::RefPtr> sl;
@ -422,13 +422,13 @@ QList<SectionContent::RefPtr> MainContainerWidget::contents() const
return sl;
}
QPointer<DropOverlay> MainContainerWidget::sectionDropOverlay() const
QPointer<DropOverlay> CMainContainerWidget::sectionDropOverlay() const
{
return m_SectionDropOverlay;
}
QPointer<DropOverlay> MainContainerWidget::dropOverlay() const
QPointer<DropOverlay> CMainContainerWidget::dropOverlay() const
{
return m_ContainerDropOverlay;
}
@ -437,7 +437,7 @@ QPointer<DropOverlay> MainContainerWidget::dropOverlay() const
// PRIVATE API BEGINS HERE
///////////////////////////////////////////////////////////////////////
QByteArray MainContainerWidget::saveHierarchy() const
QByteArray CMainContainerWidget::saveHierarchy() const
{
/*
# Data Format
@ -524,7 +524,7 @@ QByteArray MainContainerWidget::saveHierarchy() const
return ba;
}
void MainContainerWidget::saveFloatingWidgets(QDataStream& out) const
void CMainContainerWidget::saveFloatingWidgets(QDataStream& out) const
{
out << m_Floatings.count();
for (int i = 0; i < m_Floatings.count(); ++i)
@ -536,7 +536,7 @@ void MainContainerWidget::saveFloatingWidgets(QDataStream& out) const
}
}
void MainContainerWidget::saveSectionWidgets(QDataStream& out, QWidget* widget) const
void CMainContainerWidget::saveSectionWidgets(QDataStream& out, QWidget* widget) const
{
QSplitter* sp = NULL;
SectionWidget* sw = NULL;
@ -599,7 +599,7 @@ void MainContainerWidget::saveSectionWidgets(QDataStream& out, QWidget* widget)
}
}
bool MainContainerWidget::saveSectionIndex(ADS_NS_SER::SectionIndexData& sid) const
bool CMainContainerWidget::saveSectionIndex(ADS_NS_SER::SectionIndexData& sid) const
{
if (m_Sections.count() <= 0)
return false;
@ -627,7 +627,7 @@ bool MainContainerWidget::saveSectionIndex(ADS_NS_SER::SectionIndexData& sid) co
return true;
}
bool MainContainerWidget::restoreHierarchy(const QByteArray& data)
bool CMainContainerWidget::restoreHierarchy(const QByteArray& data)
{
QDataStream in(data);
in.setVersion(QDataStream::Qt_4_5);
@ -795,7 +795,7 @@ bool MainContainerWidget::restoreHierarchy(const QByteArray& data)
return success;
}
bool MainContainerWidget::restoreFloatingWidgets(QDataStream& in, int version, QList<FloatingWidget*>& floatings)
bool CMainContainerWidget::restoreFloatingWidgets(QDataStream& in, int version, QList<FloatingWidget*>& floatings)
{
Q_UNUSED(version)
@ -838,7 +838,7 @@ bool MainContainerWidget::restoreFloatingWidgets(QDataStream& in, int version, Q
return true;
}
bool MainContainerWidget::restoreSectionWidgets(QDataStream& in, int version, QSplitter* currentSplitter, QList<SectionWidget*>& sections, QList<SectionContent::RefPtr>& contentsToHide)
bool CMainContainerWidget::restoreSectionWidgets(QDataStream& in, int version, QSplitter* currentSplitter, QList<SectionWidget*>& sections, QList<SectionContent::RefPtr>& contentsToHide)
{
if (in.atEnd())
return true;
@ -936,7 +936,7 @@ bool MainContainerWidget::restoreSectionWidgets(QDataStream& in, int version, QS
return true;
}
bool MainContainerWidget::takeContent(const SectionContent::RefPtr& sc, InternalContentData& data)
bool CMainContainerWidget::takeContent(const SectionContent::RefPtr& sc, InternalContentData& data)
{
ADS_Expects(!sc.isNull());
@ -967,7 +967,7 @@ bool MainContainerWidget::takeContent(const SectionContent::RefPtr& sc, Internal
}
void MainContainerWidget::onActionToggleSectionContentVisibility(bool visible)
void CMainContainerWidget::onActionToggleSectionContentVisibility(bool visible)
{
QAction* a = qobject_cast<QAction*>(sender());
if (!a)
@ -986,13 +986,13 @@ void MainContainerWidget::onActionToggleSectionContentVisibility(bool visible)
}
void MainContainerWidget::hideContainerOverlay()
void CMainContainerWidget::hideContainerOverlay()
{
m_ContainerDropOverlay->hideDropOverlay();
}
void MainContainerWidget::moveFloatingWidget(const QPoint& TargetPos)
void CMainContainerWidget::moveFloatingWidget(const QPoint& TargetPos)
{
QPoint MousePos = mapFromGlobal(QCursor::pos());

View File

@ -32,7 +32,7 @@ SectionContent::SectionContent() :
{
}
SectionContent::RefPtr SectionContent::newSectionContent(const QString& uniqueName, MainContainerWidget* container, QWidget* title, QWidget* content)
SectionContent::RefPtr SectionContent::newSectionContent(const QString& uniqueName, CMainContainerWidget* container, QWidget* title, QWidget* content)
{
auto SectionContentNameMap = container->m_SectionContentNameMap;
auto SectionContentIdMap = container->m_SectionContentIdMap;
@ -55,9 +55,9 @@ SectionContent::RefPtr SectionContent::newSectionContent(const QString& uniqueNa
QSharedPointer<SectionContent> sc(new SectionContent());
sc->_uniqueName = uniqueName;
sc->_containerWidget = container;
sc->_titleWidget = title;
sc->_contentWidget = content;
sc->m_MainContainerWidget = container;
sc->m_TitleWidgetContent = title;
sc->m_ContentWidget = content;
SectionContentIdMap.insert(sc->uid(), sc);
SectionContentNameMap.insert(sc->uniqueName(), sc);
@ -66,16 +66,16 @@ SectionContent::RefPtr SectionContent::newSectionContent(const QString& uniqueNa
SectionContent::~SectionContent()
{
auto SectionContentNameMap = _containerWidget->m_SectionContentNameMap;
auto SectionContentIdMap = _containerWidget->m_SectionContentIdMap;
auto SectionContentNameMap = m_MainContainerWidget->m_SectionContentNameMap;
auto SectionContentIdMap = m_MainContainerWidget->m_SectionContentIdMap;
if (_containerWidget)
if (m_MainContainerWidget)
{
SectionContentIdMap.remove(_uid);
SectionContentNameMap.remove(_uniqueName);
}
delete _titleWidget;
delete _contentWidget;
delete m_TitleWidgetContent;
delete m_ContentWidget;
}
int SectionContent::uid() const
@ -88,19 +88,19 @@ QString SectionContent::uniqueName() const
return _uniqueName;
}
MainContainerWidget* SectionContent::containerWidget() const
CMainContainerWidget* SectionContent::containerWidget() const
{
return _containerWidget;
return m_MainContainerWidget;
}
QWidget* SectionContent::titleWidget() const
QWidget* SectionContent::titleWidgetContent() const
{
return _titleWidget;
return m_TitleWidgetContent;
}
QWidget* SectionContent::contentWidget() const
{
return _contentWidget;
return m_ContentWidget;
}
SectionContent::Flags SectionContent::flags() const

View File

@ -16,14 +16,49 @@
** along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#include "ads/SectionContentWidget.h"
#include <ads/MainContainerWidget.h>
#include <QBoxLayout>
#include "../include/ads/SectionContentWidget.h"
#include "../include/ads/SectionTitleWidget.h"
ADS_NAMESPACE_BEGIN
namespace ads
{
struct SectionContentWidgetPrivate
{
CSectionContentWidget* _this;
int Uid;
QString UniqueName;
QPointer<CMainContainerWidget> MainContainerWidget;
QPointer<QWidget> TitleWidgetContent;
QPointer<QWidget> ContentWidget;
// Optional attributes
QString Title;
CSectionContentWidget::Flags Flags = CSectionContentWidget::AllFlags;
SectionContentWidget::SectionContentWidget(SectionContent::RefPtr c, QWidget* parent) :
/* Note: This method could be a problem in static build environment
* since it may begin with 0 for every module which uses ADS.
*/
static int GetNextUid()
{
static int NextUid = 0;
return ++NextUid;
}
SectionContentWidgetPrivate(CSectionContentWidget* _public)
: _this(_public),
Uid(GetNextUid())
{
}
};
CSectionContentWidget::CSectionContentWidget(SectionContent::RefPtr c, QWidget* parent) :
QFrame(parent),
d(new SectionContentWidgetPrivate(this)),
_content(c)
{
QBoxLayout* l = new QBoxLayout(QBoxLayout::TopToBottom);
@ -33,9 +68,100 @@ SectionContentWidget::SectionContentWidget(SectionContent::RefPtr c, QWidget* pa
setLayout(l);
}
SectionContentWidget::~SectionContentWidget()
CSectionContentWidget* CSectionContentWidget::newSectionContent(const QString& uniqueName,
CMainContainerWidget* container, QWidget* title, QWidget* content)
{
layout()->removeWidget(_content->contentWidget());
auto SectionContentNameMap = container->m_SectionContentNameMap;
auto SectionContentIdMap = container->m_SectionContentIdMap;
if (uniqueName.isEmpty())
{
qFatal("Can not create SectionContent with empty uniqueName");
return nullptr;
}
else if (SectionContentNameMap.contains(uniqueName))
{
qFatal("Can not create SectionContent with already used uniqueName");
return nullptr;
}
else if (!container || !title || !content)
{
qFatal("Can not create SectionContent with NULL values");
return nullptr;
}
CSectionContentWidget* sc(new CSectionContentWidget());
sc->d->UniqueName = uniqueName;
sc->d->MainContainerWidget = container;
sc->d->TitleWidgetContent = title;
sc->d->ContentWidget = content;
//SectionContentIdMap.insert(sc->uid(), sc);
//SectionContentNameMap.insert(sc->uniqueName(), sc);
return sc;
}
ADS_NAMESPACE_END
CSectionContentWidget::~CSectionContentWidget()
{
layout()->removeWidget(_content->contentWidget());
delete d;
}
int CSectionContentWidget::uid() const
{
return d->Uid;
}
QString CSectionContentWidget::uniqueName() const
{
return d->UniqueName;
}
CMainContainerWidget* CSectionContentWidget::containerWidget() const
{
return d->MainContainerWidget;
}
QWidget* CSectionContentWidget::titleWidgetContent() const
{
return d->TitleWidgetContent.data();
}
QWidget* CSectionContentWidget::contentWidget() const
{
return d->ContentWidget;
}
CSectionContentWidget::Flags CSectionContentWidget::flags() const
{
return d->Flags;
}
QString CSectionContentWidget::visibleTitle() const
{
return d->Title.isEmpty() ? d->UniqueName : d->Title;
}
QString CSectionContentWidget::title() const
{
return d->Title;
}
void CSectionContentWidget::setTitle(const QString& title)
{
d->Title = title;
}
void CSectionContentWidget::setFlags(const Flags f)
{
d->Flags = f;
}
} // namespace ads

View File

@ -16,6 +16,7 @@
** along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#include <ads/MainContainerWidget.h>
#include "ads/SectionTitleWidget.h"
#include <QString>
@ -36,8 +37,6 @@
#include "ads/SectionContent.h"
#include "ads/SectionWidget.h"
#include "ads/FloatingWidget.h"
#include <ads/MainContainerWidget.h>
#include <iostream>
ADS_NAMESPACE_BEGIN
@ -51,14 +50,14 @@ SectionTitleWidget::SectionTitleWidget(SectionContent::RefPtr content, QWidget*
QBoxLayout* l = new QBoxLayout(QBoxLayout::LeftToRight);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
l->addWidget(content->titleWidget());
l->addWidget(content->titleWidgetContent());
setLayout(l);
}
SectionTitleWidget::~SectionTitleWidget()
{
layout()->removeWidget(m_Content->titleWidget());
layout()->removeWidget(m_Content->titleWidgetContent());
}
bool SectionTitleWidget::isActiveTab() const
@ -130,7 +129,7 @@ void SectionTitleWidget::mouseReleaseEvent(QMouseEvent* ev)
{
SectionWidget* section = nullptr;
CContainerWidget* cw = findParentContainerWidget(this);
MainContainerWidget* mcw = cw->mainContainerWidget();
CMainContainerWidget* mcw = cw->mainContainerWidget();
std::cout << "SectionTitleWidget::mouseReleaseEvent" << std::endl;
//m_FloatingWidget.clear();
@ -164,7 +163,7 @@ void SectionTitleWidget::mouseReleaseEvent(QMouseEvent* ev)
}
void SectionTitleWidget::startFloating(QMouseEvent* ev, MainContainerWidget* cw, SectionWidget* sectionwidget)
void SectionTitleWidget::startFloating(QMouseEvent* ev, CMainContainerWidget* cw, SectionWidget* sectionwidget)
{
std::cout << "SectionTitleWidget::startFloating" << std::endl;
@ -246,7 +245,7 @@ void SectionTitleWidget::mouseMoveEvent(QMouseEvent* ev)
// TODO make a member with the main container widget and assign it on
// creation
MainContainerWidget* MainContainerWidget = findParentContainerWidget(this)->mainContainerWidget();
CMainContainerWidget* MainContainerWidget = findParentContainerWidget(this)->mainContainerWidget();
ev->accept();

View File

@ -44,13 +44,13 @@
#include "ads/DropOverlay.h"
#include "ads/SectionContent.h"
#include "ads/SectionTitleWidget.h"
#include "ads/SectionContentWidget.h"
#include <ads/SectionContentWidget.h>
#include "ads/FloatingWidget.h"
#include <ads/MainContainerWidget.h>
ADS_NAMESPACE_BEGIN
SectionWidget::SectionWidget(MainContainerWidget* MainContainer, CContainerWidget* parent) :
SectionWidget::SectionWidget(CMainContainerWidget* MainContainer, CContainerWidget* parent) :
QFrame(parent),
_uid(GetNextUid()),
m_MainContainerWidget(MainContainer),
@ -174,7 +174,7 @@ void SectionWidget::addContent(const SectionContent::RefPtr& c)
_tabsLayout->insertWidget(_tabsLayout->count() - _tabsLayoutInitCount, title);
QObject::connect(title, SIGNAL(clicked()), this, SLOT(onSectionTitleClicked()));
SectionContentWidget* content = new SectionContentWidget(c, NULL);
CSectionContentWidget* content = new CSectionContentWidget(c, NULL);
m_ContentWidgets.append(content);
_contentsLayout->addWidget(content);
@ -247,7 +247,7 @@ bool SectionWidget::takeContentAt(int index, InternalContentData& data)
}
// Content wrapper widget (CONTENT)
SectionContentWidget* content = m_ContentWidgets.takeAt(index);
CSectionContentWidget* content = m_ContentWidgets.takeAt(index);
if (content)
{
_contentsLayout->removeWidget(content);

View File

@ -13,18 +13,12 @@ SectionContentListModel::~SectionContentListModel()
{
}
void SectionContentListModel::init(ADS_NS::MainContainerWidget* cw)
void SectionContentListModel::init(ADS_NS::CMainContainerWidget* cw)
{
#if QT_VERSION >= 0x050000
beginResetModel();
_cw = cw;
_contents = _cw->contents();
endResetModel();
#else
_cw = cw;
_contents = _cw->contents();
reset();
#endif
}
int SectionContentListModel::columnCount(const QModelIndex& parent) const

View File

@ -9,7 +9,7 @@
#include "ads/API.h"
#include "ads/SectionContent.h"
ADS_NAMESPACE_BEGIN
class MainContainerWidget;
class CMainContainerWidget;
ADS_NAMESPACE_END
class SectionContentListModel : public QAbstractTableModel
@ -27,7 +27,7 @@ public:
SectionContentListModel(QObject* parent);
virtual ~SectionContentListModel();
void init(ADS_NS::MainContainerWidget* cw);
void init(ADS_NS::CMainContainerWidget* cw);
virtual int columnCount(const QModelIndex &parent) const;
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
@ -40,7 +40,7 @@ public:
private:
QHash<int, QString> _headers;
ADS_NS::MainContainerWidget* _cw;
ADS_NS::CMainContainerWidget* _cw;
QList<ADS_NS::SectionContent::RefPtr> _contents;
};

View File

@ -16,7 +16,7 @@ public:
class Values
{
public:
ADS_NS::MainContainerWidget* cw;
ADS_NS::CMainContainerWidget* cw;
};
SectionContentListWidget(QWidget* parent);

View File

@ -21,7 +21,7 @@
static int CONTENT_COUNT = 0;
static ADS_NS::SectionContent::RefPtr createLongTextLabelSC(ADS_NS::MainContainerWidget* container)
static ADS_NS::SectionContent::RefPtr createLongTextLabelSC(ADS_NS::CMainContainerWidget* container)
{
QWidget* w = new QWidget();
QBoxLayout* bl = new QBoxLayout(QBoxLayout::TopToBottom);
@ -39,7 +39,7 @@ static ADS_NS::SectionContent::RefPtr createLongTextLabelSC(ADS_NS::MainContaine
return sc;
}
static ADS_NS::SectionContent::RefPtr createCalendarSC(ADS_NS::MainContainerWidget* container)
static ADS_NS::SectionContent::RefPtr createCalendarSC(ADS_NS::CMainContainerWidget* container)
{
QCalendarWidget* w = new QCalendarWidget();
@ -47,7 +47,7 @@ static ADS_NS::SectionContent::RefPtr createCalendarSC(ADS_NS::MainContainerWidg
return ADS_NS::SectionContent::newSectionContent(QString("uname-%1").arg(index), container, new IconTitleWidget(QIcon(), QString("Calendar %1").arg(index)), w);
}
static ADS_NS::SectionContent::RefPtr createFileSystemTreeSC(ADS_NS::MainContainerWidget* container)
static ADS_NS::SectionContent::RefPtr createFileSystemTreeSC(ADS_NS::CMainContainerWidget* container)
{
QTreeView* w = new QTreeView();
w->setFrameShape(QFrame::NoFrame);
@ -93,7 +93,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->actionContentList, SIGNAL(triggered()), this, SLOT(showSectionContentListDialog()));
// ADS - Create main container (ContainerWidget).
_container = new ADS_NS::MainContainerWidget();
_container = new ADS_NS::CMainContainerWidget();
connect(_container, SIGNAL(activeTabChanged(const SectionContent::RefPtr&, bool)), this, SLOT(onActiveTabChanged(const SectionContent::RefPtr&, bool)));
connect(_container, SIGNAL(sectionContentVisibilityChanged(SectionContent::RefPtr,bool)), this, SLOT(onSectionContentVisibilityChanged(SectionContent::RefPtr,bool)));
setCentralWidget(_container);
@ -117,7 +117,7 @@ void MainWindow::createContent()
{
// ADS - Adding some contents.
// Test #1: Use high-level public API
ADS_NS::MainContainerWidget* cw = _container;
ADS_NS::CMainContainerWidget* cw = _container;
ADS_NS::SectionWidget* sw = nullptr;
sw = _container->addSectionContent(createLongTextLabelSC(cw), nullptr, ADS_NS::CenterDropArea);
@ -136,7 +136,7 @@ void MainWindow::createContent()
#if 0
// Issue #2: If the first drop is not into CenterDropArea, the application crashes.
ADS_NS::MainContainerWidget* cw = _container;
ADS_NS::CMainContainerWidget* cw = _container;
ADS_NS::SectionWidget* sw = NULL;
sw = _container->addSectionContent(createLongTextLabelSC(cw), sw, ADS_NS::LeftDropArea);
@ -162,7 +162,7 @@ void MainWindow::showSectionContentListDialog()
void MainWindow::onActiveTabChanged(const ADS_NS::SectionContent::RefPtr& sc, bool active)
{
Q_UNUSED(active);
IconTitleWidget* itw = dynamic_cast<IconTitleWidget*>(sc->titleWidget());
IconTitleWidget* itw = dynamic_cast<IconTitleWidget*>(sc->titleWidgetContent());
if (itw)
{
itw->polishUpdate();

View File

@ -37,7 +37,7 @@ protected:
private:
Ui::MainWindow *ui;
ADS_NS::MainContainerWidget* _container;
ADS_NS::CMainContainerWidget* _container;
void createContent();
};