annotate base/Layer.h @ 6:44bbf5793d84

* Rework handling of layer properties in file I/O -- we now get the individual layers to load and save them rather than doing it via generic property lists in the base class, so as to ensure we read and write meaningful values rather than generic int values requiring conversion.
author Chris Cannam
date Thu, 19 Jan 2006 12:54:38 +0000
parents 581f67f370f3
children 49a95b174050
rev   line source
Chris@0 1
Chris@0 2 /* -*- c-basic-offset: 4 -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 3
Chris@0 4 /*
Chris@0 5 A waveform viewer and audio annotation editor.
Chris@2 6 Chris Cannam, Queen Mary University of London, 2005-2006
Chris@0 7
Chris@0 8 This is experimental software. Not for distribution.
Chris@0 9 */
Chris@0 10
Chris@0 11 #ifndef _VIEWER_H_
Chris@0 12 #define _VIEWER_H_
Chris@0 13
Chris@0 14 #include "PropertyContainer.h"
Chris@3 15 #include "XmlExportable.h"
Chris@0 16
Chris@0 17 #include <QObject>
Chris@0 18 #include <QRect>
Chris@6 19 #include <QXmlAttributes>
Chris@0 20
Chris@0 21 class ZoomConstraint;
Chris@0 22 class Model;
Chris@0 23 class QPainter;
Chris@0 24 class View;
Chris@0 25
Chris@0 26 /**
Chris@0 27 * The base class for visual representations of the data found in a
Chris@0 28 * Model. Layers are expected to be able to draw themselves onto a
Chris@0 29 * View, and may also be editable.
Chris@0 30 */
Chris@0 31
Chris@0 32 class Layer : public QObject,
Chris@3 33 public PropertyContainer,
Chris@3 34 public XmlExportable
Chris@0 35 {
Chris@0 36 Q_OBJECT
Chris@0 37
Chris@0 38 public:
Chris@0 39 Layer(View *w);
Chris@0 40 virtual ~Layer();
Chris@0 41
Chris@0 42 virtual const Model *getModel() const = 0;
Chris@0 43 virtual const ZoomConstraint *getZoomConstraint() const { return 0; }
Chris@0 44 virtual void paint(QPainter &, QRect) const = 0;
Chris@0 45
Chris@0 46 enum VerticalPosition {
Chris@0 47 PositionTop, PositionMiddle, PositionBottom
Chris@0 48 };
Chris@0 49 virtual VerticalPosition getPreferredTimeRulerPosition() const {
Chris@0 50 return PositionMiddle;
Chris@0 51 }
Chris@0 52 virtual VerticalPosition getPreferredFrameCountPosition() const {
Chris@0 53 return PositionBottom;
Chris@0 54 }
Chris@0 55
Chris@0 56 virtual QString getPropertyContainerName() const {
Chris@0 57 return objectName();
Chris@0 58 }
Chris@0 59
Chris@0 60 virtual int getVerticalScaleWidth(QPainter &) const { return 0; }
Chris@0 61 virtual void paintVerticalScale(QPainter &, QRect) const { }
Chris@0 62
Chris@0 63 virtual QRect getFeatureDescriptionRect(QPainter &, QPoint) const {
Chris@0 64 return QRect(0, 0, 0, 0);
Chris@0 65 }
Chris@0 66 virtual void paintLocalFeatureDescription(QPainter &, QRect, QPoint) const {
Chris@0 67 }
Chris@0 68
Chris@0 69 /**
Chris@0 70 * This should return true if the view can safely be scrolled
Chris@0 71 * automatically by the widget (simply copying the existing data
Chris@0 72 * and then refreshing the exposed area) without altering its
Chris@0 73 * meaning. For the widget as a whole this is usually not
Chris@0 74 * possible because of invariant (non-scrolling) material
Chris@0 75 * displayed over the top, but the widget may be able to optimise
Chris@0 76 * scrolling better if it is known that individual views can be
Chris@0 77 * scrolled safely in this way.
Chris@0 78 */
Chris@0 79 virtual bool isLayerScrollable() const { return true; }
Chris@0 80
Chris@0 81 /**
Chris@0 82 * Return the proportion of background work complete in drawing
Chris@0 83 * this view, as a percentage -- in most cases this will be the
Chris@0 84 * value returned by pointer from a call to the underlying model's
Chris@0 85 * isReady(int *) call. The widget may choose to show a progress
Chris@0 86 * meter if it finds that this returns < 100 at any given moment.
Chris@0 87 */
Chris@0 88 virtual int getCompletion() const { return 100; }
Chris@0 89
Chris@0 90 virtual void setObjectName(const QString &name);
Chris@0 91
Chris@3 92 virtual QString toXmlString(QString indent = "",
Chris@3 93 QString extraAttributes = "") const;
Chris@3 94
Chris@6 95 virtual void setProperties(const QXmlAttributes &) = 0;
Chris@6 96
Chris@0 97 signals:
Chris@0 98 void modelChanged();
Chris@0 99 void modelCompletionChanged();
Chris@0 100 void modelChanged(size_t startFrame, size_t endFrame);
Chris@0 101 void modelReplaced();
Chris@0 102
Chris@0 103 void layerParametersChanged();
Chris@0 104 void layerNameChanged();
Chris@0 105
Chris@0 106 protected:
Chris@0 107 View *m_view;
Chris@0 108 };
Chris@0 109
Chris@0 110 #endif
Chris@0 111