# -*- coding: ISO-8859-1 -*- """ capellaScript -- Copyright (c) 2009 Peter Becker >>> Ziach_nach_Noten_A : Umsetzen von Ziach Griffschrift in Notenschrift Teil 1|| Vorbereitung|| Bei Problemen bitte eine Mail an peter_becker@freenet.de <<< """ # 12.05.2009 Erste Version # 23.11.2009 2. Farbe für Zug eliminiert from Tkinter import * from caplib.capDOM import * import xml.dom.minidom import tempfile class MarkedScoreChange (ScoreChange): def __init__(self, inputFile, outputFile, cursor1, cursor2): self.sysI1, self.staffI1, self.voiceI1, self.objI1 = cursor1 self.sysI2,self.staffI2,self.voiceI2,self.objI2 = cursor2 self.sysCurrent = 0 self.staffCurrent = 0 self.voiceCurrent = 0 self.objCurrent = 0 self.lastchord = 0 # messageBox("__init__: objI1, objI2", str(self.objI1)+', '+str(self.objI2)) ScoreChange.__init__(self, inputFile, outputFile) def copyElement(self, el): ScoreChange.copyElement(self, el) # Positionsmerker aktualisieren if el.tagName == 'system': self.sysCurrent = self.sysCurrent + 1 self.staffCurrent = 0 self.voiceCurrent = 0 self.objCurrent = 0 if el.tagName == 'staff': self.staffCurrent = self.staffCurrent + 1 self.voiceCurrent = 0 self.objCurrent = 0 if el.tagName == 'voice': self.voiceCurrent = self.voiceCurrent + 1 self.objCurrent = 0 if el.tagName in ['clefSign','keySign','timeSign','chord','rest','barline']: self.objCurrent = self.objCurrent + 1 def isInMarkedArea(self): if self.sysI1 <= self.sysCurrent and self.sysCurrent < self.sysI2: return True if self.sysI1 == self.sysCurrent and self.sysCurrent == self.sysI2 \ and self.staffI1 == self.staffCurrent \ and self.voiceI1 == self.voiceCurrent \ and self.objI1 <= self.objCurrent and self.objCurrent < self.objI2: return True return False class BlockScoreChange (MarkedScoreChange): def changeElement(self, el): global id, FarbenListeX FarbIx = id[0]-1 #messageBox('ID',str(id)) if self.isInMarkedArea() and FarbIx <= 15: if el.tagName in ['chord','rest']: olddisplays = el.getElementsByTagName('display') if olddisplays: display = olddisplays[0] else: display = self.doc.createElement('display') el.appendChild(display) display.setAttribute('color',FarbenListeX[FarbIx]) elif el.tagName in ['barline','clefSign','timeSign','keySign']: FarbIx = id[0]-1 el.setAttribute('color',FarbenListeX[FarbIx]) def zeige(event): global as, start, stop, id, hauptfenster w = event.widget id = w.find_overlapping(event.x,event.y,event.x,event.y) sel = curSelection() start = sel[0] stop = sel[1] if id[0] == 2 or id[0] == 4: BlockFaerben(as, start, stop) elif id[0] == 7: hauptfenster.destroy() def BlockFaerben(score,(sysind, staffind, voiceind, objind),(sysind2, staffind2, voiceind2, objind2)): global as, start, stop, id #messageBox('SCORE',str(score)) sys = score.system(sysind) staff = sys.staff(staffind) voice = staff.voice(voiceind) no = voice.nNoteObjs() if objind <= no and objind2 <= no: # falls rückwärts markiert wurde. if objind > objind2: obji = objind objind = objind2 objind2 = obji firstobj = voice.noteObj(objind) score.registerUndo("Ziach_nach_Noten_A") tempFile1 = tempfile.mktemp('.capx') tempFile2 = tempfile.mktemp('.capx') score.write(tempFile1) BlockScoreChange(tempFile1,tempFile2,(sysind, staffind, voiceind, objind),\ (sysind, staffind, voiceind, objind2)) score.read(tempFile2) os.remove(tempFile1) os.remove(tempFile2) # Hauptprogramm from caplib.capDOM import ScoreChange import tempfile, xml.dom global as, FarbenListe, FarbenlisteX, hauptfenster, score as = activeScore() FarbenListe=[('#00F'),# blau ('#F00'),# rot ('#F80'),# orange ('#F80'),# orange ('#FC0'),# orangegelb ('#FF0'),# gelb ('#AF0'),# gelbgelbgrün ('#8F0'),# gelbgrün ('#0E0'),# grün ('#078'),# blaugrün ('#039'),# grünblau ('#60A'),# violett ('#E05'),# rotviolett ('#000'),# schwarz ('#888'),# dunkelgrau ('#CCC'),# hellgrau ('#FFF')]# weiss FarbenListeX=[('FF8000'),# orange ('0000FF'),# blau ('FFC000'),# orangegelb ('000000'),# schwarz ('FFFF00'),# gelb ('FFC000'),# orangegelb ('A0FF00'),# gelbgelbgrün ('80FF00'),# gelbgrün ('00E000'),# grün ('007080'),# blaugrün ('003090'),# grünblau ('0000FF'),# blau ('6000A0'),# violett ('E00050'),# rotviolett ('000000'),# schwarz ('FF0000'),# rot ('808080'),# dunkelgrau ('C0C0C0'),# hellgrau ('FFFFFF')]# weiss if as: hauptfenster = Tk() hauptfenster.title('Balgrichtung "Druck" markieren') canvas = Canvas(hauptfenster,height='4.5c',width='8.5c',bg='white') canvas.grid() t1 = canvas.create_text(143,20,text='Bereich mit dem Cursor markieren und Richtung anklicken') r1 = canvas.create_rectangle(20,40,260,60,fill=FarbenListe[0]) t2 = canvas.create_text(136,50,text='auf Druck spielen',fill=FarbenListe[16],font='Arial') r2 = canvas.create_rectangle(20,70,260,90,fill=FarbenListe[13]) t3 = canvas.create_text(135,80,text='auf Zug spielen (Korrektur)',fill=FarbenListe[16],font='Arial') t4 = canvas.create_text(135,110,text='wenn alles markiert ist, Beenden anklicken') r3 = canvas.create_rectangle(20,130,260,150,fill=FarbenListe[9]) t5 = canvas.create_text(135,140,text='Beenden',fill=FarbenListe[16],font='Arial') canvas.bind('',zeige) hauptfenster.mainloop()