Yesterday I was playing with the Glade interface designer and noticed that the UI included buttons with icons whose contents were left aligned. The Gnocl default is centred and I thought that a gnocl::button -align option might be useful. The button icon and label sub-widgets are in turn held within a GtkHBox and positioned by a GtkAlignment container. It was a relatively simple task to create the code to add the alignment option. For the present, plain text will remain centred. Here's my test script.
# test-buttonAlign.tcl
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
package require Gnocl
proc gnocl::buttonBox { {str <<TITLE>>} b} {
set box(1) [gnocl::box -orientation vertical -padding 0 ]
set but(1) [gnocl::button -icon %#Remove -text $str -align centre]
set box(2) [gnocl::box -orientation vertical -padding 0 ]
$box(1) add $but(1) -fill {1 1}
$box(1) add $box(2)
$box(2) add $b
$box(1) configure -data "button $but(1) box %box(2)"
$but(1) configure -data [::list state 1 child $box(2)]
$but(1) configure -onClicked {
foreach {a b} [%w cget -data] { set tmp($a) $b }
if { $tmp(state) == 1 } {
%w configure -icon %#Add -align left
set tmp(state) 0
} else {
%w configure -icon %#Remove -align right
set tmp(state) 1
}
$tmp(child) configure -visible $tmp(state)
%w configure -data [::list state $tmp(state) child $tmp(child)]
}
return $box(1)
}
set box1 [gnocl::box -orientation vertical]
foreach item {a b c d e} {
set b1 [gnocl::button -text "Button $item" -onClicked "puts %w"]
$box1 add $b1
}
set bb(1) [gnocl::buttonBox HELLO $box1]
#--------------------
set box2 [gnocl::box -orientation vertical]
foreach item {g h i j k} {
set b2 [gnocl::button -text "Button $item" -onClicked "puts %w"]
$box2 add $b2
}
set bb(2) [gnocl::buttonBox GOODBYE $box2]
#--------------------
set box3 [gnocl::box -orientation vertical]
foreach item {l m n o p} {
set b3 [gnocl::button -text "Button $item" -onClicked "puts %w"]
$box3 add $b3
}
set bb(3) [gnocl::buttonBox TATA $box3]
#--------------------
set box4 [gnocl::box -orientation vertical]
$box4 add $bb(1)
$box4 add $bb(2)
$box4 add $bb(3)
set scr [gnocl::scrolledWindow -child $box4]
set main [gnocl::window -child $scr -width 200 -height 400]
$main center
# test-buttonAlign.tcl
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
package require Gnocl
proc gnocl::buttonBox { {str <<TITLE>>} b} {
set box(1) [gnocl::box -orientation vertical -padding 0 ]
set but(1) [gnocl::button -icon %#Remove -text $str -align centre]
set box(2) [gnocl::box -orientation vertical -padding 0 ]
$box(1) add $but(1) -fill {1 1}
$box(1) add $box(2)
$box(2) add $b
$box(1) configure -data "button $but(1) box %box(2)"
$but(1) configure -data [::list state 1 child $box(2)]
$but(1) configure -onClicked {
foreach {a b} [%w cget -data] { set tmp($a) $b }
if { $tmp(state) == 1 } {
%w configure -icon %#Add -align left
set tmp(state) 0
} else {
%w configure -icon %#Remove -align right
set tmp(state) 1
}
$tmp(child) configure -visible $tmp(state)
%w configure -data [::list state $tmp(state) child $tmp(child)]
}
return $box(1)
}
set box1 [gnocl::box -orientation vertical]
foreach item {a b c d e} {
set b1 [gnocl::button -text "Button $item" -onClicked "puts %w"]
$box1 add $b1
}
set bb(1) [gnocl::buttonBox HELLO $box1]
#--------------------
set box2 [gnocl::box -orientation vertical]
foreach item {g h i j k} {
set b2 [gnocl::button -text "Button $item" -onClicked "puts %w"]
$box2 add $b2
}
set bb(2) [gnocl::buttonBox GOODBYE $box2]
#--------------------
set box3 [gnocl::box -orientation vertical]
foreach item {l m n o p} {
set b3 [gnocl::button -text "Button $item" -onClicked "puts %w"]
$box3 add $b3
}
set bb(3) [gnocl::buttonBox TATA $box3]
#--------------------
set box4 [gnocl::box -orientation vertical]
$box4 add $bb(1)
$box4 add $bb(2)
$box4 add $bb(3)
set scr [gnocl::scrolledWindow -child $box4]
set main [gnocl::window -child $scr -width 200 -height 400]
$main center
Comments