WJG (16/Jan/10) Whilst Gnocl has pretty good support for the core widget set, there's a lots of really useful untapped functionality lurking around in the basic libraries to capture the imagination. For the last couple of hours I've extended the capability of the gnocl::text widget to support the display of one of number of textbuffers created as unique GtkObjects using the new gnocl::textBuffer command. The following script from Gnocl demo repository illustrates its use. Those looking at the code will notice the the gnocl:;text itself has a new option '-text'. This allows some plain text to be displayed as part of the initiazation string.
#--------------- # test-text-buffer.tcl #--------------- # William J Giddings # 16/Jan/2010 #--------------- #!/bin/sh # the next line restarts using tclsh \ exec tclsh "$0" "$@" #--------------- package require Gnocl set box1 [gnocl::box -orientation vertical] set box2 [gnocl::box ] $box1 add $box2 set txt [gnocl::text \ -baseFont {Sans 14} \ -editable no \ -text "Come to me in the silence of the night\nChristina Rossetti (1830-1894)" \ -scrollbar always] foreach {i j} {0 Title 1 Verse-1 2 Verse-2 3 Verse-3} { set rad($i) [gnocl::radioButton \ -text $j \ -variable buff \ -onValue $i] $rad($i) configure -onToggled { $txt configure -buffer $tbuf($buff) } $box2 add [set rad($i)] } $box1 add $txt -fill {1 1} -expand 1 gnocl::window -child $box1 -defaultWidth 480 -defaultHeight 240 -onDestroy {exit} set verse(0) [$txt get start end] set verse(1) {Come to me in the silence of the night; Come to me in the speaking silence of a dream; Come with soft rounded cheeks and eyes as bright As sunlight on a stream; Come back in tears, O memory, hope, love of finished years.} set verse(2) {O dream how sweet, too sweet, too bitter sweet, Whose wakening should have been in Paradise, Where souls brimfull of love abide and meet; Where thirsting longing eyes Watch the slow door That opening, letting in, lets out no more.} set verse(3) {Yet come to me in dreams that I may live My very life again cold in death: Come back to me in dreams, that I may give Pulse for pulse, breath for breath: Speak low, lean low, As long ago. my love, how long ago.} set tbuf(0) [gnocl::textBuffer -text $verse(0)] set tbuf(1) [gnocl::textBuffer -text $verse(1)] set tbuf(2) [gnocl::textBuffer -text $verse(2)] set tbuf(3) [gnocl::textBuffer -text $verse(3)] gnocl::mainLoop
Here's the customary screenshot: