messagedlg.tcl 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # ------------------------------------------------------------------------------
  2. # messagedlg.tcl
  3. # This file is part of Unifix BWidget Toolkit
  4. # ------------------------------------------------------------------------------
  5. # Index of commands:
  6. # - MessageDlg::create
  7. # ------------------------------------------------------------------------------
  8. namespace eval MessageDlg {
  9. Dialog::use
  10. Widget::tkinclude MessageDlg message .frame.msg \
  11. remove {-cursor -highlightthickness -highlightbackground -highlightcolor \
  12. -relief -borderwidth -takefocus -textvariable} \
  13. rename {-text -message} \
  14. initialize {-aspect 800 -anchor c -justify center}
  15. Widget::bwinclude MessageDlg Dialog "" \
  16. remove {-modal -image -bitmap -side -anchor -separator \
  17. -homogeneous -padx -pady -spacing}
  18. Widget::declare MessageDlg {
  19. {-icon Enum info 0 {none error info question warning}}
  20. {-type Enum user 0 {abortretryignore ok okcancel retrycancel yesno yesnocancel user}}
  21. {-buttons String "" 0}
  22. }
  23. proc ::MessageDlg { path args } { return [eval MessageDlg::create $path $args] }
  24. proc use { } {}
  25. }
  26. # ------------------------------------------------------------------------------
  27. # Command MessageDlg::create
  28. # ------------------------------------------------------------------------------
  29. proc MessageDlg::create { path args } {
  30. global tcl_platform
  31. Widget::init MessageDlg "$path#Message" $args
  32. set type [Widget::getoption "$path#Message" -type]
  33. set title [Widget::getoption "$path#Message" -title]
  34. set icon [Widget::getoption "$path#Message" -icon]
  35. set defb -1
  36. set canb -1
  37. switch -- $type {
  38. abortretryignore {set lbut {abort retry ignore}}
  39. ok {set lbut {ok}; set defb 0 }
  40. okcancel {set lbut {ok cancel}; set defb 0; set canb 1}
  41. retrycancel {set lbut {retry cancel}; set defb 0; set canb 1}
  42. yesno {set lbut {yes no}; set defb 0; set canb 1}
  43. yesnocancel {set lbut {yes no cancel}; set defb 0; set canb 2}
  44. user {set lbut [Widget::getoption "$path#Message" -buttons]}
  45. }
  46. if { [Widget::getoption "$path#Message" -default] == -1 } {
  47. Widget::setoption "$path#Message" -default $defb
  48. }
  49. if { [Widget::getoption "$path#Message" -cancel] == -1 } {
  50. Widget::setoption "$path#Message" -cancel $canb
  51. }
  52. if { $title == "" } {
  53. set frame [frame $path -class MessageDlg]
  54. set title [option get $frame "${icon}Title" MessageDlg]
  55. destroy $frame
  56. if { $title == "" } {
  57. set title "Message"
  58. }
  59. }
  60. Widget::setoption "$path#Message" -title $title
  61. if { $tcl_platform(platform) == "unix" || $type == "user" } {
  62. if { $icon != "none" } {
  63. set image [Bitmap::get $icon]
  64. } else {
  65. set image ""
  66. }
  67. eval Dialog::create $path [Widget::subcget "$path#Message" ""] \
  68. -image $image -modal local -side bottom -anchor c
  69. set idbut 0
  70. foreach but $lbut {
  71. Dialog::add $path -text $but -name $but
  72. }
  73. set frame [Dialog::getframe $path]
  74. eval message $frame.msg [Widget::subcget "$path#Message" .frame.msg] \
  75. -relief flat -borderwidth 0 -highlightthickness 0 -textvariable {""}
  76. pack $frame.msg -side left -padx 3m -pady 1m -fill x -expand yes
  77. set res [Dialog::draw $path]
  78. } else {
  79. set parent [Widget::getoption "$path#Message" -parent]
  80. set def [lindex $lbut [Widget::getoption "$path#Message" -default]]
  81. set opt [list \
  82. -message [Widget::getoption "$path#Message" -message] \
  83. -type $type \
  84. -title $title]
  85. if { [winfo exists $parent] } {
  86. lappend opt -parent $parent
  87. }
  88. if { $def != "" } {
  89. lappend opt -default $def
  90. }
  91. if { $icon != "none" } {
  92. lappend opt -icon $icon
  93. }
  94. set res [eval tk_messageBox $opt]
  95. set res [lsearch $lbut $res]
  96. }
  97. Widget::destroy "$path#Message"
  98. destroy $path
  99. return $res
  100. }