# -*- coding: ISO-8859-1 -*- """ capellaScript -- Copyright (c) 2007 Peter Becker >>> BlockFaerben : Färben von markierten Noten, Pausen, etc Einfärben von markierten Noten, Pausen, festen Taktstrichen, Notenschlüsseln, Taktangaben und Tonarten.|| Nach Aufruf Farbpalette oberhalb des Capella Fensters positionieren, sonst verschwindet sie nach erstmaligem benutzen hinter dem Capella Fenster.|| Das Fenster bleibt so lange offen, bis es manuell geschlossen wird.|| z.Zt. nur innerhalb einer Zeile verwendbar !!!|| Bei Problemen bitte eine Mail an peter_becker@freenet.de <<< History: 03.01.07 - Erste Ausgabe 04.01.07 - Farbpalette um schwarz bis weiss erweitert """ from Tkinter import * from caplib.capDOM import ScoreChange 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) #FarbIx = id[0]-1 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 w = event.widget id = w.find_overlapping(event.x,event.y,event.x,event.y) #messageBox('ID',str(id)) sel = curSelection() start = sel[0] stop = sel[1] if len(id) <> 0: BlockFaerben(as, start, stop) def BlockFaerben(score,(sysind, staffind, voiceind, objind),(sysind2, staffind2, voiceind2, objind2)): global as, start, stop, id 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) #if firstobj.isChord() or firstobj.isRest(): score.registerUndo("BlockFaerben") 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 global as, FarbenListe, FarbenlisteX as = activeScore() FarbenListe=[('#F00'),# rot ('#F80'),# orange ('#FC0'),# orangegelb ('#FF0'),# gelb ('#AF0'),# gelbgelbgrün ('#8F0'),# gelbgrün ('#0E0'),# grün ('#078'),# blaugrün ('#039'),# grünblau ('#00F'),# blau ('#60A'),# violett ('#E05'),# rotviolett ('#000'),# schwarz ('#888'),# dunkelgrau ('#CCC'),# hellgrau ('#FFF')]# weiss FarbenListeX=[('FF0000'),# rot ('FF8000'),# orange ('FFC000'),# orangegelb ('FFFF00'),# gelb ('A0FF00'),# gelbgelbgrün ('80FF00'),# gelbgrün ('00E000'),# grün ('007080'),# blaugrün ('003090'),# grünblau ('0000FF'),# blau ('6000A0'),# violett ('E00050'),# rotviolett ('000000'),# schwarz ('808080'),# dunkelgrau ('C0C0C0'),# hellgrau ('FFFFFF')]# weiss if as: hauptfenster = Tk() hauptfenster.title('bitte Farbe auswählen') canvas = Canvas(hauptfenster,height='3.5c',width='7.5c',bg='white') canvas.grid() r1 = canvas.create_rectangle(20,20,40,40,fill=FarbenListe[0]) r2 = canvas.create_rectangle(20,40,40,60,fill=FarbenListe[1]) r3 = canvas.create_rectangle(20,60,40,80,fill=FarbenListe[2]) r4 = canvas.create_rectangle(20,80,40,100,fill=FarbenListe[3]) r5 = canvas.create_rectangle(40,20,60,40,fill=FarbenListe[4]) r6 = canvas.create_rectangle(40,40,60,60,fill=FarbenListe[5]) r7 = canvas.create_rectangle(40,60,60,80,fill=FarbenListe[6]) r8 = canvas.create_rectangle(40,80,60,100,fill=FarbenListe[7]) r9 = canvas.create_rectangle(60,20,80,40,fill=FarbenListe[8]) r10 = canvas.create_rectangle(60,40,80,60,fill=FarbenListe[9]) r11 = canvas.create_rectangle(60,60,80,80,fill=FarbenListe[10]) r12 = canvas.create_rectangle(60,80,80,100,fill=FarbenListe[11]) r13 = canvas.create_rectangle(80,20,100,40,fill=FarbenListe[12]) r14 = canvas.create_rectangle(80,40,100,60,fill=FarbenListe[13]) r15 = canvas.create_rectangle(80,60,100,80,fill=FarbenListe[14]) r16 = canvas.create_rectangle(80,80,100,100,fill=FarbenListe[15]) t1 = canvas.create_text(190,45,text='Fenster nach Gebrauch schließen') canvas.bind('',zeige) hauptfenster.mainloop()