# -*- coding: ISO-8859-1 -*- """ capellaScript -- Copyright (c) 2007,2017 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 <<< Coloring block : coloring marked notes, rests etc.

Coloring of marked notes, rests, fixed bar lines, clefs, meters and keys.

Place the colour palette above the capella window after opening the script, otherwise it vanishes behind the capella window.

The palette window stays opened until it is closed manually.

At the moment the script is only workable within a system !!!

In case of problems please mail to peter_becker@freenet.de

Block färben : 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

Blok inkleuren : inkleuren van gemarkeerde noten, rusten enz.

Inkleuren van gemarkeerde noten, rusten, vaste maatstrepen, sleutels, maataanduidinge en toonsoorten.

Na opening het kleurenpalet boven het capellavenster plaatsen, anders verdwijnt het palet na het eerste gebruik achter het capellavenster.

Het venster blijft geopend, tot het handmatig wordt gesloten.

Momenteel is het script slechts bruikbaar binnen een systeem !!!

Bij problemen s.v.p. een mail naar peter_becker@freenet.de

History: 03.01.07 - V 1.0.0 PB Erste Ausgabe 04.01.07 - V 1.0.1 PB Farbpalette um schwarz bis weiss erweitert 04.08.17 - V 1.0.2 PB Anpassung an Python 2.7, Capella 8 21.01.19 - V 1.0.3 WW Internationalisierung """ english = { 'selCol' :'Please select colour', 'quit' :'Close the window after use' } german = { 'selCol' :'bitte Farbe auswählen', 'quit' :'Fenster nach Gebrauch schließen' } dutch = { 'selCol' :'S.v.p. kleur selecteren', 'quit' :'Venster na gebruik sluiten' } try: setStringTable( ("en", english), ("de", german), ("nl", dutch)) except: def tr(s): return german[s] #----------------------------------------------------------- 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 asc, 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(asc, start, stop) def BlockFaerben(score,(sysind, staffind, voiceind, objind),(sysind2, staffind2, voiceind2, objind2)): global asc, 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 asc, FarbenListe, FarbenlisteX asc = 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 asc: hauptfenster = Tk() hauptfenster.title(tr('selCol')) 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=tr('quit')) canvas.bind('',zeige) hauptfenster.mainloop()