# -*- coding: ISO-8859-1 -*-
""" capellaScript -- (c) Paul Villiger
>>> Anpassen von Page Objekten an Capella 2002/2004 Standard

    Mit Capella 2004 wird neu das PageObjekt eingeführt. Damit lässt sich die Textgrösse der an der Seite verankerten Objekte bestimmen .
    In Capella 2002 und früher wurde diese Textgrösse aus dem Notenlinienabstand der ersten Notenzeile ermittelt.  Mit diesem Pythonskript
    kann das PageoObjekt so gesetzt werden, dass es der Capella2002 Norm entspricht, und die Seiten in Capella 2004 und 2002 gleich aussehen.
<<<

History: 18.10.2003 - Erstausgabe
         18.11.2003 - Benutzereingabe
         20.11.2003 - register Undo - ??? damit werden auch Abstürze verhindert ???
         20.03.2007 - Schreibfehler korrigiert

"""

from caplib.capDOM import ScoreChange
import tempfile

class PageObjChange (ScoreChange):

    def changeElement(self, el):
        if el.tagName == 'staffLines':
            pageObj = el.getAttribute('pageObj')
            normalObj = el.getAttribute('normal')
            lab1 = Label('Aktueller Eintrag: PageObjekt = '+ str(pageObj) + 'mm, Notenzeilenabstand = ' + str(normalObj) + 'mm')
            if (normalObj == '1.8') and (pageObj == '1.8'):
                lab2 = Label('- Einstellung gültig für Capella 2002 und 2004')
            elif pageObj == '1.8':
                lab2 = Label('- Capella 2004 Standard')
            elif pageObj == normalObj:
                lab2 = Label('- Capella 2002 Standard')
            else:
                lab2 = Label('- Manuelle Einstellung')
            ed1 = Edit(str(pageObj), width=10)
            rad1 = Radio(['keine Aenderung',
                          'Capella 2004 Standard',
                          'Capella 2002 Standard',
                          'manueller Eintrag'], value=0 )
            #messageBox('test', str(lable1) )
            lab3 = Label(' ')
            lab4 = Label('PageObjekt = 1.8mm')
            lab5 = Label('PageObjekt = Notenzeilenabstand')
            v1 = VBox([lab3, lab4, lab5, ed1], padding=8)
            hbox = HBox([rad1, v1], padding=8)
            vBox = VBox([lab1, lab2, lab3, hbox, lab3], padding = 8 )
            
            dlg = Dialog('PageObjekt anpassenn', vBox)

            if dlg.run():
                if rad1.value() == 1:
                    el.setAttribute('pageObj', '1.8' )
                elif rad1.value() == 2:
                    el.setAttribute('pageObj', el.getAttribute('normal'))
                elif rad1.value() == 3:
                    el.setAttribute('pageObj', ed1.value())
                elif rad1.value() == 0:
                    # keine Änderung
                    pass
                    

if activeScore():
    activeScore().registerUndo("Page Objekt anpassen")
    tempFile1 = tempfile.mktemp('.capx')
    tempFile2 = tempfile.mktemp('.capx')
    activeScore().write(tempFile1)

    PageObjChange(tempFile1, tempFile2)

    activeScore().read(tempFile2)
    os.remove(tempFile1)
    os.remove(tempFile2)

