123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: DialogS.tcl,v 1.5 2004/03/28 02:44:57 hobbs Exp $
- #
- # DialogS.tcl --
- #
- #
- # Implements the DialogShell widget. It tells the window
- # manager that it is a dialog window and should be treated specially.
- # The exact treatment depends on the treatment of the window
- # manager
- #
- # Copyright (c) 1994-1996, Expert Interface Technologies
- #
- # See the file "license.terms" for information on usage and redistribution
- # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- #
- tixWidgetClass tixDialogShell {
- -superclass tixShell
- -classname TixDialogShell
- -method {
- popdown popup center
- }
- -flag {
- -mapped -minheight -minwidth -parent -transient
- }
- -static {}
- -configspec {
- {-mapped mapped Mapped 0}
- {-minwidth minWidth MinWidth 0}
- {-minheight minHeight MinHeight 0}
- {-transient transient Transient true}
- {-parent parent Parent ""}
- }
- }
- #----------------------------------------------------------------------
- # Construct widget
- #----------------------------------------------------------------------
- proc tixDialogShell:ConstructWidget {w} {
- upvar #0 $w data
- tixChainMethod $w ConstructWidget
- # Set the title of this shell appropriately
- #
- if {$data(-title) == ""} {
- # dynamically sets the title
- #
- set data(-title) [winfo name $w]
- }
- wm title $w $data(-title)
- # Set the parent of this dialog shell
- #
- if {$data(-parent) == ""} {
- set data(-parent) [winfo parent $w]
- }
- # Set the minsize and maxsize of the thing
- #
- wm minsize $w $data(-minwidth) $data(-minheight)
- wm transient $w ""
- }
- # The next procedures manage the dialog boxes
- #
- proc tixDialogShell:popup {w {parent ""}} {
- upvar #0 $w data
- # First update to make sure the boxes are the right size
- #
- update idletask
- # Then we set the position and update
- #
- # tixDialogShell:center $w $parent
- # and now make it visible. Viola! Centered over parent.
- #
- wm deiconify $w
- after idle raise $w
- }
- # This procedure centers a dialog box over a window making sure that the
- # dialog box doesn't appear off the screen
- #
- # However, if the parent is smaller than this dialog, make this dialog
- # appear at parent(x,y) + (20,20)
- #
- proc tixDialogShell:center {w {parent ""}} {
- upvar #0 $w data
- # Tell the WM that we'll do this ourselves.
- wm sizefrom $w user
- wm positionfrom $w user
- if {$parent == ""} {
- set parent $data(-parent)
- }
- if {$parent == "" || [catch {set parent [winfo toplevel $parent]}]} {
- set parent "."
- }
- # Where is my parent and what are it's dimensions
- #
- if {$parent != ""} {
- set pargeo [split [wm geometry $parent] "+x"]
- set parentW [lindex $pargeo 0]
- set parentH [lindex $pargeo 1]
- set parx [lindex $pargeo 2]
- set pary [lindex $pargeo 3]
- if {[string is true -strict $data(-transient)]} {
- wm transient $w $parent
- }
- } else {
- set parentW [winfo screenwidth $w]
- set parentH [winfo screenheight $w]
- set parx 0
- set pary 0
- set parent [winfo parent $w]
- }
- # What are is the offset of the virtual window
- set vrootx [winfo vrootx $parent]
- set vrooty [winfo vrooty $parent]
- # What are my dimensions ?
- set dialogW [winfo reqwidth $w]
- set dialogH [winfo reqheight $w]
- if {$dialogW < $parentW-30 || $dialogW < $parentH-30} {
- set dialogx [expr {$parx+($parentW-$dialogW)/2+$vrootx}]
- set dialogy [expr {$pary+($parentH-$dialogH)/2+$vrooty}]
- } else {
- # This dialog is too big. Place it at (parentx, parenty) + (20,20)
- #
- set dialogx [expr {$parx+20+$vrootx}]
- set dialogy [expr {$pary+20+$vrooty}]
- }
- set maxx [expr {[winfo screenwidth $parent] - $dialogW}]
- set maxy [expr {[winfo screenheight $parent] - $dialogH}]
- # Make sure it doesn't go off screen
- #
- if {$dialogx < 0} {
- set dialogx 0
- } else {
- if {$dialogx > $maxx} {
- set dialogx $maxx
- }
- }
- if {$dialogy < 0} {
- set dialogy 0
- } else {
- if {$dialogy > $maxy} {
- set dialogy $maxy
- }
- }
- # set my new position (and dimensions)
- #
- if {[wm geometry $w] == "1x1+0+0"} {
- wm geometry $w ${dialogW}x${dialogH}+${dialogx}+${dialogy}
- }
- }
- proc tixDialogShell:popdown {w args} {
- wm withdraw $w
- }
|