# -*- coding: ISO-8859-1 -*-
""" capellaScript -- © Paul Villiger
>>> Script Manager II

    Ausführen und Zuweisen von beliebeigen Skripts in zehn Gruppen mit je zehn Menuepunkten.||
    Hinweis: Alle Einstellungen, sowie die Einstellungen der aufgerufenen Scripts
             werden in der Datei Script_Manager_II.opt gespeichert.
<<<

History: 14.05.05 - Erweiterung des Skript_Managers
         12.06.05 - Optionen werden in richtige Datei geschrieben
                  - Ausführen von ganzen Gruppen
         04.03.06 - Umbenennen von Namen in Skriptauswahl
         08.01.07 - Anpassungen an capella 5.12
         
"""
import os

optionFileName = os.path.join(os.path.split(sys.argv[0])[0], 'Script_Manager_II.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 ''

maxEntry = 10    
maxGroupe = 10
while True:  # Endlosschlaufe bis Abbruch (break)
    ScriptManagerOptionsFileName = optionFileName
    sm_options = ScriptOptions() 
    sm_opt = sm_options.get()
    actGroupe = int(sm_opt.get('SM2_ActGroupe',1))
    groupeList = []
    for i in range(maxGroupe):
        groupeList.append('Gruppe %2u - %s' % (i + 1, sm_opt.get('SM2_G%02d_Name' % (i + 1), '')))

    cBoxGroupe = ComboBox(groupeList, value=actGroupe - 1, width = 30 )        
    radioList = []
    for i in range(maxEntry):
        progFile = os.path.split(sm_opt.get('SM2_G%02dP%02d' % (actGroupe,i+1),''))[1]
        progName = sm_opt.get('SM2_G%02dP%02d_Name' % (actGroupe,i+1),'')
        if progName == '':
            progName = progFile
        
        radioList.append('%2u.    %s' % (i + 1, progName))

    radProgram = Radio(radioList,
                       value=int(sm_opt.get('SM2_G%02dsel' % (actGroupe),'0')),
                       text='Skriptauswahl',
                       width = 50,
                       padding = 8)

    radTask    = Radio(['Skript aus Skriptauswahl ausführen',
                        'Neues Skript an Skriptauswahl zuweisen',
                        'Skriptauswahl umbenennen',
                        'Gruppe umbenennen',
                        'Ganze Gruppe ausführen',
                        'Abbrechen'], value = 0, width = 50, text = 'Aktion' )
    
    vbox1 = VBox([cBoxGroupe, Label('Bei Gruppenwechsel zuerst OK drücken'),Label(' '),radProgram, radTask])
    
    dlg = Dialog('  -- Skript Manager II--', vbox1)
    
    if dlg.run():
        task = radTask.value()
        if task == 5:
            break # while
        
        program = 'SM2_G%02dP%02d' % (actGroupe,radProgram.value()+1)
        programName = 'SM2_G%02dP%02d_Name' % (actGroupe,radProgram.value()+1)
        sm_opt['SM2_G%02dsel' % (actGroupe)] = str(radProgram.value())    
        sm_options.set(sm_opt)
        newGroupe = cBoxGroupe.value() + 1
        if newGroupe <> actGroupe:
            sm_opt['SM2_ActGroupe'] = newGroupe
            sm_options.set(sm_opt)
        elif (task == 0) and os.path.isfile(sm_opt.get(program,'')):
            sys.argv[0] = sm_opt[program]
            ScriptManagerOptionsFileName=sm_opt[program]
            execfile(sm_opt[program])
            # Optionen updaten falls ueberschrieben
            # optNew = sm_options.get()
            # sm_opt.update(optNew)
            # sm_options.set(sm_opt)
            
            break # while
        
        elif task == 1:
            # Programm zuweisen
            sm_opt[program] = selectScript()
            if program + '_Name' in sm_opt:
                del sm_opt[program + '_Name']
            sm_options.set(sm_opt)
        elif task == 2:
            # Skriptauswahl umbenennen
            pn = sm_opt.get(programName, '')
            if pn == '':
                pn = os.path.split(sm_opt.get(program, ''))[1]
            editSkript = Edit(pn, width = 30)
            dlg1 = Dialog('Bitte Skriptname eingeben',
                          VBox([editSkript,
                                Label(' '),
                                Label('Ohne Inhalt wird der Name gelöscht!')]))
            if dlg1.run():
                sm_opt[programName] = editSkript.value()
                if sm_opt[programName] == '':
                    del sm_opt[programName]
                sm_options.set(sm_opt)
            
        elif task == 3:
            # Gruppe umbenennen
            editGroupe = Edit(sm_opt.get('SM2_G%02d_Name' % (actGroupe), ''), width = 30)
            dlg1 = Dialog('Bitte Gruppenname eingeben', editGroupe)
            if dlg1.run():
                sm_opt['SM2_G%02d_Name' % (actGroupe)] = editGroupe.value()
                sm_options.set(sm_opt)
        elif task == 4:
            # Ganze Gruppe ausführen
            for gr in range(maxEntry):
                program = 'SM2_G%02dP%02d' % (actGroupe,gr+1)
                if os.path.isfile(sm_opt.get(program,'')):
                    sys.argv[0] = sm_opt[program]
                    ScriptManagerOptionsFileName=sm_opt[program]
                    execfile(sm_opt[program])

            break # while

    else:
        break # while

