Chris@74: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@74: Chris@74: /* Chris@74: Sonic Visualiser Chris@74: An audio file viewer and annotation editor. Chris@74: Centre for Digital Music, Queen Mary, University of London. Chris@74: This file copyright 2006 Chris Cannam. Chris@74: Chris@74: This program is free software; you can redistribute it and/or Chris@74: modify it under the terms of the GNU General Public License as Chris@74: published by the Free Software Foundation; either version 2 of the Chris@74: License, or (at your option) any later version. See the file Chris@74: COPYING included with this distribution for more information. Chris@74: */ Chris@74: Chris@74: #include "Clipboard.h" Chris@74: Chris@1044: Clipboard::Point::Point(sv_frame_t frame, QString label) : Chris@74: m_haveFrame(true), Chris@74: m_frame(frame), Chris@74: m_haveValue(false), Chris@977: m_value(0), Chris@74: m_haveDuration(false), Chris@955: m_duration(0), Chris@74: m_haveLabel(true), Chris@340: m_label(label), Chris@340: m_haveLevel(false), Chris@340: m_level(0.f), Chris@370: m_haveReferenceFrame(false), Chris@340: m_referenceFrame(frame) Chris@74: { Chris@74: } Chris@74: Chris@1044: Clipboard::Point::Point(sv_frame_t frame, float value, QString label) : Chris@74: m_haveFrame(true), Chris@74: m_frame(frame), Chris@74: m_haveValue(true), Chris@74: m_value(value), Chris@74: m_haveDuration(false), Chris@955: m_duration(0), Chris@74: m_haveLabel(true), Chris@340: m_label(label), Chris@340: m_haveLevel(false), Chris@340: m_level(0.f), Chris@370: m_haveReferenceFrame(false), Chris@340: m_referenceFrame(frame) Chris@74: { Chris@74: } Chris@74: Chris@1044: Clipboard::Point::Point(sv_frame_t frame, float value, sv_frame_t duration, QString label) : Chris@74: m_haveFrame(true), Chris@74: m_frame(frame), Chris@74: m_haveValue(true), Chris@74: m_value(value), Chris@74: m_haveDuration(true), Chris@74: m_duration(duration), Chris@74: m_haveLabel(true), Chris@340: m_label(label), Chris@340: m_haveLevel(false), Chris@340: m_level(0.f), Chris@370: m_haveReferenceFrame(false), Chris@340: m_referenceFrame(frame) Chris@340: { Chris@340: } Chris@340: Chris@1044: Clipboard::Point::Point(sv_frame_t frame, float value, sv_frame_t duration, float level, QString label) : Chris@340: m_haveFrame(true), Chris@340: m_frame(frame), Chris@340: m_haveValue(true), Chris@340: m_value(value), Chris@340: m_haveDuration(true), Chris@340: m_duration(duration), Chris@340: m_haveLabel(true), Chris@340: m_label(label), Chris@340: m_haveLevel(true), Chris@340: m_level(level), Chris@370: m_haveReferenceFrame(false), Chris@340: m_referenceFrame(frame) Chris@74: { Chris@74: } Chris@74: Chris@74: Clipboard::Point::Point(const Point &point) : Chris@74: m_haveFrame(point.m_haveFrame), Chris@74: m_frame(point.m_frame), Chris@74: m_haveValue(point.m_haveValue), Chris@74: m_value(point.m_value), Chris@74: m_haveDuration(point.m_haveDuration), Chris@74: m_duration(point.m_duration), Chris@74: m_haveLabel(point.m_haveLabel), Chris@340: m_label(point.m_label), Chris@340: m_haveLevel(point.m_haveLevel), Chris@340: m_level(point.m_level), Chris@370: m_haveReferenceFrame(point.m_haveReferenceFrame), Chris@340: m_referenceFrame(point.m_referenceFrame) Chris@74: { Chris@74: } Chris@74: Chris@74: Clipboard::Point & Chris@74: Clipboard::Point::operator=(const Point &point) Chris@74: { Chris@74: if (this == &point) return *this; Chris@74: m_haveFrame = point.m_haveFrame; Chris@74: m_frame = point.m_frame; Chris@74: m_haveValue = point.m_haveValue; Chris@74: m_value = point.m_value; Chris@74: m_haveDuration = point.m_haveDuration; Chris@74: m_duration = point.m_duration; Chris@74: m_haveLabel = point.m_haveLabel; Chris@74: m_label = point.m_label; Chris@340: m_haveLevel = point.m_haveLevel; Chris@340: m_level = point.m_level; Chris@370: m_haveReferenceFrame = point.m_haveReferenceFrame; Chris@340: m_referenceFrame = point.m_referenceFrame; Chris@74: return *this; Chris@74: } Chris@74: Chris@74: bool Chris@74: Clipboard::Point::haveFrame() const Chris@74: { Chris@74: return m_haveFrame; Chris@74: } Chris@74: Chris@1044: sv_frame_t Chris@74: Clipboard::Point::getFrame() const Chris@74: { Chris@74: return m_frame; Chris@74: } Chris@74: Chris@872: Clipboard::Point Chris@1044: Clipboard::Point::withFrame(sv_frame_t frame) const Chris@872: { Chris@872: Point p(*this); Chris@872: p.m_haveFrame = true; Chris@872: p.m_frame = frame; Chris@872: return p; Chris@872: } Chris@872: Chris@74: bool Chris@74: Clipboard::Point::haveValue() const Chris@74: { Chris@74: return m_haveValue; Chris@74: } Chris@74: Chris@74: float Chris@74: Clipboard::Point::getValue() const Chris@74: { Chris@74: return m_value; Chris@74: } Chris@74: Chris@872: Clipboard::Point Chris@872: Clipboard::Point::withValue(float value) const Chris@872: { Chris@872: Point p(*this); Chris@872: p.m_haveValue = true; Chris@872: p.m_value = value; Chris@872: return p; Chris@872: } Chris@872: Chris@74: bool Chris@74: Clipboard::Point::haveDuration() const Chris@74: { Chris@74: return m_haveDuration; Chris@74: } Chris@74: Chris@1044: sv_frame_t Chris@74: Clipboard::Point::getDuration() const Chris@74: { Chris@74: return m_duration; Chris@74: } Chris@74: Chris@872: Clipboard::Point Chris@1044: Clipboard::Point::withDuration(sv_frame_t duration) const Chris@872: { Chris@872: Point p(*this); Chris@872: p.m_haveDuration = true; Chris@872: p.m_duration = duration; Chris@872: return p; Chris@872: } Chris@872: Chris@74: bool Chris@74: Clipboard::Point::haveLabel() const Chris@74: { Chris@74: return m_haveLabel; Chris@74: } Chris@74: Chris@74: QString Chris@74: Clipboard::Point::getLabel() const Chris@74: { Chris@74: return m_label; Chris@74: } Chris@74: Chris@872: Clipboard::Point Chris@872: Clipboard::Point::withLabel(QString label) const Chris@872: { Chris@872: Point p(*this); Chris@872: p.m_haveLabel = true; Chris@872: p.m_label = label; Chris@872: return p; Chris@872: } Chris@872: Chris@340: bool Chris@340: Clipboard::Point::haveLevel() const Chris@340: { Chris@340: return m_haveLevel; Chris@340: } Chris@340: Chris@340: float Chris@340: Clipboard::Point::getLevel() const Chris@340: { Chris@340: return m_level; Chris@340: } Chris@340: Chris@872: Clipboard::Point Chris@872: Clipboard::Point::withLevel(float level) const Chris@872: { Chris@872: Point p(*this); Chris@872: p.m_haveLevel = true; Chris@872: p.m_level = level; Chris@872: return p; Chris@872: } Chris@872: Chris@340: bool Chris@370: Clipboard::Point::haveReferenceFrame() const Chris@340: { Chris@370: return m_haveReferenceFrame; Chris@370: } Chris@370: Chris@370: bool Chris@370: Clipboard::Point::referenceFrameDiffers() const Chris@370: { Chris@370: return m_haveReferenceFrame && (m_referenceFrame != m_frame); Chris@340: } Chris@340: Chris@1044: sv_frame_t Chris@340: Clipboard::Point::getReferenceFrame() const Chris@340: { Chris@340: return m_referenceFrame; Chris@340: } Chris@340: Chris@340: void Chris@1044: Clipboard::Point::setReferenceFrame(sv_frame_t f) Chris@340: { Chris@370: m_haveReferenceFrame = true; Chris@340: m_referenceFrame = f; Chris@340: } Chris@340: Chris@74: Clipboard::Clipboard() { } Chris@74: Clipboard::~Clipboard() { } Chris@74: Chris@74: void Chris@74: Clipboard::clear() Chris@74: { Chris@74: m_points.clear(); Chris@74: } Chris@74: Chris@74: bool Chris@74: Clipboard::empty() const Chris@74: { Chris@74: return m_points.empty(); Chris@74: } Chris@74: Chris@74: const Clipboard::PointList & Chris@74: Clipboard::getPoints() const Chris@74: { Chris@74: return m_points; Chris@74: } Chris@74: Chris@74: void Chris@74: Clipboard::setPoints(const PointList &pl) Chris@74: { Chris@74: m_points = pl; Chris@74: } Chris@74: Chris@74: void Chris@74: Clipboard::addPoint(const Point &point) Chris@74: { Chris@74: m_points.push_back(point); Chris@74: } Chris@74: Chris@340: bool Chris@370: Clipboard::haveReferenceFrames() const Chris@370: { Chris@370: for (PointList::const_iterator i = m_points.begin(); Chris@370: i != m_points.end(); ++i) { Chris@370: if (i->haveReferenceFrame()) return true; Chris@370: } Chris@370: return false; Chris@370: } Chris@370: Chris@370: bool Chris@369: Clipboard::referenceFramesDiffer() const Chris@340: { Chris@340: for (PointList::const_iterator i = m_points.begin(); Chris@340: i != m_points.end(); ++i) { Chris@370: if (i->referenceFrameDiffers()) return true; Chris@340: } Chris@340: return false; Chris@340: } Chris@340: