void GRBeam::StaffFinished(GRStaff * grstaff) { assert(false); assert(grstaff); // first, all the BASIC stuff is handled ... GRPositionTag::StaffFinished(grstaff); if (error) return; GRSystemStartEndStruct * sse = getSystemStartEndStruct(grstaff->getGRSystem()); assert(sse); GuidoPos syststpos = sse->startpos; if (syststpos) { // this is all done so that I really get a correct first staff to // test my stuff ... while (syststpos && !/*ynamic_cast<GRNotationElement *>*/(mAssociated->GetAt(syststpos))) { mAssociated->GetNext(syststpos); } const GRStaff *tststaff = mAssociated->GetNext(syststpos)->getGRStaff(); while (syststpos) { GRNotationElement * el = mAssociated->GetNext(syststpos); if (el) { if (el->getGRStaff() != tststaff) { tagtype = GRTag::SYSTEMTAG; GRSystemTag * mysystag = new GRSystemTag(this); el->getGRSystemSlice()->addSystemTag(mysystag); break; } } } } GRBeamSaveStruct * st = (GRBeamSaveStruct *)sse->p; GREvent * grn; checkNotes(grstaff); if (error) return; GuidoPos pos = sse->startpos; while (pos) { grn = GREvent::cast(mAssociated->GetNext(pos)); if (grn) { if (!st->dirset) { if (st->direction > 0) grn->setStemDirection(dirUP); else grn->setStemDirection(dirDOWN); } grn->setFlagOnOff(false); } } }
void GRBeam::RangeEnd(GRStaff * grstaff) { assert(grstaff); GRPositionTag::RangeEnd(grstaff); if (error) return; if (!mAssociated) return; GRSystemStartEndStruct * sse = getSystemStartEndStruct(grstaff->getGRSystem()); assert(sse); if (mAssociated && (mAssociated->GetCount() == 1) && isAutoBeam()) { GREvent * ev = GREvent::cast(mAssociated->GetHead()); if (ev) { ev->setFlagOnOff(true); ev->decBeamCount(); if (sse->startElement) // something did not work, if the starElement is a glue ... and not an event ev->removeAssociation(this); if (sse->endElement) ev->removeAssociation(this); } return; } GREvent * grn; GuidoPos syststpos = sse->startpos; if (syststpos) { // this is all done so that I really get a correct first staff to test my stuff ... while (syststpos && !(mAssociated->GetAt(syststpos))) { mAssociated->GetNext(syststpos); } int tststaffnum = mAssociated->GetNext(syststpos)->getStaffNumber(); while (syststpos) { GRNotationElement * el = mAssociated->GetNext(syststpos); if (el) { if (el->getStaffNumber() != tststaffnum) { tagtype = GRTag::SYSTEMTAG; GRSystemTag * mysystag = new GRSystemTag(this); el->getGRSystemSlice()->addSystemTag(mysystag); break; } } } } GuidoPos pos = sse->startpos; GRBeamSaveStruct * st = (GRBeamSaveStruct *) sse->p; bool first = true; GDirection mytmpdir = dirOFF; while (pos) { grn = GREvent::cast(mAssociated->GetNext(pos)); if (grn) { if (!st->dirset) { if (first) { // get the stemdir of the first !? maybe it now has been set? mytmpdir = grn->getStemDirection(); } if (mytmpdir != dirOFF) grn->setStemDirection(mytmpdir); else if (st->direction>=0) grn->setStemDirection(dirUP); else grn->setStemDirection(dirDOWN); } grn->setFlagOnOff(false); first = false; } } }