diff data/model/DenseThreeDimensionalModel.h @ 500:83eae5239db6

* Permit viewing (though not editing) colour 3d plot layer data in the spreadsheet data viewer dialog * Add somewhat simplistic RDF export for layers * Fix display of peak frequencies in spectrum layer * Fix (I hope) sizing of plugin parameter dialog
author Chris Cannam
date Tue, 02 Dec 2008 17:17:25 +0000
parents 1405f4a2caf3
children 55ad231c9db7
line wrap: on
line diff
--- a/data/model/DenseThreeDimensionalModel.h	Fri Nov 28 15:45:20 2008 +0000
+++ b/data/model/DenseThreeDimensionalModel.h	Tue Dec 02 17:17:25 2008 +0000
@@ -17,12 +17,15 @@
 #define _DENSE_THREE_DIMENSIONAL_MODEL_H_
 
 #include "Model.h"
+#include "TabularModel.h"
 #include "base/ZoomConstraint.h"
+#include "base/RealTime.h"
 
 #include <QMutex>
 #include <vector>
 
-class DenseThreeDimensionalModel : public Model
+class DenseThreeDimensionalModel : public Model,
+                                   public TabularModel
 {
     Q_OBJECT
 
@@ -108,6 +111,54 @@
 
     virtual int getCompletion() const = 0;
 
+    /*
+       TabularModel methods.
+       This class is non-editable -- subclasses may be editable.
+       Row and column are transposed for the tabular view (which is
+       "on its side").
+     */
+    
+    virtual int getRowCount() const { return getWidth(); }
+    virtual int getColumnCount() const { return getHeight() + 2; }
+
+    virtual QString getHeading(int column) const
+    {
+        switch (column) {
+        case 0: return tr("Time");
+        case 1: return tr("Frame");
+        default: return getBinName(column - 2);
+        }
+    }
+
+    virtual QVariant getData(int row, int column, int role) const 
+    {
+        switch (column) {
+        case 0: {
+            RealTime rt = RealTime::frame2RealTime(row * getResolution(),
+                                                   getSampleRate());
+            return rt.toText().c_str();
+        }
+        case 1:
+            return int(row * getResolution());
+        default:
+            return getValueAt(row, column - 2);
+        }
+    }
+
+    virtual bool isColumnTimeValue(int col) const {
+        return col < 2;
+    }
+    virtual SortType getSortType(int col) const {
+        return SortNumeric;
+    }
+
+    virtual long getFrameForRow(int row) const {
+        return row * getSampleRate();
+    }
+    virtual int getRowForFrame(long frame) const {
+        return frame / getSampleRate();
+    }
+
 protected:
     DenseThreeDimensionalModel() { }
 };