Showing posts from 2017

Last Post for 2017!

A lot of work has been done on the development sources over the past month.  Most are the addition of extra functionality to the existing widget set along with a few internal bug fixes.

Here looking forward to 2018!

    Added three macro-like commands used for testing the existence of
        proceedures and variables: __DEF_PROC__, __DEF_VAR__ and __DEF_GLOBAL__
        o changed command onSelectionChanged to selectionChanged.
        o new option -keys, keywords or tags use in saving off column data.
        o sub-command getFullist has new options, -keys, return list data as ro   
        o Fixed problem of widget failing to return and empty string when cancel button selected.
        o gnocl::winfo geometry has new option, -tagged. This will return geometry as a tagged list.
            eg: puts [gnocl::winfo geometry $wid -tagged] returns:
            x val y val w val h val
            This option simplifies up v…

Recent Changes, to the sources

Latest Nightly build now available from SourceForge. Lots of work done over the past 6 weeks, and here's the gist from the project NEWS.

        o    added -min, -max
        o    appending row to image columntype now supports %& percent-string (icon-theme).
        o    -image options now supports %& (icon-theme) percent string.
        o    -icon options now supports %& (icon-theme) percent string.
        o    -iconSize, set size of icon, default = 22.
        o drag and drop between itemgroups now works. Unecessary options removed.
        o     new command, allow the creation and manipulation of filters for use in recent menus, dialogs and widgets.
        o    added commands pack, remove.
        o    tab tearoff now fully supported, closing tearing window restores tabs to original notebook.

September News

The codebase is currently undergoing a deep clean-up with a number of internal modifications and enhancements to largely yet unannounced features.

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.

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.

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

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.

    gnocl::tree, gnocl::list
        o cget -types now works.
        o FIXED: crashing when getFullList called on model with 0 rows.
        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.
        o added -onButtonPress and -onButtonRelease
        o added getSelectionBounds for consistency with the text widget       
        o menuButton -icon can now be reconfigured.
        o FIXED: problems with serialize/deserialize, now tests for valid filename.
        o added -baseColor
        o added -orientation -leftMargin -rightMargin -margins -paragraphSpacing -lineSpacing -justify
        o new commands getSelection

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…

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 }]

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.

        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]
                for {set i 0} {$i<=$max} {incr i} {
                    # do something...
                    ent progress
        o search command can now accurately set multiple tags. Unknown tags with result in a Gtk Warning.
    Reducing number…

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.

    Gnocl generated internal debug warnings to stdout are now colour formatted to distinguish them from Gtk+ warnings and Tcl error codes.
        o Clock details, i.e, fingers and digits, now automatically resize.
        -tabs option now allows full tablist for both the widget and individual tags.

February Code Developments

The following contains a summary of the modifications to the main module code.  All updates available from the SourceForge in the nightly build.

        o added options -value, -variable, -digits
        o added commands get, set, cget
    -foreground and -background option can now take 2 values, namely state and color,
        where state is one of "normal", "active", "prelight", "selected" or "insensitive".
        If only the colour is specified, then the default state of "normal" is assumed.
        e.g. -background [list insensitive black]
        o fixed memory allocation problem with lorem sub-command.
        o added -insensitiveColor option, allow objects to blend into background.

Gnocl Dial Widget Enhancements

The existing dial widget is a straight implementation from the Gtk tutorial docs. Whilst it was possible to create an instance using the gnocl::dial command it wasn't  much use. Apart from wiggling the mouse pointer around it didn't offer any way of setting or getting a value within a script, nor did it enable the user to set a variable trace. Added to this, the graphics were pretty grim as it relied upon gtk paint operations.

Over the weekend I took a look at what could be done with the existing code. After a bit of work it offers much more. The graphics are rendered in Cairo and so look good and the displayed value can be set and retrieved.

Not all the changes have been in the gnocl dial sources, some tweaking has taken place in the GtkDial.c source too. The next step is to provide some controls over the colouration of the widget, and setting the range limits much like those of the scale command.

Recent Changes - January 2017

The past month has seen focus placed upon tidying up some features working around GdkPixbuf support, work which I expect will continue well into February. The functionality examined seeks to address the creation of  graphics for use in applications documentation so that, for instance, in developing documentation for Gnocl itself, the interpreter will return lists of widget options and sub-commands along with screenshots of widget and windows in operation.

As can also seen from the change list below, a new file option '~' has been implemented. When Tcl scripts are 'wrapped' using FreeWrap or TclKit, Gtk api calls cannot directly access files within the VFS (which is transparent to Tcl itself). This functionality is achieved by first extracting files to the /tmp directory a location outside the VFS, from where they then can be accessed.

        o new commands paste, snapshot, windowshot.
        o get drawAble
        o bug fixed in composite

December 2016 Changes

A summary of the past months changes to the gnocl core module. These enhancements offer a extra means of fine-tuning the appearance of gnocl base applications.

New commands:
        o gnocl::property, set and override application wide settings.
        o gnocl::data, set and get additional widget data associations.
        o added -widthGroup
        o added options -normalBackgroundColor and -prelightBackgroundColor
    New command gnocl::license, returns configurable BDS style licence for use with Gnocl or Gnocl derived projects.
        o beep sub-command functionality restored.
    New convenience widget: gnocl::labelWidget, much like gnocl::labelEntry and gnocl::labelText, useful for creating dialogs.
    Note, labelWidget can only contain one child, which is destroyed if replaced.

Please contact me directly if you want a of the current 64-bit build.

Now that the new year in underway the focus of attention has moved to address…