[Kst] branches/work/kst/portto4/kst/src
Barth Netterfield
netterfield at astro.utoronto.ca
Wed Jun 2 17:37:50 CEST 2010
SVN commit 1133829 by netterfield:
Purge option added to the data manager.
M +4 -0 libkst/object.h
M +18 -0 libkst/objectstore.cpp
M +8 -0 libkst/objectstore.h
M +7 -0 libkst/primitive.cpp
M +1 -0 libkst/primitive.h
M +103 -0 libkstapp/datamanager.cpp
M +3 -0 libkstapp/datamanager.h
M +33 -6 libkstapp/datamanager.ui
M +0 -1 libkstapp/plotitem.h
M +0 -1 libkstapp/plotitemmanager.cpp
M +10 -0 libkstapp/sessionmodel.cpp
M +2 -0 libkstapp/view.cpp
M +3 -0 libkstapp/viewitem.cpp
M +22 -0 libkstmath/relation.h
--- branches/work/kst/portto4/kst/src/libkst/object.h #1133828:1133829
@@ -71,6 +71,8 @@
virtual void internalUpdate() = 0;
+ virtual bool used() const {return _used;}
+ void setUsed(bool used_in) {_used = used_in;}
protected:
Object();
@@ -84,6 +86,8 @@
qint64 _serial;
qint64 _serialOfLastChange;
+ private:
+ bool _used;
};
--- branches/work/kst/portto4/kst/src/libkst/objectstore.cpp #1133828:1133829
@@ -237,5 +237,23 @@
return _list;
}
+void ObjectStore::clearUsedFlags() {
+ foreach (ObjectPtr p, _list) {
+ p->setUsed(false);
}
+}
+
+bool ObjectStore::deleteUnsetUsedFlags() {
+ QList<ObjectPtr> list = _list;
+ bool some_deleted = false;
+ foreach (ObjectPtr p, list) {
+ if (!p->used()) {
+ removeObject(p);
+ some_deleted = true;
+ }
+ }
+ return some_deleted;
+}
+
+}
// vim: ts=2 sw=2 et
--- branches/work/kst/portto4/kst/src/libkst/objectstore.h #1133828:1133829
@@ -70,6 +70,14 @@
/** locking */
KstRWLock& lock() const { return _lock; }
+ /** clear the 'used' flag on all objects in list */
+ void clearUsedFlags();
+
+ /** delete everything that doesn't have the used flag set.
+ * Note: the caller is responsible to make sure that the
+ * used flags are set properly. It is not done here! */
+ bool deleteUnsetUsedFlags();
+
private:
Q_DISABLE_COPY(ObjectStore)
--- branches/work/kst/portto4/kst/src/libkst/primitive.cpp #1133828:1133829
@@ -85,6 +85,13 @@
return QString("Base Class Size String");
}
+bool Primitive::used() const {
+ if (_provider) {
+ return true;
+ } else {
+ return Object::used();
}
+}
+}
// vim: et sw=2 ts=2
--- branches/work/kst/portto4/kst/src/libkst/primitive.h #1133828:1133829
@@ -46,6 +46,7 @@
virtual QString propertyString() const;
virtual QString sizeString() const;
+ virtual bool used() const;
protected:
Primitive(ObjectStore *store, Object* provider = 0L);
--- branches/work/kst/portto4/kst/src/libkstapp/datamanager.cpp #1133828:1133829
@@ -46,6 +46,7 @@
_session->header()->setResizeMode(QHeaderView::ResizeToContents);
_session->setModel(doc->session());
_session->setContextMenuPolicy(Qt::CustomContextMenu);
+ _session->setUniformRowHeights(true);
connect(_session, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(showContextMenu(const QPoint &)));
connect(_session, SIGNAL(doubleClicked(const QModelIndex &)),
@@ -145,6 +146,8 @@
connect(action, SIGNAL(triggered(QString&)), this, SLOT(showPluginDialog(QString&)));
_filters->addAction(action);
}
+
+ connect(_purge, SIGNAL(clicked()), this, SLOT(purge()));
}
@@ -466,6 +469,106 @@
}
}
+void DataManager::setUsedFlags() {
+ _doc->objectStore()->clearUsedFlags();
+
+ // for each relation used in an unhidden plot mark 'used' - O(N)
+ QList<PlotItem*> plotlist = ViewItem::getItems<PlotItem>();
+ foreach (PlotItem *plot, plotlist) {
+ if (plot->isVisible()) {
+ foreach (PlotRenderItem *renderer, plot->renderItems()) {
+ foreach (RelationPtr relation, renderer->relationList()) {
+ relation->setUsed(true);
}
+ }
+ }
+ }
+ // TODO: for each primitive used in an unhidden label mark 'used' - O(N)
+
+ // for each primitive used by a relation mark 'used' - O(N)
+ ObjectList<Relation> relationList = _doc->objectStore()->getObjects<Relation>();
+ foreach (RelationPtr object, relationList) {
+ object->readLock();
+ //set used all input and output primitives
+ foreach (VectorPtr v, object->inputVectors()) {
+ v->setUsed(true);
+ if (v->provider()) {
+ v->provider()->setUsed(true);
+ }
+ }
+ foreach (VectorPtr v, object->outputVectors()) {
+ v->setUsed(true);
+ }
+ foreach (ScalarPtr s, object->inputScalars()) {
+ s->setUsed(true);
+ if (s->provider()) {
+ s->provider()->setUsed(true);
+ }
+ }
+ foreach (ScalarPtr s, object->outputScalars()) {
+ s->setUsed(true);
+ }
+ foreach (StringPtr s, object->inputStrings()) {
+ s->setUsed(true);
+ if (s->provider()) {
+ s->provider()->setUsed(true);
+ }
+ }
+ foreach (StringPtr s, object->outputStrings()) {
+ s->setUsed(true);
+ }
+ foreach (MatrixPtr m, object->inputMatrices()) {
+ m->setUsed(true);
+ if (m->provider()) {
+ m->provider()->setUsed(true);
+ }
+ }
+ foreach (MatrixPtr m, object->outputMatrices()) {
+ m->setUsed(true);
+ }
+ object->unlock();
+ }
+
+ ObjectList<DataObject> dataObjectList = _doc->objectStore()->getObjects<DataObject>();
+ foreach (DataObjectPtr object, dataObjectList) {
+ object->readLock();
+ //set used all input and output primitives
+ foreach (VectorPtr v, object->inputVectors()) {
+ v->setUsed(true);
+ }
+ foreach (VectorPtr v, object->outputVectors()) {
+ v->setUsed(true);
+ }
+ foreach (ScalarPtr s, object->inputScalars()) {
+ s->setUsed(true);
+ }
+ foreach (ScalarPtr s, object->outputScalars()) {
+ s->setUsed(true);
+ }
+ foreach (StringPtr s, object->inputStrings()) {
+ s->setUsed(true);
+ }
+ foreach (StringPtr s, object->outputStrings()) {
+ s->setUsed(true);
+ }
+ foreach (MatrixPtr m, object->inputMatrices()) {
+ m->setUsed(true);
+ }
+ foreach (MatrixPtr m, object->outputMatrices()) {
+ m->setUsed(true);
+ }
+ object->unlock();
+ }
+}
+
+void DataManager::purge() {
+ do {
+ setUsedFlags();
+ } while (_doc->objectStore()->deleteUnsetUsedFlags());
+ _session->reset();
+}
+
+}
+
// vim: ts=2 sw=2 et
--- branches/work/kst/portto4/kst/src/libkstapp/datamanager.h #1133828:1133829
@@ -59,6 +59,9 @@
virtual bool event(QEvent * event);
+ void setUsedFlags();
+ void purge();
+
private:
Document *_doc;
--- branches/work/kst/portto4/kst/src/libkstapp/datamanager.ui #1133828:1133829
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0" >
<class>DataManager</class>
<widget class="QDialog" name="DataManager" >
@@ -6,14 +7,14 @@
<x>0</x>
<y>0</y>
<width>750</width>
- <height>347</height>
+ <height>235</height>
</rect>
</property>
<property name="windowTitle" >
<string>Data Manager</string>
</property>
- <layout class="QVBoxLayout" >
- <item>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" colspan="3">
<widget class="QSplitter" name="_splitter" >
<property name="layoutDirection" >
<enum>Qt::LeftToRight</enum>
@@ -26,7 +27,7 @@
</property>
<widget class="QToolBox" name="_objects" >
<property name="sizePolicy" >
- <sizepolicy vsizetype="Preferred" hsizetype="Minimum" >
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -37,7 +38,7 @@
</widget>
<widget class="QTreeView" name="_session" >
<property name="sizePolicy" >
- <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -45,8 +46,34 @@
</widget>
</widget>
</item>
- <item>
+ <item row="1" column="0">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>601</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="1">
+ <widget class="QPushButton" name="_purge">
+ <property name="text">
+ <string>Purge</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
<widget class="QDialogButtonBox" name="_buttonBox" >
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
--- branches/work/kst/portto4/kst/src/libkstapp/plotitem.h #1133828:1133829
@@ -19,7 +19,6 @@
#include <QHash>
-#include "relation.h"
#include "plotrenderitem.h"
#include "plotiteminterface.h"
#include "plotdefines.h"
--- branches/work/kst/portto4/kst/src/libkstapp/plotitemmanager.cpp #1133828:1133829
@@ -68,7 +68,6 @@
void PlotItemManager::removePlot(PlotItem *plotItem) {
if (!_plotLists.contains(plotItem->parentView()))
return;
-
QList<PlotItem*> list = _plotLists.value(plotItem->parentView());
list.removeAll(plotItem);
_plotLists.insert(plotItem->parentView(), list);
--- branches/work/kst/portto4/kst/src/libkstapp/sessionmodel.cpp #1133828:1133829
@@ -183,6 +183,10 @@
rc = p->typeString();
break;
case 2:
+ // this is very fragile and depends on how the smart pointers are being carried around.
+ // we should consider a different approach (?). Keep it now for debugging...
+ // It doesn't know, for instance, if a plot has been 'deleted'.
+ rc = QString::number(p.count()-4); //4: object store, session model, cast, local
break;
case 3:
rc = p->sizeString();
@@ -215,6 +219,9 @@
p->unlock();
break;
case 2:
+ // this is very fragile and depends on how the smart pointers are being carried around.
+ // we should consider a different approach or delete(?). Keep it now for debugging...
+ rc = QString::number(p.count()-4); //4: object store, session model, cast, local
break;
case 3:
p->readLock();
@@ -251,6 +258,9 @@
p->unlock();
break;
case 2:
+ // this is very fragile and depends on how the smart pointers are being carried around.
+ // we should consider a different approach or delete (?). Keep it now for debugging...
+ rc = QString::number(p.count()-4); //4: object store, session model, cast, local
break;
case 3:
p->readLock();
--- branches/work/kst/portto4/kst/src/libkstapp/view.cpp #1133828:1133829
@@ -103,6 +103,8 @@
View::~View() {
+ delete _undoStack;
+ delete _layoutBoxItem;
}
--- branches/work/kst/portto4/kst/src/libkstapp/viewitem.cpp #1133828:1133829
@@ -2125,6 +2125,9 @@
void RemoveCommand::redo() {
Q_ASSERT(_item);
_item->hide();
+ // hmmm... view items aren't really deleted!! if we delete them,
+ // then we run into trouble with the undo stack. If we don't, then
+ // they keep holding onto the curves, preventing purge.
}
--- branches/work/kst/portto4/kst/src/libkstmath/relation.h #1133828:1133829
@@ -144,6 +144,28 @@
// Compare the cached the context to the provided one.
bool redrawRequired(const CurveRenderContext& context);
+ // If you use these, you must lock() and unlock() the object as long as you
+ // hold the reference
+ const VectorMap& inputVectors() const { return _inputVectors; }
+ const VectorMap& outputVectors() const { return _outputVectors; }
+ VectorMap& inputVectors() { return _inputVectors; }
+ VectorMap& outputVectors() { return _outputVectors; }
+
+ const ScalarMap& inputScalars() const { return _inputScalars; }
+ const ScalarMap& outputScalars() const { return _outputScalars; }
+ ScalarMap& inputScalars() { return _inputScalars; }
+ ScalarMap& outputScalars() { return _outputScalars; }
+
+ const StringMap& inputStrings() const { return _inputStrings; }
+ const StringMap& outputStrings() const { return _outputStrings; }
+ StringMap& inputStrings() { return _inputStrings; }
+ StringMap& outputStrings() { return _outputStrings; }
+
+ const MatrixMap& inputMatrices() const { return _inputMatrices; }
+ const MatrixMap& outputMatrices() const { return _outputMatrices; }
+ MatrixMap& inputMatrices() { return _inputMatrices; }
+ MatrixMap& outputMatrices() { return _outputMatrices; }
+
protected:
virtual void writeLockInputsAndOutputs() const;
virtual void unlockInputsAndOutputs() const;
More information about the Kst
mailing list