# $Source: /usr/local/SimSoft/Sfx3D/src/gts/gts07.tcl,v $
# $Revision: 1.2 $
# $Author: baum $
# $Date: 2001/11/29 15:18:10 $
#
# Login name of the user who locked the revision
# $Locker:  $
# Tag name used to checkout the file
# $Name: Release-14 $
# State assigned to revision
# $State: Exp $
#
#
# $Log: gts07.tcl,v $
# Revision 1.2  2001/11/29 15:18:10  baum
# -Realzeitsteuerung eingebaut
# -Handsteuerung eingebaut
#

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# ++++++++++++  D I A L O G :  Ereignisse +++++++++++++++++++++++++++++++++++
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

proc TZT.Parameter { W inputs labels lbreite} {
   global TZT1ENTRYS
   set Werte  $W.rahmen  
   catch {destroy $W.rahmen}
   frame $Werte  -borderwidth 1
   pack $Werte -expand yes -fill both
   set index 6
   set TZT1ENTRYS {}
   
   set labels [lreplace $labels 0 0]
   foreach i $labels {
     set inp [lindex $inputs $index]
     set einheit ""
     set first [string first "<" $i]
     set last [string last ">" $i]
     if { ($first > 0) && ($last > 0) } {
        set einheit [string range $i [expr $first+1] [expr $last-1] ]
        set i [string range $i 0 [expr $first-1]]
     }
     if {![regexp {^[0-9]+$} $inp] } { 
        set str [string trimright $inp 0]
        if { ([string index $str [expr [string length $str] - 1 ]] == ".") } {
           append str "0" 
        }
        set e [dialog_entry $Werte "$i:" 13 $einheit 10 $str Float]
     } elseif {![regexp {^[a-z]+$} $inp] } { 
       set e [dialog_entry $Werte "$i:" 13 $einheit 10 $inp Int]
     } else {
       put_win "Fehler in TZT.Parameter: String=$inp\n"
     }
     lappend TZT1ENTRYS $e
     incr index
   }
}
#  ENDE TZT.Parameter

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Select { s } {
  global TZTFRAME EREIGNISSE GTS 
  foreach i $EREIGNISSE { if { $s == [lindex $GTS($i,EREIG) 0] } { break } }
  set GTS(AKTEREIG) $i
  TZT.Parameter  $TZTFRAME "0 0 0 0 0 0 0 0 0 0" $GTS($i,EREIG) 12
}
# ENDE TZT.Select

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Bearbeiten { fname command inputs} {
   global EREIGNISSE GTS NR TZT1ENTRYS TZTFRAME Confirm
   
   set dlg [dialog_create $fname" Dialog "OK" "Abbruch"]
   set DAT(Zeit) [dialog_lframe $dlg "Modellzeit"]
   set NR [lindex $inputs 0]
   set inputs [lreplace $inputs 0 0]
   set DAT(Input) {}
   set e [dialog_entry $DAT(Zeit) "" 0 "Tage" 4 [lindex $inputs 0] "Int" "" left]
   dialog_focus $e
   lappend ein $e
   set e [dialog_entry $DAT(Zeit) "" 0 "Std" 3  [lindex $inputs 1] "Int" "" left]
   lappend ein $e
   set e [dialog_entry $DAT(Zeit) "" 0 "min" 3  [lindex $inputs 2] "Int" "" left]
   lappend ein $e
   set e [dialog_entry $DAT(Zeit) "" 0 "sec" 3  [lindex $inputs 3] "Int" "" left]
   lappend ein $e
   set e [dialog_entry $DAT(Zeit) "" 0 "hsec" 3 [lindex $inputs 4] "Int" "" left]
   lappend ein $e
   set DAT(Input) $ein
   
   set DAT(Ereignis) [dialog_lframe $dlg "Ereignis"]
   tixComboBox $DAT(Ereignis).cb  -dropdown true \
        -command TZT.Select  -editable false -variable selereignis \
        -options {
            listbox.height 6
            label.anchor e
          }
   pack $DAT(Ereignis).cb -side top -pady 5 -anchor w 

   foreach i $EREIGNISSE { $DAT(Ereignis).cb insert end [lindex $GTS($i,EREIG) 0] }
   set GTS(AKTEREIG) [lindex $inputs 5]
   tixSetSilent $DAT(Ereignis).cb  [lindex $GTS($GTS(AKTEREIG),EREIG) 0]
   set TZTFRAME $DAT(Ereignis)
   TZT.Parameter  $TZTFRAME $inputs $GTS($GTS(AKTEREIG),EREIG) 12
   
   dialog_wait $dlg 
   while {!($Confirm($dlg) == "0")} { 
     set input {}
     lappend input "$NR:" 
     foreach i $DAT(Input) { lappend input [$i get] }
     lappend input $GTS(AKTEREIG)
     foreach i $TZT1ENTRYS { lappend input [$i get] }
     set ret [DlgExperiment EREIGNISSE $command $input 0 0]

     if { $ret } {
       set GTS(TZTLISTE) [DlgExperiment EREIGNISSE INFO 0 0 0]
       $GTS(HLIST) delete all
       $GTS(HLIST) add .
       foreach line $GTS(TZTLISTE) { TZT.setEreignis $GTS(HLIST) $line "" ""  }
       set Confirm($dlg) 0
     } else {  
     dialog_wait $dlg
     }
   }
   dialog_destroy $dlg
   unset DAT
}
#  ENDE TZT.Bearbeiten

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.setEreignis { hlist ereignis wie wo } {
    set style(fett) [tixDisplayStyle text  -refwindow $hlist \
                    -font [tix option get bold_font ]]

    $hlist config -separator "." -width 43 -drawbranch 1 -indent 10
    set index [lindex $ereignis 0]
    if {!($wie == "")} {
    set row [$hlist add $index $wie $wo -itemtype text \
            -text [lindex $ereignis 1] -style $style(fett)]
    } else {        
      set row [$hlist add $index  -itemtype text \
              -text [lindex $ereignis 1] -style $style(fett)]
    }        
    $hlist item create $row 1 -itemtype text -text [lindex $ereignis 2] 
    $hlist item create $row 2 -itemtype text -text [lindex $ereignis 3] 
    $hlist item create $row 3 -itemtype text -text [lindex $ereignis 4] 
    $hlist item create $row 4 -itemtype text -text [lindex $ereignis 5] 
}
#  ENDE TZT.setEreignis

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Init { } {
  global GTS EREIGNISSE TZTFRAME
  set EREIGNISSE    { 3 24 25 27 28 46 53 54 64 65 66 }
  set GTS(3,EREIG)  "ETprotokoll wie"
  set GTS(24,EREIG) "ETasperren Bstnr."
  set GTS(25,EREIG) "ETesperren Bstnr."
  set GTS(27,EREIG) "ETastoeren Bstnr."
  set GTS(28,EREIG) "ETestoeren Bstnr."
  set GTS(46,EREIG) "ETprogramm Prognr."
  set GTS(53,EREIG) "ETazeitreihe Zeitreihe Intervallzeit<min>"
  set GTS(54,EREIG) "ETezeitreihe Zeitreihe"
  set GTS(64,EREIG) "ETstartextprozess Prozessnr."
  set GTS(65,EREIG) "ETstoppextprozess Prozessnr."
  set GTS(66,EREIG) "ETexplerzeugen Arbeitsplan. Anzahl<Stck.>"
  set GTS(TZTLISTE) ""
  set TZTFRAME ""
  set GTS(HLIST) ""
  set GTS(AKTEREIG) ""
}
#  ENDE TZT.Init

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Exit { } {
  global GTS EREIGNISSE TZTFRAME 
  foreach i $EREIGNISSE { unset GTS($i,EREIG) }
  unset EREIGNISSE
  unset TZTFRAME
  unset GTS(TZTLISTE)
  unset GTS(HLIST)
  unset GTS(AKTEREIG)
}
#  ENDE TZT.Exit

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.UpDown { hlist richtung } {
   global GTS
   if {!([$hlist selection get] == "") &&
       !([$hlist selection get] == ".")} { 
         set index [$hlist selection get]
         set line [lindex $GTS(TZTLISTE) $index]
         if { ($richtung == "UP") } {
           set neu [$hlist info prev $index]
         } else {
           set neu [$hlist info next $index]
         }
         if {!($neu == "") && !($neu == ".")} { 
           $hlist delete entry $index
           if { ($richtung == "UP") } {
             TZT.setEreignis $hlist $line -before $neu
           } else   {
             TZT.setEreignis $hlist $line -after $neu
           }  
           $hlist selection set $index
           DlgExperiment EREIGNISSE $richtung $index 0 0
         }
    }
}
# ENDE TZT.UpDown

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Erzeugen { fname } {
   dialog_icon $fname
   TZT.Bearbeiten "Ereignis erzeugen" "ERZEUGEN" "0 0 0 0 0 0 64 0 0 0"
   dialog_deicon $fname
}
# ENDE TZT.Erzeugen

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Loeschen { } {
   global GTS
   if {!([$GTS(HLIST) selection get] == "") &&
       !([$GTS(HLIST) selection get] == ".")} { 
        set index [$GTS(HLIST) selection get]
        $GTS(HLIST) delete entry $index
        DlgExperiment EREIGNISSE LOESCHEN $index 0 0
   }
}
# ENDE TZT.Loeschen

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Aendern { fname } {
   global GTS
   if {!([$GTS(HLIST) selection get] == "") &&
       !([$GTS(HLIST) selection get] == ".")} { 
         set index [$GTS(HLIST) selection get]
         set inputs [DlgExperiment EREIGNISSE SELECT $index 0 0]
         dialog_icon $fname
         TZT.Bearbeiten "Ereignis bearbeiten" "AENDERN" $inputs
         dialog_deicon $fname
   }
}
# ENDE TZT.Aendern

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
proc TZT.Dialog { } {
   TZT.Init
   global GTS
   set dlg [dialog_create "Ereignisse" Dialog "Schliessen"]
   focus $dlg.box.ok
   
   set    W $dlg.rahmen
   frame $W -relief solid  -borderwidth 1
   pack  $W -expand yes -fill both  -padx 10 -pady 10        

   UpDownLeiste $W.updownLeiste 7m
   pack $W.updownLeiste   -side right -expand no -fill both

   set kopf "{{Modellzeit} 14} {{Etyp} 7} {{Info1} 7} {{Info2} 7} {{Info3} 7}"
   set GTS(HLIST) [dialog_scrollhlist $W $kopf]
   set GTS(TZTLISTE) [DlgExperiment EREIGNISSE INFO 0 0 0]
   $GTS(HLIST) add .
   foreach line $GTS(TZTLISTE) { TZT.setEreignis $GTS(HLIST) $line "" ""  }
   
   set button [MachButton $W "Erzeugen Löschen Bearbeiten" 8]
   bind $W.updownLeiste.up   <ButtonRelease-1> [list TZT.UpDown $GTS(HLIST) "UP"]
   bind $W.updownLeiste.down <ButtonRelease-1> [list TZT.UpDown $GTS(HLIST) "DOWN"]
   bind $button.1            <ButtonRelease-1> [list TZT.Erzeugen $dlg]
   bind $button.2            <ButtonRelease-1> [list TZT.Loeschen]
   bind $button.3            <ButtonRelease-1> [list TZT.Aendern  $dlg]

   dialog_wait $dlg
   dialog_destroy $dlg   
   TZT.Exit
}
# ENDE TZT.Dialog 


# ++++++++++++++++++  E N D E  Ereignisse +++++++++++++++++++++++++++++++++++
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
