Changeset 57e34db in tol for tolbase/lib


Ignore:
Timestamp:
Mar 24, 2010, 10:37:02 PM (17 years ago)
Author:
Jorge Pérez <josp.jorge@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
320d511
Parents:
03885938
Message:

closes #885, un elemento de menu retornado por getMenuEntries sigue la
siguiente estructura:

  [[ "Option Label", "Instance_Method", "Group_Method" ]]

donde:

"Option Label" es la etiqueta que se muestra en el menu

"Instance_Method" es el nombre del metodo de instancia que se invoca

al seleccionar la opcion de menu.

"Group_Method" es el nombre de metodo estatico que se invoca cuando

se aplica la opcion de menu sobre una seleccion
multiple. Este valor es opcional.

por ejemplo las variables de MMS implementan el el metodo:

   Set getMenuEntries(Real void) {
    Set [[ [[ "Chart", "Chart", "ChartGroup" ]] ]]
   }

y las clases derivadas deben implementar el metodo de instancia Chart
y el metodo Static ChartGroup con el siguiente prototipo:

  Real Chart( Real void )

  Static Real ChartGroup( Set instances )

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tolbase/lib/toltk/tolinspe.tcl

    r03885938 r57e34db  
    18281828proc Tol_ObjIsClassOf { obj_addr cls_name } {
    18291829  tol::console eval [ string map [ list %A $obj_addr %C $cls_name ] {
    1830     Real __gui_check__ = IsInstanceOf(GetObjectFromAddress("%A"),"%C")
     1830    Real __gui_check__ = IsInstanceOf( GetObjectFromAddress( "%A" ),"%C" )
    18311831  } ]
    18321832  set info [ tol::info variable {Real __gui_check__} ]
    … …  
    18361836}
    18371837
    1838 proc TolGui_GetMenuEntries { obj_addr } {
     1838proc Tol_ClassOf { obj_addr } {
     1839  tol::console eval [ string map [ list %A $obj_addr ] {
     1840    Text __gui_classof__ = {
     1841      Anything obj = GetObjectFromAddress( "%A" );
     1842      // WriteLn( "Tol_ClassOf " << Grammar( obj ) );
     1843      Text If( Grammar( obj ) == "NameBlock", ClassOf( obj ), "" )
     1844    }
     1845  } ]
     1846  set info [ tol::info variable {Text __gui_classof__} ]
     1847  set x [ string trim [ lindex $info 2 ]  \" ]
     1848  tol::console stack release __gui_classof__
     1849  set x
     1850}
     1851
     1852proc TolGui_GetMenuEntries { selection idx } {
     1853  array set instances {}
     1854  array set menu_class {}
     1855  set i 0
     1856  foreach obj_info $selection {
     1857    set tcl_ref [ lindex $obj_info 0 ]
     1858    set obj_addr [ ::tol::info address $tcl_ref ]
     1859    set class [ Tol_ClassOf $obj_addr ]
     1860    if { $class ne "" } {
     1861      lappend instances($class) $obj_addr
     1862      set name_inst [ lindex $obj_info 1 ]
     1863      set menu_items [ TolGui_GetObjMenu $obj_addr ]
     1864      # esto hace que estemos guardando la ultima instancia, asumimos
     1865      # tambien que todas las instancia tienen la misma espcificacion
     1866      # de menu
     1867      if { ![ llength [ array names menu_class $class ] ] || $i == $idx } {
     1868        set menu_class($class) \
     1869            [ list $name_inst $obj_addr $menu_items ]
     1870      }
     1871    }
     1872    incr i
     1873  }
     1874  set menu_info [ list ]
     1875  foreach c [ array names instances ] {
     1876      lappend menu_info [ list $c $menu_class($c) $instances($c) ]
     1877  }
     1878  set menu_info
     1879}
     1880
     1881proc TolGui_GetObjMenu { obj_addr } {
    18391882  set try [ catch {
    18401883    tol::console eval [ string map [ list %A $obj_addr ] {
    … …  
    18531896}
    18541897
    1855 proc TolGui_InvokeMethod { obj_addr method } {
     1898proc TolGui_InvokeMethod { method obj_addr } {
    18561899  set try [ catch {
    18571900    tol::console eval [ string map [ list %A $obj_addr %M $method ] {
    … …  
    18661909}
    18671910
     1911proc TclList2SetOfText { lst } {
     1912  set result [ list ]
     1913  foreach i $lst {
     1914    lappend result \"$i\"
     1915  }
     1916  return "SetOfText([join $result ,])"
     1917}
     1918
     1919proc TolGui_InvokeGroup { cname function group } {
     1920  set SOA [ TclList2SetOfText $group ]
     1921  set try [ catch {
     1922    tol::console eval \
     1923        [ string map [ list %C $cname %F $function %S $SOA ] {
     1924          Real __aux_result__ = %C::%F( %S )
     1925        } ] } msg ]
     1926  if { $try } {
     1927    puts "ERROR TolGui_InvokeGroup : $msg"
     1928  }
     1929  tol::console stack release __aux_result__
     1930}
     1931
    18681932#/////////////////////////////////////////////////////////////////////////////
    18691933proc ::TolInspector::PostVariable { x y } {
    … …  
    19011965  #puts "PostVariable: InRootConsole,InRootPool,InRootFiles = $InRootConsole,$InRootPool,$InRootFiles"
    19021966  set node_act [$ht_vars index current]
    1903   if { [string length $node_act] } {     
     1967  if { [string length $node_act] } {
    19041968    set vars_selected [$ht_vars curselection]
    19051969    if { [lsearch $vars_selected $node_act] >= 0 } {
    … …  
    19171981          if {[llength $aryData(Reference)]} {
    19181982            #set object [lindex $aryData(Reference) 0]
    1919                         set object [lrange $aryData(Reference) 0 end]
     1983            set object [lrange $aryData(Reference) 0 end]
    19201984          } else {
    19211985            if { [string length $tolset] } {
    … …  
    20622126            NameBlock {
    20632127              if { [ llength $options_selected(NameBlock) ] } {
    2064                 puts "ooo = $options_selected(NameBlock)"
    2065                 set obj_info [ lindex $options_selected(NameBlock) 0 ]
    2066                 set tcl_ref [ lindex $obj_info 0 ]
    2067                 set obj_addr [ ::tol::info address $tcl_ref ]
    2068                 puts "obj_addr $obj_addr"
    2069                 if { [ Tol_ObjIsClassOf $obj_addr "@MenuDesc" ] } {
    2070                   set entries [ TolGui_GetMenuEntries $obj_addr ]
    2071                   foreach ent $entries {
    2072                     $data_menu(main) add command -label [ lindex $ent 0 ] \
     2128                set idx_current [ lsearch $vars_selected $node_act ]
     2129                foreach mi [ TolGui_GetMenuEntries \
     2130                                 $options_selected(NameBlock) $idx_current ] {
     2131                  set _cname [ lindex $mi 0 ]
     2132                  set cname [ string map [ list @ "" . _ ] $_cname ]
     2133                  foreach { ninst obj_addr entries } [ lindex $mi 1 ] break
     2134                  set instances [ lindex $mi 2 ]
     2135                  # creo el menu de la clase si no existe
     2136                  set mclass $data_menu(main).cls$cname
     2137                  if { ![ winfo exists $mclass ] } {
     2138                    menu $data_menu(main).cls$cname -tearoff 0
     2139                  } else {
     2140                    $mclass delete 0 end
     2141                  }
     2142                  $data_menu(main) add cascade -label $cname -menu $mclass
     2143                  foreach inst_entry $entries {
     2144                    foreach { label single group } $inst_entry break
     2145                    $mclass add command -label "$label $ninst" \
    20732146                        -command [ list TolGui_InvokeMethod \
    2074                                        $obj_addr  [ lindex $ent 1 ] ]
     2147                                       $single $obj_addr ]
     2148                    if { $group ne "" && [ llength $instances ] > 1 } {
     2149                      # hay una funcion que se aplica a toda la seleccion
     2150                      $mclass add command -label "$label All" \
     2151                          -command [ list TolGui_InvokeGroup \
     2152                                         $_cname $group $instances ]
     2153                    }
    20752154                  }
    20762155                }
Note: See TracChangeset for help on using the changeset viewer.