annotate base/Layer.h @ 5:31c4ed2d5da6

* Hook up SV file i/o. You can now save and load sessions. Some problems -- gain is not reloaded correctly for waveforms, reloaded panes are not properly reconnected to the panner, and no doubt plenty of others.
author Chris Cannam
date Tue, 17 Jan 2006 17:45:55 +0000
parents 581f67f370f3
children 44bbf5793d84
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@0 19
Chris@0 20 class ZoomConstraint;
Chris@0 21 class Model;
Chris@0 22 class QPainter;
Chris@0 23 class View;
Chris@0 24
Chris@0 25 /**
Chris@0 26 * The base class for visual representations of the data found in a
Chris@0 27 * Model. Layers are expected to be able to draw themselves onto a
Chris@0 28 * View, and may also be editable.
Chris@0 29 */
Chris@0 30
Chris@0 31 class Layer : public QObject,
Chris@3 32 public PropertyContainer,
Chris@3 33 public XmlExportable
Chris@0 34 {
Chris@0 35 Q_OBJECT
Chris@0 36
Chris@0 37 public:
Chris@0 38 Layer(View *w);
Chris@0 39 virtual ~Layer();
Chris@0 40
Chris@0 41 virtual const Model *getModel() const = 0;
Chris@0 42 virtual const ZoomConstraint *getZoomConstraint() const { return 0; }
Chris@0 43 virtual void paint(QPainter &, QRect) const = 0;
Chris@0 44
Chris@0 45 enum VerticalPosition {
Chris@0 46 PositionTop, PositionMiddle, PositionBottom
Chris@0 47 };
Chris@0 48 virtual VerticalPosition getPreferredTimeRulerPosition() const {
Chris@0 49 return PositionMiddle;
Chris@0 50 }
Chris@0 51 virtual VerticalPosition getPreferredFrameCountPosition() const {
Chris@0 52 return PositionBottom;
Chris@0 53 }
Chris@0 54
Chris@0 55 virtual QString getPropertyContainerName() const {
Chris@0 56 return objectName();
Chris@0 57 }
Chris@0 58
Chris@0 59 virtual int getVerticalScaleWidth(QPainter &) const { return 0; }
Chris@0 60 virtual void paintVerticalScale(QPainter &, QRect) const { }
Chris@0 61
Chris@0 62 virtual QRect getFeatureDescriptionRect(QPainter &, QPoint) const {
Chris@0 63 return QRect(0, 0, 0, 0);
Chris@0 64 }
Chris@0 65 virtual void paintLocalFeatureDescription(QPainter &, QRect, QPoint) const {
Chris@0 66 }
Chris@0 67
Chris@0 68 /**
Chris@0 69 * This should return true if the view can safely be scrolled
Chris@0 70 * automatically by the widget (simply copying the existing data
Chris@0 71 * and then refreshing the exposed area) without altering its
Chris@0 72 * meaning. For the widget as a whole this is usually not
Chris@0 73 * possible because of invariant (non-scrolling) material
Chris@0 74 * displayed over the top, but the widget may be able to optimise
Chris@0 75 * scrolling better if it is known that individual views can be
Chris@0 76 * scrolled safely in this way.
Chris@0 77 */
Chris@0 78 virtual bool isLayerScrollable() const { return true; }
Chris@0 79
Chris@0 80 /**
Chris@0 81 * Return the proportion of background work complete in drawing
Chris@0 82 * this view, as a percentage -- in most cases this will be the
Chris@0 83 * value returned by pointer from a call to the underlying model's
Chris@0 84 * isReady(int *) call. The widget may choose to show a progress
Chris@0 85 * meter if it finds that this returns < 100 at any given moment.
Chris@0 86 */
Chris@0 87 virtual int getCompletion() const { return 100; }
Chris@0 88
Chris@0 89 virtual void setObjectName(const QString &name);
Chris@0 90
Chris@3 91 virtual QString toXmlString(QString indent = "",
Chris@3 92 QString extraAttributes = "") const;
Chris@3 93
Chris@0 94 signals:
Chris@0 95 void modelChanged();
Chris@0 96 void modelCompletionChanged();
Chris@0 97 void modelChanged(size_t startFrame, size_t endFrame);
Chris@0 98 void modelReplaced();
Chris@0 99
Chris@0 100 void layerParametersChanged();
Chris@0 101 void layerNameChanged();
Chris@0 102
Chris@0 103 protected:
Chris@0 104 View *m_view;
Chris@0 105 };
Chris@0 106
Chris@0 107 #endif
Chris@0 108