Skip to main content

gnocl::text and the new gnocl::textBuffer object

Yesterday was a day mixed with annoyances - a whole pile of them and the coding was no exception. Next time, make sure the documentation referred to matches the version of installed on your system! I wasted a good couple of hours trying to implement support for the GtkTexBuffer "paste-done" event but no matter how I checked and re-wrote the code it would stil crash my scripts!!!! Why? This signal is implemented since Version 2.15 and I have version 2.14 installed! That's what happens when one fails to check which set of docs are bookmarked in the browser. Ok, I've just commented out the relevant code for now, just until I upgrade to Gtk+ 2.19 or whatever its up to now!
Today, however, I thought that I'd take a look at implementing a new module, gnocl::textBuffer using the prototype gnocl::assistant module builder mentioned earlier in this blog. Worked a treat, only needed a couple of tweeks and its working well.
This new module enables the script to create multiple text buffers to be created and registered with the interpreter. Nice! This value of this lies in decluttering the UI. Different docs currently open for editing can be accessed through a menu rather than using tabs or new edit windows. Really nice stuff. This has also required th addition of a new gnocl::text option '-buffer' which enables the script to interactively switch between buffers. This script shows how it works.

#---------------
# 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

And here's a snapshot:



Reblog this post [with Zemanta]

Comments

Popular posts from this blog

gnocl::calendar

Given this module some attention today. Added some of the more package wide options to the module and created customised handler for setting the month. (For some odd reason months are are counted 0-11 whereas days are 1-31.) There's still a little more to do to this one including the addition of code to store diary details. Here's the working test script to show the range of options at work. The percentage substitution string item %e explores something that I've been toying with, the name of the signal/event that initiated the call. Ok, a script can keep its own internal trace but who knows, it might prove useful. #--------------- # calendarTest.tcl #--------------- # Author:   William J Giddings # Date:     07/05/09 #--------------- #!/bin/sh # the next line restarts using tclsh \ exec tclsh "$0" "$@" #--------------- package require Gnocl set cal [gnocl::calendar] $cal configure -day 8 -month 7 -year 1956 $cal configure -rowHeight 1 -colWidth 1 $ca

Gnocl Dashboard

Over the past few programming sessions I've been working on producing a central point, a dashboard, around which it's possible to see the various Gnocl widgets and commands in operation. In many ways like the demo script which shipped with the earlier releases of Gnocl but offers much more. The introspection functionality provides details of the various options and sub-commands of each Gnocl procedure which are displayed under the associated tab. Sample scripts are included for each item which offers newcomers a clearer insight into how make the most of what's on offer.

Simple Runtime Debugging Message Dialog

At times it's useful to see what values variables hold, or offer some pause point before the code goes elsewhere before causing havoc. Its possible to write output to the terminal but this can get lost in copious forms of other outputs, besides, there's no pausing the script execution either. The following proc creates a custom dialog which displays ad message along with the point in the calling script from which it was invoked. ## simple runtime debugging feedback dialog, alternative to console based gnocl::msg # @param msg message to display # @returns none # proc xxx::msg {txt} { set frame [info frame -1] append msg "Message:\n\n" append msg " $txt \n\n\n" append msg "Called from:\n\n" append msg "Proc:\t[lindex [info level -1] 0]\n" append msg "File:\t[file tail [dict get $frame file]]\n" append msg "Line:\t[dict get $frame line]\n" gnocl::dialog \ -type info \ -text $msg