Saturday, July 15, 2023

Custom Dialogs

 Description

 

 


## project chooser dialog
# @param   wid
# @returns  none
# @notes  Uses global array ::app to store restrieved values
proc conze_project_chooser_dialog { wid } {
       
    set dir $::app(dirs,projects)

    set vbox [gnocl::vBox -data 0]
    set lst [gnocl::list -columns 2 -types "string string" -headersVisible 0 ]
    $lst columnConfigure 1 -visible 0
    $vbox add $lst -fill {1 1} -expand 1
    
    # create list of available projects
    foreach d [lsort [glob -type d -directory $dir *]] {
        $lst add [list [list [file tail $d] $d]]
    }
    
    # to right align completely, set expand and fill to 0
    set hbox [gnocl::hBox]
    set b1 [gnocl::button -text Select \
            -data "$lst $wid" \
            -onClicked {
                set ::app(project) [lindex [[lindex %d 0] getRow \
                            [[lindex %d 0] getSelection]] 1]
                %t delete
                $::app(statusBar) push "Project [file tail $::app(project)] selected"
                conze_set_title
                conze_open [lindex %d 1]
                } ]
    
    set b2 [gnocl::button -text Cancel -onClicked { %t delete } ]
    
    $vbox add $hbox -expand 0 -fill 0 -align right
    $hbox add $b1
    $hbox add $b2

    $lst configure -data $b1 -onButtonRelease { if { "%t" == "button2Press" } { %d clicked } }

    # create custom dialog
    set win [gnocl::window \
        -visible 0 \
        -title "Select Conze Project" \
        -child $vbox \
        -height 480 \
        -width 320 \
        -data $lst \
        -typeHint dialog \
        -modal 1]
       
    $win centre
    $win configure -visible 1
               
}

No comments: