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!


2017-12:
    Added three macro-like commands used for testing the existence of
        proceedures and variables: __DEF_PROC__, __DEF_VAR__ and __DEF_GLOBAL__
    gnocl::tree/list
        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   
    gnocl::fileChooserDialog
        o Fixed problem of widget failing to return and empty string when cancel button selected.
    gnocl::winfo
        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.
            eg:
            array set geometry [gnocl::winfo geometry $wid -tagged]
    gnocl::frame
        o new command, remove
    gnocl::font
        o new command, returns tagged list of attributes from font description string.
    gnocl::screen
        o new sub-command: resolution
    gnoclk::labelEdit, gnocl::labelText, gnocl::labelWidget
        o new options: -visible
    gnocl::labelWidget
        o new options: -visible, -widgetWidthGroup
    gnocl::labelEntry
        o new options: -onFocusIn, -OnFocusOut, -innerBorder, -heightRequest
    -onExpose
        o additional substitution strings %t, %p.
    gnocl::window
        o added "remove" command
    gnocl::expander
        o added "remove" command
        o new command, activate
        o %t, %p and %c added to -onActivate callback substitution strings
        o added option -tooltip
    gnocl::progressBar
        o new options, -variable and -textVariable
            Module re-written to creat parameters file for the widget creation.
    -onClicked
        o added %x, %y, %w and %h subsitution strings.
    gnocl::aboutDialog
        o added -x, -y, -width and -height options.
    gnocl::fileChooserButton
    gnocl::folderChooserButton
        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.


2017-11:
    gnocl::paned
        o    added -min, -max
    gnocl::treeList
        o    appending row to image columntype now supports %& percent-string (icon-theme).
    gnocl::image
        o    -image options now supports %& (icon-theme) percent string.
    gnocl::button
        o    -icon options now supports %& (icon-theme) percent string.
        o    -iconSize, set size of icon, default = 22.
    gnocl::toolPalette
        o drag and drop between itemgroups now works. Unecessary options removed.
    gnocl::recentFilter
        o     new command, allow the creation and manipulation of filters for use in recent menus, dialogs and widgets.
    gnocl::paned
        o    added commands pack, remove.
    gnocl::notebook
        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.
    gnocl::dialog
        o    will now close without setting -onResponse option.
        o    added -action and -content (same as -child).
        o    problems with -icon fixed.
    gnocl::messageDialog
        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
    gnocl::menuItem
        o    clash between markup and percept mnemonics resolved, markup removed for %_ strings.
    gnocl::menuCheckItem
        o    -radio, choose between button or tick (default).
        o    onToggled renamed to toggle, now works correctly
        o    %g substitution implemented in callback.
    gnocl::checkButton   
        o    %g substitution implemented in callback.
    gnocl::screen
        o    new sub-command, primary.
    gnocl::menu
        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
2017-10:       
    Widget subcommands "options" and "commands" removed from all objects. Use gnocl:: options|commands.
    gnocl::fontSelectionDialog
        o    module completely revised, commands not permissible while dialog running.
    gnocl::fontSelection
        o    added options: -data, -name, -tooltip, -widthRequest, -heightRequest and -onClicked
    gnocl::iconView
        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
    gnoc::infoBar
        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.


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.

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