Bwidget Source Code
Artifact Content
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to
or submit via the online form by Sep 9.

Artifact 210851017807d9d2f534aa46671a23421fb633193e7f2db2556779f350a2561d:

namespace eval DemoDlg {
    variable tmpl
    variable msg
    variable progmsg
    variable progval
    variable resources "en"

proc DemoDlg::create { nb } {
    set frame [$nb insert end demoDlg -text "Dialog"]

    set titf1 [TitleFrame $frame.titf1 -text "Resources"]
    set titf2 [TitleFrame $frame.titf2 -text "Template Dialog"]
    set titf3 [TitleFrame $frame.titf3 -text "Message Dialog"]
    set titf4 [TitleFrame $frame.titf4 -text "Other dialog"]

    set subf [$titf1 getframe]
    set cmd  {option read [file join $::BWIDGET::LIBRARY "lang" $DemoDlg::resources.rc]}
    set rad1 [radiobutton $subf.rad1 -text "English" \
                  -variable DemoDlg::resources -value en \
                  -command  $cmd]
    set rad2 [radiobutton $subf.rad2 -text "French" \
                  -variable DemoDlg::resources -value fr \
                  -command  $cmd]
    set rad3 [radiobutton $subf.rad3 -text "German" \
                  -variable DemoDlg::resources -value de \
                  -command  $cmd]
    pack $rad1 $rad2 $rad3 -side left

    _tmpldlg [$titf2 getframe]
    _msgdlg  [$titf3 getframe]
    _stddlg  [$titf4 getframe]

    pack $titf1 -fill x -pady 2 -padx 2
    pack $titf4 -side bottom -fill x -pady 2 -padx 2
    pack $titf2 $titf3 -side left -padx 2 -fill both -expand yes

proc DemoDlg::_tmpldlg { parent } {
    variable tmpl

    set tmpl(side)   bottom
    set tmpl(anchor) c

    set labf1 [LabelFrame $parent.labf1 -text "Button side" -side top \
                   -anchor w -relief sunken -borderwidth 1]
    set subf  [$labf1 getframe]
    radiobutton $subf.rad1 -text "Bottom" \
        -variable DemoDlg::tmpl(side) -value bottom -anchor w
    radiobutton $subf.rad2 -text "Left" \
        -variable DemoDlg::tmpl(side) -value left   -anchor w
    radiobutton $subf.rad3 -text "Right" \
        -variable DemoDlg::tmpl(side) -value right  -anchor w
    radiobutton $subf.rad4 -text "Top" \
        -variable DemoDlg::tmpl(side) -value top    -anchor w

    pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 -fill x -anchor w

    set labf2 [LabelFrame $parent.labf2 -text "Button anchor" -side top \
                   -anchor w -relief sunken -borderwidth 1]
    set subf  [$labf2 getframe]
    radiobutton $subf.rad1 -text "North" \
        -variable DemoDlg::tmpl(anchor) -value n -anchor w
    radiobutton $subf.rad2 -text "West" \
        -variable DemoDlg::tmpl(anchor) -value w -anchor w
    radiobutton $subf.rad3 -text "East" \
        -variable DemoDlg::tmpl(anchor) -value e -anchor w
    radiobutton $subf.rad4 -text "South" \
        -variable DemoDlg::tmpl(anchor) -value s -anchor w
    radiobutton $subf.rad5 -text "Center" \
        -variable DemoDlg::tmpl(anchor) -value c -anchor w

    pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 $subf.rad5 -fill x -anchor w

    set sep    [Separator  $parent.sep -orient horizontal]
    set button [button $parent.but -text "Show" -command DemoDlg::_show_tmpldlg]

    pack $button -side bottom
    pack $sep -side bottom -fill x -pady 10
    pack $labf1 $labf2 -side left -padx 4 -anchor n

proc DemoDlg::_msgdlg { parent } {
    variable msg

    set msg(type) ok
    set msg(icon) info

    set labf1 [LabelFrame $parent.labf1 -text "Type" -side top \
                   -anchor w -relief sunken -borderwidth 1]
    set subf  [$labf1 getframe]
    radiobutton $subf.rad1 -text "Ok" -variable DemoDlg::msg(type) -value ok -anchor w
    radiobutton $subf.rad2 -text "Ok, Cancel" -variable DemoDlg::msg(type) -value okcancel -anchor w
    radiobutton $subf.rad3 -text "Retry, Cancel" -variable DemoDlg::msg(type) -value retrycancel -anchor w
    radiobutton $subf.rad4 -text "Yes, No" -variable DemoDlg::msg(type) -value yesno -anchor w
    radiobutton $subf.rad5 -text "Yes, No, Cancel" -variable DemoDlg::msg(type) -value yesnocancel -anchor w
    radiobutton $subf.rad6 -text "Abort, Retry, Ignore" -variable DemoDlg::msg(type) -value abortretryignore -anchor w
    radiobutton $subf.rad7 -text "User" -variable DemoDlg::msg(type) -value user -anchor w
    Entry $subf.user -textvariable DemoDlg::msg(buttons)

    pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 $subf.rad5 $subf.rad6 -fill x -anchor w
    pack $subf.rad7 $subf.user -side left

    set labf2 [LabelFrame $parent.labf2 -text "Icon" -side top -anchor w -relief sunken -borderwidth 1]
    set subf  [$labf2 getframe]
    radiobutton $subf.rad1 -text "Information" -variable DemoDlg::msg(icon) -value info     -anchor w
    radiobutton $subf.rad2 -text "Question"    -variable DemoDlg::msg(icon) -value question -anchor w
    radiobutton $subf.rad3 -text "Warning"     -variable DemoDlg::msg(icon) -value warning  -anchor w
    radiobutton $subf.rad4 -text "Error"       -variable DemoDlg::msg(icon) -value error    -anchor w
    pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 -fill x -anchor w

    set sep    [Separator  $parent.sep -orient horizontal]
    set button [button $parent.but -text "Show" -command DemoDlg::_show_msgdlg]

    pack $button -side bottom
    pack $sep -side bottom -fill x -pady 10
    pack $labf1 $labf2 -side left -padx 4 -anchor n

proc DemoDlg::_stddlg { parent } {
    set but0  [button $parent.but0 \
                   -text "Select a color " \
                   -command "DemoDlg::_show_color $parent.but0"]
    set but1  [button $parent.but1 \
                   -text    "Font selector dialog" \
                   -command DemoDlg::_show_fontdlg]
    set but2  [button $parent.but2 \
                   -text    "Progression dialog" \
                   -command DemoDlg::_show_progdlg]
    set but3  [button $parent.but3 \
                   -text    "Password dialog" \
                   -command DemoDlg::_show_passdlg]

    pack $but0 $but1 $but2 $but3 -side left -padx 5 -anchor w

proc DemoDlg::_show_color {w} {
    set color [SelectColor::menu $w.color [list below $w] \
                       -color   [$w cget -background]     \
                       -command [list $w configure -background]]
    if {[string length $color]} {
        $w configure -background $color

proc DemoDlg::_show_tmpldlg { } {
    variable tmpl

    set dlg [Dialog .tmpldlg -parent . -modal local \
                 -separator 1 \
                 -title   "Template dialog" \
                 -side    $tmpl(side)    \
                 -anchor  $tmpl(anchor)  \
                 -default 0 -cancel 1]
    $dlg add -name ok
    $dlg add -name cancel
    set msg [message [$dlg getframe].msg -text "Template\nDialog" -justify center -anchor c]
    pack $msg -fill both -expand yes -padx 100 -pady 100
    $dlg draw
    destroy $dlg

proc DemoDlg::_show_msgdlg { } {
    variable msg

    destroy .msgdlg
    MessageDlg .msgdlg -parent . \
        -message "Message for MessageBox" \
        -type    $msg(type) \
        -icon    $msg(icon) \
        -buttons $msg(buttons)

proc DemoDlg::_show_fontdlg { } {
    set font [SelectFont .fontdlg -parent . -font $Demo::font]
    if { $font != "" } {
        Demo::update_font $font

proc DemoDlg::_show_progdlg { } {
    set DemoDlg::progmsg "Compute in progress..."
    set DemoDlg::progval 0

    ProgressDlg .progress -parent . -title "Wait..." \
        -type         infinite \
        -width        20 \
        -textvariable DemoDlg::progmsg \
        -variable     DemoDlg::progval \
        -stop         "Stop" \
        -command      {destroy .progress}

proc DemoDlg::_update_progdlg { } {
    if { [winfo exists .progress] } {
        set DemoDlg::progval 2
        after 20 DemoDlg::_update_progdlg

proc DemoDlg::_show_passdlg { } {
    PasswdDlg .passwd -parent .