1#
2# Selectiondialog
3# ----------------------------------------------------------------------
4# Implements a selection box similar to the OSF/Motif standard selection
5# dialog composite widget.  The Selectiondialog is derived from the
6# Dialog class and is composed of a SelectionBox with attributes to
7# manipulate the dialog buttons.
8#
9# ----------------------------------------------------------------------
10#  AUTHOR: Mark L. Ulferts              EMAIL: mulferts@austin.dsccc.com
11#
12#  @(#) $Id: selectiondialog.itk,v 1.2 2001/08/07 19:56:48 smithc Exp $
13# ----------------------------------------------------------------------
14#            Copyright (c) 1995 DSC Technologies Corporation
15# ======================================================================
16# Permission to use, copy, modify, distribute and license this software
17# and its documentation for any purpose, and without fee or written
18# agreement with DSC, is hereby granted, provided that the above copyright
19# notice appears in all copies and that both the copyright notice and
20# warranty disclaimer below appear in supporting documentation, and that
21# the names of DSC Technologies Corporation or DSC Communications
22# Corporation not be used in advertising or publicity pertaining to the
23# software without specific, written prior permission.
24#
25# DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
26# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-
27# INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE
28# AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE,
29# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL
30# DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
31# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
32# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
33# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
34# SOFTWARE.
35# ======================================================================
36
37#
38# Usual options.
39#
40itk::usual Selectiondialog {
41    keep -activebackground -activerelief -background -borderwidth -cursor \
42	 -elementborderwidth -foreground -highlightcolor -highlightthickness \
43	 -insertbackground -insertborderwidth -insertofftime -insertontime \
44	 -insertwidth -jump -labelfont -modality -selectbackground \
45	 -selectborderwidth -selectforeground -textbackground -textfont \
46	 -troughcolor
47}
48
49# ------------------------------------------------------------------
50#                           SELECTIONDIALOG
51# ------------------------------------------------------------------
52itcl::class iwidgets::Selectiondialog {
53    inherit iwidgets::Dialog
54
55    constructor {args} {}
56
57    public method childsite {}
58    public method get {}
59    public method curselection {}
60    public method clear {component}
61    public method insert {component index args}
62    public method delete {first {last {}}}
63    public method size {}
64    public method scan {option args}
65    public method nearest {y}
66    public method index {index}
67    public method selection {option args}
68    public method selectitem {}
69}
70
71#
72# Provide a lowercased access method for the Selectiondialog class.
73#
74proc ::iwidgets::selectiondialog {pathName args} {
75    uplevel ::iwidgets::Selectiondialog $pathName $args
76}
77
78#
79# Use option database to override default resources of base classes.
80#
81option add *Selectiondialog.title "Selection Dialog" widgetDefault
82option add *Selectiondialog.master "." widgetDefault
83
84# ------------------------------------------------------------------
85#                        CONSTRUCTOR
86# ------------------------------------------------------------------
87itcl::body iwidgets::Selectiondialog::constructor {args} {
88    #
89    # Set the borderwidth to zero.
90    #
91    component hull configure -borderwidth 0
92
93    #
94    # Instantiate a selection box widget.
95    #
96    itk_component add selectionbox {
97	iwidgets::Selectionbox $itk_interior.selectionbox \
98		-dblclickcommand [itcl::code $this invoke]
99    } {
100	usual
101
102	keep -childsitepos -exportselection -itemscommand -itemslabel \
103	    -itemson -selectionlabel -selectionon -selectioncommand
104    }
105    configure -itemscommand [itcl::code $this selectitem]
106
107    pack $itk_component(selectionbox) -fill both -expand yes
108    set itk_interior [$itk_component(selectionbox) childsite]
109
110    hide Help
111
112    eval itk_initialize $args
113}
114
115# ------------------------------------------------------------------
116#                            METHODS
117# ------------------------------------------------------------------
118
119# ------------------------------------------------------------------
120# METHOD: childsite
121#
122# Thinwrapped method of selection box class.
123# ------------------------------------------------------------------
124itcl::body iwidgets::Selectiondialog::childsite {} {
125    return [$itk_component(selectionbox) childsite]
126}
127
128# ------------------------------------------------------------------
129# METHOD: get
130#
131# Thinwrapped method of selection box class.
132# ------------------------------------------------------------------
133itcl::body iwidgets::Selectiondialog::get {} {
134    return [$itk_component(selectionbox) get]
135}
136
137# ------------------------------------------------------------------
138# METHOD: curselection
139#
140# Thinwrapped method of selection box class.
141# ------------------------------------------------------------------
142itcl::body iwidgets::Selectiondialog::curselection {} {
143    return [$itk_component(selectionbox) curselection]
144}
145
146# ------------------------------------------------------------------
147# METHOD: clear component
148#
149# Thinwrapped method of selection box class.
150# ------------------------------------------------------------------
151itcl::body iwidgets::Selectiondialog::clear {component} {
152    $itk_component(selectionbox) clear $component
153
154    return
155}
156
157# ------------------------------------------------------------------
158# METHOD: insert component index args
159#
160# Thinwrapped method of selection box class.
161# ------------------------------------------------------------------
162itcl::body iwidgets::Selectiondialog::insert {component index args} {
163    eval $itk_component(selectionbox) insert $component $index $args
164
165    return
166}
167
168# ------------------------------------------------------------------
169# METHOD: delete first ?last?
170#
171# Thinwrapped method of selection box class.
172# ------------------------------------------------------------------
173itcl::body iwidgets::Selectiondialog::delete {first {last {}}} {
174    $itk_component(selectionbox) delete $first $last
175
176    return
177}
178
179# ------------------------------------------------------------------
180# METHOD: size
181#
182# Thinwrapped method of selection box class.
183# ------------------------------------------------------------------
184itcl::body iwidgets::Selectiondialog::size {} {
185    return [$itk_component(selectionbox) size]
186}
187
188# ------------------------------------------------------------------
189# METHOD: scan option args
190#
191# Thinwrapped method of selection box class.
192# ------------------------------------------------------------------
193itcl::body iwidgets::Selectiondialog::scan {option args} {
194    return [eval $itk_component(selectionbox) scan $option $args]
195}
196
197# ------------------------------------------------------------------
198# METHOD: nearest y
199#
200# Thinwrapped method of selection box class.
201# ------------------------------------------------------------------
202itcl::body iwidgets::Selectiondialog::nearest {y} {
203    return [$itk_component(selectionbox) nearest $y]
204}
205
206# ------------------------------------------------------------------
207# METHOD: index index
208#
209# Thinwrapped method of selection box class.
210# ------------------------------------------------------------------
211itcl::body iwidgets::Selectiondialog::index {index} {
212    return [$itk_component(selectionbox) index $index]
213}
214
215# ------------------------------------------------------------------
216# METHOD: selection option args
217#
218# Thinwrapped method of selection box class.
219# ------------------------------------------------------------------
220itcl::body iwidgets::Selectiondialog::selection {option args} {
221    eval $itk_component(selectionbox) selection $option $args
222}
223
224# ------------------------------------------------------------------
225# METHOD: selectitem
226#
227# Set the default button to ok and select the item.
228# ------------------------------------------------------------------
229itcl::body iwidgets::Selectiondialog::selectitem {} {
230    default OK
231    $itk_component(selectionbox) selectitem
232}
233
234