#ifndef _SONG_H_
#define _SONG_H_
#include "config.h"
#include "part.h"
#include "track.h"
#include "compound.h"
#include "position.h"
#include "operation.h"
#include "vector.h"
class PrProgress;
class Player;
#ifdef HAVE_ARTS_ENVIRONMENT
#include "arts/artsmodules.h"
#endif
enum PartApp { CLEAN, TRACKNAME, INSTRUMENT, EVENTS };
enum EditorApp { ADJUSTPARAMETERS, NOADJUST };
class Song : public Compound
{
private:
const char * _title;
const char * _author;
const char * _comment;
int _tempo;
int _meter0;
int _meter1;
Position _left; // left locator
Position _right; // right locator
Position _current; // current position pointer
Part * _master;
Vector opHistory;
Vector opFuture;
double _version;
Player * _player;
PartApp _part_appearance;
EditorApp _editor_appearance;
void initEnvironment();
#ifdef HAVE_ARTS_ENVIRONMENT
mutable Arts::Environment::Container _arts_container;
mutable Arts::Environment::MixerItem _arts_mixer;
#endif
public:
Song();
Song(double);
Song(const Song&);
~Song();
void doo(Operation*);
void undo(int i=-1);
void redo(int i=-1);
void oplist();
void clearOplist();
Operation * currentOp();
Vector * undoList();
Vector * redoList();
const char * currentUndoText();
const char * currentRedoText();
void updateGui(int changes=-1);
const char * title() const { return _title; }
const char * author() const { return _author; }
const char * comment() const { return _comment; }
PartApp partAppearance() const { return _part_appearance; }
EditorApp editorAppearance() const { return _editor_appearance; }
int tempo() const { return _tempo; }
int meter0() const { return _meter0; }
int meter1() const { return _meter1; }
Position left() const { return _left; }
Position right() const { return _right; }
Position current() const { return _current; }
Part * master() const { return (( _master!=0 && !_master->track()->mute() )?_master:0); }
void setTitle(const char*);
void setAuthor(const char*);
void setComment(const char*);
void setPartAppearance(PartApp);
void setEditorAppearance(EditorApp);
void setTempo(int);
void setMeter(int,int);
void setMeter0(int);
void setMeter1(int);
void setLeft(Position);
void setLeft(int,int,int);
void setRight(Position);
void setRight(int,int,int);
void setCurrent(Position);
void setCurrent(int,int,int);
void setMaster(Part*);
Player * player() const { return _player; }
#ifdef HAVE_ARTS_ENVIRONMENT
Arts::Environment::Container envContainer() const { return _arts_container; }
Arts::Environment::MixerItem envMixer() { return _arts_mixer; }
#endif
void bbt(int & bar, int & beat, int & tick, Position pos);
void play(PrProgress * progress = 0, Part * part = 0, long left = 0, long right = 0, bool cycl = false, int record_track = -1);
double version() const { return _version; }
virtual void add(Element * e);
virtual ostream & print(int,ostream&) const;
virtual void flush(const char*) const;
virtual Element * copy() const;
static Element * load(ifstream*,double,PrProgress*);
};
#endif
| Generated by: wuerthne on clouseau on Fri Sep 21 19:20:46 2001, using kdoc 2.0a53. |