annotate base/Selection.h @ 1840:7faa08747f5e

Comments
author Chris Cannam
date Tue, 14 Apr 2020 08:19:23 +0100
parents 796ae7eecced
children
rev   line source
Chris@49 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@8 2
Chris@8 3 /*
Chris@52 4 Sonic Visualiser
Chris@52 5 An audio file viewer and annotation editor.
Chris@52 6 Centre for Digital Music, Queen Mary, University of London.
Chris@52 7 This file copyright 2006 Chris Cannam.
Chris@8 8
Chris@52 9 This program is free software; you can redistribute it and/or
Chris@52 10 modify it under the terms of the GNU General Public License as
Chris@52 11 published by the Free Software Foundation; either version 2 of the
Chris@52 12 License, or (at your option) any later version. See the file
Chris@52 13 COPYING included with this distribution for more information.
Chris@8 14 */
Chris@8 15
cannam@1452 16 #ifndef SV_SELECTION_H
cannam@1452 17 #define SV_SELECTION_H
Chris@8 18
Chris@8 19 #include <cstddef>
Chris@24 20 #include <set>
Chris@8 21
Chris@46 22 #include "XmlExportable.h"
Chris@1038 23 #include "BaseTypes.h"
Chris@46 24
Chris@925 25 /**
Chris@925 26 * A selection object simply represents a range in time, via start and
Chris@925 27 * end frame.
Chris@925 28 *
Chris@925 29 * The end frame is the index of the frame just *after* the end of the
Chris@925 30 * selection. For example a selection of length 10 frames starting at
Chris@925 31 * time 0 will have start frame 0 and end frame 10. This will be
Chris@925 32 * contiguous with (rather than overlapping with) a selection that
Chris@925 33 * starts at frame 10.
Chris@925 34 *
Chris@925 35 * Any selection with equal start and end frames is empty,
Chris@925 36 * representing "no selection". All empty selections are equal under
Chris@925 37 * the comparison operators. The default constructor makes an empty
Chris@925 38 * selection with start and end frames equal to zero.
Chris@925 39 */
Chris@8 40 class Selection
Chris@8 41 {
Chris@8 42 public:
Chris@8 43 Selection();
Chris@1038 44 Selection(sv_frame_t startFrame, sv_frame_t endFrame);
Chris@8 45 Selection(const Selection &);
Chris@8 46 Selection &operator=(const Selection &);
Chris@8 47 virtual ~Selection();
Chris@8 48
Chris@8 49 bool isEmpty() const;
Chris@1038 50 sv_frame_t getStartFrame() const;
Chris@1038 51 sv_frame_t getEndFrame() const;
Chris@1645 52 sv_frame_t getDuration() const { return getEndFrame() - getStartFrame(); }
Chris@1038 53 bool contains(sv_frame_t frame) const;
Chris@8 54
Chris@8 55 bool operator<(const Selection &) const;
Chris@8 56 bool operator==(const Selection &) const;
Chris@8 57
Chris@8 58 protected:
Chris@1038 59 sv_frame_t m_startFrame;
Chris@1038 60 sv_frame_t m_endFrame;
Chris@8 61 };
Chris@8 62
Chris@46 63 class MultiSelection : public XmlExportable
Chris@24 64 {
Chris@24 65 public:
Chris@24 66 MultiSelection();
Chris@24 67 virtual ~MultiSelection();
Chris@24 68
Chris@24 69 typedef std::set<Selection> SelectionList;
Chris@24 70
Chris@24 71 const SelectionList &getSelections() const;
Chris@24 72 void setSelection(const Selection &selection);
Chris@24 73 void addSelection(const Selection &selection);
Chris@24 74 void removeSelection(const Selection &selection);
Chris@24 75 void clearSelections();
Chris@24 76
Chris@1038 77 void getExtents(sv_frame_t &startFrame, sv_frame_t &endFrame) const;
Chris@1811 78
Chris@24 79 /**
Chris@24 80 * Return the selection that contains a given frame.
Chris@24 81 * If defaultToFollowing is true, and if the frame is not in a
Chris@24 82 * selected area, return the next selection after the given frame.
Chris@24 83 * Return the empty selection if no appropriate selection is found.
Chris@24 84 */
Chris@1811 85 Selection getContainingSelection(sv_frame_t frame,
Chris@1811 86 bool defaultToFollowing) const;
Chris@24 87
Chris@1580 88 void toXml(QTextStream &stream, QString indent = "",
Chris@1811 89 QString extraAttributes = "") const override;
Chris@46 90
Chris@1811 91 // Debug only, not interop
Chris@1811 92 QString toString() const;
Chris@1811 93
Chris@24 94 protected:
Chris@24 95 SelectionList m_selections;
Chris@24 96 };
Chris@24 97
Chris@24 98
Chris@8 99 #endif