| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | namespace eval ::tk::dialog::error { |
| | namespace import -force ::tk::msgcat::* |
| | namespace export bgerror |
| | option add *ErrorDialog.function.text [mc "Save To Log"] \ |
| | widgetDefault |
| | option add *ErrorDialog.function.command [namespace code SaveToLog] |
| | option add *ErrorDialog*Label.font TkCaptionFont widgetDefault |
| | if {[tk windowingsystem] eq "aqua"} { |
| | option add *ErrorDialog*background systemAlertBackgroundActive \ |
| | widgetDefault |
| | option add *ErrorDialog*info.text.background \ |
| | systemTextBackgroundColor widgetDefault |
| | option add *ErrorDialog*Button.highlightBackground \ |
| | systemAlertBackgroundActive widgetDefault |
| | } |
| | } |
| |
|
| | proc ::tk::dialog::error::Return {which code} { |
| | variable button |
| |
|
| | .bgerrorDialog.$which state {active selected focus} |
| | update idletasks |
| | after 100 |
| | set button $code |
| | } |
| |
|
| | proc ::tk::dialog::error::Details {} { |
| | set w .bgerrorDialog |
| | set caption [option get $w.function text {}] |
| | set command [option get $w.function command {}] |
| | if {($caption eq "") || ($command eq "")} { |
| | grid forget $w.function |
| | } |
| | lappend command [$w.top.info.text get 1.0 end-1c] |
| | $w.function configure -text $caption -command $command |
| | grid $w.top.info - -sticky nsew -padx 3m -pady 3m |
| | } |
| |
|
| | proc ::tk::dialog::error::SaveToLog {text} { |
| | if {$::tcl_platform(platform) eq "windows"} { |
| | set allFiles *.* |
| | } else { |
| | set allFiles * |
| | } |
| | set types [list \ |
| | [list [mc "Log Files"] .log] \ |
| | [list [mc "Text Files"] .txt] \ |
| | [list [mc "All Files"] $allFiles] \ |
| | ] |
| | set filename [tk_getSaveFile -title [mc "Select Log File"] \ |
| | -filetypes $types -defaultextension .log -parent .bgerrorDialog] |
| | if {$filename ne {}} { |
| | set f [open $filename w] |
| | puts -nonewline $f $text |
| | close $f |
| | } |
| | return |
| | } |
| |
|
| | proc ::tk::dialog::error::Destroy {w} { |
| | if {$w eq ".bgerrorDialog"} { |
| | variable button |
| | set button -1 |
| | } |
| | } |
| |
|
| | proc ::tk::dialog::error::DeleteByProtocol {} { |
| | variable button |
| | set button 1 |
| | } |
| |
|
| | proc ::tk::dialog::error::ReturnInDetails w { |
| | bind $w <Return> {} |
| | $w invoke |
| | return -code break |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proc ::tk::dialog::error::bgerror {err {flag 1}} { |
| | global errorInfo |
| | variable button |
| |
|
| | set info $errorInfo |
| |
|
| | set ret [catch {::tkerror $err} msg]; |
| | if {$ret != 1} {return -code $ret $msg} |
| |
|
| | |
| | |
| | |
| | |
| | |
| | set windowingsystem [tk windowingsystem] |
| | if {$windowingsystem eq "aqua"} { |
| | if $flag { |
| | set errorInfo $info |
| | after 500 [list bgerror "$err" 0] |
| | return |
| | } |
| | } |
| |
|
| | set ok [mc OK] |
| | |
| | |
| | |
| | set displayedErr "" |
| | set lines 0 |
| | set maxLine 45 |
| | foreach line [split $err \n] { |
| | if {[string length $line] > $maxLine} { |
| | append displayedErr "[string range $line 0 $maxLine-3]..." |
| | break |
| | } |
| | if {$lines > 4} { |
| | append displayedErr "..." |
| | break |
| | } else { |
| | append displayedErr "${line}\n" |
| | } |
| | incr lines |
| | } |
| |
|
| | set title [mc "Application Error"] |
| | set text [mc "Error: %1\$s" $displayedErr] |
| | set buttons [list ok $ok dismiss [mc "Skip Messages"] \ |
| | function [mc "Details >>"]] |
| |
|
| | |
| | |
| |
|
| | set dlg .bgerrorDialog |
| | set bg [ttk::style lookup . -background] |
| | destroy $dlg |
| | toplevel $dlg -class ErrorDialog -background $bg |
| | wm withdraw $dlg |
| | wm title $dlg $title |
| | wm iconname $dlg ErrorDialog |
| | wm protocol $dlg WM_DELETE_WINDOW [namespace code DeleteByProtocol] |
| |
|
| | if {$windowingsystem eq "aqua"} { |
| | ::tk::unsupported::MacWindowStyle style $dlg moveableAlert {} |
| | } elseif {$windowingsystem eq "x11"} { |
| | wm attributes $dlg -type dialog |
| | } |
| |
|
| | ttk::frame $dlg.bot |
| | ttk::frame $dlg.top |
| | pack $dlg.bot -side bottom -fill both |
| | pack $dlg.top -side top -fill both -expand 1 |
| |
|
| | set W [ttk::frame $dlg.top.info] |
| | text $W.text -setgrid true -height 10 -wrap char \ |
| | -yscrollcommand [list $W.scroll set] |
| | if {$windowingsystem ne "aqua"} { |
| | $W.text configure -width 40 |
| | } |
| |
|
| | ttk::scrollbar $W.scroll -command [list $W.text yview] |
| | pack $W.scroll -side right -fill y |
| | pack $W.text -side left -expand yes -fill both |
| | $W.text insert 0.0 "$err\n$info" |
| | $W.text mark set insert 0.0 |
| | bind $W.text <Button-1> {focus %W} |
| | $W.text configure -state disabled |
| |
|
| | |
| |
|
| | |
| | set wrapwidth [winfo screenwidth $dlg] |
| | |
| | |
| | set wrapwidth [expr {$wrapwidth-60-[winfo pixels $dlg 9m]}] |
| | ttk::label $dlg.msg -justify left -text $text -wraplength $wrapwidth |
| | ttk::label $dlg.bitmap -image ::tk::icons::error |
| |
|
| | grid $dlg.bitmap $dlg.msg -in $dlg.top -row 0 -padx 3m -pady 3m |
| | grid configure $dlg.bitmap -sticky ne |
| | grid configure $dlg.msg -sticky nsw -padx {0 3m} |
| | grid rowconfigure $dlg.top 1 -weight 1 |
| | grid columnconfigure $dlg.top 1 -weight 1 |
| |
|
| | |
| |
|
| | set i 0 |
| | foreach {name caption} $buttons { |
| | ttk::button $dlg.$name -text $caption -default normal \ |
| | -command [namespace code [list set button $i]] |
| | grid $dlg.$name -in $dlg.bot -column $i -row 0 -sticky ew -padx 10 |
| | grid columnconfigure $dlg.bot $i -weight 1 |
| | |
| | if {$windowingsystem eq "aqua"} { |
| | if {($name eq "ok") || ($name eq "dismiss")} { |
| | grid columnconfigure $dlg.bot $i -minsize 90 |
| | } |
| | grid configure $dlg.$name -pady 7 |
| | } |
| | incr i |
| | } |
| | |
| | $dlg.ok configure -default active |
| |
|
| | bind $dlg <Return> [namespace code {Return ok 0}] |
| | bind $dlg <Escape> [namespace code {Return dismiss 1}] |
| | bind $dlg <Destroy> [namespace code {Destroy %W}] |
| | bind $dlg.function <Return> [namespace code {ReturnInDetails %W}] |
| | $dlg.function configure -command [namespace code Details] |
| |
|
| | |
| | |
| | |
| |
|
| | ::tk::PlaceWindow $dlg |
| |
|
| | |
| |
|
| | ::tk::SetFocusGrab $dlg $dlg.ok |
| |
|
| | |
| |
|
| | raise $dlg |
| | if {[tk windowingsystem] eq "win32"} { |
| | |
| | |
| | if {[lindex [wm stackorder .] end] ne "$dlg"} { |
| | wm attributes $dlg -topmost 1 |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | vwait [namespace which -variable button] |
| | set copy $button |
| |
|
| | ::tk::RestoreFocusGrab $dlg $dlg.ok destroy |
| |
|
| | if {$copy == 1} { |
| | return -code break |
| | } |
| | } |
| |
|
| | namespace eval :: { |
| | |
| | proc bgerror err {} |
| | rename bgerror {} |
| | namespace import ::tk::dialog::error::bgerror |
| | } |
| |
|