# -*- coding: Latin-1 -*-
""" capellaScript -- (c) Paul Villiger
>>> Capella Verzeichnis ausdrucken

    Mit diesem Skript können ganze capella Verzeichnisse ausgedruckt werden.
    Mit dem ersten Dialog wird das Verzeichnis abgefragt.
    Mit dem zweiten Dialog kann ein Dateifilter gesetzt werden.
    Vor dem Ausdruck wird die Dateiliste angezeigt.
<<<

Bemerkung:      Leider ist es mit dem Filedialog von capella nicht möglich Wildcards zu setzen.
                Aus diesem Grund muss das Filter in einem zweiten Schritt abgefragt werden.

Filtermuster:   *               alles
                ?               genau ein Zeichen
                [seq]           ein Zeichen aus seq
                [!seq]          kein Zeichen aus seq

Beispiele:      *.*             alle Dateien
                a???*.cap       alle Dateien welche mit 'a' beginnen und mind. 4 Zeichen lang sind
                0[12]?_*.*      Dateien welche mit 01 oder 02 beginnen und an der vierten Stelle ein '_' enthalten.
                *engel*         alle Dateien, welche 'engel' enthalten
                [!0123456789]*  Dateien, welche an der ersten Stelle keine Ziffer enthalten
                


History: 10.02.06 - Erstausgabe


"""


import os, string, fnmatch
progDir = getProgramDir()
capExe = 'capella.exe'

dlg = FileDialog()
dlg.__init__(bOpen=False)
dlg.setTitle('Bitte Ordner auswählen')
dlg.addFilter('capella-Dateien', '*.cap;*.capx')
# dlg.addFilter('alle Dateien', '*.*')

dlg.setStartFile('$$XX.cap')

abort = False
if dlg.run():
    scoreFile=dlg.filePath()
    scoreDir, scoreName = os.path.split(scoreFile)

    filter = Edit('*.*', width = 20)
    dlg1 = Dialog('Dateifilter', VBox([filter,
                                       Label(' '),
                                       Label('Mögliche Wildcards:'),
                                       Label('*, ?, [seq], [!seq]'),
                                       Label('Beispiel: *.* , 0[12]?_*.cap'),
                                       Label(' ')]))

    if dlg1.run():
        filter = filter.value()
    else:
        abort = True
    
        
else:
    abort = True

if not abort:
    scores = os.listdir(scoreDir)
    scores.sort()
    # messageBox('',str(scores))
    scoreList = []
    for s in scores:
        head, tail = os.path.splitext(s)
        if string.lower(tail) in ['.cap', '.capx']:
            if fnmatch.fnmatch(s, filter):
                scoreList.append(s)
    

    if len(scoreList) > 0:
        scoreString = scoreList[0]
        count = 0
        for l in scoreList[1:]:
            count += 1
            if count % 3 == 0:
                scoreString += '\n' + l
            else:
                scoreString += '    ' + l
                
            
        dlg2 = Dialog('', VBox([Label('Folgende %s Dateien werden gedruckt:' % (str(len(scoreList)))),
                                Label(' '),
                                Label(scoreString),
                                Label(' '),
                                Label('Weiter mit OK'),
                                Label(' ')
                                ])
                      )
        if dlg2.run():
            pass
        else:
            abort = True
    else:
        messageBox('-- Dateifilter --', 'Keine Datei entspricht den Filterkriterien!')
        abort = True
        
if not abort:
    for s in scores:
        head, tail = os.path.splitext(s)
        if string.lower(tail) in ['.cap', '.capx']:
            if fnmatch.fnmatch(s, filter):
                args = [' /p',  '"'+os.path.join(scoreDir, s)+'"']
                path = os.path.join(progDir, capExe)
                # messageBox('',str(args))
                result = os.spawnv(os.P_WAIT, path, args)

