Skip to content
Snippets Groups Projects
Commit d28d4334 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Prototype of new SessionItemWidget with temporary unsubscription mechanism.

parent d9b918a8
No related branches found
No related tags found
No related merge requests found
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
// ************************************************************************** // // ************************************************************************** //
#include "SessionItemWidget.h" #include "SessionItemWidget.h"
#include "SessionItem.h"
SessionItemWidget::SessionItemWidget(QWidget *parent) SessionItemWidget::SessionItemWidget(QWidget *parent)
...@@ -27,3 +28,78 @@ QList<QAction *> SessionItemWidget::actionList() ...@@ -27,3 +28,78 @@ QList<QAction *> SessionItemWidget::actionList()
{ {
return QList<QAction *>(); return QList<QAction *>();
} }
// --------------------------------------------------------------------------------------------- //
#include <QDebug>
NewSessionItemWidget::NewSessionItemWidget(QWidget* parent)
: QWidget(parent)
, m_currentItem(nullptr)
, is_subscribed(false)
{
}
NewSessionItemWidget::~NewSessionItemWidget()
{
unsubscribe();
}
void NewSessionItemWidget::setItem(SessionItem* item)
{
qDebug() << "NewSessionItemWidget::setItem(SessionItem* item)" << item;
if(m_currentItem == item)
return;
unsubscribe(); // from previous item
m_currentItem = item;
if (!m_currentItem)
return;
subscribe();
}
QList<QAction*> NewSessionItemWidget::actionList()
{
return QList<QAction *>();
}
void NewSessionItemWidget::showEvent(QShowEvent*)
{
qDebug() << "NewSessionItemWidget::showEvent 1.1 was shown?";
subscribe();
}
void NewSessionItemWidget::hideEvent(QHideEvent*)
{
qDebug() << "NewSessionItemWidget::hideEvent 1.1 was hidden?";
unsubscribe();
}
void NewSessionItemWidget::subscribe()
{
qDebug() << "NewSessionItemWidget::subscribe()" << m_currentItem;
if (!m_currentItem || is_subscribed)
return;
m_currentItem->mapper()->setOnItemDestroy([this](SessionItem*) { m_currentItem = 0; }, this);
subscribeToItem();
is_subscribed = true;
}
void NewSessionItemWidget::unsubscribe()
{
qDebug() << "NewSessionItemWidget::unsubscribe()" << m_currentItem;
if (m_currentItem)
m_currentItem->mapper()->unsubscribe(this);
unsubscribeFromItem();
is_subscribed = false;
}
...@@ -34,5 +34,39 @@ public: ...@@ -34,5 +34,39 @@ public:
}; };
class SessionItem;
class QShowEvent;
class QHideEvent;
//! The NewSessionItemWidget class is a base for all widgets representing the content
//! of SessionItem. It provides subscribe/unsibscribe mechanism on show/hide events.
//! The main purpose is to save performance, when item keeps changing its properties, while
//! widget is hidden.
class BA_CORE_API_ NewSessionItemWidget : public QWidget
{
Q_OBJECT
public:
explicit NewSessionItemWidget(QWidget* parent = 0);
virtual ~NewSessionItemWidget();
virtual void setItem(SessionItem* item);
virtual QList<QAction*> actionList();
SessionItem* currentItem() { return m_currentItem; }
protected:
virtual void subscribeToItem() {}
virtual void unsubscribeFromItem() {}
virtual void showEvent(QShowEvent*);
virtual void hideEvent(QHideEvent*);
private:
void subscribe();
void unsubscribe();
SessionItem* m_currentItem;
bool is_subscribed;
};
#endif // SESSIONITEMWIDGET_H #endif // SESSIONITEMWIDGET_H
...@@ -24,11 +24,43 @@ ...@@ -24,11 +24,43 @@
#include <QAction> #include <QAction>
#include <QBoxLayout> #include <QBoxLayout>
#include <QMenu> #include <QMenu>
#include <QLabel>
#include <QDebug>
TestWidget::TestWidget(QWidget* parent) : NewSessionItemWidget(parent), m_label(new QLabel("XXX"))
{
QHBoxLayout *hlayout = new QHBoxLayout;
hlayout->setMargin(0);
hlayout->setSpacing(0);
hlayout->addWidget(m_label);
setLayout(hlayout);
}
void TestWidget::subscribeToItem()
{
Q_ASSERT(currentItem());
qDebug() << "TestWidget::subscribeToItem()" << currentItem()->modelType();
currentItem()->mapper()->setOnPropertyChange(
[this](const QString &name)
{
qDebug() << "TestWidget::lambda()" << name;
}, this);
currentItem()->mapper()->setOnChildPropertyChange(
[this](SessionItem* item, const QString &name)
{
qDebug() << "TestWidget::lambda() 2" << item->modelType() << name;
}, this);
}
IntensityDataWidget::IntensityDataWidget(QWidget *parent) IntensityDataWidget::IntensityDataWidget(QWidget *parent)
: SessionItemWidget(parent) : SessionItemWidget(parent)
, m_intensityWidget(new IntensityDataCanvas) , m_intensityWidget(new IntensityDataCanvas)
, m_propertyWidget(new IntensityDataPropertyWidget) , m_propertyWidget(new IntensityDataPropertyWidget)
, m_testWidget(new TestWidget)
{ {
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
...@@ -38,6 +70,7 @@ IntensityDataWidget::IntensityDataWidget(QWidget *parent) ...@@ -38,6 +70,7 @@ IntensityDataWidget::IntensityDataWidget(QWidget *parent)
hlayout->addWidget(m_intensityWidget); hlayout->addWidget(m_intensityWidget);
hlayout->addWidget(m_propertyWidget); hlayout->addWidget(m_propertyWidget);
hlayout->addWidget(m_testWidget);
QVBoxLayout *mainLayout = new QVBoxLayout; QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setMargin(0); mainLayout->setMargin(0);
...@@ -57,6 +90,7 @@ void IntensityDataWidget::setItem(SessionItem *item) ...@@ -57,6 +90,7 @@ void IntensityDataWidget::setItem(SessionItem *item)
IntensityDataItem *intensityData = jobItem->intensityDataItem(); IntensityDataItem *intensityData = jobItem->intensityDataItem();
m_intensityWidget->setItem(intensityData); m_intensityWidget->setItem(intensityData);
m_propertyWidget->setItem(intensityData); m_propertyWidget->setItem(intensityData);
m_testWidget->setItem(intensityData);
} }
QList<QAction *> IntensityDataWidget::actionList() QList<QAction *> IntensityDataWidget::actionList()
...@@ -71,4 +105,3 @@ void IntensityDataWidget::onContextMenuRequest(const QPoint& point) ...@@ -71,4 +105,3 @@ void IntensityDataWidget::onContextMenuRequest(const QPoint& point)
menu.addAction(action); menu.addAction(action);
menu.exec(point); menu.exec(point);
} }
...@@ -19,11 +19,26 @@ ...@@ -19,11 +19,26 @@
#include "SessionItemWidget.h" #include "SessionItemWidget.h"
class TestWidget : public NewSessionItemWidget
{
Q_OBJECT
public:
TestWidget(QWidget* parent=0);
protected:
virtual void subscribeToItem();
private:
class QLabel *m_label;
};
class SessionItem; class SessionItem;
class IntensityDataCanvas; class IntensityDataCanvas;
class IntensityDataPropertyWidget; class IntensityDataPropertyWidget;
class IntensityDataItem; class IntensityDataItem;
class QAction; class QAction;
class TestWidget;
//! A common widget to display color map (IntensityDataCanvas) and properties //! A common widget to display color map (IntensityDataCanvas) and properties
//! (IntensityDataPropertyWidget) of intensity data item. //! (IntensityDataPropertyWidget) of intensity data item.
...@@ -45,7 +60,7 @@ private slots: ...@@ -45,7 +60,7 @@ private slots:
private: private:
IntensityDataCanvas* m_intensityWidget; IntensityDataCanvas* m_intensityWidget;
IntensityDataPropertyWidget* m_propertyWidget; IntensityDataPropertyWidget* m_propertyWidget;
IntensityDataItem* m_currentItem; TestWidget* m_testWidget;
}; };
#endif // INTENSITYDATAWIDGET_H #endif // INTENSITYDATAWIDGET_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment