annotate layer/ImageLayer.h @ 312:6de6f78b13a1

* Make it possible to drop audio files, layer files, session files and images onto SV panes. Need to do a bit more work on where we expect the dropped file to go, particularly in the case of audio files -- at the moment they're always opened in new panes, but it may be better to by default replace whatever is in the target pane.
author Chris Cannam
date Wed, 10 Oct 2007 15:18:02 +0000
parents 013a37723c0a
children c0b9eec70639
rev   line source
Chris@303 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@303 2
Chris@303 3 /*
Chris@303 4 Sonic Visualiser
Chris@303 5 An audio file viewer and annotation editor.
Chris@303 6 Centre for Digital Music, Queen Mary, University of London.
Chris@303 7 This file copyright 2006-2007 Chris Cannam and QMUL.
Chris@303 8
Chris@303 9 This program is free software; you can redistribute it and/or
Chris@303 10 modify it under the terms of the GNU General Public License as
Chris@303 11 published by the Free Software Foundation; either version 2 of the
Chris@303 12 License, or (at your option) any later version. See the file
Chris@303 13 COPYING included with this distribution for more information.
Chris@303 14 */
Chris@303 15
Chris@303 16 #ifndef _IMAGE_LAYER_H_
Chris@303 17 #define _IMAGE_LAYER_H_
Chris@303 18
Chris@303 19 #include "Layer.h"
Chris@303 20 #include "data/model/ImageModel.h"
Chris@303 21
Chris@303 22 #include <QObject>
Chris@303 23 #include <QColor>
Chris@303 24 #include <QImage>
Chris@305 25 #include <QMutex>
Chris@303 26
Chris@303 27 #include <map>
Chris@303 28
Chris@303 29 class View;
Chris@303 30 class QPainter;
Chris@305 31 class RemoteFile;
Chris@303 32
Chris@303 33 class ImageLayer : public Layer
Chris@303 34 {
Chris@303 35 Q_OBJECT
Chris@303 36
Chris@303 37 public:
Chris@303 38 ImageLayer();
Chris@305 39 virtual ~ImageLayer();
Chris@303 40
Chris@303 41 virtual void paint(View *v, QPainter &paint, QRect rect) const;
Chris@303 42
Chris@303 43 virtual QString getFeatureDescription(View *v, QPoint &) const;
Chris@303 44
Chris@303 45 virtual bool snapToFeatureFrame(View *v, int &frame,
Chris@303 46 size_t &resolution,
Chris@303 47 SnapType snap) const;
Chris@303 48
Chris@303 49 virtual void drawStart(View *v, QMouseEvent *);
Chris@303 50 virtual void drawDrag(View *v, QMouseEvent *);
Chris@303 51 virtual void drawEnd(View *v, QMouseEvent *);
Chris@303 52
Chris@303 53 virtual void editStart(View *v, QMouseEvent *);
Chris@303 54 virtual void editDrag(View *v, QMouseEvent *);
Chris@303 55 virtual void editEnd(View *v, QMouseEvent *);
Chris@303 56
Chris@303 57 virtual void moveSelection(Selection s, size_t newStartFrame);
Chris@303 58 virtual void resizeSelection(Selection s, Selection newSize);
Chris@303 59 virtual void deleteSelection(Selection s);
Chris@303 60
Chris@303 61 virtual void copy(Selection s, Clipboard &to);
Chris@303 62 virtual bool paste(const Clipboard &from, int frameOffset,
Chris@303 63 bool interactive);
Chris@303 64
Chris@303 65 virtual bool editOpen(View *, QMouseEvent *); // on double-click
Chris@303 66
Chris@303 67 virtual const Model *getModel() const { return m_model; }
Chris@303 68 void setModel(ImageModel *model);
Chris@303 69
Chris@303 70 virtual PropertyList getProperties() const;
Chris@303 71 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@303 72 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@303 73 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@303 74 int *min, int *max, int *deflt) const;
Chris@303 75 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@303 76 int value) const;
Chris@303 77 virtual void setProperty(const PropertyName &, int value);
Chris@303 78
Chris@303 79 virtual ColourSignificance getLayerColourSignificance() const {
Chris@303 80 return ColourAbsent;
Chris@303 81 }
Chris@303 82
Chris@303 83 virtual bool isLayerScrollable(const View *v) const;
Chris@303 84
Chris@303 85 virtual bool isLayerEditable() const { return true; }
Chris@303 86
Chris@303 87 virtual int getCompletion(View *) const { return m_model->getCompletion(); }
Chris@303 88
Chris@303 89 virtual bool getValueExtents(float &min, float &max,
Chris@303 90 bool &logarithmic, QString &unit) const;
Chris@303 91
Chris@303 92 virtual QString toXmlString(QString indent = "",
Chris@303 93 QString extraAttributes = "") const;
Chris@303 94
Chris@303 95 virtual void setLayerDormant(const View *v, bool dormant);
Chris@303 96
Chris@303 97 void setProperties(const QXmlAttributes &attributes);
Chris@303 98
Chris@312 99 virtual bool addImage(long frame, QString url); // using a command
Chris@312 100
Chris@305 101 protected slots:
Chris@305 102 void checkAddRemotes();
Chris@305 103 void remoteFileReady();
Chris@305 104
Chris@303 105 protected:
Chris@303 106 ImageModel::PointList getLocalPoints(View *v, int x, int y) const;
Chris@303 107
Chris@304 108 bool getImageOriginalSize(QString name, QSize &size) const;
Chris@303 109 QImage getImage(View *v, QString name, QSize maxSize) const;
Chris@303 110
Chris@304 111 void drawImage(View *v, QPainter &paint, const ImageModel::Point &p,
Chris@304 112 int x, int nx) const;
Chris@304 113
Chris@303 114 //!!! how to reap no-longer-used images?
Chris@303 115
Chris@303 116 typedef std::map<QString, QImage> ImageMap;
Chris@303 117 typedef std::map<const View *, ImageMap> ViewImageMap;
Chris@305 118 typedef std::map<QString, RemoteFile *> RemoteFileMap;
Chris@304 119
Chris@303 120 static ImageMap m_images;
Chris@305 121 static QMutex m_imageMapMutex;
Chris@303 122 mutable ViewImageMap m_scaled;
Chris@305 123 mutable RemoteFileMap m_remoteFiles;
Chris@305 124
Chris@305 125 QString getLocalFilename(QString img) const;
Chris@305 126 void checkAddRemote(QString img) const;
Chris@303 127
Chris@303 128 ImageModel *m_model;
Chris@303 129 bool m_editing;
Chris@303 130 QPoint m_editOrigin;
Chris@303 131 ImageModel::Point m_originalPoint;
Chris@303 132 ImageModel::Point m_editingPoint;
Chris@303 133 ImageModel::EditCommand *m_editingCommand;
Chris@303 134 };
Chris@303 135
Chris@303 136 #endif
Chris@303 137