|
|
#ifndef _ELEMENT_H_ #define _ELEMENT_H_ // #define DEBUGIT // // Do not change the order of the first five types in order to be compatible with Brahms-0.97! // ___________________________________________________________________________________________ enum Type { SCORETRACK, DRUMTRACK, MASTERTRACK, AUDIOTRACK, COMMENTTRACK, TRACK, ABSTRACT, ATOM, STRING, POSITION, REFERENCE, EVENT, MASTEREVENT, NOTE, MIDIEVENT, SYMBOL, AUDIOEVENT, ORNAMENT, LYRICS, STEM, EXPRESSION, BOW, COMPOUND, SONG, PART, SELECTION, VECTOR, TABLE, OPERATION, ADDON, ADDELEMENT, REMOVEELEMENT, CONVERTTRACK, MOVEPART, COPYPART, COPYGHOSTPART, MOVEEVENT, COPYEVENT, CHANGENOTE, GLUENOTE, SPLITNOTE, ADDORNAMENT, REMOVEORNAMENT, ADDSYMBOL, ADDTOSELECTION, REMOVEFROMSELECTION, NEWSELECTION, SELECTLEFT, SELECTRIGHT, UNSELECT, SPLITPART, GLUEPARTS, COPYSELECTION, CUTSELECTION, PASTESELECTION, DELETESELECTION }; enum { DOWN, UP }; #define STEM_UP 1 #define STEM_AUTO 0 #define STEM_DOWN -1 enum GuiEvents { UNDO, REDO, CHANGES, SELECTIONS, MEMORY }; class ostream; class ifstream; class Compound; class Presentation; class Vector; // for debugging only class Table; class PrProgress; /** The class Element is the most essentail class (similar to javas object-class). Further * more, elements may have a successor and a predecessor. These are needed when elements * are arranged with compound objects. */ class Element { private: Element * _next; Element * _prev; Presentation * _pr; #ifdef DEBUGIT static int _total; // for debugging only static Element * _list; // for debugging only Element * _nnnn; // for debugging only #endif public: /** only used internally */ Element(); Element(const Element & el); /** the destructor contains code only in debugging mode */ virtual ~Element(); #ifdef DEBUGIT /** for debugging purposes only */ int total() const { return _total; } /** for debugging purposes only */ void dump(int i=-1); #endif protected: Type _type; char * spc(int) const; static Element * next(Element *); static Element * prev(Element *); static void splitBefore(Element *); static Element * first(Element *); static Element * last(Element *); static Element * get(int,Element*); static void append(Element *, Element *); static Element * preput(Element *, Element *); static Element * insertBefore(Element *, Element *); static void insertAfter(Element *, Element *); static Element * remove(Element *); /** This method exchanges the contexts of e1 and e2: * before: a1 <=> e1 <=> b1 a2 <=> e2 <=> b2 * after: a1 <=> e2 <=> b1 a2 <=> e1 <=> b2 */ static void exchange(Element * e1, Element * e2); public: /** checks whether an element is member of a compound */ bool member(Compound*); /** if member of a compound, this method returns the element position within the compound, and -1 otherwise */ int ord(Compound*); /** returns the type of an element as char* */ const char * ctype() const; /** returns the type of an element as a constant integer */ Type isA() const; /** returns true if the element is an event (Note, etc.) */ virtual bool isEvent() const = 0; /** returns true if the element is a track */ virtual bool isTrack() const = 0; /** checks whether two elements are equal */ //virtual bool operator==(Element*); /** checks whether two elements are equal */ //virtual bool operator==(const char*); /** overload this, if this element has a presentation, and delegate to it */ virtual void show(); /** overload this, if this element has a presentation, and delegate to it */ virtual void hide(); /** implement this to define output for each element */ virtual ostream & print(int,ostream&) const = 0; /** implement this to define short output for each element */ virtual void flush(const char*) const = 0; /** implement this to define the copy process for each element */ virtual Element * copy() const = 0; static void loadContent(Compound * list, const char * term, const char * name, Element*(*loadme)(char*,ifstream*&,Element*), ifstream * inPtr, PrProgress * progress=0, int num=0); static void loadContent(Compound * list, const char * term, int num, const char * name[], Element*(*loadme[])(char*,ifstream*&,Element*), ifstream * inPtr, PrProgress * progress=0, int num=0); }; ostream & operator<<(ostream&,Element&); #endif
Generated by: wuerthne on clouseau on Fri Sep 21 19:20:46 2001, using kdoc 2.0a53. |