Skip to main content

Recent Modifications

Over the past few weeks a number of enhancements have be made to the gnocl package. Here's a brief overview of the changes:

2015-05:
    gnocl::menu, gnocl::menuRecentChooser, gnocl::statusBar
        o added -name, -data; implemented cget
        o added -name, -data; implemented cget
    gnocl::window
        o added -name
    added gnocl::application, a convience application megawidget
2015-04:
    added parent command to gnocl::volumeButton, gnocl::scale and gnocl::spinner
    gnocl::spinner
        o resolved problems with start and stop commands (same as using the -active options).
    gnocl::text
        o using the get widget command alone will return all text contents, i.e. same as "$wid get start end"
    gnocl::entry
        o wordList sub-commands "add", "clear", "delete" and "get" are now implemented.
        o enhanced the wordList subcommand with new option -split
            specifying this option will result in a string being treated as a space separated list
            of single words: e.g. "a red dog" becomes {{a} {red} {dog}}
        o enhanced the progress functionality, new options -range and -progressStep
            the command progress will increment the display by the fractions given by progressStep.
            Changing either -range or -progressStep will reset the progress display to 0.
            The use of the -progressFraction remains unaltered and is useful for resetting the progress to 0.
    gnocl::text
        o insert markup now works acceptably well, at present '            markup can only accept single, predefined options. Future
            versions may offer more, but this is probably adequate for
            most purposes requiring text pango markup.
        o renamed -markupTags to -useMarkup
    gnocl::toolBar
        checkItem/toggleButton
        o configure -data option and others now works
        o cget -iconSize now works properly
    gnocl::label
        bugfix:
            -textVariable setting now responds to the widget -useMarkup option


For me, the most exciting prospect is the ability to use pango-like markup strings in conjunction with the the text widget. Additionally, the gnocl::application convenience function offers an extremely quick way of initializing a working application complete with menus, toolbars, main container and status bar. The following tests script shows how this new script can be used:

#---------------
# test-gnocl-appl.tcl
#---------------
#!/bin/sh
#\
exec tclsh "$0" "$@"

package require Gnocl

#~~~~~~~~~~~~~~~~~~~~~~~~~
# create the basic application
#~~~~~~~~~~~~~~~~~~~~~~~~~
array set app [gnocl::application -application "MyAPP" -version 1.0 -date 07/05/15 -filetypes *.tcb]

#~~~~~~~~~~~~~~~~~~~~~~~~~
# Configure the main toplevel settings
#~~~~~~~~~~~~~~~~~~~~~~~~~
$app(topLevel) configure -title "APPLICATION" -setSize 0.5 

#~~~~~~~~~~~~~~~~~~~~~~~~~
# Configure toolbars
#~~~~~~~~~~~~~~~~~~~~~~~~~
$app(toolBar,1) add item -icon "%#New" -text New -name AAAA
$app(toolBar,2) add item -icon "%#Open" -text Open -name BBB
$app(toolBar,2) configure -visible 0

#~~~~~~~~~~~~~~~~~~~~~~~~~
# Create and pack application specific resources
#~~~~~~~~~~~~~~~~~~~~~~~~~
set app(txt) [gnocl::text -wrapMode word -name "textEdit" -useMarkup 1]
$app(container) add $app(txt) -fill {1 1} -expand 1
$app(txt) lorem ;# a bit of dummy data

#~~~~~~~~~~~~~~~~~~~~~~~~~
# Show and go!
#~~~~~~~~~~~~~~~~~~~~~~~~~
$app(statusBar) push "Ready..."
$app(topLevel) show

#~~~~~~~~~~~~~~~~~~~~~~~~~
# GUI elements can now be modified
#~~~~~~~~~~~~~~~~~~~~~~~~~
$app(toolBar,2) add item -icon "%#Yes" -name CCC
$app(help,about) configure -onClicked {puts HIDIHI}
$app(file,quit) configure -onClicked {exit}
$app(file,recent_menu) configure -onClicked {puts "HODIHO %f"}

#~~~~~~~~~~~~~~~~~~~~~~~~~
# alternatively, use aliases based upon Gtk+ builder names
#~~~~~~~~~~~~~~~~~~~~~~~~~
if 1 {
    namespace eval myApp {}
    foreach item [gnocl::inventory widget $app(topLevel)] {
        set n [$item cget -name]
        if { $n != "" } { interp alias {} ::myApp::$n {} $item }
    }
    ::myApp::textEdit insert end "\nOm Mani Padme Hum Hrih"
}








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.

Getting Widget Style Properties

Until the move over to Gtk4, Gnocl is still built against the Gtk 2.21 libraries. One of the inconveniences of Gtk is getting and setting widget style settings which are considered to be set globally by the desktop style settings and not for the programmer to tinker around with. Needless to say, there are times when different defaults are preferred, largely to draw the users attention to 'something a bit different'. The function gtk_widget_modify_font  is a convenience function to set the widget basefont as shown in this snippet from the button.c module,  if ( options[baseFontIdx].status == GNOCL_STATUS_CHANGED ) { GtkWidget *label; label = gnoclFindChild ( GTK_WIDGET ( para->button ), GTK_TYPE_LABEL ); PangoFontDescription *font_desc = pango_font_description_from_string ( Tcl_GetString ( options[baseFontIdx].val.obj ) ); gtk_widget_modify_font ( GTK_WIDGET ( label ), font_desc ); pango_font_description_free ( font_desc ); } Unfortunately, there's no d...