# ----------------------------------------------------------------------------
#  splashdlg.tcl
#  This file is part of Unifix BWidget Toolkit
# ----------------------------------------------------------------------------
#  Index of commands:
#     - SplashDlg::create
# ----------------------------------------------------------------------------

namespace eval SplashDlg {
    Widget::define SplashDlg splashdlg ProgressBar

    Widget::bwinclude SplashDlg ProgressBar .frame.pb \
        remove {-orient -width -height}

    Widget::declare SplashDlg {
        {-modal        Enum    none 0 {none local global}}
        {-width        TkResource 25 0 label}
        {-height       TkResource 1  0 label}
        {-textvariable TkResource "" 0 label}
        {-font         TkResource "" 0 label}
        {-image        TkResource "" 0 label}
        {-text         TkResource "" 0 label}
    }

    Widget::addmap SplashDlg {} .frame.msg \
        {-width {} -height {} -textvariable {} -text {} -font {}
         -background {} -foreground {}}

    Widget::addmap SplashDlg {} .frame.image \
        {-image {} -background {}}
}

# ----------------------------------------------------------------------------
#  Command SplashDlg::create
# ----------------------------------------------------------------------------
proc SplashDlg::create { path args } {
    array set maps [list SplashDlg {} :cmd {} .frame.image {} \
                        .frame.msg {} .frame.pb {}]
    array set maps [Widget::parseArgs SplashDlg $args]
    
    toplevel $path -borderwidth 1 -relief raised \
        -highlightthickness 0 -class SplashDlg -width 100
    wm withdraw $path

    Widget::initFromODB SplashDlg $path $maps(SplashDlg)

    wm overrideredirect $path yes
    wm protocol $path WM_DELETE_WINDOW {;}
    if {[string equal $::tcl_platform(platform) "windows"]} {
      wm attributes $path -topmost 1
    } else {
      bind $path <Visibility> "raise $path"
    }

    set frame [frame $path.frame]
    bind $frame <Destroy> [list Widget::destroy $path]

    ## Image section...
    eval [list label $frame.image] $maps(.frame.image) \
        -relief flat -borderwidth 0 -highlightthickness 0 \
        -anchor center -justify center -padx 0
    pack $frame.image -padx 0 -pady 0 -side top -anchor n -fill x -expand no
    
    ## ProgressBar section...
    eval [list ProgressBar::create] $frame.pb $maps(.frame.pb) -width 100
    pack $frame.pb -side top -anchor w -padx 2 -fill x -expand no

    ## Label section...
    eval [list label $frame.msg] $maps(.frame.msg) \
        -relief flat -borderwidth 0 -highlightthickness 0 \
        -anchor c -justify c
    pack $frame.msg -side bottom -padx 0 -pady 0 -anchor nw -fill both \
        -expand yes

    pack $frame -padx 0 -pady 0 -fill both -expand true
    if { [set grab [Widget::cget $path -modal]] != "none" } {
      BWidget::grab $grab $path
    }
    BWidget::place $path 0 0 center
    wm deiconify $path
    update idletasks

    return [Widget::create SplashDlg $path]
}


# ----------------------------------------------------------------------------
#  Command SplashDlg::configure
# ----------------------------------------------------------------------------
proc SplashDlg::configure { path args } {
    return [Widget::configure "$path#SplashDlg" $args]
}


# ----------------------------------------------------------------------------
#  Command SplashDlg::cget
# ----------------------------------------------------------------------------
proc SplashDlg::cget { path option } {
    return [Widget::cget "$path#SplashDlg" $option]
}
