# -*- coding: ISO-8859-1 -*-
""" capellaScript -- 08.02.2005 Paul Villiger
>>> Rastergrafik Konverter

    Dieses Skript konvertiert alle CAP-Dateien in einem Verzeichnis in das gewünschte Garfikformat.
    Die Parameter werden mittels Dialog ermittelt. Die Grafikdatieien werden in Unterverzeichnissen angelegt.
    
<<<


History: 08.02.05 - Erstausgabe

"""

from caplib.capDOM import ScoreChange
import tempfile, os

# Defaultwerte
format = 0    # 0=GIF, 1=PNG, 2=BMP, 3=TIFF, 4=JPEG
dpi = 150     # Auflösung in dpi
quality = 75  # Qualität (nur bei format = 4 (JPEG), Bereich 0 bis 100).
pagesAll = False     # False = erste Seite, True = alle Seiten
part = 0      # 0 = ganze Seite mit Rand


grafikFormat = ComboBox(['GIF','PNG','BMP','TIFF','JPEG'], value=format,width = 10)
resolution   = Edit(str(dpi), width=10)
jpegQuality  = Edit(str(quality), width=10)
allPages     = CheckBox('Alle Seiten umwandeln', value=pagesAll)

dlg = Dialog('Konvertierungs Parameter',
             VBox([HBox([Label('Grafikformat', width=25), grafikFormat]),
                  HBox([Label('Auflösung (dpi)', width=25), resolution]),
                  HBox([Label('JPEG Qualitätä', width=25), jpegQuality]),
                  allPages,
                  Label('TIPP: Farbinformationen ausschalten'),
                  Label(' ')], padding = 10)
             )


if dlg.run():
    format   = grafikFormat.value()
    dpi      = int(resolution.value())
    quality  = int(jpegQuality.value())
    pagesAll = allPages.value()



    dlg = FileDialog()
    dlg.__init__(bOpen=False)
    dlg.setTitle('Bitte Ordner auswählen')
    dlg.addFilter('capella-Dateien', '*.cap;*.capx')
    dlg.setStartFile('$$XX.cap')
    exitSkript = False
else:
    exitSkript = True

if not exitSkript and dlg.run():
    capFile=dlg.filePath()
    capDir, capName = os.path.split(capFile)
else:
    exitSkript = True


if not exitSkript:
    newTail = ['.gif','.png','.bmp','.tif','.jpg'][format]
    subDir = ['GIF','PNG','BMP','TIFF','JPEG'][format]
    destDir = os.path.join(capDir, subDir)
    if not os.path.exists(destDir):
        os.mkdir(destDir)

    dirlist = os.listdir(capDir)
    dirlist.sort()

    for capFile in dirlist:
        head, tail = os.path.splitext(capFile)
        if tail.lower() <> '.cap':
            continue
        
        if not os.path.isfile(os.path.join(capDir,capFile)):
            continue

        openScore(os.path.join(capDir,capFile))
        if activeScore():
            for i in range(activeScore().nPages()):
                if not pagesAll:
                    fileName = '%s%s' % (head,newTail)
                else:
                    fileName = '%s_%003d%s' % (head,i+1,newTail)
                name = os.path.join(destDir, fileName)
                activeScore().exportGraphics(name, part, i, dpi, format, quality)
                if not pagesAll: break   # nur erste Seite
        
        closeActiveScore()


