Saturday, November 09, 2013

gnocl::tree & gnocl::list -highlighting columns

Its possible to use Ctrl-F to launch an interactive search of entries contained within a tree or list view. Prior to any search, however, the column needs to be preselected. This mornings coding session has fixed a couple of issues within the gnocl core modules to enable this process to be done interactively under Tcl control. A single click on a cell in an view can now result in the column being preselected and highlighted. The following example script shows how its done. Get the nightly build for all the updates.

# test-me.tcl
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

package require Gnocl

set chn2indic:mappings(conjuncts) {
阿呵 āha
阿訶 āha
爍鉢 śva
悉吉利 skri
室佛 śva
地利 dhri
穆帝 mukta
佛囉 pra
帝利 tre
}

#---------------
# view and edit specific lists
#---------------
#
proc chn2indix:view:call_back {w c} {
    set last [$w cget -searchColumn]
    $w columnConfigure $last -background white
    $w columnConfigure $c -background grey
    $w configure -searchColumn $c

    # force window refresh, Gtk+ has some internal issues here!
    if {$last != $c} {
        [gnocl::winfo toplevel $w ] grabFocus
    }
}


#---------------
# view and edit specific lists
#---------------
#
proc chn2indix:view { set } {

    global chn2indic:mappings

    set vbox [gnocl::vBox]
    set tbar [gnocl::toolBar]
    set lst [gnocl::list -types {string string} -baseFont {Sans 14} -data {0} ]
    set hbox [gnocl::hBox ]
    set but(1) [gnocl::button -text Accept]
    set but(2) [gnocl::button -text Cancel]
    set stat [gnocl::statusBar]

    # add toolbar widgets
    $tbar add item -text "%#New"

    $lst columnConfigure 1 -editable 1 -background grey
    $lst configure -onSelectionChanged {puts "%p"} -searchColumn 1
   
    # atttempt to highlight selected column   
    $lst configure -onButtonRelease {
        set col [lindex [%w coordsToPath %x %y] 1]
        chn2indix:view:call_back %w $col
     
    }

    $vbox add $tbar  -fill {1 0} -expand 0
    $vbox add $lst -fill {1 1} -expand 1
    $hbox add $but(2) -align right -fill {0 1} -expand 0
    $hbox add $but(1) -align right -fill {0 1} -expand 0
    $vbox add $hbox -fill {1 0} -expand 0 -align right
    $vbox add $stat -fill {1 0} -expand 0

    # populate the list
    set i 0
    foreach {a b} [set chn2indic:mappings($set) ] {
        $lst add [list $a $b] -singleRow 1
        incr i
    }

    $stat push "$i items in the current list."

gnocl::window -child $vbox -width 200 -height 400 -x 950 -y 200

}

chn2indix:view conjuncts



No comments: