#ifndef _SCOREBAR_H_
#define _SCOREBAR_H_
#include "scoreObject.h"
#include "position.h"
#include "table.h"
class ScoreGroup;
class Part;
class Note;
class Event;
class Symbol;
class Reference;
enum ScoreType { SINGLESCORE, MULTIPLESCORE };
class ScoreBar : public ScoreObject
{
private:
ScoreType _score_type;
bool _is_first;
int _key;
int _clef;
int _meter0;
int _meter1;
int _program;
int _shortest;
double _scale;
int _common_indent;
int _common_raw_width;
bool _active;
Table _groups;
Table _symbols;
struct BarInitState * state;
public:
/** a part is specified only if this is the first bar inside the part
*/
ScoreBar(ScoreType scoretype, Part * part, bool isfirst=false, bool isActive=false);
~ScoreBar();
void add(Event*, Position, long, int, bool, bool);
bool isFirst() const { return _is_first; }
bool isLast() { return (_groups.next(this)==0); }
bool isActive() const { return _active; }
int key() const { return _key; }
int clef() const { return _clef; }
int meter(int i) const { return (i==0?_meter0:_meter1); }
void setMeter(int,int);
int program() const { return _program; }
double scale() const { return _scale; }
void setScale(double);
void setRawWidth(int);
const char * position();
bool multiple() const { return (_score_type == MULTIPLESCORE); }
/** Returns the number of units (chars in text-presentation, pixels in graphical presentation) used for the key and signature for this bar.
* This is usually zero except for the first bar inside a part
*/
int systemIndent();
void setIndent(int);
int commonIndent() const { return _common_indent; }
int commonRawWidth() const { return _common_raw_width; }
/** Returns the smallest width for this bar. It is determined by wd = 8 units * 1536 ticks / length_of_shortest_note_in_bar
* e.g. when the shortest note within the bar is an eigth (192 ticks), the returned value is 64 units
*/
int rawWidth() const { return int(8*1536.0/_shortest); }
/** Returns the total width including scaling and indent!
*/
int width();
int xindent();
/** Returns the number of units (chars in text-presentation, pixels in graphical presentation) used to propagate one tick. This is a ratio!
*/
double unitsPerTick();
Reference * symbols();
virtual const Position & start() const;
virtual long end() const;
virtual long duration() const;
virtual int display() const;
virtual void paint(PrScoreEditor * ed, int x=0, int y=0, int style=0);
virtual void print(PrScoreEditor * ed, int x=0, int y=0);
virtual ostream & print(int,ostream&) const;
virtual void flush(const char*) const;
virtual Element * copy() const;
};
#endif
| Generated by: wuerthne on clouseau on Fri Sep 21 19:20:46 2001, using kdoc 2.0a53. |