Friday, February 02, 2018

From first glance at the clip from the latest news it might appear that little has on the Gnocl coding front. Not really, a long-standing issue with the toolbar was fixed along with some extra new options, keywords and commands for the text widget. The latest downloads of course, still available from Sourceforge.

        o problem with setting -styles now fixed
        o new option -margins.
            Convenience function to set margins and paragraph spacings in pixels.
            Give list as left, right, above, below.
            o new sub-commands: gotoNextWord, gotoPreviousWord
            o gotoWordStart, gotoWordEnd, gotoNextWord, and gotoPreviousWord all return new cursor position.       
              these take optional "row col" argument otherwise works from current cursor position.   

Sunday, December 31, 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 value setting from using list of scan operations by using arrays or dicts.
            array set geometry [gnocl::winfo geometry $wid -tagged]
        o new command, remove
        o new command, returns tagged list of attributes from font description string.
        o new sub-command: resolution
    gnoclk::labelEdit, gnocl::labelText, gnocl::labelWidget
        o new options: -visible
        o new options: -visible, -widgetWidthGroup
        o new options: -onFocusIn, -OnFocusOut, -innerBorder, -heightRequest
        o additional substitution strings %t, %p.
        o added "remove" command
        o added "remove" command
        o new command, activate
        o %t, %p and %c added to -onActivate callback substitution strings
        o added option -tooltip
        o new options, -variable and -textVariable
            Module re-written to creat parameters file for the widget creation.
        o added %x, %y, %w and %h subsitution strings.
        o added -x, -y, -width and -height options.
        o added -onFileSet and -onSelectionChanged.
            -onFileSet, new substitution string, %f, current file/folder path, responds to dialog.
            -onSelectonChanged, responds to selections from popup-menu, %c %d %f %u %w   

Thursday, November 30, 2017

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.
            tearoff window closes when last tab removed.
        o    added -detachable, -reorderable, and -enablePopup.
        o    will now close without setting -onResponse option.
        o    added -action and -content (same as -child).
        o    problems with -icon fixed.
        o    added gnocl::message as synonym for gnocl::messageDialog.
        o    module source renamed from msgDialog.c to message.c
    gnocl::radioButton, gnocl::menuRadioItem
        o    added %g substitution implemented in callback
        o    clash between markup and percept mnemonics resolved, markup removed for %_ strings.
        o    -radio, choose between button or tick (default).
        o    onToggled renamed to toggle, now works correctly
        o    %g substitution implemented in callback.
        o    %g substitution implemented in callback.
        o    new sub-command, primary.
        o     completed code for addBegin and addEnd
            although may prove of limited value in scripts, the following commands have been added:
            deactivate, itemActivate, select, reposition, get
    Widget subcommands "options" and "commands" removed from all objects. Use gnocl:: options|commands.
        o    module completely revised, commands not permissible while dialog running.
        o    added options: -data, -name, -tooltip, -widthRequest, -heightRequest and -onClicked
        o    BUG FIX: -tooltip option no longer requires setting when adding icons.
            configure sub-command now works properly
            -selectionMode fully implemented
            NEW COMMANDS: get, select, getSelection
        Module tidied up, ineffectual calls to Gtk api removed.
        Available options are:
        -child, -type, -buttons, -actionWisdgets, -data, -onResponse, -onShowHelp,
        -visible, -sensitive, -name, -heightRequest, -widthRequest, -tooltip

Saturday, October 07, 2017

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.

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.

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