view base/Clipboard.h @ 993:60e2927b1475

Disconnect signals before abandoning reply object, avoiding "reply unknown" error
author Chris Cannam
date Wed, 08 Oct 2014 13:14:17 +0100
parents 6a94bb528e9d
children 31f01931b781
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

/*
    Sonic Visualiser
    An audio file viewer and annotation editor.
    Centre for Digital Music, Queen Mary, University of London.
    This file copyright 2006 Chris Cannam.
    
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version.  See the file
    COPYING included with this distribution for more information.
*/

#ifndef _CLIPBOARD_H_
#define _CLIPBOARD_H_

#include <QString>
#include <vector>

class Clipboard
{
public:
    class Point
    {
    public:
        Point(long frame, QString label);
        Point(long frame, float value, QString label);
        Point(long frame, float value, int duration, QString label);
        Point(long frame, float value, int duration, float level, QString label);
        Point(const Point &point);
        Point &operator=(const Point &point);

        bool haveFrame() const;
        long getFrame() const;
        Point withFrame(long frame) const;

        bool haveValue() const;
        float getValue() const;
        Point withValue(float value) const;
        
        bool haveDuration() const;
        int getDuration() const;
        Point withDuration(int duration) const;
        
        bool haveLabel() const;
        QString getLabel() const;
        Point withLabel(QString label) const;

        bool haveLevel() const;
        float getLevel() const;
        Point withLevel(float level) const;

        bool haveReferenceFrame() const;
        bool referenceFrameDiffers() const; // from point frame

        long getReferenceFrame() const;
        void setReferenceFrame(long);

    private:
        bool m_haveFrame;
        long m_frame;
        bool m_haveValue;
        float m_value;
        bool m_haveDuration;
        int m_duration;
        bool m_haveLabel;
        QString m_label;
        bool m_haveLevel;
        float m_level;
        bool m_haveReferenceFrame;
        long m_referenceFrame;
    };

    Clipboard();
    ~Clipboard();

    typedef std::vector<Point> PointList;

    void clear();
    bool empty() const;
    const PointList &getPoints() const;
    void setPoints(const PointList &points);
    void addPoint(const Point &point);

    bool haveReferenceFrames() const;
    bool referenceFramesDiffer() const;

protected:
    PointList m_points;
};

#endif