# -*- coding: ISO-8859-1 -*-
""" capellaScript -- 07.12.2003 Paul Villiger
>>> Script Manager

    Ausführen und Zuweisen von beliebeigen Skripts über 10 Menuepunkte.
    Ein Skript kann an "Direct_Call" zugwiesen werden und wir über das Skript "Script_Manager_Direct.py" aufgerufen.
    Die beiden Skripts "Script_Manager.py" und "Script_Manager_Direct.py" sind dafür konzipiert , um sie über die Pluginleiste aufzurufen.
<<<

History: 07.12.03 - Erste Ausgabe
         13.01.03 - Optionen gehen nicht verloren, wenn das aufgerufene Programm diese ueberschreibt
         03.02.04 - sys.argv[0] wird auf aufgerufenes Programm gsetzt
         13.06.04 - Optionen werden in richtige Datei geschrieben
         08.01.07 - Anpassungen an capella 5.12

         
"""
import os

optionFileName = os.path.join(os.path.split(sys.argv[0])[0],'Script_Manager.opt')
ScriptManagerOptionsFileName = optionFileName
    
class ScriptOptions(ScriptOptions):
    def __init__(self):
        dir, file = os.path.split(ScriptManagerOptionsFileName)
        file = os.path.splitext(file)[0] + '.opt'
        self._optionsFile = os.path.join(dir, file)
        self._oldOptionsFile = self._optionsFile
        s = self._oldOptionsFile
        if s.startswith(getProgramDir()):
            s = s[len(getProgramDir()):]
        s = s.replace(':', '$').replace('\\', '#')
        self._newOptionsFile = os.path.join(getUserDataDir(), s)

def selectScript():
    dlg = FileDialog()
    dlg.__init__(bOpen=True)
    dlg.setTitle('Python Skript auswählen')
    dlg.addFilter('Python Scripts', '*.py')
    dlg.setStartFile(str(sys.argv[0]))
    if dlg.run():
        return dlg.filePath()
    else:
        return ''

while True:  # Endlosschlaufe bis Abbruch (break)
    ScriptManagerOptionsFileName = optionFileName
    options = ScriptOptions() 
    opt = options.get()

    radProgram = Radio([' 1.    '+os.path.split(opt.get('prog1', ''))[1],
                        ' 2.    '+os.path.split(opt.get('prog2', ''))[1],
                        ' 3.    '+os.path.split(opt.get('prog3', ''))[1],
                        ' 4.    '+os.path.split(opt.get('prog4', ''))[1],
                        ' 5.    '+os.path.split(opt.get('prog5', ''))[1],
                        ' 6.    '+os.path.split(opt.get('prog6', ''))[1],
                        ' 7.    '+os.path.split(opt.get('prog7', ''))[1],
                        ' 8.    '+os.path.split(opt.get('prog8', ''))[1],
                        ' 9.    '+os.path.split(opt.get('prog9', ''))[1],
                        '10.    '+os.path.split(opt.get('prog10', ''))[1],
                        '11.    '+os.path.split(opt.get('prog11', '')+'   >> Direct_Call <<')[1]],
                       value=int(opt.get('progSel','0')),
                       text='Skriptauswahl',
                       padding = 8)

    radTask    = Radio(['Skript aus Skriptauswahl ausführen',
                        'Neues Skript an Skriptauswahl zuweisen',
                        'Abbrechen'], value = 0, text = 'Aktion')
    
    vbox1 = VBox([radProgram, radTask])
    
    dlg = Dialog('  -- Skript Manager --', vbox1)
    
    if dlg.run():
        task = radTask.value()
        program = 'prog' + str(radProgram.value()+1)
        opt['progSel'] = str(radProgram.value())    
        options.set(opt)
        
        if (task == 0) and os.path.isfile(opt.get(program,'')):
            sys.argv[0] = opt[program]
            ScriptManagerOptionsFileName  = opt[program]
            execfile(opt[program])
            # Optionen updaten falls ueberschrieben
            # optNew = options.get()
            # opt.update(optNew)
            # options.set(opt)
            
            break # while
        elif task == 1:
            # Programm zuweisen
            opt[program] = selectScript()
            options.set(opt)
        else:
            break # while
    else:
        break # while

