forked from qt-creator/qt-creator
Timeline: Move modelId generation into aggregator
The way the notes model works requires every timeline model to have a different ID. Conversely no other kind of model actually needs an ID. Therefore it makes sense to have the TimelineModelAggregator manage the IDs as every timeline model will sooner or later be associated with an aggregator. Change-Id: Ib8b2c88ed883351d4e3e156dd13e1dd113c21808 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
|
||||
#include "timelinemodel.h"
|
||||
#include "timelinemodel_p.h"
|
||||
#include "timelinemodelaggregator.h"
|
||||
#include "timelineitemsrenderpass.h"
|
||||
#include "timelineselectionrenderpass.h"
|
||||
#include "timelinenotesrenderpass.h"
|
||||
@@ -157,8 +158,8 @@ TimelineModel::TimelineModelPrivate::TimelineModelPrivate(int modelId) :
|
||||
{
|
||||
}
|
||||
|
||||
TimelineModel::TimelineModel(int modelId, QObject *parent) :
|
||||
QObject(parent), d_ptr(new TimelineModelPrivate(modelId))
|
||||
TimelineModel::TimelineModel(TimelineModelAggregator *parent) :
|
||||
QObject(parent), d_ptr(new TimelineModelPrivate(parent->generateModelId()))
|
||||
{
|
||||
connect(this, &TimelineModel::contentChanged, this, &TimelineModel::labelsChanged);
|
||||
connect(this, &TimelineModel::contentChanged, this, &TimelineModel::detailsChanged);
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#include <QColor>
|
||||
|
||||
namespace Timeline {
|
||||
class TimelineModelAggregator;
|
||||
|
||||
class TIMELINE_EXPORT TimelineModel : public QObject
|
||||
{
|
||||
@@ -51,7 +52,7 @@ class TIMELINE_EXPORT TimelineModel : public QObject
|
||||
public:
|
||||
class TimelineModelPrivate;
|
||||
|
||||
TimelineModel(int modelId, QObject *parent = 0);
|
||||
TimelineModel(TimelineModelAggregator *parent);
|
||||
~TimelineModel();
|
||||
|
||||
// Methods implemented by the abstract model itself
|
||||
|
@@ -39,6 +39,7 @@ class TimelineModelAggregator::TimelineModelAggregatorPrivate {
|
||||
public:
|
||||
QList <TimelineModel *> modelList;
|
||||
TimelineNotesModel *notesModel;
|
||||
int currentModelId = 0;
|
||||
};
|
||||
|
||||
TimelineModelAggregator::TimelineModelAggregator(TimelineNotesModel *notes, QObject *parent)
|
||||
@@ -60,6 +61,12 @@ int TimelineModelAggregator::height() const
|
||||
return modelOffset(d->modelList.length());
|
||||
}
|
||||
|
||||
int TimelineModelAggregator::generateModelId()
|
||||
{
|
||||
Q_D(TimelineModelAggregator);
|
||||
return d->currentModelId++;
|
||||
}
|
||||
|
||||
void TimelineModelAggregator::addModel(TimelineModel *m)
|
||||
{
|
||||
Q_D(TimelineModelAggregator);
|
||||
|
@@ -37,10 +37,11 @@ class TIMELINE_EXPORT TimelineModelAggregator : public QObject
|
||||
Q_PROPERTY(QVariantList models READ models WRITE setModels NOTIFY modelsChanged)
|
||||
Q_PROPERTY(Timeline::TimelineNotesModel *notes READ notes CONSTANT)
|
||||
public:
|
||||
TimelineModelAggregator(TimelineNotesModel *notes, QObject *parent = 0);
|
||||
TimelineModelAggregator(TimelineNotesModel *notes = nullptr, QObject *parent = nullptr);
|
||||
~TimelineModelAggregator();
|
||||
|
||||
int height() const;
|
||||
int generateModelId();
|
||||
|
||||
void addModel(TimelineModel *m);
|
||||
const TimelineModel *model(int modelIndex) const;
|
||||
|
@@ -30,7 +30,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
DebugMessagesModel::DebugMessagesModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
DebugMessagesModel::DebugMessagesModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, DebugMessage, MaximumRangeType, ProfileDebugMessages, parent),
|
||||
m_maximumMsgType(-1)
|
||||
{
|
||||
|
@@ -35,7 +35,7 @@ class DebugMessagesModel : public QmlProfilerTimelineModel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DebugMessagesModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
DebugMessagesModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
int typeId(int index) const override;
|
||||
QRgb color(int index) const override;
|
||||
|
@@ -57,7 +57,6 @@ FlameGraphModel::FlameGraphModel(QmlProfilerModelManager *modelManager,
|
||||
this, &FlameGraphModel::onTypeDetailsFinished);
|
||||
connect(modelManager->notesModel(), &Timeline::TimelineNotesModel::changed,
|
||||
this, [this](int typeId, int, int){loadNotes(typeId, true);});
|
||||
m_modelId = modelManager->registerModelProxy();
|
||||
m_acceptedFeatures = supportedFeatures();
|
||||
|
||||
modelManager->announceFeatures(m_acceptedFeatures,
|
||||
|
@@ -36,7 +36,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
InputEventsModel::InputEventsModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
InputEventsModel::InputEventsModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, Event, MaximumRangeType, ProfileInputEvents, parent),
|
||||
m_keyTypeId(-1), m_mouseTypeId(-1)
|
||||
{
|
||||
|
@@ -42,7 +42,7 @@ public:
|
||||
int b;
|
||||
};
|
||||
|
||||
InputEventsModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
InputEventsModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
bool accepted(const QmlEventType &type) const override;
|
||||
void loadEvent(const QmlEvent &event, const QmlEventType &type) override;
|
||||
|
@@ -32,7 +32,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
MemoryUsageModel::MemoryUsageModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
MemoryUsageModel::MemoryUsageModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, MemoryAllocation, MaximumRangeType, ProfileMemory, parent)
|
||||
{
|
||||
// Announce additional features. The base class already announces the main feature.
|
||||
|
@@ -51,7 +51,7 @@ public:
|
||||
void update(qint64 amount);
|
||||
};
|
||||
|
||||
MemoryUsageModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
MemoryUsageModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
qint64 rowMaxValue(int rowNumber) const override;
|
||||
|
||||
|
@@ -32,7 +32,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
PixmapCacheModel::PixmapCacheModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
PixmapCacheModel::PixmapCacheModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, PixmapCacheEvent, MaximumRangeType, ProfilePixmapCache,
|
||||
parent)
|
||||
{
|
||||
|
@@ -94,7 +94,7 @@ public:
|
||||
qint64 cacheSize = 0;
|
||||
};
|
||||
|
||||
PixmapCacheModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
PixmapCacheModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
qint64 rowMaxValue(int rowNumber) const override;
|
||||
|
||||
|
@@ -41,7 +41,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
QmlProfilerAnimationsModel::QmlProfilerAnimationsModel(QmlProfilerModelManager *manager,
|
||||
QObject *parent) :
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, Event, MaximumRangeType, ProfileAnimations, parent)
|
||||
{
|
||||
m_minNextStartTimes[0] = m_minNextStartTimes[1] = 0;
|
||||
|
@@ -49,7 +49,8 @@ public:
|
||||
int typeId;
|
||||
};
|
||||
|
||||
QmlProfilerAnimationsModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
QmlProfilerAnimationsModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
qint64 rowMaxValue(int rowNumber) const override;
|
||||
|
||||
|
@@ -76,7 +76,6 @@ public:
|
||||
|
||||
QmlProfilerModelManager::State state = Empty;
|
||||
|
||||
int numRegisteredModels = 0;
|
||||
int numFinishedFinalizers = 0;
|
||||
|
||||
int numLoadedEvents = 0;
|
||||
@@ -193,11 +192,6 @@ int QmlProfilerModelManager::numEventTypes() const
|
||||
return d->eventTypes.count();
|
||||
}
|
||||
|
||||
int QmlProfilerModelManager::registerModelProxy()
|
||||
{
|
||||
return d->numRegisteredModels++;
|
||||
}
|
||||
|
||||
int QmlProfilerModelManager::numFinishedFinalizers() const
|
||||
{
|
||||
return d->numFinishedFinalizers;
|
||||
|
@@ -76,7 +76,6 @@ public:
|
||||
int numEvents() const;
|
||||
int numEventTypes() const;
|
||||
|
||||
int registerModelProxy();
|
||||
void announceFeatures(quint64 features, EventLoader eventLoader, Finalizer finalizer);
|
||||
|
||||
int numFinishedFinalizers() const;
|
||||
|
@@ -43,7 +43,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
QmlProfilerRangeModel::QmlProfilerRangeModel(QmlProfilerModelManager *manager, RangeType range,
|
||||
QObject *parent) :
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, MaximumMessage, range, featureFromRangeType(range), parent)
|
||||
{
|
||||
m_expandedRowTypes << -1;
|
||||
|
@@ -56,7 +56,8 @@ public:
|
||||
int bindingLoopHead;
|
||||
};
|
||||
|
||||
QmlProfilerRangeModel(QmlProfilerModelManager *manager, RangeType range, QObject *parent = 0);
|
||||
QmlProfilerRangeModel(QmlProfilerModelManager *manager, RangeType range,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
Q_INVOKABLE int expandedRow(int index) const override;
|
||||
Q_INVOKABLE int collapsedRow(int index) const override;
|
||||
|
@@ -70,7 +70,6 @@ QmlProfilerStatisticsModel::QmlProfilerStatisticsModel(QmlProfilerModelManager *
|
||||
this, &QmlProfilerStatisticsModel::modelManagerStateChanged);
|
||||
connect(modelManager->notesModel(), &Timeline::TimelineNotesModel::changed,
|
||||
this, &QmlProfilerStatisticsModel::notesChanged);
|
||||
modelManager->registerModelProxy();
|
||||
|
||||
m_acceptedTypes << Compiling << Creating << Binding << HandlingSignal << Javascript;
|
||||
|
||||
|
@@ -29,9 +29,9 @@ namespace QmlProfiler {
|
||||
|
||||
QmlProfilerTimelineModel::QmlProfilerTimelineModel(QmlProfilerModelManager *modelManager,
|
||||
Message message, RangeType rangeType,
|
||||
ProfileFeature mainFeature, QObject *parent) :
|
||||
TimelineModel(modelManager->registerModelProxy(), parent),
|
||||
m_message(message), m_rangeType(rangeType), m_mainFeature(mainFeature),
|
||||
ProfileFeature mainFeature,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
TimelineModel(parent), m_message(message), m_rangeType(rangeType), m_mainFeature(mainFeature),
|
||||
m_modelManager(modelManager)
|
||||
{
|
||||
setDisplayName(tr(QmlProfilerModelManager::featureName(mainFeature)));
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include "qmlprofiler_global.h"
|
||||
#include "qmlprofilermodelmanager.h"
|
||||
#include "timeline/timelinemodel.h"
|
||||
#include "timeline/timelinemodelaggregator.h"
|
||||
|
||||
namespace QmlProfiler {
|
||||
|
||||
@@ -39,7 +40,8 @@ class QMLPROFILER_EXPORT QmlProfilerTimelineModel : public Timeline::TimelineMod
|
||||
|
||||
public:
|
||||
QmlProfilerTimelineModel(QmlProfilerModelManager *modelManager, Message message,
|
||||
RangeType rangeType, ProfileFeature mainFeature, QObject *parent);
|
||||
RangeType rangeType, ProfileFeature mainFeature,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
QmlProfilerModelManager *modelManager() const;
|
||||
|
||||
|
@@ -76,7 +76,7 @@ Q_STATIC_ASSERT(sizeof(StageLabels) ==
|
||||
SceneGraphTimelineModel::MaximumSceneGraphStage * sizeof(const char *));
|
||||
|
||||
SceneGraphTimelineModel::SceneGraphTimelineModel(QmlProfilerModelManager *manager,
|
||||
QObject *parent) :
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, SceneGraphFrame, MaximumRangeType, ProfileSceneGraph, parent)
|
||||
{
|
||||
}
|
||||
|
@@ -82,7 +82,8 @@ public:
|
||||
int glyphCount; // only used for one event type
|
||||
};
|
||||
|
||||
SceneGraphTimelineModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
SceneGraphTimelineModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
int expandedRow(int index) const override;
|
||||
int collapsedRow(int index) const override;
|
||||
|
@@ -33,7 +33,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
DebugMessagesModelTest::DebugMessagesModelTest(QObject *parent) :
|
||||
QObject(parent), manager(nullptr), model(&manager)
|
||||
QObject(parent), model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -51,6 +51,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
DebugMessagesModel model;
|
||||
};
|
||||
|
||||
|
@@ -37,10 +37,11 @@ FlameGraphModelTest::FlameGraphModelTest(QObject *parent) :
|
||||
{
|
||||
}
|
||||
|
||||
int FlameGraphModelTest::generateData(QmlProfilerModelManager *manager)
|
||||
int FlameGraphModelTest::generateData(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *aggregator)
|
||||
{
|
||||
// Notes only work with timeline models
|
||||
QmlProfilerRangeModel *rangeModel = new QmlProfilerRangeModel(manager, Javascript, manager);
|
||||
QmlProfilerRangeModel *rangeModel = new QmlProfilerRangeModel(manager, Javascript, aggregator);
|
||||
int rangeModelId = rangeModel->modelId();
|
||||
manager->notesModel()->addTimelineModel(rangeModel);
|
||||
|
||||
@@ -95,7 +96,7 @@ int FlameGraphModelTest::generateData(QmlProfilerModelManager *manager)
|
||||
void FlameGraphModelTest::initTestCase()
|
||||
{
|
||||
QCOMPARE(model.modelManager(), &manager);
|
||||
rangeModelId = generateData(&manager);
|
||||
rangeModelId = generateData(&manager, &aggregator);
|
||||
QCOMPARE(manager.state(), QmlProfilerModelManager::Done);
|
||||
}
|
||||
|
||||
|
@@ -27,6 +27,9 @@
|
||||
|
||||
#include <qmlprofiler/flamegraphmodel.h>
|
||||
#include <qmlprofiler/qmlprofilermodelmanager.h>
|
||||
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace QmlProfiler {
|
||||
@@ -37,7 +40,8 @@ class FlameGraphModelTest : public QObject
|
||||
Q_OBJECT
|
||||
public:
|
||||
FlameGraphModelTest(QObject *parent = nullptr);
|
||||
static int generateData(QmlProfilerModelManager *manager);
|
||||
static int generateData(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *aggregator);
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
@@ -50,6 +54,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
FlameGraphModel model;
|
||||
int rangeModelId = -1;
|
||||
};
|
||||
|
@@ -34,7 +34,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
FlameGraphViewTest::FlameGraphViewTest(QObject *parent) : QObject(parent), view(&manager)
|
||||
FlameGraphViewTest::FlameGraphViewTest(QObject *parent)
|
||||
: QObject(parent), view(&manager)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -42,7 +43,7 @@ void FlameGraphViewTest::initTestCase()
|
||||
{
|
||||
connect(&view, &QmlProfilerEventsView::showFullRange,
|
||||
this, [this](){ manager.restrictToRange(-1, -1); });
|
||||
FlameGraphModelTest::generateData(&manager);
|
||||
FlameGraphModelTest::generateData(&manager, &aggregator);
|
||||
QCOMPARE(manager.state(), QmlProfilerModelManager::Done);
|
||||
view.resize(500, 500);
|
||||
view.show();
|
||||
|
@@ -27,6 +27,9 @@
|
||||
|
||||
#include <qmlprofiler/flamegraphview.h>
|
||||
#include <qmlprofiler/qmlprofilermodelmanager.h>
|
||||
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace QmlProfiler {
|
||||
@@ -46,6 +49,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
FlameGraphView view;
|
||||
};
|
||||
|
||||
|
@@ -38,7 +38,7 @@ static InputEventType inputType(int i)
|
||||
}
|
||||
|
||||
InputEventsModelTest::InputEventsModelTest(QObject *parent) :
|
||||
QObject(parent), manager(nullptr), model(&manager)
|
||||
QObject(parent), model(&manager, &aggregator)
|
||||
{
|
||||
keyTypeId = manager.numEventTypes();
|
||||
manager.addEventType(QmlEventType(Event, MaximumRangeType, Key));
|
||||
|
@@ -51,6 +51,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
InputEventsModel model;
|
||||
|
||||
int mouseTypeId = -1;
|
||||
|
@@ -30,7 +30,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
MemoryUsageModelTest::MemoryUsageModelTest(QObject *parent) : QObject(parent),
|
||||
manager(nullptr), model(&manager)
|
||||
model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -54,6 +54,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
MemoryUsageModel model;
|
||||
|
||||
int heapPageTypeId = -1;
|
||||
|
@@ -31,7 +31,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
PixmapCacheModelTest::PixmapCacheModelTest(QObject *parent) : QObject(parent),
|
||||
manager(nullptr), model(&manager)
|
||||
model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -48,6 +48,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
PixmapCacheModel model;
|
||||
|
||||
int eventTypeIndices[2 * MaximumPixmapEventType];
|
||||
|
@@ -31,7 +31,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
QmlProfilerAnimationsModelTest::QmlProfilerAnimationsModelTest(QObject *parent) :
|
||||
QObject(parent), manager(nullptr), model(&manager)
|
||||
QObject(parent), model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -52,6 +52,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
QmlProfilerAnimationsModel model;
|
||||
};
|
||||
|
||||
|
@@ -37,12 +37,13 @@ namespace Internal {
|
||||
|
||||
class DummyModel : public QmlProfilerRangeModel {
|
||||
public:
|
||||
DummyModel(QmlProfilerModelManager *manager);
|
||||
DummyModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *aggregator);
|
||||
void loadData();
|
||||
};
|
||||
|
||||
DummyModel::DummyModel(QmlProfilerModelManager *manager) :
|
||||
QmlProfilerRangeModel(manager, Binding)
|
||||
DummyModel::DummyModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *aggregator) :
|
||||
QmlProfilerRangeModel(manager, Binding, aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -90,8 +91,9 @@ void QmlProfilerBindingLoopsRenderPassTest::testUpdate()
|
||||
inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
||||
QmlProfilerModelManager manager(nullptr);
|
||||
DummyModel model(&manager);
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
DummyModel model(&manager, &aggregator);
|
||||
renderer.setModel(&model);
|
||||
result = inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
@@ -24,6 +24,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtTest>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelineabstractrenderer_p.h>
|
||||
|
||||
using namespace Timeline;
|
||||
@@ -82,10 +83,11 @@ void tst_TimelineAbstractRenderer::selectedItem()
|
||||
void tst_TimelineAbstractRenderer::model()
|
||||
{
|
||||
TimelineAbstractRenderer renderer;
|
||||
TimelineModelAggregator aggregator;
|
||||
QSignalSpy spy(&renderer, SIGNAL(modelChanged(TimelineModel*)));
|
||||
QVERIFY(!renderer.modelDirty());
|
||||
QCOMPARE(spy.count(), 0);
|
||||
TimelineModel model(0);
|
||||
TimelineModel model(&aggregator);
|
||||
QCOMPARE(renderer.model(), static_cast<TimelineModel *>(0));
|
||||
renderer.setModel(&model);
|
||||
QVERIFY(renderer.modelDirty());
|
||||
|
@@ -25,6 +25,7 @@
|
||||
|
||||
#include <timeline/runscenegraphtest.h>
|
||||
#include <timeline/timelineitemsrenderpass.h>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelinerenderstate.h>
|
||||
|
||||
#include <QtTest>
|
||||
@@ -34,7 +35,7 @@ using namespace Timeline;
|
||||
|
||||
class DummyModel : public TimelineModel {
|
||||
public:
|
||||
DummyModel();
|
||||
DummyModel(TimelineModelAggregator *parent);
|
||||
void loadData();
|
||||
float relativeHeight(int index) const;
|
||||
};
|
||||
@@ -48,7 +49,7 @@ private slots:
|
||||
void update();
|
||||
};
|
||||
|
||||
DummyModel::DummyModel() : TimelineModel(12)
|
||||
DummyModel::DummyModel(TimelineModelAggregator *parent) : TimelineModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -77,13 +78,14 @@ void tst_TimelineItemsRenderPass::update()
|
||||
{
|
||||
const TimelineItemsRenderPass *inst = TimelineItemsRenderPass::instance();
|
||||
TimelineAbstractRenderer renderer;
|
||||
TimelineModelAggregator aggregator;
|
||||
TimelineRenderState parentState(0, 8, 1, 1);
|
||||
TimelineRenderPass::State *nullState = 0;
|
||||
QSGNode *nullNode = 0;
|
||||
TimelineRenderPass::State *result = inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
||||
DummyModel model;
|
||||
DummyModel model(&aggregator);
|
||||
renderer.setModel(&model);
|
||||
result = inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include <QtTest>
|
||||
#include <QColor>
|
||||
#include <timeline/timelinemodel_p.h>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
|
||||
static const int NumItems = 32;
|
||||
static const qint64 ItemDuration = 1 << 19;
|
||||
@@ -36,8 +37,8 @@ class DummyModel : public Timeline::TimelineModel
|
||||
Q_OBJECT
|
||||
friend class tst_TimelineModel;
|
||||
public:
|
||||
DummyModel(int modelId);
|
||||
DummyModel(QString displayName = tr("dummy"), QObject *parent = 0);
|
||||
DummyModel(Timeline::TimelineModelAggregator *parent);
|
||||
DummyModel(QString displayName, Timeline::TimelineModelAggregator *parent);
|
||||
int expandedRow(int) const { return 2; }
|
||||
int collapsedRow(int) const { return 1; }
|
||||
|
||||
@@ -54,7 +55,6 @@ public:
|
||||
tst_TimelineModel();
|
||||
|
||||
private slots:
|
||||
void privateModel();
|
||||
void isEmpty();
|
||||
void modelId();
|
||||
void rowHeight();
|
||||
@@ -77,15 +77,18 @@ private slots:
|
||||
void rowCount();
|
||||
void prevNext();
|
||||
void parentingOfEqualStarts();
|
||||
|
||||
private:
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
};
|
||||
|
||||
DummyModel::DummyModel(int modelId) :
|
||||
Timeline::TimelineModel(modelId, 0)
|
||||
DummyModel::DummyModel(Timeline::TimelineModelAggregator *parent) :
|
||||
Timeline::TimelineModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
DummyModel::DummyModel(QString displayName, QObject *parent) :
|
||||
TimelineModel(12, parent)
|
||||
DummyModel::DummyModel(QString displayName, Timeline::TimelineModelAggregator *parent) :
|
||||
TimelineModel(parent)
|
||||
{
|
||||
setDisplayName(displayName);
|
||||
}
|
||||
@@ -112,15 +115,9 @@ tst_TimelineModel::tst_TimelineModel() :
|
||||
{
|
||||
}
|
||||
|
||||
void tst_TimelineModel::privateModel()
|
||||
{
|
||||
DummyModel dummy(15);
|
||||
QCOMPARE(dummy.modelId(), 15);
|
||||
}
|
||||
|
||||
void tst_TimelineModel::isEmpty()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QVERIFY(dummy.isEmpty());
|
||||
dummy.loadData();
|
||||
QVERIFY(!dummy.isEmpty());
|
||||
@@ -130,13 +127,13 @@ void tst_TimelineModel::isEmpty()
|
||||
|
||||
void tst_TimelineModel::modelId()
|
||||
{
|
||||
DummyModel dummy;
|
||||
QCOMPARE(dummy.modelId(), 12);
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.modelId(), aggregator.generateModelId() - 1);
|
||||
}
|
||||
|
||||
void tst_TimelineModel::rowHeight()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.rowHeight(0), DefaultRowHeight);
|
||||
QCOMPARE(dummy.collapsedRowHeight(0), DefaultRowHeight);
|
||||
QCOMPARE(dummy.expandedRowHeight(0), DefaultRowHeight);
|
||||
@@ -178,7 +175,7 @@ void tst_TimelineModel::rowHeight()
|
||||
|
||||
void tst_TimelineModel::rowOffset()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.rowOffset(0), 0);
|
||||
|
||||
dummy.loadData();
|
||||
@@ -215,7 +212,7 @@ void tst_TimelineModel::rowOffset()
|
||||
|
||||
void tst_TimelineModel::height()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
int heightAfterLastSignal = 0;
|
||||
int heightChangedSignals = 0;
|
||||
connect(&dummy, &Timeline::TimelineModel::heightChanged, [&](){
|
||||
@@ -258,7 +255,7 @@ void tst_TimelineModel::height()
|
||||
|
||||
void tst_TimelineModel::count()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.count(), 0);
|
||||
dummy.loadData();
|
||||
QCOMPARE(dummy.count(), NumItems);
|
||||
@@ -270,7 +267,7 @@ void tst_TimelineModel::count()
|
||||
|
||||
void tst_TimelineModel::times()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
dummy.loadData();
|
||||
QCOMPARE(dummy.startTime(0), 0);
|
||||
QCOMPARE(dummy.duration(0), ItemDuration * 3 + 2);
|
||||
@@ -280,14 +277,14 @@ void tst_TimelineModel::times()
|
||||
|
||||
void tst_TimelineModel::selectionId()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
dummy.loadData();
|
||||
QCOMPARE(dummy.selectionId(0), 4);
|
||||
}
|
||||
|
||||
void tst_TimelineModel::firstLast()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.firstIndex(0), -1);
|
||||
QCOMPARE(dummy.firstIndex(ItemSpacing), -1);
|
||||
QCOMPARE(dummy.lastIndex(0), -1);
|
||||
@@ -307,7 +304,7 @@ void tst_TimelineModel::firstLast()
|
||||
|
||||
void tst_TimelineModel::expand()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QSignalSpy spy(&dummy, SIGNAL(expandedChanged()));
|
||||
QVERIFY(!dummy.expanded());
|
||||
dummy.setExpanded(true);
|
||||
@@ -326,7 +323,7 @@ void tst_TimelineModel::expand()
|
||||
|
||||
void tst_TimelineModel::hide()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QSignalSpy spy(&dummy, SIGNAL(hiddenChanged()));
|
||||
QVERIFY(!dummy.hidden());
|
||||
dummy.setHidden(true);
|
||||
@@ -346,7 +343,7 @@ void tst_TimelineModel::hide()
|
||||
void tst_TimelineModel::displayName()
|
||||
{
|
||||
QLatin1String name("testest");
|
||||
DummyModel dummy(name);
|
||||
DummyModel dummy(name, &aggregator);
|
||||
QSignalSpy spy(&dummy, SIGNAL(displayNameChanged()));
|
||||
QCOMPARE(dummy.displayName(), name);
|
||||
QCOMPARE(spy.count(), 0);
|
||||
@@ -361,7 +358,7 @@ void tst_TimelineModel::displayName()
|
||||
|
||||
void tst_TimelineModel::defaultValues()
|
||||
{
|
||||
Timeline::TimelineModel dummy(12);
|
||||
Timeline::TimelineModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.location(0), QVariantMap());
|
||||
QCOMPARE(dummy.handlesTypeId(0), false);
|
||||
QCOMPARE(dummy.relativeHeight(0), 1.0);
|
||||
@@ -377,7 +374,7 @@ void tst_TimelineModel::defaultValues()
|
||||
|
||||
void tst_TimelineModel::row()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
dummy.loadData();
|
||||
QCOMPARE(dummy.row(0), 1);
|
||||
dummy.setExpanded(true);
|
||||
@@ -386,33 +383,34 @@ void tst_TimelineModel::row()
|
||||
|
||||
void tst_TimelineModel::colorByHue()
|
||||
{
|
||||
DummyModel dummy;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.colorByHue(10), QColor::fromHsl(10, 150, 166).rgb());
|
||||
QCOMPARE(dummy.colorByHue(500), QColor::fromHsl(140, 150, 166).rgb());
|
||||
}
|
||||
|
||||
void tst_TimelineModel::colorBySelectionId()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
dummy.loadData();
|
||||
QCOMPARE(dummy.colorBySelectionId(5), QColor::fromHsl(6 * 25, 150, 166).rgb());
|
||||
}
|
||||
|
||||
void tst_TimelineModel::colorByFraction()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.colorByFraction(0.5), QColor::fromHsl(0.5 * 96 + 10, 150, 166).rgb());
|
||||
}
|
||||
|
||||
void tst_TimelineModel::supportedRenderPasses()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QVERIFY(!dummy.supportedRenderPasses().isEmpty());
|
||||
}
|
||||
|
||||
void tst_TimelineModel::insertStartEnd()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
int id = dummy.insertStart(10, 0);
|
||||
dummy.insertEnd(id, 10);
|
||||
QCOMPARE(dummy.startTime(id), 10);
|
||||
@@ -433,7 +431,7 @@ void tst_TimelineModel::insertStartEnd()
|
||||
|
||||
void tst_TimelineModel::rowCount()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QSignalSpy expandedSpy(&dummy, SIGNAL(expandedRowCountChanged()));
|
||||
QSignalSpy collapsedSpy(&dummy, SIGNAL(collapsedRowCountChanged()));
|
||||
QCOMPARE(dummy.rowCount(), 1);
|
||||
@@ -453,7 +451,7 @@ void tst_TimelineModel::rowCount()
|
||||
|
||||
void tst_TimelineModel::prevNext()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
QCOMPARE(dummy.nextItemBySelectionId(5, 10, 5), -1);
|
||||
QCOMPARE(dummy.prevItemBySelectionId(5, 10, 5), -1);
|
||||
|
||||
@@ -474,7 +472,7 @@ void tst_TimelineModel::prevNext()
|
||||
|
||||
void tst_TimelineModel::parentingOfEqualStarts()
|
||||
{
|
||||
DummyModel dummy;
|
||||
DummyModel dummy(&aggregator);
|
||||
// Trick it so that it cannot reorder the events and has to parent them in the "wrong" way ...
|
||||
QCOMPARE(dummy.insert(1, 10, 998), 0);
|
||||
QCOMPARE(dummy.insertStart(1, 999), 1);
|
||||
|
@@ -38,7 +38,7 @@ private slots:
|
||||
|
||||
class HeightTestModel : public Timeline::TimelineModel {
|
||||
public:
|
||||
HeightTestModel() : TimelineModel(2)
|
||||
HeightTestModel(Timeline::TimelineModelAggregator *parent) : TimelineModel(parent)
|
||||
{
|
||||
insert(0, 1, 1);
|
||||
}
|
||||
@@ -46,15 +46,15 @@ public:
|
||||
|
||||
void tst_TimelineModelAggregator::height()
|
||||
{
|
||||
Timeline::TimelineModelAggregator aggregator(0);
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
QCOMPARE(aggregator.height(), 0);
|
||||
|
||||
QSignalSpy heightSpy(&aggregator, SIGNAL(heightChanged()));
|
||||
Timeline::TimelineModel *model = new Timeline::TimelineModel(25);
|
||||
Timeline::TimelineModel *model = new Timeline::TimelineModel(&aggregator);
|
||||
aggregator.addModel(model);
|
||||
QCOMPARE(aggregator.height(), 0);
|
||||
QCOMPARE(heightSpy.count(), 0);
|
||||
aggregator.addModel(new HeightTestModel);
|
||||
aggregator.addModel(new HeightTestModel(&aggregator));
|
||||
QVERIFY(aggregator.height() > 0);
|
||||
QCOMPARE(heightSpy.count(), 1);
|
||||
aggregator.clear();
|
||||
@@ -70,8 +70,8 @@ void tst_TimelineModelAggregator::addRemoveModel()
|
||||
|
||||
QCOMPARE(aggregator.notes(), ¬es);
|
||||
|
||||
Timeline::TimelineModel *model1 = new Timeline::TimelineModel(25);
|
||||
Timeline::TimelineModel *model2 = new Timeline::TimelineModel(26);
|
||||
Timeline::TimelineModel *model1 = new Timeline::TimelineModel(&aggregator);
|
||||
Timeline::TimelineModel *model2 = new Timeline::TimelineModel(&aggregator);
|
||||
aggregator.addModel(model1);
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(aggregator.modelCount(), 1);
|
||||
@@ -84,9 +84,9 @@ void tst_TimelineModelAggregator::addRemoveModel()
|
||||
QCOMPARE(aggregator.model(1), model2);
|
||||
QCOMPARE(aggregator.models().count(), 2);
|
||||
|
||||
QCOMPARE(aggregator.modelIndexById(25), 0);
|
||||
QCOMPARE(aggregator.modelIndexById(26), 1);
|
||||
QCOMPARE(aggregator.modelIndexById(27), -1);
|
||||
QCOMPARE(aggregator.modelIndexById(model1->modelId()), 0);
|
||||
QCOMPARE(aggregator.modelIndexById(model2->modelId()), 1);
|
||||
QCOMPARE(aggregator.modelIndexById(aggregator.generateModelId()), -1);
|
||||
|
||||
QCOMPARE(aggregator.modelOffset(0), 0);
|
||||
QCOMPARE(aggregator.modelOffset(1), 0);
|
||||
@@ -99,22 +99,23 @@ void tst_TimelineModelAggregator::addRemoveModel()
|
||||
class PrevNextTestModel : public Timeline::TimelineModel
|
||||
{
|
||||
public:
|
||||
PrevNextTestModel(int x) : TimelineModel(x)
|
||||
PrevNextTestModel(Timeline::TimelineModelAggregator *parent) : TimelineModel(parent)
|
||||
{
|
||||
for (int i = 0; i < 20; ++i)
|
||||
insert(i + x, i * x, x);
|
||||
insert(i + modelId(), i * modelId(), modelId());
|
||||
}
|
||||
};
|
||||
|
||||
void tst_TimelineModelAggregator::prevNext()
|
||||
{
|
||||
Timeline::TimelineModelAggregator aggregator(0);
|
||||
aggregator.addModel(new PrevNextTestModel(1));
|
||||
aggregator.addModel(new PrevNextTestModel(2));
|
||||
aggregator.addModel(new PrevNextTestModel(3));
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
aggregator.generateModelId(); // start modelIds at 1
|
||||
aggregator.addModel(new PrevNextTestModel(&aggregator));
|
||||
aggregator.addModel(new PrevNextTestModel(&aggregator));
|
||||
aggregator.addModel(new PrevNextTestModel(&aggregator));
|
||||
|
||||
// Add an empty model to trigger the special code paths that skip it
|
||||
aggregator.addModel(new Timeline::TimelineModel(4));
|
||||
aggregator.addModel(new Timeline::TimelineModel(&aggregator));
|
||||
QLatin1String item("item");
|
||||
QLatin1String model("model");
|
||||
QVariantMap result;
|
||||
|
@@ -25,6 +25,7 @@
|
||||
|
||||
#include <QtTest>
|
||||
#include <QColor>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelinenotesmodel.h>
|
||||
|
||||
class tst_TimelineNotesModel : public QObject
|
||||
@@ -37,11 +38,14 @@ private slots:
|
||||
void properties();
|
||||
void selection();
|
||||
void modify();
|
||||
|
||||
private:
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
};
|
||||
|
||||
class TestModel : public Timeline::TimelineModel {
|
||||
public:
|
||||
TestModel(int modelId = 10) : TimelineModel(modelId)
|
||||
TestModel(Timeline::TimelineModelAggregator *parent) : TimelineModel(parent)
|
||||
{
|
||||
insert(0, 10, 10);
|
||||
}
|
||||
@@ -59,11 +63,11 @@ class TestNotesModel : public Timeline::TimelineNotesModel {
|
||||
void tst_TimelineNotesModel::timelineModel()
|
||||
{
|
||||
TestNotesModel notes;
|
||||
TestModel *model = new TestModel;
|
||||
TestModel *model2 = new TestModel(2);
|
||||
TestModel *model = new TestModel(&aggregator);
|
||||
TestModel *model2 = new TestModel(&aggregator);
|
||||
notes.addTimelineModel(model);
|
||||
notes.addTimelineModel(model2);
|
||||
QCOMPARE(notes.timelineModelByModelId(10), model);
|
||||
QCOMPARE(notes.timelineModelByModelId(model->modelId()), model);
|
||||
QCOMPARE(notes.timelineModels().count(), 2);
|
||||
QVERIFY(notes.timelineModels().contains(model));
|
||||
QVERIFY(notes.timelineModels().contains(model2));
|
||||
@@ -78,11 +82,11 @@ void tst_TimelineNotesModel::timelineModel()
|
||||
void tst_TimelineNotesModel::addRemove()
|
||||
{
|
||||
TestNotesModel notes;
|
||||
TestModel model;
|
||||
TestModel model(&aggregator);
|
||||
notes.addTimelineModel(&model);
|
||||
|
||||
QSignalSpy spy(¬es, SIGNAL(changed(int,int,int)));
|
||||
int id = notes.add(10, 0, QLatin1String("xyz"));
|
||||
int id = notes.add(model.modelId(), 0, QLatin1String("xyz"));
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(notes.isModified(), true);
|
||||
QCOMPARE(notes.count(), 1);
|
||||
@@ -99,32 +103,34 @@ void tst_TimelineNotesModel::properties()
|
||||
|
||||
TestNotesModel notes;
|
||||
int id = -1;
|
||||
int modelId = -1;
|
||||
{
|
||||
TestModel model;
|
||||
TestModel model(&aggregator);
|
||||
modelId = model.modelId();
|
||||
notes.addTimelineModel(&model);
|
||||
|
||||
id = notes.add(10, 0, QLatin1String("xyz"));
|
||||
id = notes.add(model.modelId(), 0, QLatin1String("xyz"));
|
||||
QVERIFY(id >= 0);
|
||||
QCOMPARE(notes.typeId(id), 7);
|
||||
QCOMPARE(notes.timelineIndex(id), 0);
|
||||
QCOMPARE(notes.timelineModel(id), 10);
|
||||
QCOMPARE(notes.timelineModel(id), modelId);
|
||||
QCOMPARE(notes.text(id), QLatin1String("xyz"));
|
||||
}
|
||||
|
||||
QCOMPARE(notes.typeId(id), -1); // cannot ask the model anymore
|
||||
QCOMPARE(notes.timelineIndex(id), 0);
|
||||
QCOMPARE(notes.timelineModel(id), 10);
|
||||
QCOMPARE(notes.timelineModel(id), modelId);
|
||||
QCOMPARE(notes.text(id), QLatin1String("xyz"));
|
||||
}
|
||||
|
||||
void tst_TimelineNotesModel::selection()
|
||||
{
|
||||
TestNotesModel notes;
|
||||
TestModel model;
|
||||
TestModel model(&aggregator);
|
||||
notes.addTimelineModel(&model);
|
||||
int id1 = notes.add(10, 0, QLatin1String("blablub"));
|
||||
int id2 = notes.add(10, 0, QLatin1String("xyz"));
|
||||
QVariantList ids = notes.byTimelineModel(10);
|
||||
int id1 = notes.add(model.modelId(), 0, QLatin1String("blablub"));
|
||||
int id2 = notes.add(model.modelId(), 0, QLatin1String("xyz"));
|
||||
QVariantList ids = notes.byTimelineModel(model.modelId());
|
||||
QCOMPARE(ids.length(), 2);
|
||||
QVERIFY(ids.contains(id1));
|
||||
QVERIFY(ids.contains(id2));
|
||||
@@ -134,19 +140,19 @@ void tst_TimelineNotesModel::selection()
|
||||
QVERIFY(ids.contains(id1));
|
||||
QVERIFY(ids.contains(id2));
|
||||
|
||||
int got = notes.get(10, 0);
|
||||
int got = notes.get(model.modelId(), 0);
|
||||
QVERIFY(got == id1 || got == id2);
|
||||
QCOMPARE(notes.get(10, 20), -1);
|
||||
QCOMPARE(notes.get(20, 10), -1);
|
||||
QCOMPARE(notes.get(model.modelId(), 20), -1);
|
||||
QCOMPARE(notes.get(model.modelId() + 10, 10), -1);
|
||||
}
|
||||
|
||||
void tst_TimelineNotesModel::modify()
|
||||
{
|
||||
TestNotesModel notes;
|
||||
TestModel model;
|
||||
TestModel model(&aggregator);
|
||||
notes.addTimelineModel(&model);
|
||||
QSignalSpy spy(¬es, SIGNAL(changed(int,int,int)));
|
||||
int id = notes.add(10, 0, QLatin1String("a"));
|
||||
int id = notes.add(model.modelId(), 0, QLatin1String("a"));
|
||||
QCOMPARE(spy.count(), 1);
|
||||
notes.resetModified();
|
||||
notes.update(id, QLatin1String("b"));
|
||||
@@ -165,15 +171,15 @@ void tst_TimelineNotesModel::modify()
|
||||
QCOMPARE(notes.text(id), QLatin1String("a"));
|
||||
notes.resetModified();
|
||||
|
||||
notes.setText(10, 0, QLatin1String("x"));
|
||||
notes.setText(model.modelId(), 0, QLatin1String("x"));
|
||||
QVERIFY(notes.isModified());
|
||||
QCOMPARE(spy.count(), 4);
|
||||
QCOMPARE(notes.text(id), QLatin1String("x"));
|
||||
notes.resetModified();
|
||||
|
||||
TestModel model2(9);
|
||||
TestModel model2(&aggregator);
|
||||
notes.addTimelineModel(&model2);
|
||||
notes.setText(9, 0, QLatin1String("hh"));
|
||||
notes.setText(model2.modelId(), 0, QLatin1String("hh"));
|
||||
QVERIFY(notes.isModified());
|
||||
QCOMPARE(spy.count(), 5);
|
||||
QCOMPARE(notes.count(), 2);
|
||||
|
@@ -24,6 +24,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <timeline/runscenegraphtest.h>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelinenotesrenderpass.h>
|
||||
#include <timeline/timelinerenderstate.h>
|
||||
#include <timeline/timelineabstractrenderer_p.h>
|
||||
@@ -35,7 +36,7 @@ using namespace Timeline;
|
||||
|
||||
class DummyModel : public TimelineModel {
|
||||
public:
|
||||
DummyModel(int id = 12);
|
||||
DummyModel(TimelineModelAggregator *parent);
|
||||
void loadData();
|
||||
};
|
||||
|
||||
@@ -48,7 +49,7 @@ private slots:
|
||||
void update();
|
||||
};
|
||||
|
||||
DummyModel::DummyModel(int id) : TimelineModel(id)
|
||||
DummyModel::DummyModel(TimelineModelAggregator *parent) : TimelineModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -70,14 +71,15 @@ void tst_TimelineNotesRenderPass::update()
|
||||
{
|
||||
const TimelineNotesRenderPass *inst = TimelineNotesRenderPass::instance();
|
||||
TimelineAbstractRenderer renderer;
|
||||
TimelineModelAggregator aggregator;
|
||||
TimelineRenderState parentState(0, 8, 1, 1);
|
||||
TimelineRenderPass::State *nullState = 0;
|
||||
QSGNode *nullNode = 0;
|
||||
TimelineRenderPass::State *result = inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
||||
DummyModel model;
|
||||
DummyModel otherModel(13);
|
||||
DummyModel model(&aggregator);
|
||||
DummyModel otherModel(&aggregator);
|
||||
|
||||
TimelineNotesModel notes;
|
||||
notes.addTimelineModel(&model);
|
||||
@@ -104,9 +106,9 @@ void tst_TimelineNotesRenderPass::update()
|
||||
1);
|
||||
QCOMPARE(result2, result);
|
||||
|
||||
notes.add(12, 0, QLatin1String("x"));
|
||||
notes.add(12, 9, QLatin1String("xx"));
|
||||
notes.add(13, 0, QLatin1String("y"));
|
||||
notes.add(model.modelId(), 0, QLatin1String("x"));
|
||||
notes.add(model.modelId(), 9, QLatin1String("xx"));
|
||||
notes.add(otherModel.modelId(), 0, QLatin1String("y"));
|
||||
QVERIFY(renderer.notesDirty());
|
||||
result = inst->update(&renderer, &parentState, result, 0, 0, true, 1);
|
||||
QVERIFY(result != nullState);
|
||||
|
@@ -24,6 +24,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtTest>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelineoverviewrenderer_p.h>
|
||||
|
||||
using namespace Timeline;
|
||||
@@ -34,7 +35,7 @@ class DummyRenderer : public TimelineOverviewRenderer {
|
||||
|
||||
class DummyModel : public TimelineModel {
|
||||
public:
|
||||
DummyModel() : TimelineModel(0) {}
|
||||
DummyModel(TimelineModelAggregator *parent) : TimelineModel(parent) {}
|
||||
|
||||
void loadData()
|
||||
{
|
||||
@@ -57,8 +58,9 @@ private slots:
|
||||
void tst_TimelineOverviewRenderer::updatePaintNode()
|
||||
{
|
||||
DummyRenderer renderer;
|
||||
TimelineModelAggregator aggregator;
|
||||
QCOMPARE(renderer.updatePaintNode(0, 0), static_cast<QSGNode *>(0));
|
||||
DummyModel model;
|
||||
DummyModel model(&aggregator);
|
||||
renderer.setModel(&model);
|
||||
QCOMPARE(renderer.updatePaintNode(0, 0), static_cast<QSGNode *>(0));
|
||||
model.loadData();
|
||||
|
@@ -24,6 +24,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtTest>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelinerenderer_p.h>
|
||||
|
||||
using namespace Timeline;
|
||||
@@ -34,7 +35,7 @@ class DummyRenderer : public TimelineRenderer {
|
||||
|
||||
class DummyModel : public TimelineModel {
|
||||
public:
|
||||
DummyModel() : TimelineModel(0) {}
|
||||
DummyModel(TimelineModelAggregator *parent) : TimelineModel(parent) {}
|
||||
|
||||
void loadData()
|
||||
{
|
||||
@@ -55,6 +56,7 @@ class tst_TimelineRenderer : public QObject
|
||||
|
||||
private:
|
||||
void testMouseEvents(DummyRenderer *renderer, int x, int y);
|
||||
TimelineModelAggregator aggregator;
|
||||
|
||||
private slots:
|
||||
void updatePaintNode();
|
||||
@@ -65,7 +67,7 @@ void tst_TimelineRenderer::updatePaintNode()
|
||||
{
|
||||
DummyRenderer renderer;
|
||||
QCOMPARE(renderer.updatePaintNode(0, 0), static_cast<QSGNode *>(0));
|
||||
DummyModel model;
|
||||
DummyModel model(&aggregator);
|
||||
renderer.setModel(&model);
|
||||
QCOMPARE(renderer.updatePaintNode(0, 0), static_cast<QSGNode *>(0));
|
||||
model.loadData();
|
||||
@@ -124,7 +126,7 @@ void tst_TimelineRenderer::mouseEvents()
|
||||
QCOMPARE(renderer.selectedItem(), -1);
|
||||
QCOMPARE(renderer.selectionLocked(), true);
|
||||
|
||||
DummyModel model;
|
||||
DummyModel model(&aggregator);
|
||||
renderer.setModel(&model);
|
||||
testMouseEvents(&renderer, 1, 1);
|
||||
QCOMPARE(renderer.selectedItem(), -1);
|
||||
|
@@ -23,6 +23,7 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
#include <timeline/timelinerenderstate.h>
|
||||
#include <QtTest>
|
||||
#include <QSGSimpleRectNode>
|
||||
@@ -140,7 +141,8 @@ void tst_TimelineRenderState::emptyRoots()
|
||||
|
||||
void tst_TimelineRenderState::assembleNodeTree()
|
||||
{
|
||||
TimelineModel model(3);
|
||||
TimelineModelAggregator aggregator;
|
||||
TimelineModel model(&aggregator);
|
||||
TimelineRenderState state1(1, 2, 0.5, 3);
|
||||
state1.assembleNodeTree(&model, 30, 30);
|
||||
QSGTransformNode *node = state1.finalize(0, true, QMatrix4x4());
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include <timeline/timelinerenderstate.h>
|
||||
#include <timeline/timelineabstractrenderer_p.h>
|
||||
#include <timeline/timelineitemsrenderpass.h>
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
|
||||
#include <QtTest>
|
||||
#include <QSGMaterialShader>
|
||||
@@ -37,7 +38,7 @@ using namespace Timeline;
|
||||
|
||||
class DummyModel : public TimelineModel {
|
||||
public:
|
||||
DummyModel(int id = 12);
|
||||
DummyModel(TimelineModelAggregator *parent);
|
||||
void loadData();
|
||||
float relativeHeight(int index) const;
|
||||
};
|
||||
@@ -51,7 +52,7 @@ private slots:
|
||||
void update();
|
||||
};
|
||||
|
||||
DummyModel::DummyModel(int id) : TimelineModel(id)
|
||||
DummyModel::DummyModel(TimelineModelAggregator *parent) : TimelineModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -112,13 +113,14 @@ void tst_TimelineSelectionRenderPass::update()
|
||||
{
|
||||
const TimelineSelectionRenderPass *inst = TimelineSelectionRenderPass::instance();
|
||||
TimelineAbstractRenderer renderer;
|
||||
TimelineModelAggregator aggregator;
|
||||
TimelineRenderState parentState(0, 400, 1, 1);
|
||||
TimelineRenderPass::State *nullState = 0;
|
||||
QSGNode *nullNode = 0;
|
||||
TimelineRenderPass::State *result = inst->update(&renderer, &parentState, 0, 0, 10, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
||||
DummyModel model;
|
||||
DummyModel model(&aggregator);
|
||||
|
||||
result = inst->update(&renderer, &parentState, 0, 0, 10, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
Reference in New Issue
Block a user