| 1 | #///////////////////////////////////////////////////////////////////////////// |
|---|
| 2 | # FILE : btoplevel.tcl |
|---|
| 3 | # PURPOSE : Bayes Top Level. TopLevel con opciones |
|---|
| 4 | #///////////////////////////////////////////////////////////////////////////// |
|---|
| 5 | |
|---|
| 6 | |
|---|
| 7 | package require byscommon |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | #///////////////////////////////////////////////////////////////////////////// |
|---|
| 11 | ::snit::widgetadaptor btoplevel { |
|---|
| 12 | # |
|---|
| 13 | # PURPOSE: Sobrecargamos un toplevel para que tenga nuevas funcionalidades |
|---|
| 14 | # |
|---|
| 15 | #///////////////////////////////////////////////////////////////////////////// |
|---|
| 16 | # opciones especificas |
|---|
| 17 | # title -> titulo del toplevel |
|---|
| 18 | # closecmd -> comando a ejecutar al cerrar el toplevel |
|---|
| 19 | # iniconfig -> Nombre que se asigna al toplevel para identificar sus opciones |
|---|
| 20 | # en el archivo de configuración .ini por defecto "" en ese caso |
|---|
| 21 | # no se guardaran las opciones |
|---|
| 22 | # geometry -> Geometria inicial, antes de que exista en el .ini |
|---|
| 23 | #///////////////////////////////////////////////////////////////////////////// |
|---|
| 24 | option -title {} |
|---|
| 25 | option -closecmd |
|---|
| 26 | option -iniconfig "" |
|---|
| 27 | option -geometry 780x580+10+10 |
|---|
| 28 | #///////////////////////////////////////////////////////////////////////////// |
|---|
| 29 | |
|---|
| 30 | |
|---|
| 31 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 32 | constructor {args} { |
|---|
| 33 | # |
|---|
| 34 | # PURPOSE: Constructor de un btoplevel. Crea una instancia de un toplevel |
|---|
| 35 | # |
|---|
| 36 | # PARAMETERS: |
|---|
| 37 | # args -> Lista de opciones especificas de un toplevel, mas las propias de |
|---|
| 38 | # un btoplevel |
|---|
| 39 | # |
|---|
| 40 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 41 | # Widget que va a servir de contenedor para btoplevel |
|---|
| 42 | installhull [toplevel $self] |
|---|
| 43 | # Apply all arguments given: |
|---|
| 44 | $self configurelist $args |
|---|
| 45 | # Destroy |
|---|
| 46 | # bind $self <Destroy> +[list [codename Destroy] $self] |
|---|
| 47 | wm protocol $self WM_DELETE_WINDOW [list [codename Destroy] $self] |
|---|
| 48 | # .ini |
|---|
| 49 | ReadIni $self |
|---|
| 50 | } |
|---|
| 51 | |
|---|
| 52 | |
|---|
| 53 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 54 | proc Destroy {self} { |
|---|
| 55 | # |
|---|
| 56 | # PURPOSE: Funciones a evaluar al cerrar un toplevel. Si no tiene |
|---|
| 57 | # procedimento propio se asume que se desea destruir el toplevel |
|---|
| 58 | # |
|---|
| 59 | # PARAMETERS: |
|---|
| 60 | # self: toplevel |
|---|
| 61 | # |
|---|
| 62 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 63 | # Save .ini |
|---|
| 64 | WriteIni $self |
|---|
| 65 | # destroy |
|---|
| 66 | set cmd [$self cget -closecmd] |
|---|
| 67 | if {[string length $cmd]} { |
|---|
| 68 | eval $cmd |
|---|
| 69 | } else { |
|---|
| 70 | destroy $self |
|---|
| 71 | } |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | |
|---|
| 75 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 76 | proc WriteIni {self} { |
|---|
| 77 | # |
|---|
| 78 | # PURPOSE: Guarda en el .ini informacion referente al toplevel |
|---|
| 79 | # |
|---|
| 80 | # PARAMETERS: |
|---|
| 81 | # self: toplevel |
|---|
| 82 | # |
|---|
| 83 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 84 | if { [$self cget -iniconfig] ne "" } { |
|---|
| 85 | # comprobamos cargado namespace y variable de .ini |
|---|
| 86 | #&& [info exists idIni] |
|---|
| 87 | if {[namespace exists ::iniFile]} { |
|---|
| 88 | set wini ::iniFile::Write |
|---|
| 89 | set nm [$self cget -iniconfig] |
|---|
| 90 | if {![string length $nm]} { |
|---|
| 91 | set nm $self |
|---|
| 92 | } |
|---|
| 93 | $wini $nm wm,state [wm state $self] |
|---|
| 94 | $wini $nm geometry [wm geometry $self] |
|---|
| 95 | } |
|---|
| 96 | } |
|---|
| 97 | } |
|---|
| 98 | |
|---|
| 99 | |
|---|
| 100 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 101 | proc ReadIni {self} { |
|---|
| 102 | # |
|---|
| 103 | # PURPOSE: Recupera del .ini informacion referente al toplevel |
|---|
| 104 | # |
|---|
| 105 | # PARAMETERS: |
|---|
| 106 | # self: toplevel |
|---|
| 107 | # |
|---|
| 108 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 109 | if { [$self cget -iniconfig] ne "" } { |
|---|
| 110 | # comprobamos cargado namespace y variable de .ini |
|---|
| 111 | #&& [info exists idIni] |
|---|
| 112 | if {[namespace exists ::iniFile]} { |
|---|
| 113 | |
|---|
| 114 | set rini ::iniFile::Read |
|---|
| 115 | set nm [$self cget -iniconfig] |
|---|
| 116 | if {![string length $nm]} { |
|---|
| 117 | set nm $self |
|---|
| 118 | } |
|---|
| 119 | set stt [::iniFile::ReadWMState $rini $nm] |
|---|
| 120 | set geo [$rini $nm geometry [$self cget -geometry]] |
|---|
| 121 | if {[string length $geo]} { |
|---|
| 122 | wm geometry $self $geo |
|---|
| 123 | } |
|---|
| 124 | wm state $self $stt |
|---|
| 125 | } |
|---|
| 126 | } |
|---|
| 127 | } |
|---|
| 128 | |
|---|
| 129 | |
|---|
| 130 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 131 | # cget and configure |
|---|
| 132 | #/////////////////////////////////////////////////////////////////////////// |
|---|
| 133 | oncget -title { |
|---|
| 134 | return [wm title $self] |
|---|
| 135 | } |
|---|
| 136 | onconfigure -title {value} { |
|---|
| 137 | wm title $self $value |
|---|
| 138 | } |
|---|
| 139 | |
|---|
| 140 | # delegacion de metodos y opciones |
|---|
| 141 | delegate method * to hull |
|---|
| 142 | delegate option * to hull |
|---|
| 143 | } |
|---|
| 144 | |
|---|
| 145 | package provide btoplevel 1.0 |
|---|