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: