The codebase is currently undergoing a deep clean-up with a number of internal modifications and enhancements to largely yet unannounced features.
2017-09:
o added gnocl::widgets, returns a list of available widget classes.
gnocl::commands will now return only a list of non-widget creating commands.
o commands and options calls to widgets will return lists of relevant options, without creating object instance.
e.g. puts [gnocl::button options] ; puts [gnocl::button commands]
More complex widget such as gnocl::text with sub-object may have more options, e.g: [puts [gnocl::text tagOptions].
o gnocl::commands will now return only a list of non-widget creating commands.
o gnocl::info new sub-commands:
cursors returns list of available cursors, and
subStrings returns list of callback substitution string and their meanings.
Saturday, October 07, 2017
Thursday, August 24, 2017
Displaying Tcl dict contents in a gnocl::list widget
The following script shows how to display the contents of a simple Tcl dict within a gnocl::list widget.
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
package require Gnocl
namespace eval pkg {}
#---------------
# Create a gnocl::list displaying the contents of a Tcl dict.
#---------------
# Arguments:
# val dict data to display.
# args
# Returns:
# wid of gnocl::list containing the dict data.
#
proc pkg::dict2list { vals } {
set res ""
# get a complete list of info keys
set c key
dict for {id info} $vals {
foreach {a b} $info {
if { [string first $a $c] == -1 } { lappend c $a }
}
}
set headings [lsort -unique $c]
set res [gnocl::list -titles $c]
# populate the list
dict for {id info} $vals {
set row2 [string repeat "{} " [llength $c]]
set row2 [lreplace $row2 0 0 $id]
foreach {a b} $info {
set d [lsearch $c $a]
set row2 [lreplace $row2 $d $d $b]
}
$res add [list $row2]
set row ""
}
return $res
}
#---------------
# Add a new column to an existing list or tree
# Create new widget, add data and insert into parent container.
#---------------
# Arguments:
# wid gnocl::list/gnocl::tree to modify
# title title for new column
# type data type
# Returns:
# wid widget id of replacement object
#
proc pkg::addColumn { wid title type } {
set titles [$wid cget -titles]
set types [$wid cget -types]
set data [$wid getFullList]
lappend titles $title
lappend types $type
set parent [gnocl::winfo parent $wid]
$wid delete
set wid [gnocl::list -titles $titles -types $types]
$wid add $data
$parent configure -child $wid
return $wid
}
#---------------
# Script Main Function
#---------------
# Arguments:
# args
# Returns:
# none
#
proc main { args } {
dict set employeeInfo 12345-A forenames "Joe"
dict set employeeInfo 12345-A surname "Schmoe"
dict set employeeInfo 12345-A street "147 Short Street"
dict set employeeInfo 12345-A city "Springfield"
dict set employeeInfo 12345-A phone "555-1234"
dict set employeeInfo 98372-J forenames "Anne"
dict set employeeInfo 98372-J surname "Other"
dict set employeeInfo 98372-J street "32995 Oakdale Way"
dict set employeeInfo 98372-J city "Springfield"
dict set employeeInfo 98372-J phone "555-8765"
set lst [pkg::dict2list $employeeInfo]
gnocl::window -child $lst -setSize 0.25 -width 800 -y 500 -x 100
# add an extra column to the list
set lst [pkg::addColumn $lst email string]
}
main
Recent Changes
Just a few additions and enhancements to the 0.9.96 code over the past couple of months. Latest sources available at Sourceforge.
2017-08:
gnocl::tree, gnocl::list
o cget -types now works.
o FIXED: crashing when getFullList called on model with 0 rows.
gnocl::text
o -onPopulatePopup Substitution options %r, %c and %t changed to %R(ow), %C(olumn) and %T(ags),
and %t reallocated to return id of widget toplevel window.
2017-07:
gnocl::entry
o added -onButtonPress and -onButtonRelease
o added getSelectionBounds for consistency with the text widget
gnocl::toolBar
o menuButton -icon can now be reconfigured.
gnocl::text
o FIXED: problems with serialize/deserialize, now tests for valid filename.
gnocl::comboEntry
o added -baseColor
2017-06:
gnocl::labelText
o added -orientation -leftMargin -rightMargin -margins -paragraphSpacing -lineSpacing -justify
o new commands getSelection
gnocl::text
o set -wrapMode default to word.
gnocl::statusBar
o added -baseFont
2017-05:
gnocl::tree, gnocl::list
o added %S to -onButtonRelease and -onButtonPress substitutions strings, returns a list of the selected items
gnocl::pixbuf
o new load option, -data, will create pixbufs from inline xpm data, e.g. menu icons.
gnocl::notebook
o -onFocusOut handler, now supports %g %p %t %w %D substitution strings. Where 'D' is direction.
gnocl::eventBox, gnocl::fixed and gnocl::window
o completed support for the -onAdd and -onRemove events, ie. adding or removing child widget to or from a container.
gnocl::image
o new options -scale, -constrain, -constrainWidth, -constrainHeight, -data
2017-08:
gnocl::tree, gnocl::list
o cget -types now works.
o FIXED: crashing when getFullList called on model with 0 rows.
gnocl::text
o -onPopulatePopup Substitution options %r, %c and %t changed to %R(ow), %C(olumn) and %T(ags),
and %t reallocated to return id of widget toplevel window.
2017-07:
gnocl::entry
o added -onButtonPress and -onButtonRelease
o added getSelectionBounds for consistency with the text widget
gnocl::toolBar
o menuButton -icon can now be reconfigured.
gnocl::text
o FIXED: problems with serialize/deserialize, now tests for valid filename.
gnocl::comboEntry
o added -baseColor
2017-06:
gnocl::labelText
o added -orientation -leftMargin -rightMargin -margins -paragraphSpacing -lineSpacing -justify
o new commands getSelection
gnocl::text
o set -wrapMode default to word.
gnocl::statusBar
o added -baseFont
2017-05:
gnocl::tree, gnocl::list
o added %S to -onButtonRelease and -onButtonPress substitutions strings, returns a list of the selected items
gnocl::pixbuf
o new load option, -data, will create pixbufs from inline xpm data, e.g. menu icons.
gnocl::notebook
o -onFocusOut handler, now supports %g %p %t %w %D substitution strings. Where 'D' is direction.
gnocl::eventBox, gnocl::fixed and gnocl::window
o completed support for the -onAdd and -onRemove events, ie. adding or removing child widget to or from a container.
gnocl::image
o new options -scale, -constrain, -constrainWidth, -constrainHeight, -data
Tuesday, May 23, 2017
Gnocl Gtk3+ implementation begun!
Yesterday I made the spot decision to make the move from building Gnocl against the Gtk2+ libraries to Gtk3+. At the end of the day I got the bulk of the gnocl::window module running. This doesn't mean that the conversion process will be an easy journey, it won't. The current build of Gnocl has evolved over the years and contains many legacy calls to widgets, functions, structures and macros not longer supported in Gtk3+. The immediate effect is that much of the 'glitzy' stuff working on pixmaps no longer work. Its all a question of time!
This doesn't mean that the Gtk2+ distribution will be forgotten, it still forms the backbone of the project and will be supported till most the the conversion work has been done.
One of the greatest challenges is the lack of suitable documentation. For Gtk2+ there was always Krause's excellent book, but now the emphasis would appear to be upon creating chunks of builder xml code and embedding these as strings into C-sourcecode.
It would appear though, that there's always more than one way to skin a cat, and, getting the initial 'application' running was not, shall we say, according to the manual. Actually, by working around the rules, it became simpler!
It'll be some time before a first workable, package is released, so until then, wish me luck and straightforward coding!
This doesn't mean that the Gtk2+ distribution will be forgotten, it still forms the backbone of the project and will be supported till most the the conversion work has been done.
One of the greatest challenges is the lack of suitable documentation. For Gtk2+ there was always Krause's excellent book, but now the emphasis would appear to be upon creating chunks of builder xml code and embedding these as strings into C-sourcecode.
It would appear though, that there's always more than one way to skin a cat, and, getting the initial 'application' running was not, shall we say, according to the manual. Actually, by working around the rules, it became simpler!
It'll be some time before a first workable, package is released, so until then, wish me luck and straightforward coding!
Tuesday, May 16, 2017
Creating previews with the File Chooser Dialog
I'm currently doing something of a spring-clean of the source code and noticed that the image and filechoose dialog options really didn't work too well together in order to create previews. So, the modifications to the current nightly build will allow scaling and constraints on image dimensions without the need for lengthy, and potentially cycle consuming Tcl scripting.
Here's a code snippet...
set pv(1) [gnocl::image ]
set fname [gnocl::fileChooserDialog \ -previewWidget $pv(1) \
-onFileSelectionChanged { $pv(1) configure -image %/%f -constrainWidth 200 }]
Tuesday, May 09, 2017
April Update
Its a little later than anticipated, but here's news of changes to the gnocl package options implented during April. As always, get the latest sources from SourceForge.
2017-04:
gnocl::entry
o progress now works more efficiently, i.e.
wid progress 0.75 ;# set progress bar fraction to 0.75
wid progress ;# increment an barlength as an ongoing progress
In the second example, the options -range and -progressSteps must be set.
gnocl::entry -name ent -value ABCDEF -progressSteps $d -range $max
gnocl::vBox -name container
container add [ent]
gnocl::window -child [container]
gnocl::update
for {set i 0} {$i<=$max} {incr i} {
# do something...
ent progress
}
gnocl::text
o search command can now accurately set multiple tags. Unknown tags with result in a Gtk Warning.
Reducing number of internal Gtk warnings written to stdout. Largely arising from invalid cast in setting widget pointers in shared command functions.
2017-04:
gnocl::entry
o progress now works more efficiently, i.e.
wid progress 0.75 ;# set progress bar fraction to 0.75
wid progress ;# increment an barlength as an ongoing progress
In the second example, the options -range and -progressSteps must be set.
gnocl::entry -name ent -value ABCDEF -progressSteps $d -range $max
gnocl::vBox -name container
container add [ent]
gnocl::window -child [container]
gnocl::update
for {set i 0} {$i<=$max} {incr i} {
# do something...
ent progress
}
gnocl::text
o search command can now accurately set multiple tags. Unknown tags with result in a Gtk Warning.
Reducing number of internal Gtk warnings written to stdout. Largely arising from invalid cast in setting widget pointers in shared command functions.
Sunday, April 02, 2017
Update News
At the moment Gnocl is producing the occasional Gtk Warning, largely due to incorrect typecasting in shared widget commands. For small application this may not prove an issue but in larger, more complex application, the number of warnings (typically repeats of the same warnings) can be distracting. So, the effort over April will be to reduce these as much as possible. Although a lot of work has been done internally, the most apparent changes are relatively few.
As always, check the nightly build page for latest update.
2017-03:
Gnocl generated internal debug warnings to stdout are now colour formatted to distinguish them from Gtk+ warnings and Tcl error codes.
gnocl::clock
o Clock details, i.e, fingers and digits, now automatically resize.
gnocl::text
-tabs option now allows full tablist for both the widget and individual tags.
As always, check the nightly build page for latest update.
2017-03:
Gnocl generated internal debug warnings to stdout are now colour formatted to distinguish them from Gtk+ warnings and Tcl error codes.
gnocl::clock
o Clock details, i.e, fingers and digits, now automatically resize.
gnocl::text
-tabs option now allows full tablist for both the widget and individual tags.
Subscribe to:
Posts (Atom)
-
Given this module some attention today. Added some of the more package wide options to the module and created customised handler for settin...
-
Over the past few programming sessions I've been working on producing a central point, a dashboard, around which it's possible to se...
-
Spent some time today creating some simple howto-tutorials on creating standalone Tcl/Gnocl applications using freewrap. The process is almo...