#ifndef _PRPARTEDITOR_H_
#define _PRPARTEDITOR_H_
#include "atom.h"
#include "position.h"
class Table;
class Note;
class Part;
class Track;
class Reference;
class Event;
enum EditorType { NOTEEDITOR, PREDITOR, SCOREEDITOR, MASTEREDITOR, EVENTEDITOR, AUDIOEDITOR, DRUMEDITOR };
class PrPartEditor
{
protected:
Table * _parts; // An entry is always the first part in a track, so the number of parts is the number of displayed tracks
Reference * _current; // pointing to the part currently edited
Position _leftPos; // left pos
Position _rightPos; // (obsolete: caution: this has to be updated manualy, e.g. in rewind())
int _current_length; // current length value (192 = 1/8, etc)
int _current_enh;
int _current_vel;
int _current_dot;
int _current_tuplet;
int _current_tuplet_dur;
char * _cLeft;
char * _cRight;
int _bars;
int _grid;
int _resolution;
bool _no_overlap;
bool _color;
bool _speaker;
EditorType _type;
void adjustEventParameters();
bool handles(Track*) const;
public:
PrPartEditor(EditorType type);
PrPartEditor(Part * p);
PrPartEditor(Track * t);
virtual ~PrPartEditor();
/** returns the part currently edited
*/
Part * part() const;
int partIndex();
/** returns the part i
*/
Part * part(int i);
/** sets the current part
*/
Part * setPart(int i);
/** returns the number of parts edited by this editor
*/
int parts() const;
/** returns the name of the part currently edited
*/
const char * name() const;
/** moves one track down and returns the current part
*/
Part * moveDown();
/** moves one track up and returns the current part
*/
Part * moveUp();
/** returns the left position as char
*/
char * cLeft();
/** returns the right position as char
*/
char * cRight();
/** returns the left position as Position
*/
Position left() const { return _leftPos; }
/** returns the right position as Position
*/
Position right() const { return _rightPos; }
/** moves the positions one bar to the left
*/
void moveleft(int i=1);
/** moves the positions one bar to the right
*/
void moveright(int i=1);
/** moves the selection one element to the left
*/
void moveselleft();
/** moves the selection one element to the right
*/
void moveselright();
/** moves the positions to the specified position offset.
*/
void wind(Position p);
/** moves the positions to the specified bar offset
*/
void wind(int bar);
/** zooms in
*/
void zoomin();
/** zooms out
*/
void zoomout();
/** returns the currently selected number of bars viewed
*/
int numberOfBars() const { return _bars; }
void adjustRightPos();
/** returns the current length value in ticks
*/
int length() const { return _current_length; }
/** returns the current length value in ticks, including increase through dots.
*/
int totalLength() const;
/** returns the current length value as an ordered int (1, ..., 7)
*/
int lengthOrd() const;
/** sets the length value as ticks
*/
void setLength(int);
/** sets the length value as an ordered int (1, ..., 7)
*/
void setLengthOrd(int);
/** returns the number of dots
*/
int dot() const { return _current_dot; }
/** sets the number of dots
*/
void setDot(int);
/** returns the base of the tuplet (3 for triplets, etc)
*/
int tuplet() const { return _current_tuplet; }
/** returns the tuplets total duration
*/
int tupletDuration() const { return _current_tuplet_dur; }
/** sets the tuplet base and the duration. If the duration is omitted, the default values
* are used: a quarter (384) for triplets, a dotted quarter (576) for quintlets
*/
void setTuplet(int base, int duration=-1);
/** returns the enharmonic shift value (-2=bb, -1=b, 0=nat, 1=#, 2=x).
*/
int enharmonicShift() const { return _current_enh; }
/** sets the enharmonic shift value (-2=bb, -1=b, 0=nat, 1=#, 2=x).
*/
void setEnharmonicShift(int);
int velocity() const { return _current_vel; }
void setVelocity(int);
/** implement this for your own editor
*/
virtual void update()=0;
/** if a note exists at the specified pitch and position (up to the note's end) this note is returned, or zero else
*/
Note * getGrabNote(long pos, int pitch, bool & tail);
/** if an event exists at the position this event is returned, or zero else
*/
Event * getGrabEvent(long pos);
/** the specified position is quantized and returned
*/
long snap(long pos) const;
int grid() const { return _grid; }
void setGrid(int);
int resolution() const { return _resolution; }
void setPartResolution(int);
bool noOverlap() const { return _no_overlap; }
void setNoOverlap(bool);
virtual void setCursorPosition(long ticks)=0;
bool color() const { return _color; }
bool speaker() const { return _speaker; }
void setColor(bool);
void setSpeaker(bool);
/** if the selection contains exactly one event, it is returned by this method. Null otherwise
*/
Event * currentEvent();
char ** actionList();
bool isOfType(EditorType) const;
/** enables and disables the gui buttons for the GuiEvents: changes, undo, redo, selection and memory
*/
virtual void gui(GuiEvents ev, bool flag)=0;
/** prints the editor's content
*/
virtual void print()=0;
/** the editor's settings
*/
virtual void settings()=0;
/** the editor's width
*/
virtual int editorWidth() const;
/** is this a score editor?
*/
virtual bool isScoreEditor() const;
};
#endif
| Generated by: wuerthne on clouseau on Fri Sep 21 19:20:46 2001, using kdoc 2.0a53. |