You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rosegarden/src/base/Track.h

161 lines
4.3 KiB

/*
Rosegarden
A sequencer and musical notation editor.
This program is Copyright 2000-2008
Guillaume Laurent <glaurent@telegraph-road.org>,
Chris Cannam <cannam@all-day-breakfast.com>,
Richard Bown <bownie@bownie.com>
The moral right of the authors to claim authorship of this work
has been asserted.
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.
*/
// Representation of a Track
//
//
#ifndef _TRACK_H_
#define _TRACK_H_
#include <string>
#include "XmlExportable.h"
#include "Instrument.h"
#include "Device.h"
namespace Rosegarden
{
class Composition;
typedef unsigned int TrackId;
/**
* A Track represents a line on the SegmentCanvas on the
* Rosegarden GUI. A Track is owned by a Composition and
* has reference to an Instrument from which the playback
* characteristics of the Track can be derived. A Track
* has no type itself - the type comes only from the
* Instrument relationship.
*
*/
class Track : public XmlExportable
{
friend class Composition;
public:
Track();
Track(TrackId id,
InstrumentId instrument = 0,
int position =0 ,
const std::string &label = "",
bool muted = false);
void setId(TrackId id) { m_id = id; }
private:
Track(const Track &);
Track operator=(const Track &);
public:
~Track();
TrackId getId() const { return m_id; }
void setMuted(bool muted);
bool isMuted() const { return m_muted; }
void setPosition(int position) { m_position = position; }
int getPosition() const { return m_position; }
void setLabel(const std::string &label);
std::string getLabel() const { return m_label; }
void setPresetLabel(const std::string &label);
std::string getPresetLabel() const { return m_presetLabel; }
void setInstrument(InstrumentId instrument);
InstrumentId getInstrument() const { return m_instrument; }
// Implementation of virtual
//
virtual std::string toXmlString();
Composition* getOwningComposition() { return m_owningComposition; }
void setMidiInputDevice(DeviceId id);
DeviceId getMidiInputDevice() const { return m_input_device; }
void setMidiInputChannel(char ic);
char getMidiInputChannel() const { return m_input_channel; }
int getClef() { return m_clef; }
void setClef(int clef) { m_clef = clef; }
int getTranspose() { return m_transpose; }
void setTranspose(int transpose) { m_transpose = transpose; }
int getColor() { return m_color; }
void setColor(int color) { m_color = color; }
int getHighestPlayable() { return m_highestPlayable; }
void setHighestPlayable(int pitch) { m_highestPlayable = pitch; }
int getLowestPlayable() { return m_lowestPlayable; }
void setLowestPlayable(int pitch) { m_lowestPlayable = pitch; }
// Controls size of exported staff in LilyPond
int getStaffSize() { return m_staffSize; }
void setStaffSize(int index) { m_staffSize = index; }
// Staff bracketing in LilyPond
int getStaffBracket() { return m_staffBracket; }
void setStaffBracket(int index) { m_staffBracket = index; }
bool isArmed() const { return m_armed; }
void setArmed(bool armed);
protected: // For Composition use only
void setOwningComposition(Composition* comp) { m_owningComposition = comp; }
private:
//--------------- Data members ---------------------------------
TrackId m_id;
bool m_muted;
std::string m_label;
std::string m_presetLabel;
int m_position;
InstrumentId m_instrument;
Composition* m_owningComposition;
DeviceId m_input_device;
char m_input_channel;
bool m_armed;
// default parameters for new segments created belonging to this track
int m_clef;
int m_transpose;
int m_color;
int m_highestPlayable;
int m_lowestPlayable;
// staff parameters for LilyPond export
int m_staffSize;
int m_staffBracket;
};
}
#endif // _TRACK_H_