Changeset b3da993 in tol


Ignore:
Timestamp:
Aug 3, 2010, 11:35:16 AM (16 years ago)
Author:
Jorge Pérez <josp.jorge@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
228e337
Parents:
f4034c80
Message:

refs #943, se ha implementado una funcion de ordenamiento de entries que tiene en cuenta el orden de los submenues.

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

File:
1 edited

Legend:

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

    rf4034c80 rb3da993  
    202202}
    203203
     204proc ::MenuManager::compareMenuEntries { entry1 entry2 } {
     205  # cache del rank de las entries, se pide a TOL solo una vez por
     206  # ordenamiento
     207  variable entriesRank
     208
     209  set name1 [ lindex $entry1 0 ]
     210  set name2 [ lindex $entry2 0 ]
     211  set path1 [ lrange [ split $name1 "/" ] 0 end-1 ]
     212  set path2 [ lrange [ split $name2 "/" ] 0 end-1 ]
     213  set submenu1 ""
     214  set submenu2 ""
     215  foreach subm1 $path1 subm2 $path2 {
     216    if { $subm1 eq "" } {
     217      # path1 es mas corto que path2, la parte comun es igual, asumo
     218      # que es <
     219      return -1
     220    }
     221    if { $subm2 eq "" } {
     222      # path2 es mas corto que path2, la parte comun es igual, asumo
     223      # que es >
     224      return 1
     225    }
     226    append submenu1 [ expr { $submenu1 eq "" ? "" : "/" } ] $subm1
     227    append submenu2 [ expr { $submenu2 eq "" ? "" : "/" } ] $subm2
     228    if { ![ info exist entriesRank($submenu1) ] } {
     229      set submenuInfo [ getLabelInfoForEntry $submenu1 ]
     230      set entriesRank($submenu1,rank) [ lindex $submenuInfo 4 ]
     231    }
     232    if { ![ info exist entriesRank($submenu2) ] } {
     233      set submenuInfo [ getLabelInfoForEntry $submenu2 ]
     234      set entriesRank($submenu2,rank) [ lindex $submenuInfo 4 ]
     235    }
     236    set cmp \
     237        [ expr { $entriesRank($submenu1,rank) - $entriesRank($submenu2,rank) } ]
     238    if { $cmp != 0 } {
     239      return $cmp
     240    }
     241  }
     242  # hasta este punto los caminos son iguales hay que usar el rank de la entry
     243  return [ expr { [ lindex $entry1 4 ] - [ lindex $entry2 4 ] } ]
     244}
     245
    204246proc ::MenuManager::insertEntries { menuWidget objSelection entriesInfo } {
     247  variable entriesRank
     248
    205249  set multiple [ expr { [ llength $objSelection ] > 1 } ]
    206250  # inserto las entries segun el orden inducido por el campo rank
    207251  if { [ llength [ lindex $entriesInfo 0 ] ] > 4 } {
    208252    # rank aparecio en la version 2.2 de GuiTools
    209     set sortedEntriesInfo [ lsort -real -index 4 $entriesInfo ]
     253    array unset entriesRank
     254
     255    #set sortedEntriesInfo [ lsort -real -index 4 $entriesInfo ]
     256    set sortedEntriesInfo [ lsort \
     257                                -command ::MenuManager::compareMenuEntries \
     258                                $entriesInfo ]
    210259  } else {
    211260    # se asume rank 0 para todos, el orden no cambia
Note: See TracChangeset for help on using the changeset viewer.