| 1 |
|
|---|
| 2 | proc Tol_GetViewPrivateMembers { } {
|
|---|
| 3 | set viewOpt 0
|
|---|
| 4 | catch {
|
|---|
| 5 | # no funciona
|
|---|
| 6 | tol::console eval {
|
|---|
| 7 | Real __getViewPrivateMembers_tmp__ =
|
|---|
| 8 | TolConfigManager::Config::Various::View::PrivateMembers;
|
|---|
| 9 | }
|
|---|
| 10 | set x [ lindex [ tol::info variable { Real __getViewPrivateMembers_tmp__ } ] 2 ]
|
|---|
| 11 | tol::console stack release __getViewPrivateMembers_tmp__
|
|---|
| 12 | set viewOpt [ expr { int( $x ) } ]
|
|---|
| 13 |
|
|---|
| 14 | } msg
|
|---|
| 15 | #puts "Tol_GetViewPrivateMembers: $msg"
|
|---|
| 16 | return $viewOpt
|
|---|
| 17 | }
|
|---|
| 18 |
|
|---|
| 19 | proc Tol_ObjIsClassOf { obj_addr cls_name } {
|
|---|
| 20 | tol::console eval [ string map [ list %A $obj_addr %C $cls_name ] {
|
|---|
| 21 | Real __gui_check__ = IsInstanceOf( GetObjectFromAddress( "%A" ),"%C" )
|
|---|
| 22 | } ]
|
|---|
| 23 | set info [ tol::info variable {Real __gui_check__} ]
|
|---|
| 24 | set x [ lindex $info 2 ]
|
|---|
| 25 | tol::console stack release __gui_check__
|
|---|
| 26 | expr { round($x) }
|
|---|
| 27 | }
|
|---|
| 28 |
|
|---|
| 29 | proc Tol_ClassOf { obj_addr } {
|
|---|
| 30 | tol::console eval [ string map [ list %A $obj_addr ] {
|
|---|
| 31 | Text __gui_classof__ = {
|
|---|
| 32 | Anything obj = GetObjectFromAddress( "%A" );
|
|---|
| 33 | // WriteLn( "Tol_ClassOf " << Grammar( obj ) );
|
|---|
| 34 | Text If( Grammar( obj ) == "NameBlock", ClassOf( obj ), "" )
|
|---|
| 35 | }
|
|---|
| 36 | } ]
|
|---|
| 37 | set info [ tol::info variable {Text __gui_classof__} ]
|
|---|
| 38 | set x [ string trim [ lindex $info 2 ] \" ]
|
|---|
| 39 | tol::console stack release __gui_classof__
|
|---|
| 40 | set x
|
|---|
| 41 | }
|
|---|
| 42 |
|
|---|
| 43 | proc Tol_ClassOfFromReference { objReference } {
|
|---|
| 44 | set addr [ ::tol::info address $objReference ]
|
|---|
| 45 | return [ Tol_ClassOf $addr ]
|
|---|
| 46 | }
|
|---|
| 47 |
|
|---|
| 48 | proc Tol_StructOf { obj_addr } {
|
|---|
| 49 | set tolcode [ string map [ list %A $obj_addr ] {
|
|---|
| 50 | Text {
|
|---|
| 51 | Anything obj = GetObjectFromAddress( "%A" );
|
|---|
| 52 | // WriteLn( "Tol_StructOf " << Grammar( obj ) );
|
|---|
| 53 | Text If( Grammar( obj ) == "Set", StructName( obj ), "" )
|
|---|
| 54 | }
|
|---|
| 55 | } ]
|
|---|
| 56 | return [ lindex [ toltcl::eval $tolcode ] 0 ]
|
|---|
| 57 | }
|
|---|
| 58 |
|
|---|
| 59 | proc Tol_StructOfFromReference { objReference } {
|
|---|
| 60 | # WATCH!!!!
|
|---|
| 61 | # when Tol_StructOfFromReference is invoken on {File xxx} xxx is
|
|---|
| 62 | # decompiled!!!!
|
|---|
| 63 | if { [ llength $objReference ] == 2 &&
|
|---|
| 64 | [ lindex $objReference 0 ] eq "File" } {
|
|---|
| 65 | return ""
|
|---|
| 66 | }
|
|---|
| 67 | set addr [ ::tol::info address $objReference ]
|
|---|
| 68 | return [ Tol_StructOf $addr ]
|
|---|
| 69 | }
|
|---|
| 70 |
|
|---|
| 71 | #(pgea) nueva funcion para obtener la informacion de instancia
|
|---|
| 72 | proc Tol_InstanceInfo { obj_addr } {
|
|---|
| 73 | tol::console eval [ string map [ list %A $obj_addr ] {
|
|---|
| 74 | Text __gui_instanceinfo__ = {
|
|---|
| 75 | Anything __intance__ = GetObjectFromAddress("%A");
|
|---|
| 76 | Text If(ObjectExist("Code", "__intance__::_.get.autodoc.info"),
|
|---|
| 77 | __intance__::_.get.autodoc.info(?), "")
|
|---|
| 78 | }
|
|---|
| 79 | } ]
|
|---|
| 80 | set info [ tol::info variable {Text __gui_instanceinfo__} ]
|
|---|
| 81 | set x [ string trim [ lindex $info 2 ] \" ]
|
|---|
| 82 | tol::console stack release __gui_instanceinfo__
|
|---|
| 83 | set x
|
|---|
| 84 | }
|
|---|
| 85 |
|
|---|
| 86 | #(pgea) nueva funcion para obtener la informacion de instancia
|
|---|
| 87 | proc Tol_InstanceInfoFromReference { objReference } {
|
|---|
| 88 | set addr [ ::tol::info address $objReference ]
|
|---|
| 89 | return [ Tol_InstanceInfo $addr ]
|
|---|
| 90 | }
|
|---|
| 91 |
|
|---|
| 92 | #(pgea) nueva funcion para obtener el contenido de la instancia
|
|---|
| 93 | proc Tol_InstanceContent { obj_addr } {
|
|---|
| 94 | tol::console eval [ string map [ list %A $obj_addr ] {
|
|---|
| 95 | Text __gui_instancecontent__ = {
|
|---|
| 96 | Anything __intance__ = GetObjectFromAddress("%A");
|
|---|
| 97 | Text If(ObjectExist("Code", "__intance__::_.get.autodoc.content"),
|
|---|
| 98 | __intance__::_.get.autodoc.content(?), "")
|
|---|
| 99 | }
|
|---|
| 100 | } ]
|
|---|
| 101 | set info [ tol::info variable {Text __gui_instancecontent__} ]
|
|---|
| 102 | set x [ string trim [ lindex $info 2 ] \" ]
|
|---|
| 103 | tol::console stack release __gui_instancecontent__
|
|---|
| 104 | set x
|
|---|
| 105 | }
|
|---|
| 106 |
|
|---|
| 107 | #(pgea) nueva funcion para obtener el contenido de la instancia
|
|---|
| 108 | proc Tol_InstanceContentFromReference { objReference } {
|
|---|
| 109 | set addr [ ::tol::info address $objReference ]
|
|---|
| 110 | return [ Tol_InstanceContent $addr ]
|
|---|
| 111 | }
|
|---|
| 112 |
|
|---|
| 113 | proc TolGui_GetMenuEntries { selection idx } {
|
|---|
| 114 | #puts "TolGui_GetMenuEntries $selection $idx"
|
|---|
| 115 | array set instances {}
|
|---|
| 116 | array set menu_class {}
|
|---|
| 117 | set i 0
|
|---|
| 118 | foreach obj_info $selection {
|
|---|
| 119 | set tcl_ref [ lindex $obj_info 0 ]
|
|---|
| 120 | set obj_addr [ ::tol::info address $tcl_ref ]
|
|---|
| 121 | if { [ Tol_ObjIsClassOf $obj_addr "GuiTools::@MenuDesc" ] } {
|
|---|
| 122 | set class [ Tol_ClassOf $obj_addr ]
|
|---|
| 123 | lappend instances($class) $obj_addr
|
|---|
| 124 | set name_inst [ lindex $obj_info 1 ]
|
|---|
| 125 | set menu_items [ TolGui_GetObjMenu $obj_addr ]
|
|---|
| 126 | # esto hace que estemos guardando la ultima instancia, asumimos
|
|---|
| 127 | # tambien que todas las instancia tienen la misma espcificacion
|
|---|
| 128 | # de menu
|
|---|
| 129 | if { ![ llength [ array names menu_class $class ] ] || $i == $idx } {
|
|---|
| 130 | set menu_class($class) \
|
|---|
| 131 | [ list $name_inst $obj_addr $menu_items ]
|
|---|
| 132 | }
|
|---|
| 133 | }
|
|---|
| 134 | incr i
|
|---|
| 135 | }
|
|---|
| 136 | set menu_info [ list ]
|
|---|
| 137 | foreach c [ array names instances ] {
|
|---|
| 138 | lappend menu_info [ list $c $menu_class($c) $instances($c) ]
|
|---|
| 139 | }
|
|---|
| 140 | #puts "$menu_info"
|
|---|
| 141 | set menu_info
|
|---|
| 142 | }
|
|---|
| 143 |
|
|---|
| 144 | proc TolGui_StoreSetElementsInOZA { object } {
|
|---|
| 145 | set saveIn [ tk_getSaveFile -defaultextension .oza \
|
|---|
| 146 | -parent . -title [ mc "Store OZA" ] \
|
|---|
| 147 | -filetypes {{oza {.oza}}} ]
|
|---|
| 148 |
|
|---|
| 149 | if { $saveIn ne "" } {
|
|---|
| 150 | set addr [ tol::info address $object ]
|
|---|
| 151 | set tolexpr [ string map [ list %a $addr %f $saveIn ] {
|
|---|
| 152 | Real Ois.Store( GetObjectFromAddress( "%a" ), "%f" );
|
|---|
| 153 | } ]
|
|---|
| 154 | toltcl::eval $tolexpr
|
|---|
| 155 | }
|
|---|
| 156 | }
|
|---|
| 157 |
|
|---|
| 158 | proc TolGui_StoreSelectionInOZA { selection } {
|
|---|
| 159 | set saveIn [ tk_getSaveFile -defaultextension .oza \
|
|---|
| 160 | -parent . -title [ mc "Store OZA" ] \
|
|---|
| 161 | -filetypes {{oza {.oza}}} ]
|
|---|
| 162 | if { $saveIn ne "" } {
|
|---|
| 163 | set lst_addr {}
|
|---|
| 164 | foreach r $selection {
|
|---|
| 165 | set a [ tol::info address $r ]
|
|---|
| 166 | lappend lst_addr \"$a\"
|
|---|
| 167 | }
|
|---|
| 168 | set set_addr "\[\[ [join $lst_addr ,] \]\]"
|
|---|
| 169 | set tolexpr [ string map [ list %L $set_addr %f $saveIn ] {
|
|---|
| 170 | Real {
|
|---|
| 171 | Set items = EvalSet( %L, Anything( Text addr ) {
|
|---|
| 172 | Anything GetObjectFromAddress( addr )
|
|---|
| 173 | } );
|
|---|
| 174 | Real Ois.Store( items, "%f" )
|
|---|
| 175 | }
|
|---|
| 176 | } ]
|
|---|
| 177 | toltcl::eval $tolexpr
|
|---|
| 178 | }
|
|---|
| 179 | }
|
|---|
| 180 |
|
|---|
| 181 | proc TolGui_InsertEntriesMatrixChart { mm selection } {
|
|---|
| 182 | if { ![ llength $selection ] } {
|
|---|
| 183 | return 0
|
|---|
| 184 | }
|
|---|
| 185 | set lst_addr {}
|
|---|
| 186 | foreach r $selection {
|
|---|
| 187 | set a [ tol::info address $r ]
|
|---|
| 188 | lappend lst_addr \"$a\"
|
|---|
| 189 | }
|
|---|
| 190 | set set_addr "\[\[ [join $lst_addr ,] \]\]"
|
|---|
| 191 | set tolexpr [ string map [ list %L $set_addr ] {
|
|---|
| 192 | Real {
|
|---|
| 193 | Set all_mat = EvalSet( %L, Matrix( Text addr ) {
|
|---|
| 194 | GetObjectFromAddress( addr )
|
|---|
| 195 | } );
|
|---|
| 196 | Real R = Rows( all_mat[1] );
|
|---|
| 197 | Set st = EvalSet( all_mat, Real( Matrix it ) {
|
|---|
| 198 | Real EQ( R, Rows( it ) )
|
|---|
| 199 | } );
|
|---|
| 200 | Real BinGroup( "And", st )
|
|---|
| 201 | }
|
|---|
| 202 | } ]
|
|---|
| 203 | set couldChart [ toltcl::eval $tolexpr ]
|
|---|
| 204 | if { $couldChart } {
|
|---|
| 205 | $mm add command -label [ mc "Draw matrix selection (natural)" ] \
|
|---|
| 206 | -command [ list TolGui_ChartMatrix $selection ]
|
|---|
| 207 | }
|
|---|
| 208 | }
|
|---|
| 209 |
|
|---|
| 210 | proc TolGui_ChartMatrix { selection } {
|
|---|
| 211 | set lst_addr {}
|
|---|
| 212 | foreach r $selection {
|
|---|
| 213 | set a [ tol::info address $r ]
|
|---|
| 214 | lappend lst_addr \"$a\"
|
|---|
| 215 | }
|
|---|
| 216 | set set_addr "\[\[ [join $lst_addr ,] \]\]"
|
|---|
| 217 | set tolexpr [ string map [ list %L $set_addr ] {
|
|---|
| 218 | Real {
|
|---|
| 219 | Set all_mat = EvalSet( %L, Matrix( Text addr ) {
|
|---|
| 220 | GetObjectFromAddress( addr )
|
|---|
| 221 | } );
|
|---|
| 222 | Set names = Copy( Empty );
|
|---|
| 223 | Set For( 1, Card( all_mat ), Real( Real k ) {
|
|---|
| 224 | Text _n = Name( all_mat[ k ] );
|
|---|
| 225 | Text n = If( _n == "", "unamed", _n );
|
|---|
| 226 | Set Append( names, If( Columns( all_mat[ k ] ) == 1, [[ n ]], {
|
|---|
| 227 | Set For( 1, Columns( all_mat[ k ] ), Text( Real k ) {
|
|---|
| 228 | Text n << "[" << k << "]"
|
|---|
| 229 | } )
|
|---|
| 230 | } ) );
|
|---|
| 231 | Real 1
|
|---|
| 232 | } );
|
|---|
| 233 | Matrix groupMat = BinGroup( "|", all_mat );
|
|---|
| 234 | Text TclChartMatrix( groupMat,
|
|---|
| 235 | SetOfSet (
|
|---|
| 236 | @TclArgSt("-title", "Matrix Chart" ),
|
|---|
| 237 | @TclArgSt("-type" , "2" ),
|
|---|
| 238 | @TclArgSt("-names", TxtListTcl(names) ) ) )
|
|---|
| 239 | }
|
|---|
| 240 | } ]
|
|---|
| 241 | toltcl::eval $tolexpr
|
|---|
| 242 | }
|
|---|
| 243 |
|
|---|
| 244 | proc TolGui_InsertEntriesFromMenuManager { targetMenu selection } {
|
|---|
| 245 | set addrList [ list ]
|
|---|
| 246 | foreach obj_info $selection {
|
|---|
| 247 | set tcl_ref [ lindex $obj_info 0 ]
|
|---|
| 248 | lappend addrList [ ::tol::info address $tcl_ref ]
|
|---|
| 249 | }
|
|---|
| 250 | ::MenuManager::insertEntriesForSelection $targetMenu $addrList
|
|---|
| 251 | }
|
|---|
| 252 |
|
|---|
| 253 | proc TolGui_GetObjMenu { obj_addr } {
|
|---|
| 254 | set try [ catch {
|
|---|
| 255 | tol::console eval [ string map [ list %A $obj_addr ] {
|
|---|
| 256 | GuiTools::@MenuDesc __aux_menu__ = GetObjectFromAddress("%A");
|
|---|
| 257 | Set __gui_menu_entries__ = __aux_menu__::getMenuEntries(?)
|
|---|
| 258 | } ] } msg ]
|
|---|
| 259 | if { $try } {
|
|---|
| 260 | puts "ERROR TolGui_GetObjMenu : $msg"
|
|---|
| 261 | set result ""
|
|---|
| 262 | } else {
|
|---|
| 263 | set result [ TolObj2TclObj {Set __gui_menu_entries__} ]
|
|---|
| 264 | }
|
|---|
| 265 | tol::console stack release __aux_menu__
|
|---|
| 266 | tol::console stack release __gui_menu_entries__
|
|---|
| 267 | set result
|
|---|
| 268 | }
|
|---|
| 269 |
|
|---|
| 270 | proc TolGui_InvokeMethod { method obj_addr } {
|
|---|
| 271 | #puts "TolGui_InvokeMethod $method $obj_addr"
|
|---|
| 272 | set try [ catch {
|
|---|
| 273 | tol::console eval [ string map [ list %A $obj_addr %M $method ] {
|
|---|
| 274 | NameBlock __aux_instance__ = GetObjectFromAddress("%A");
|
|---|
| 275 | Real __aux_result__ = __aux_instance__::%M(?)
|
|---|
| 276 | } ] } msg ]
|
|---|
| 277 | if { $try } {
|
|---|
| 278 | puts "ERROR TolGui_InvokeMethod : $msg"
|
|---|
| 279 | }
|
|---|
| 280 | tol::console stack release __aux_instance__
|
|---|
| 281 | tol::console stack release __aux_result__
|
|---|
| 282 | }
|
|---|
| 283 |
|
|---|
| 284 | proc TclList2SetOfText { lst } {
|
|---|
| 285 | set result [ list ]
|
|---|
| 286 | foreach i $lst {
|
|---|
| 287 | lappend result \"[string map {\" \\\"} $i]\"
|
|---|
| 288 | }
|
|---|
| 289 | return "SetOfText([join $result ,])"
|
|---|
| 290 | }
|
|---|
| 291 |
|
|---|
| 292 | proc TolGui_InvokeGroup { cname function group } {
|
|---|
| 293 | set SOA [ TclList2SetOfText $group ]
|
|---|
| 294 | set try [ catch {
|
|---|
| 295 | tol::console eval \
|
|---|
| 296 | [ string map [ list %C $cname %F $function %S $SOA ] {
|
|---|
| 297 | Real __aux_result__ = {
|
|---|
| 298 | Set aux = EvalSet( %S, NameBlock( Text addr ) {
|
|---|
| 299 | NameBlock GetObjectFromAddress( addr )
|
|---|
| 300 | } );
|
|---|
| 301 | Real %C::%F( aux )
|
|---|
| 302 | }
|
|---|
| 303 | } ] } msg ]
|
|---|
| 304 | if { $try } {
|
|---|
| 305 | puts "ERROR TolGui_InvokeGroup : $msg"
|
|---|
| 306 | }
|
|---|
| 307 | tol::console stack release __aux_result__
|
|---|
| 308 | }
|
|---|