source: tol/tolbase/lib/toltk/tolinspe__tolgui.tcl @ 7a3f24e

1941-docker-image-to-testdevel
Last change on this file since 7a3f24e was 7a3f24e, checked in by Pedro Gea <pgea@…>, 10 years ago

Refs #1933
Se separa el archivo tolinspe.tcl en 5 partes:

+ main: parte principal y algunas funciones generales)
+ wtree1: funciones dependientes de los widgets de árbol (parte 1)
+ wtree2: funciones dependientes de los widgets de árbol (parte 2)
+ draw: funciones para representar objetos TOL (tabular, graficar, etc.)
+ tolgui: otras funciones fuera del namespace ::TolInpector

Se actualizan las nuevas ubicaciones en tclIndex.

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@7332 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 9.8 KB
Line 
1
2proc 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
19proc 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
29proc 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
43proc Tol_ClassOfFromReference { objReference } {
44  set addr [ ::tol::info address $objReference ]
45  return [ Tol_ClassOf $addr ]
46}
47
48proc 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
59proc 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
72proc 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
87proc 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
93proc 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
108proc Tol_InstanceContentFromReference { objReference } {
109  set addr [ ::tol::info address $objReference ]
110  return [ Tol_InstanceContent $addr ]
111}
112
113proc 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
144proc 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
158proc 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
181proc 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
210proc 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
244proc 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
253proc 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
270proc 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
284proc TclList2SetOfText { lst } {
285  set result [ list ]
286  foreach i $lst {
287    lappend result \"[string map {\" \\\"} $i]\"
288  }
289  return "SetOfText([join $result ,])"
290}
291
292proc 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}
Note: See TracBrowser for help on using the repository browser.