Hex Artifact Content

Artifact 8480a6deb7321b89d77e0f4ae8dc892c65cc7518:


0000: 23 20 6c 69 73 74 62 6f 78 2e 74 63 6c 20 2d 2d  # listbox.tcl --
0010: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 64  .#.# This file d
0020: 65 66 69 6e 65 73 20 74 68 65 20 64 65 66 61 75  efines the defau
0030: 6c 74 20 62 69 6e 64 69 6e 67 73 20 66 6f 72 20  lt bindings for 
0040: 54 6b 20 6c 69 73 74 62 6f 78 20 77 69 64 67 65  Tk listbox widge
0050: 74 73 0a 23 20 61 6e 64 20 70 72 6f 76 69 64 65  ts.# and provide
0060: 73 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 61  s procedures tha
0070: 74 20 68 65 6c 70 20 69 6e 20 69 6d 70 6c 65 6d  t help in implem
0080: 65 6e 74 69 6e 67 20 74 68 6f 73 65 20 62 69 6e  enting those bin
0090: 64 69 6e 67 73 2e 0a 23 0a 23 20 40 28 23 29 20  dings..#.# @(#) 
00a0: 24 49 64 3a 20 63 74 6b 2e 73 68 61 72 2c 76 20  $Id: ctk.shar,v 
00b0: 31 2e 35 30 20 31 39 39 36 2f 30 31 2f 31 35 20  1.50 1996/01/15 
00c0: 31 34 3a 34 37 3a 31 36 20 61 6e 64 72 65 77 6d  14:47:16 andrewm
00d0: 20 45 78 70 20 61 6e 64 72 65 77 6d 20 24 0a 23   Exp andrewm $.#
00e0: 0a 23 20 43 6f 70 79 72 69 67 68 74 20 28 63 29  .# Copyright (c)
00f0: 20 31 39 39 34 20 54 68 65 20 52 65 67 65 6e 74   1994 The Regent
0100: 73 20 6f 66 20 74 68 65 20 55 6e 69 76 65 72 73  s of the Univers
0110: 69 74 79 20 6f 66 20 43 61 6c 69 66 6f 72 6e 69  ity of Californi
0120: 61 2e 0a 23 20 43 6f 70 79 72 69 67 68 74 20 28  a..# Copyright (
0130: 63 29 20 31 39 39 34 2d 31 39 39 35 20 53 75 6e  c) 1994-1995 Sun
0140: 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49   Microsystems, I
0150: 6e 63 2e 0a 23 20 43 6f 70 79 72 69 67 68 74 20  nc..# Copyright 
0160: 28 63 29 20 31 39 39 35 20 43 6c 65 76 65 6c 61  (c) 1995 Clevela
0170: 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75 6e 64 61  nd Clinic Founda
0180: 74 69 6f 6e 0a 23 0a 23 20 53 65 65 20 74 68 65  tion.#.# See the
0190: 20 66 69 6c 65 20 22 6c 69 63 65 6e 73 65 2e 74   file "license.t
01a0: 65 72 6d 73 22 20 66 6f 72 20 69 6e 66 6f 72 6d  erms" for inform
01b0: 61 74 69 6f 6e 20 6f 6e 20 75 73 61 67 65 20 61  ation on usage a
01c0: 6e 64 20 72 65 64 69 73 74 72 69 62 75 74 69 6f  nd redistributio
01d0: 6e 0a 23 20 6f 66 20 74 68 69 73 20 66 69 6c 65  n.# of this file
01e0: 2c 20 61 6e 64 20 66 6f 72 20 61 20 44 49 53 43  , and for a DISC
01f0: 4c 41 49 4d 45 52 20 4f 46 20 41 4c 4c 20 57 41  LAIMER OF ALL WA
0200: 52 52 41 4e 54 49 45 53 2e 0a 23 0a 0a 23 2d 2d  RRANTIES..#..#--
0210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0250: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 63 6f  -------.# The co
0260: 64 65 20 62 65 6c 6f 77 20 63 72 65 61 74 65 73  de below creates
0270: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6c 61   the default cla
0280: 73 73 20 62 69 6e 64 69 6e 67 73 20 66 6f 72 20  ss bindings for 
0290: 6c 69 73 74 62 6f 78 65 73 2e 0a 23 2d 2d 2d 2d  listboxes..#----
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  -----..#--------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0330: 2d 2d 0a 23 20 74 6b 50 72 69 76 20 65 6c 65 6d  --.# tkPriv elem
0340: 65 6e 74 73 20 75 73 65 64 20 69 6e 20 74 68 69  ents used in thi
0350: 73 20 66 69 6c 65 3a 0a 23 0a 23 20 6c 69 73 74  s file:.#.# list
0360: 62 6f 78 50 72 65 76 20 2d 09 09 54 68 65 20 6c  boxPrev -..The l
0370: 61 73 74 20 65 6c 65 6d 65 6e 74 20 74 6f 20 62  ast element to b
0380: 65 20 73 65 6c 65 63 74 65 64 20 6f 72 20 64 65  e selected or de
0390: 73 65 6c 65 63 74 65 64 0a 23 09 09 09 64 75 72  selected.#...dur
03a0: 69 6e 67 20 61 20 73 65 6c 65 63 74 69 6f 6e 20  ing a selection 
03b0: 6f 70 65 72 61 74 69 6f 6e 2e 0a 23 20 6c 69 73  operation..# lis
03c0: 74 62 6f 78 53 65 6c 65 63 74 69 6f 6e 20 2d 09  tboxSelection -.
03d0: 41 6c 6c 20 6f 66 20 74 68 65 20 69 74 65 6d 73  All of the items
03e0: 20 74 68 61 74 20 77 65 72 65 20 73 65 6c 65 63   that were selec
03f0: 74 65 64 20 62 65 66 6f 72 65 20 74 68 65 0a 23  ted before the.#
0400: 09 09 09 63 75 72 72 65 6e 74 20 73 65 6c 65 63  ...current selec
0410: 74 69 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 28  tion operation (
0420: 73 75 63 68 20 61 73 20 61 20 6d 6f 75 73 65 0a  such as a mouse.
0430: 23 09 09 09 64 72 61 67 29 20 73 74 61 72 74 65  #...drag) starte
0440: 64 3b 20 20 75 73 65 64 20 74 6f 20 63 61 6e 63  d;  used to canc
0450: 65 6c 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 2e  el an operation.
0460: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
0470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 62 69  ------------..bi
04b0: 6e 64 20 4c 69 73 74 62 6f 78 20 3c 55 70 3e 20  nd Listbox <Up> 
04c0: 7b 0a 20 20 20 20 74 6b 4c 69 73 74 62 6f 78 55  {.    tkListboxU
04d0: 70 44 6f 77 6e 20 25 57 20 2d 31 0a 7d 0a 62 69  pDown %W -1.}.bi
04e0: 6e 64 20 4c 69 73 74 62 6f 78 20 3c 44 6f 77 6e  nd Listbox <Down
04f0: 3e 20 7b 0a 20 20 20 20 74 6b 4c 69 73 74 62 6f  > {.    tkListbo
0500: 78 55 70 44 6f 77 6e 20 25 57 20 31 0a 7d 0a 62  xUpDown %W 1.}.b
0510: 69 6e 64 20 4c 69 73 74 62 6f 78 20 3c 4c 65 66  ind Listbox <Lef
0520: 74 3e 20 7b 0a 20 20 20 20 25 57 20 78 76 69 65  t> {.    %W xvie
0530: 77 20 73 63 72 6f 6c 6c 20 2d 31 20 70 61 67 65  w scroll -1 page
0540: 73 0a 7d 0a 62 69 6e 64 20 4c 69 73 74 62 6f 78  s.}.bind Listbox
0550: 20 3c 52 69 67 68 74 3e 20 7b 0a 20 20 20 20 25   <Right> {.    %
0560: 57 20 78 76 69 65 77 20 73 63 72 6f 6c 6c 20 31  W xview scroll 1
0570: 20 70 61 67 65 73 0a 7d 0a 62 69 6e 64 20 4c 69   pages.}.bind Li
0580: 73 74 62 6f 78 20 3c 50 72 69 6f 72 3e 20 7b 0a  stbox <Prior> {.
0590: 20 20 20 20 25 57 20 79 76 69 65 77 20 73 63 72      %W yview scr
05a0: 6f 6c 6c 20 2d 31 20 70 61 67 65 73 0a 20 20 20  oll -1 pages.   
05b0: 20 74 6b 4c 69 73 74 62 6f 78 47 6f 74 6f 20 25   tkListboxGoto %
05c0: 57 20 40 30 2c 30 0a 7d 0a 62 69 6e 64 20 4c 69  W @0,0.}.bind Li
05d0: 73 74 62 6f 78 20 3c 4e 65 78 74 3e 20 7b 0a 20  stbox <Next> {. 
05e0: 20 20 20 25 57 20 79 76 69 65 77 20 73 63 72 6f     %W yview scro
05f0: 6c 6c 20 31 20 70 61 67 65 73 0a 20 20 20 20 74  ll 1 pages.    t
0600: 6b 4c 69 73 74 62 6f 78 47 6f 74 6f 20 25 57 20  kListboxGoto %W 
0610: 40 30 2c 39 39 39 39 39 39 39 0a 7d 0a 62 69 6e  @0,9999999.}.bin
0620: 64 20 4c 69 73 74 62 6f 78 20 3c 48 6f 6d 65 3e  d Listbox <Home>
0630: 20 7b 0a 20 20 20 20 74 6b 4c 69 73 74 62 6f 78   {.    tkListbox
0640: 47 6f 74 6f 20 25 57 20 30 0a 7d 0a 62 69 6e 64  Goto %W 0.}.bind
0650: 20 4c 69 73 74 62 6f 78 20 3c 45 6e 64 3e 20 7b   Listbox <End> {
0660: 0a 20 20 20 20 74 6b 4c 69 73 74 62 6f 78 47 6f  .    tkListboxGo
0670: 74 6f 20 25 57 20 65 6e 64 0a 7d 0a 23 62 69 6e  to %W end.}.#bin
0680: 64 20 4c 69 73 74 62 6f 78 20 3c 73 70 61 63 65  d Listbox <space
0690: 3e 20 7b 0a 23 20 20 20 20 74 6b 4c 69 73 74 62  > {.#    tkListb
06a0: 6f 78 42 65 67 69 6e 53 65 6c 65 63 74 20 25 57  oxBeginSelect %W
06b0: 20 5b 25 57 20 69 6e 64 65 78 20 61 63 74 69 76   [%W index activ
06c0: 65 5d 0a 23 7d 0a 62 69 6e 64 20 4c 69 73 74 62  e].#}.bind Listb
06d0: 6f 78 20 3c 52 65 74 75 72 6e 3e 20 7b 0a 20 20  ox <Return> {.  
06e0: 20 20 74 6b 4c 69 73 74 62 6f 78 42 65 67 69 6e    tkListboxBegin
06f0: 53 65 6c 65 63 74 20 25 57 20 5b 25 57 20 69 6e  Select %W [%W in
0700: 64 65 78 20 61 63 74 69 76 65 5d 0a 20 20 20 20  dex active].    
0710: 66 6f 63 75 73 20 5b 74 6b 5f 66 6f 63 75 73 4e  focus [tk_focusN
0720: 65 78 74 20 25 57 5d 0a 7d 0a 62 69 6e 64 20 4c  ext %W].}.bind L
0730: 69 73 74 62 6f 78 20 3c 53 65 6c 65 63 74 3e 20  istbox <Select> 
0740: 7b 0a 20 20 20 20 74 6b 4c 69 73 74 62 6f 78 42  {.    tkListboxB
0750: 65 67 69 6e 53 65 6c 65 63 74 20 25 57 20 5b 25  eginSelect %W [%
0760: 57 20 69 6e 64 65 78 20 61 63 74 69 76 65 5d 0a  W index active].
0770: 7d 0a 62 69 6e 64 20 4c 69 73 74 62 6f 78 20 3c  }.bind Listbox <
0780: 43 61 6e 63 65 6c 3e 20 7b 0a 20 20 20 20 74 6b  Cancel> {.    tk
0790: 4c 69 73 74 62 6f 78 43 61 6e 63 65 6c 20 25 57  ListboxCancel %W
07a0: 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74 62 6f 78 42  .}..# tkListboxB
07b0: 65 67 69 6e 53 65 6c 65 63 74 20 2d 2d 0a 23 0a  eginSelect --.#.
07c0: 23 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  # This procedure
07d0: 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 69 6e   is typically in
07e0: 76 6f 6b 65 64 20 6f 6e 20 62 75 74 74 6f 6e 2d  voked on button-
07f0: 31 20 70 72 65 73 73 65 73 2e 20 20 49 74 20 62  1 presses.  It b
0800: 65 67 69 6e 73 0a 23 20 74 68 65 20 70 72 6f 63  egins.# the proc
0810: 65 73 73 20 6f 66 20 6d 61 6b 69 6e 67 20 61 20  ess of making a 
0820: 73 65 6c 65 63 74 69 6f 6e 20 69 6e 20 74 68 65  selection in the
0830: 20 6c 69 73 74 62 6f 78 2e 20 20 49 74 73 20 65   listbox.  Its e
0840: 78 61 63 74 20 62 65 68 61 76 69 6f 72 0a 23 20  xact behavior.# 
0850: 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73  depends on the s
0860: 65 6c 65 63 74 69 6f 6e 20 6d 6f 64 65 20 63 75  election mode cu
0870: 72 72 65 6e 74 6c 79 20 69 6e 20 65 66 66 65 63  rrently in effec
0880: 74 20 66 6f 72 20 74 68 65 20 6c 69 73 74 62 6f  t for the listbo
0890: 78 3b 0a 23 20 73 65 65 20 74 68 65 20 4d 6f 74  x;.# see the Mot
08a0: 69 66 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  if documentation
08b0: 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 23 0a   for details..#.
08c0: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 77  # Arguments:.# w
08d0: 20 2d 09 09 54 68 65 20 6c 69 73 74 62 6f 78 20   -..The listbox 
08e0: 77 69 64 67 65 74 2e 0a 23 20 65 6c 20 2d 09 09  widget..# el -..
08f0: 54 68 65 20 65 6c 65 6d 65 6e 74 20 66 6f 72 20  The element for 
0900: 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 20 6f 70  the selection op
0910: 65 72 61 74 69 6f 6e 20 28 74 79 70 69 63 61 6c  eration (typical
0920: 6c 79 20 74 68 65 0a 23 09 09 6f 6e 65 20 75 6e  ly the.#..one un
0930: 64 65 72 20 74 68 65 20 70 6f 69 6e 74 65 72 29  der the pointer)
0940: 2e 20 20 4d 75 73 74 20 62 65 20 69 6e 20 6e 75  .  Must be in nu
0950: 6d 65 72 69 63 61 6c 20 66 6f 72 6d 2e 0a 0a 70  merical form...p
0960: 72 6f 63 20 74 6b 4c 69 73 74 62 6f 78 42 65 67  roc tkListboxBeg
0970: 69 6e 53 65 6c 65 63 74 20 7b 77 20 65 6c 7d 20  inSelect {w el} 
0980: 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 74 6b 50  {.    global tkP
0990: 72 69 76 0a 20 20 20 20 69 66 20 7b 5b 24 77 20  riv.    if {[$w 
09a0: 63 67 65 74 20 2d 73 65 6c 65 63 74 6d 6f 64 65  cget -selectmode
09b0: 5d 20 20 3d 3d 20 22 6d 75 6c 74 69 70 6c 65 22  ]  == "multiple"
09c0: 7d 20 7b 0a 09 69 66 20 5b 24 77 20 73 65 6c 65  } {..if [$w sele
09d0: 63 74 69 6f 6e 20 69 6e 63 6c 75 64 65 73 20 24  ction includes $
09e0: 65 6c 5d 20 7b 0a 09 20 20 20 20 24 77 20 73 65  el] {..    $w se
09f0: 6c 65 63 74 69 6f 6e 20 63 6c 65 61 72 20 24 65  lection clear $e
0a00: 6c 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  l..} else {..   
0a10: 20 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 73 65   $w selection se
0a20: 74 20 24 65 6c 0a 09 7d 0a 20 20 20 20 7d 20 65  t $el..}.    } e
0a30: 6c 73 65 20 7b 0a 09 24 77 20 73 65 6c 65 63 74  lse {..$w select
0a40: 69 6f 6e 20 63 6c 65 61 72 20 30 20 65 6e 64 0a  ion clear 0 end.
0a50: 09 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 73 65  .$w selection se
0a60: 74 20 24 65 6c 0a 09 24 77 20 73 65 6c 65 63 74  t $el..$w select
0a70: 69 6f 6e 20 61 6e 63 68 6f 72 20 24 65 6c 0a 09  ion anchor $el..
0a80: 73 65 74 20 74 6b 50 72 69 76 28 6c 69 73 74 62  set tkPriv(listb
0a90: 6f 78 53 65 6c 65 63 74 69 6f 6e 29 20 7b 7d 0a  oxSelection) {}.
0aa0: 09 73 65 74 20 74 6b 50 72 69 76 28 6c 69 73 74  .set tkPriv(list
0ab0: 62 6f 78 50 72 65 76 29 20 24 65 6c 0a 20 20 20  boxPrev) $el.   
0ac0: 20 7d 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74 62 6f   }.}..# tkListbo
0ad0: 78 4d 6f 74 69 6f 6e 20 2d 2d 0a 23 0a 23 20 54  xMotion --.#.# T
0ae0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
0af0: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 63 65   called to proce
0b00: 73 73 20 6d 6f 75 73 65 20 6d 6f 74 69 6f 6e 20  ss mouse motion 
0b10: 65 76 65 6e 74 73 20 77 68 69 6c 65 0a 23 20 62  events while.# b
0b20: 75 74 74 6f 6e 20 31 20 69 73 20 64 6f 77 6e 2e  utton 1 is down.
0b30: 20 20 49 74 20 6d 61 79 20 6d 6f 76 65 20 6f 72    It may move or
0b40: 20 65 78 74 65 6e 64 20 74 68 65 20 73 65 6c 65   extend the sele
0b50: 63 74 69 6f 6e 2c 20 64 65 70 65 6e 64 69 6e 67  ction, depending
0b60: 0a 23 20 6f 6e 20 74 68 65 20 6c 69 73 74 62 6f  .# on the listbo
0b70: 78 27 73 20 73 65 6c 65 63 74 69 6f 6e 20 6d 6f  x's selection mo
0b80: 64 65 2e 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74  de..#.# Argument
0b90: 73 3a 0a 23 20 77 20 2d 09 09 54 68 65 20 6c 69  s:.# w -..The li
0ba0: 73 74 62 6f 78 20 77 69 64 67 65 74 2e 0a 23 20  stbox widget..# 
0bb0: 65 6c 20 2d 09 09 54 68 65 20 65 6c 65 6d 65 6e  el -..The elemen
0bc0: 74 20 75 6e 64 65 72 20 74 68 65 20 70 6f 69 6e  t under the poin
0bd0: 74 65 72 20 28 6d 75 73 74 20 62 65 20 61 20 6e  ter (must be a n
0be0: 75 6d 62 65 72 29 2e 0a 0a 70 72 6f 63 20 74 6b  umber)...proc tk
0bf0: 4c 69 73 74 62 6f 78 4d 6f 74 69 6f 6e 20 7b 77  ListboxMotion {w
0c00: 20 65 6c 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61   el} {.    globa
0c10: 6c 20 74 6b 50 72 69 76 0a 20 20 20 20 69 66 20  l tkPriv.    if 
0c20: 7b 24 65 6c 20 3d 3d 20 24 74 6b 50 72 69 76 28  {$el == $tkPriv(
0c30: 6c 69 73 74 62 6f 78 50 72 65 76 29 7d 20 7b 0a  listboxPrev)} {.
0c40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20 20  .return.    }.  
0c50: 20 20 73 65 74 20 61 6e 63 68 6f 72 20 5b 24 77    set anchor [$w
0c60: 20 69 6e 64 65 78 20 61 6e 63 68 6f 72 5d 0a 20   index anchor]. 
0c70: 20 20 20 73 77 69 74 63 68 20 5b 24 77 20 63 67     switch [$w cg
0c80: 65 74 20 2d 73 65 6c 65 63 74 6d 6f 64 65 5d 20  et -selectmode] 
0c90: 7b 0a 09 62 72 6f 77 73 65 20 7b 0a 09 20 20 20  {..browse {..   
0ca0: 20 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 63 6c   $w selection cl
0cb0: 65 61 72 20 30 20 65 6e 64 0a 09 20 20 20 20 24  ear 0 end..    $
0cc0: 77 20 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20  w selection set 
0cd0: 24 65 6c 0a 09 20 20 20 20 73 65 74 20 74 6b 50  $el..    set tkP
0ce0: 72 69 76 28 6c 69 73 74 62 6f 78 50 72 65 76 29  riv(listboxPrev)
0cf0: 20 24 65 6c 0a 09 7d 0a 09 65 78 74 65 6e 64 65   $el..}..extende
0d00: 64 20 7b 0a 09 20 20 20 20 73 65 74 20 69 20 24  d {..    set i $
0d10: 74 6b 50 72 69 76 28 6c 69 73 74 62 6f 78 50 72  tkPriv(listboxPr
0d20: 65 76 29 0a 09 20 20 20 20 69 66 20 5b 24 77 20  ev)..    if [$w 
0d30: 73 65 6c 65 63 74 69 6f 6e 20 69 6e 63 6c 75 64  selection includ
0d40: 65 73 20 61 6e 63 68 6f 72 5d 20 7b 0a 09 09 24  es anchor] {...$
0d50: 77 20 73 65 6c 65 63 74 69 6f 6e 20 63 6c 65 61  w selection clea
0d60: 72 20 24 69 20 24 65 6c 0a 09 09 24 77 20 73 65  r $i $el...$w se
0d70: 6c 65 63 74 69 6f 6e 20 73 65 74 20 61 6e 63 68  lection set anch
0d80: 6f 72 20 24 65 6c 0a 09 20 20 20 20 7d 20 65 6c  or $el..    } el
0d90: 73 65 20 7b 0a 09 09 24 77 20 73 65 6c 65 63 74  se {...$w select
0da0: 69 6f 6e 20 63 6c 65 61 72 20 24 69 20 24 65 6c  ion clear $i $el
0db0: 0a 09 09 24 77 20 73 65 6c 65 63 74 69 6f 6e 20  ...$w selection 
0dc0: 63 6c 65 61 72 20 61 6e 63 68 6f 72 20 24 65 6c  clear anchor $el
0dd0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 77 68 69  ..    }..    whi
0de0: 6c 65 20 7b 28 24 69 20 3c 20 24 65 6c 29 20 26  le {($i < $el) &
0df0: 26 20 28 24 69 20 3c 20 24 61 6e 63 68 6f 72 29  & ($i < $anchor)
0e00: 7d 20 7b 0a 09 09 69 66 20 7b 5b 6c 73 65 61 72  } {...if {[lsear
0e10: 63 68 20 24 74 6b 50 72 69 76 28 6c 69 73 74 62  ch $tkPriv(listb
0e20: 6f 78 53 65 6c 65 63 74 69 6f 6e 29 20 24 69 5d  oxSelection) $i]
0e30: 20 3e 3d 20 30 7d 20 7b 0a 09 09 20 20 20 20 24   >= 0} {...    $
0e40: 77 20 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20  w selection set 
0e50: 24 69 0a 09 09 7d 0a 09 09 69 6e 63 72 20 69 0a  $i...}...incr i.
0e60: 09 20 20 20 20 7d 0a 09 20 20 20 20 77 68 69 6c  .    }..    whil
0e70: 65 20 7b 28 24 69 20 3e 20 24 65 6c 29 20 26 26  e {($i > $el) &&
0e80: 20 28 24 69 20 3e 20 24 61 6e 63 68 6f 72 29 7d   ($i > $anchor)}
0e90: 20 7b 0a 09 09 69 66 20 7b 5b 6c 73 65 61 72 63   {...if {[lsearc
0ea0: 68 20 24 74 6b 50 72 69 76 28 6c 69 73 74 62 6f  h $tkPriv(listbo
0eb0: 78 53 65 6c 65 63 74 69 6f 6e 29 20 24 69 5d 20  xSelection) $i] 
0ec0: 3e 3d 20 30 7d 20 7b 0a 09 09 20 20 20 20 24 77  >= 0} {...    $w
0ed0: 20 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20 24   selection set $
0ee0: 69 0a 09 09 7d 0a 09 09 69 6e 63 72 20 69 20 2d  i...}...incr i -
0ef0: 31 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65  1..    }..    se
0f00: 74 20 74 6b 50 72 69 76 28 6c 69 73 74 62 6f 78  t tkPriv(listbox
0f10: 50 72 65 76 29 20 24 65 6c 0a 09 7d 0a 20 20 20  Prev) $el..}.   
0f20: 20 7d 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74 62 6f   }.}..# tkListbo
0f30: 78 42 65 67 69 6e 45 78 74 65 6e 64 20 2d 2d 0a  xBeginExtend --.
0f40: 23 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75  #.# This procedu
0f50: 72 65 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  re is typically 
0f60: 69 6e 76 6f 6b 65 64 20 6f 6e 20 73 68 69 66 74  invoked on shift
0f70: 2d 62 75 74 74 6f 6e 2d 31 20 70 72 65 73 73 65  -button-1 presse
0f80: 73 2e 20 20 49 74 0a 23 20 62 65 67 69 6e 73 20  s.  It.# begins 
0f90: 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 65  the process of e
0fa0: 78 74 65 6e 64 69 6e 67 20 61 20 73 65 6c 65 63  xtending a selec
0fb0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  tion in the list
0fc0: 62 6f 78 2e 20 20 49 74 73 0a 23 20 65 78 61 63  box.  Its.# exac
0fd0: 74 20 62 65 68 61 76 69 6f 72 20 64 65 70 65 6e  t behavior depen
0fe0: 64 73 20 6f 6e 20 74 68 65 20 73 65 6c 65 63 74  ds on the select
0ff0: 69 6f 6e 20 6d 6f 64 65 20 63 75 72 72 65 6e 74  ion mode current
1000: 6c 79 20 69 6e 20 65 66 66 65 63 74 0a 23 20 66  ly in effect.# f
1010: 6f 72 20 74 68 65 20 6c 69 73 74 62 6f 78 3b 20  or the listbox; 
1020: 20 73 65 65 20 74 68 65 20 4d 6f 74 69 66 20 64   see the Motif d
1030: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1040: 20 64 65 74 61 69 6c 73 2e 0a 23 0a 23 20 41 72   details..#.# Ar
1050: 67 75 6d 65 6e 74 73 3a 0a 23 20 77 20 2d 09 09  guments:.# w -..
1060: 54 68 65 20 6c 69 73 74 62 6f 78 20 77 69 64 67  The listbox widg
1070: 65 74 2e 0a 23 20 65 6c 20 2d 09 09 54 68 65 20  et..# el -..The 
1080: 65 6c 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20  element for the 
1090: 73 65 6c 65 63 74 69 6f 6e 20 6f 70 65 72 61 74  selection operat
10a0: 69 6f 6e 20 28 74 79 70 69 63 61 6c 6c 79 20 74  ion (typically t
10b0: 68 65 0a 23 09 09 6f 6e 65 20 75 6e 64 65 72 20  he.#..one under 
10c0: 74 68 65 20 70 6f 69 6e 74 65 72 29 2e 20 20 4d  the pointer).  M
10d0: 75 73 74 20 62 65 20 69 6e 20 6e 75 6d 65 72 69  ust be in numeri
10e0: 63 61 6c 20 66 6f 72 6d 2e 0a 0a 70 72 6f 63 20  cal form...proc 
10f0: 74 6b 4c 69 73 74 62 6f 78 42 65 67 69 6e 45 78  tkListboxBeginEx
1100: 74 65 6e 64 20 7b 77 20 65 6c 7d 20 7b 0a 20 20  tend {w el} {.  
1110: 20 20 69 66 20 7b 28 5b 24 77 20 63 67 65 74 20    if {([$w cget 
1120: 2d 73 65 6c 65 63 74 6d 6f 64 65 5d 20 3d 3d 20  -selectmode] == 
1130: 22 65 78 74 65 6e 64 65 64 22 29 0a 09 20 20 20  "extended")..   
1140: 20 26 26 20 5b 24 77 20 73 65 6c 65 63 74 69 6f   && [$w selectio
1150: 6e 20 69 6e 63 6c 75 64 65 73 20 61 6e 63 68 6f  n includes ancho
1160: 72 5d 7d 20 7b 0a 09 74 6b 4c 69 73 74 62 6f 78  r]} {..tkListbox
1170: 4d 6f 74 69 6f 6e 20 24 77 20 24 65 6c 0a 20 20  Motion $w $el.  
1180: 20 20 7d 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74 62    }.}..# tkListb
1190: 6f 78 47 6f 74 6f 20 2d 2d 0a 23 0a 23 20 4d 6f  oxGoto --.#.# Mo
11a0: 76 65 73 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e  ves the location
11b0: 20 63 75 72 73 6f 72 20 28 61 63 74 69 76 65 20   cursor (active 
11c0: 65 6c 65 6d 65 6e 74 29 20 74 6f 20 61 20 73 70  element) to a sp
11d0: 65 63 69 66 63 20 65 6c 65 6d 65 6e 74 2c 0a 23  ecifc element,.#
11e0: 20 61 6e 64 20 63 68 61 6e 67 65 73 20 74 68 65   and changes the
11f0: 20 73 65 6c 65 63 74 69 6f 6e 20 69 66 20 77 65   selection if we
1200: 27 72 65 20 69 6e 20 62 72 6f 77 73 65 20 6f 72  're in browse or
1210: 20 65 78 74 65 6e 64 65 64 20 73 65 6c 65 63 74   extended select
1220: 69 6f 6e 0a 23 20 6d 6f 64 65 2e 0a 23 0a 23 20  ion.# mode..#.# 
1230: 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 77 20 2d  Arguments:.# w -
1240: 09 09 54 68 65 20 6c 69 73 74 62 6f 78 20 77 69  ..The listbox wi
1250: 64 67 65 74 2e 0a 23 20 69 6e 64 65 78 20 2d 09  dget..# index -.
1260: 41 6e 79 20 76 61 6c 69 64 20 6c 69 73 74 62 6f  Any valid listbo
1270: 78 20 69 6e 64 65 78 0a 0a 70 72 6f 63 20 74 6b  x index..proc tk
1280: 4c 69 73 74 62 6f 78 47 6f 74 6f 20 7b 77 20 69  ListboxGoto {w i
1290: 6e 64 65 78 7d 20 7b 0a 20 20 20 20 67 6c 6f 62  ndex} {.    glob
12a0: 61 6c 20 74 6b 50 72 69 76 0a 20 20 20 20 24 77  al tkPriv.    $w
12b0: 20 61 63 74 69 76 61 74 65 20 24 69 6e 64 65 78   activate $index
12c0: 0a 20 20 20 20 24 77 20 73 65 65 20 61 63 74 69  .    $w see acti
12d0: 76 65 0a 20 20 20 20 73 77 69 74 63 68 20 5b 24  ve.    switch [$
12e0: 77 20 63 67 65 74 20 2d 73 65 6c 65 63 74 6d 6f  w cget -selectmo
12f0: 64 65 5d 20 7b 0a 09 62 72 6f 77 73 65 20 7b 0a  de] {..browse {.
1300: 09 20 20 20 20 24 77 20 73 65 6c 65 63 74 69 6f  .    $w selectio
1310: 6e 20 63 6c 65 61 72 20 30 20 65 6e 64 0a 09 20  n clear 0 end.. 
1320: 20 20 20 24 77 20 73 65 6c 65 63 74 69 6f 6e 20     $w selection 
1330: 73 65 74 20 61 63 74 69 76 65 0a 09 7d 0a 09 65  set active..}..e
1340: 78 74 65 6e 64 65 64 20 7b 0a 09 20 20 20 20 24  xtended {..    $
1350: 77 20 73 65 6c 65 63 74 69 6f 6e 20 63 6c 65 61  w selection clea
1360: 72 20 30 20 65 6e 64 0a 09 20 20 20 20 24 77 20  r 0 end..    $w 
1370: 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20 61 63  selection set ac
1380: 74 69 76 65 0a 09 20 20 20 20 24 77 20 73 65 6c  tive..    $w sel
1390: 65 63 74 69 6f 6e 20 61 6e 63 68 6f 72 20 61 63  ection anchor ac
13a0: 74 69 76 65 0a 09 20 20 20 20 73 65 74 20 74 6b  tive..    set tk
13b0: 50 72 69 76 28 6c 69 73 74 62 6f 78 50 72 65 76  Priv(listboxPrev
13c0: 29 20 5b 24 77 20 69 6e 64 65 78 20 61 63 74 69  ) [$w index acti
13d0: 76 65 5d 0a 09 20 20 20 20 73 65 74 20 74 6b 50  ve]..    set tkP
13e0: 72 69 76 28 6c 69 73 74 62 6f 78 53 65 6c 65 63  riv(listboxSelec
13f0: 74 69 6f 6e 29 20 7b 7d 0a 09 7d 0a 20 20 20 20  tion) {}..}.    
1400: 7d 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74 62 6f 78  }.}..# tkListbox
1410: 55 70 44 6f 77 6e 20 2d 2d 0a 23 0a 23 20 4d 6f  UpDown --.#.# Mo
1420: 76 65 73 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e  ves the location
1430: 20 63 75 72 73 6f 72 20 28 61 63 74 69 76 65 20   cursor (active 
1440: 65 6c 65 6d 65 6e 74 29 20 75 70 20 6f 72 20 64  element) up or d
1450: 6f 77 6e 20 62 79 20 6f 6e 65 20 65 6c 65 6d 65  own by one eleme
1460: 6e 74 2c 0a 23 20 61 6e 64 20 63 68 61 6e 67 65  nt,.# and change
1470: 73 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 20  s the selection 
1480: 69 66 20 77 65 27 72 65 20 69 6e 20 62 72 6f 77  if we're in brow
1490: 73 65 20 6f 72 20 65 78 74 65 6e 64 65 64 20 73  se or extended s
14a0: 65 6c 65 63 74 69 6f 6e 0a 23 20 6d 6f 64 65 2e  election.# mode.
14b0: 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a  .#.# Arguments:.
14c0: 23 20 77 20 2d 09 09 54 68 65 20 6c 69 73 74 62  # w -..The listb
14d0: 6f 78 20 77 69 64 67 65 74 2e 0a 23 20 61 6d 6f  ox widget..# amo
14e0: 75 6e 74 20 2d 09 2b 31 20 74 6f 20 6d 6f 76 65  unt -.+1 to move
14f0: 20 64 6f 77 6e 20 6f 6e 65 20 69 74 65 6d 2c 20   down one item, 
1500: 2d 31 20 74 6f 20 6d 6f 76 65 20 62 61 63 6b 20  -1 to move back 
1510: 6f 6e 65 20 69 74 65 6d 2e 0a 0a 70 72 6f 63 20  one item...proc 
1520: 74 6b 4c 69 73 74 62 6f 78 55 70 44 6f 77 6e 20  tkListboxUpDown 
1530: 7b 77 20 61 6d 6f 75 6e 74 7d 20 7b 0a 20 20 20  {w amount} {.   
1540: 20 67 6c 6f 62 61 6c 20 74 6b 50 72 69 76 0a 20   global tkPriv. 
1550: 20 20 20 24 77 20 61 63 74 69 76 61 74 65 20 5b     $w activate [
1560: 65 78 70 72 20 5b 24 77 20 69 6e 64 65 78 20 61  expr [$w index a
1570: 63 74 69 76 65 5d 20 2b 20 24 61 6d 6f 75 6e 74  ctive] + $amount
1580: 5d 0a 20 20 20 20 24 77 20 73 65 65 20 61 63 74  ].    $w see act
1590: 69 76 65 0a 20 20 20 20 73 77 69 74 63 68 20 5b  ive.    switch [
15a0: 24 77 20 63 67 65 74 20 2d 73 65 6c 65 63 74 6d  $w cget -selectm
15b0: 6f 64 65 5d 20 7b 0a 09 62 72 6f 77 73 65 20 7b  ode] {..browse {
15c0: 0a 09 20 20 20 20 24 77 20 73 65 6c 65 63 74 69  ..    $w selecti
15d0: 6f 6e 20 63 6c 65 61 72 20 30 20 65 6e 64 0a 09  on clear 0 end..
15e0: 20 20 20 20 24 77 20 73 65 6c 65 63 74 69 6f 6e      $w selection
15f0: 20 73 65 74 20 61 63 74 69 76 65 0a 09 7d 0a 09   set active..}..
1600: 65 78 74 65 6e 64 65 64 20 7b 0a 09 20 20 20 20  extended {..    
1610: 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 63 6c 65  $w selection cle
1620: 61 72 20 30 20 65 6e 64 0a 09 20 20 20 20 24 77  ar 0 end..    $w
1630: 20 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20 61   selection set a
1640: 63 74 69 76 65 0a 09 20 20 20 20 24 77 20 73 65  ctive..    $w se
1650: 6c 65 63 74 69 6f 6e 20 61 6e 63 68 6f 72 20 61  lection anchor a
1660: 63 74 69 76 65 0a 09 20 20 20 20 73 65 74 20 74  ctive..    set t
1670: 6b 50 72 69 76 28 6c 69 73 74 62 6f 78 50 72 65  kPriv(listboxPre
1680: 76 29 20 5b 24 77 20 69 6e 64 65 78 20 61 63 74  v) [$w index act
1690: 69 76 65 5d 0a 09 20 20 20 20 73 65 74 20 74 6b  ive]..    set tk
16a0: 50 72 69 76 28 6c 69 73 74 62 6f 78 53 65 6c 65  Priv(listboxSele
16b0: 63 74 69 6f 6e 29 20 7b 7d 0a 09 7d 0a 20 20 20  ction) {}..}.   
16c0: 20 7d 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74 62 6f   }.}..# tkListbo
16d0: 78 45 78 74 65 6e 64 55 70 44 6f 77 6e 20 2d 2d  xExtendUpDown --
16e0: 0a 23 0a 23 20 44 6f 65 73 20 6e 6f 74 68 69 6e  .#.# Does nothin
16f0: 67 20 75 6e 6c 65 73 73 20 77 65 27 72 65 20 69  g unless we're i
1700: 6e 20 65 78 74 65 6e 64 65 64 20 73 65 6c 65 63  n extended selec
1710: 74 69 6f 6e 20 6d 6f 64 65 3b 20 20 69 6e 20 74  tion mode;  in t
1720: 68 69 73 0a 23 20 63 61 73 65 20 69 74 20 6d 6f  his.# case it mo
1730: 76 65 73 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e  ves the location
1740: 20 63 75 72 73 6f 72 20 28 61 63 74 69 76 65 20   cursor (active 
1750: 65 6c 65 6d 65 6e 74 29 20 75 70 20 6f 72 20 64  element) up or d
1760: 6f 77 6e 20 62 79 0a 23 20 6f 6e 65 20 65 6c 65  own by.# one ele
1770: 6d 65 6e 74 2c 20 61 6e 64 20 65 78 74 65 6e 64  ment, and extend
1780: 73 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 20  s the selection 
1790: 74 6f 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 23  to that point..#
17a0: 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20  .# Arguments:.# 
17b0: 77 20 2d 09 09 54 68 65 20 6c 69 73 74 62 6f 78  w -..The listbox
17c0: 20 77 69 64 67 65 74 2e 0a 23 20 61 6d 6f 75 6e   widget..# amoun
17d0: 74 20 2d 09 2b 31 20 74 6f 20 6d 6f 76 65 20 64  t -.+1 to move d
17e0: 6f 77 6e 20 6f 6e 65 20 69 74 65 6d 2c 20 2d 31  own one item, -1
17f0: 20 74 6f 20 6d 6f 76 65 20 62 61 63 6b 20 6f 6e   to move back on
1800: 65 20 69 74 65 6d 2e 0a 0a 70 72 6f 63 20 74 6b  e item...proc tk
1810: 4c 69 73 74 62 6f 78 45 78 74 65 6e 64 55 70 44  ListboxExtendUpD
1820: 6f 77 6e 20 7b 77 20 61 6d 6f 75 6e 74 7d 20 7b  own {w amount} {
1830: 0a 20 20 20 20 69 66 20 7b 5b 24 77 20 63 67 65  .    if {[$w cge
1840: 74 20 2d 73 65 6c 65 63 74 6d 6f 64 65 5d 20 21  t -selectmode] !
1850: 3d 20 22 65 78 74 65 6e 64 65 64 22 7d 20 7b 0a  = "extended"} {.
1860: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20 20  .return.    }.  
1870: 20 20 24 77 20 61 63 74 69 76 61 74 65 20 5b 65    $w activate [e
1880: 78 70 72 20 5b 24 77 20 69 6e 64 65 78 20 61 63  xpr [$w index ac
1890: 74 69 76 65 5d 20 2b 20 24 61 6d 6f 75 6e 74 5d  tive] + $amount]
18a0: 0a 20 20 20 20 24 77 20 73 65 65 20 61 63 74 69  .    $w see acti
18b0: 76 65 0a 20 20 20 20 74 6b 4c 69 73 74 62 6f 78  ve.    tkListbox
18c0: 4d 6f 74 69 6f 6e 20 24 77 20 5b 24 77 20 69 6e  Motion $w [$w in
18d0: 64 65 78 20 61 63 74 69 76 65 5d 0a 7d 0a 0a 23  dex active].}..#
18e0: 20 74 6b 4c 69 73 74 62 6f 78 44 61 74 61 45 78   tkListboxDataEx
18f0: 74 65 6e 64 0a 23 0a 23 20 54 68 69 73 20 70 72  tend.#.# This pr
1900: 6f 63 65 64 75 72 65 20 69 73 20 63 61 6c 6c 65  ocedure is calle
1910: 64 20 66 6f 72 20 6b 65 79 2d 70 72 65 73 73 65  d for key-presse
1920: 73 20 73 75 63 68 20 61 73 20 53 68 69 66 74 2d  s such as Shift-
1930: 4b 45 6e 64 44 61 74 61 2e 0a 23 20 49 66 20 74  KEndData..# If t
1940: 68 65 20 73 65 6c 65 63 74 69 6f 6e 20 6d 6f 64  he selection mod
1950: 65 20 69 73 6e 27 74 20 6d 75 6c 74 69 70 6c 65  e isn't multiple
1960: 20 6f 72 20 65 78 74 65 6e 64 20 74 68 65 6e 20   or extend then 
1970: 69 74 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 2e  it does nothing.
1980: 0a 23 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .# Otherwise it 
1990: 6d 6f 76 65 73 20 74 68 65 20 61 63 74 69 76 65  moves the active
19a0: 20 65 6c 65 6d 65 6e 74 20 74 6f 20 65 6c 20 61   element to el a
19b0: 6e 64 2c 20 69 66 20 77 65 27 72 65 20 69 6e 0a  nd, if we're in.
19c0: 23 20 65 78 74 65 6e 64 65 64 20 6d 6f 64 65 2c  # extended mode,
19d0: 20 65 78 74 65 6e 64 73 20 74 68 65 20 73 65 6c   extends the sel
19e0: 65 63 74 69 6f 6e 20 74 6f 20 74 68 61 74 20 70  ection to that p
19f0: 6f 69 6e 74 2e 0a 23 0a 23 20 41 72 67 75 6d 65  oint..#.# Argume
1a00: 6e 74 73 3a 0a 23 20 77 20 2d 09 09 54 68 65 20  nts:.# w -..The 
1a10: 6c 69 73 74 62 6f 78 20 77 69 64 67 65 74 2e 0a  listbox widget..
1a20: 23 20 65 6c 20 2d 09 09 41 6e 20 69 6e 74 65 67  # el -..An integ
1a30: 65 72 20 65 6c 65 6d 65 6e 74 20 6e 75 6d 62 65  er element numbe
1a40: 72 2e 0a 0a 70 72 6f 63 20 74 6b 4c 69 73 74 62  r...proc tkListb
1a50: 6f 78 44 61 74 61 45 78 74 65 6e 64 20 7b 77 20  oxDataExtend {w 
1a60: 65 6c 7d 20 7b 0a 20 20 20 20 73 65 74 20 6d 6f  el} {.    set mo
1a70: 64 65 20 5b 24 77 20 63 67 65 74 20 2d 73 65 6c  de [$w cget -sel
1a80: 65 63 74 6d 6f 64 65 5d 0a 20 20 20 20 69 66 20  ectmode].    if 
1a90: 7b 24 6d 6f 64 65 20 3d 3d 20 22 65 78 74 65 6e  {$mode == "exten
1aa0: 64 65 64 22 7d 20 7b 0a 09 24 77 20 61 63 74 69  ded"} {..$w acti
1ab0: 76 61 74 65 20 24 65 6c 0a 09 24 77 20 73 65 65  vate $el..$w see
1ac0: 20 24 65 6c 0a 20 20 20 20 20 20 20 20 69 66 20   $el.        if 
1ad0: 5b 24 77 20 73 65 6c 65 63 74 69 6f 6e 20 69 6e  [$w selection in
1ae0: 63 6c 75 64 65 73 20 61 6e 63 68 6f 72 5d 20 7b  cludes anchor] {
1af0: 0a 09 20 20 20 20 74 6b 4c 69 73 74 62 6f 78 4d  ..    tkListboxM
1b00: 6f 74 69 6f 6e 20 24 77 20 24 65 6c 0a 09 7d 0a  otion $w $el..}.
1b10: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 6d      } elseif {$m
1b20: 6f 64 65 20 3d 3d 20 22 6d 75 6c 74 69 70 6c 65  ode == "multiple
1b30: 22 7d 20 7b 0a 09 24 77 20 61 63 74 69 76 61 74  "} {..$w activat
1b40: 65 20 24 65 6c 0a 09 24 77 20 73 65 65 20 24 65  e $el..$w see $e
1b50: 6c 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 74 6b 4c  l.    }.}..# tkL
1b60: 69 73 74 62 6f 78 43 61 6e 63 65 6c 0a 23 0a 23  istboxCancel.#.#
1b70: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
1b80: 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 63 61  is invoked to ca
1b90: 6e 63 65 6c 20 61 6e 20 65 78 74 65 6e 64 65 64  ncel an extended
1ba0: 20 73 65 6c 65 63 74 69 6f 6e 20 69 6e 0a 23 20   selection in.# 
1bb0: 70 72 6f 67 72 65 73 73 2e 20 20 49 66 20 74 68  progress.  If th
1bc0: 65 72 65 20 69 73 20 61 6e 20 65 78 74 65 6e 64  ere is an extend
1bd0: 65 64 20 73 65 6c 65 63 74 69 6f 6e 20 69 6e 20  ed selection in 
1be0: 70 72 6f 67 72 65 73 73 2c 20 69 74 0a 23 20 72  progress, it.# r
1bf0: 65 73 74 6f 72 65 73 20 61 6c 6c 20 6f 66 20 74  estores all of t
1c00: 68 65 20 69 74 65 6d 73 20 62 65 74 77 65 65 6e  he items between
1c10: 20 74 68 65 20 61 63 74 69 76 65 20 6f 6e 65 20   the active one 
1c20: 61 6e 64 20 74 68 65 20 61 6e 63 68 6f 72 0a 23  and the anchor.#
1c30: 20 74 6f 20 74 68 65 69 72 20 70 72 65 76 69 6f   to their previo
1c40: 75 73 20 73 65 6c 65 63 74 69 6f 6e 20 73 74 61  us selection sta
1c50: 74 65 2e 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74  te..#.# Argument
1c60: 73 3a 0a 23 20 77 20 2d 09 09 54 68 65 20 6c 69  s:.# w -..The li
1c70: 73 74 62 6f 78 20 77 69 64 67 65 74 2e 0a 0a 70  stbox widget...p
1c80: 72 6f 63 20 74 6b 4c 69 73 74 62 6f 78 43 61 6e  roc tkListboxCan
1c90: 63 65 6c 20 77 20 7b 0a 20 20 20 20 67 6c 6f 62  cel w {.    glob
1ca0: 61 6c 20 74 6b 50 72 69 76 0a 20 20 20 20 69 66  al tkPriv.    if
1cb0: 20 7b 5b 24 77 20 63 67 65 74 20 2d 73 65 6c 65   {[$w cget -sele
1cc0: 63 74 6d 6f 64 65 5d 20 21 3d 20 22 65 78 74 65  ctmode] != "exte
1cd0: 6e 64 65 64 22 7d 20 7b 0a 09 72 65 74 75 72 6e  nded"} {..return
1ce0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 66  .    }.    set f
1cf0: 69 72 73 74 20 5b 24 77 20 69 6e 64 65 78 20 61  irst [$w index a
1d00: 6e 63 68 6f 72 5d 0a 20 20 20 20 73 65 74 20 6c  nchor].    set l
1d10: 61 73 74 20 24 74 6b 50 72 69 76 28 6c 69 73 74  ast $tkPriv(list
1d20: 62 6f 78 50 72 65 76 29 0a 20 20 20 20 69 66 20  boxPrev).    if 
1d30: 7b 24 66 69 72 73 74 20 3e 20 24 6c 61 73 74 7d  {$first > $last}
1d40: 20 7b 0a 09 73 65 74 20 74 6d 70 20 24 66 69 72   {..set tmp $fir
1d50: 73 74 0a 09 73 65 74 20 66 69 72 73 74 20 24 6c  st..set first $l
1d60: 61 73 74 0a 09 73 65 74 20 6c 61 73 74 20 24 74  ast..set last $t
1d70: 6d 70 0a 20 20 20 20 7d 0a 20 20 20 20 24 77 20  mp.    }.    $w 
1d80: 73 65 6c 65 63 74 69 6f 6e 20 63 6c 65 61 72 20  selection clear 
1d90: 24 66 69 72 73 74 20 24 6c 61 73 74 0a 20 20 20  $first $last.   
1da0: 20 77 68 69 6c 65 20 7b 24 66 69 72 73 74 20 3c   while {$first <
1db0: 3d 20 24 6c 61 73 74 7d 20 7b 0a 09 69 66 20 7b  = $last} {..if {
1dc0: 5b 6c 73 65 61 72 63 68 20 24 74 6b 50 72 69 76  [lsearch $tkPriv
1dd0: 28 6c 69 73 74 62 6f 78 53 65 6c 65 63 74 69 6f  (listboxSelectio
1de0: 6e 29 20 24 66 69 72 73 74 5d 20 3e 3d 20 30 7d  n) $first] >= 0}
1df0: 20 7b 0a 09 20 20 20 20 24 77 20 73 65 6c 65 63   {..    $w selec
1e00: 74 69 6f 6e 20 73 65 74 20 24 66 69 72 73 74 0a  tion set $first.
1e10: 09 7d 0a 09 69 6e 63 72 20 66 69 72 73 74 0a 20  .}..incr first. 
1e20: 20 20 20 7d 0a 7d 0a 0a 23 20 74 6b 4c 69 73 74     }.}..# tkList
1e30: 62 6f 78 53 65 6c 65 63 74 41 6c 6c 0a 23 0a 23  boxSelectAll.#.#
1e40: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
1e50: 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 68 61  is invoked to ha
1e60: 6e 64 6c 65 20 74 68 65 20 22 73 65 6c 65 63 74  ndle the "select
1e70: 20 61 6c 6c 22 20 6f 70 65 72 61 74 69 6f 6e 2e   all" operation.
1e80: 0a 23 20 46 6f 72 20 73 69 6e 67 6c 65 20 61 6e  .# For single an
1e90: 64 20 62 72 6f 77 73 65 20 6d 6f 64 65 2c 20 69  d browse mode, i
1ea0: 74 20 6a 75 73 74 20 73 65 6c 65 63 74 73 20 74  t just selects t
1eb0: 68 65 20 61 63 74 69 76 65 20 65 6c 65 6d 65 6e  he active elemen
1ec0: 74 2e 0a 23 20 4f 74 68 65 72 77 69 73 65 20 69  t..# Otherwise i
1ed0: 74 20 73 65 6c 65 63 74 73 20 65 76 65 72 79 74  t selects everyt
1ee0: 68 69 6e 67 20 69 6e 20 74 68 65 20 77 69 64 67  hing in the widg
1ef0: 65 74 2e 0a 23 0a 23 20 41 72 67 75 6d 65 6e 74  et..#.# Argument
1f00: 73 3a 0a 23 20 77 20 2d 09 09 54 68 65 20 6c 69  s:.# w -..The li
1f10: 73 74 62 6f 78 20 77 69 64 67 65 74 2e 0a 0a 70  stbox widget...p
1f20: 72 6f 63 20 74 6b 4c 69 73 74 62 6f 78 53 65 6c  roc tkListboxSel
1f30: 65 63 74 41 6c 6c 20 77 20 7b 0a 20 20 20 20 73  ectAll w {.    s
1f40: 65 74 20 6d 6f 64 65 20 5b 24 77 20 63 67 65 74  et mode [$w cget
1f50: 20 2d 73 65 6c 65 63 74 6d 6f 64 65 5d 0a 20 20   -selectmode].  
1f60: 20 20 69 66 20 7b 28 24 6d 6f 64 65 20 3d 3d 20    if {($mode == 
1f70: 22 73 69 6e 67 6c 65 22 29 20 7c 7c 20 28 24 6d  "single") || ($m
1f80: 6f 64 65 20 3d 3d 20 22 62 72 6f 77 73 65 22 29  ode == "browse")
1f90: 7d 20 7b 0a 09 24 77 20 73 65 6c 65 63 74 69 6f  } {..$w selectio
1fa0: 6e 20 63 6c 65 61 72 20 30 20 65 6e 64 0a 09 24  n clear 0 end..$
1fb0: 77 20 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20  w selection set 
1fc0: 61 63 74 69 76 65 0a 20 20 20 20 7d 20 65 6c 73  active.    } els
1fd0: 65 20 7b 0a 09 24 77 20 73 65 6c 65 63 74 69 6f  e {..$w selectio
1fe0: 6e 20 73 65 74 20 30 20 65 6e 64 0a 20 20 20 20  n set 0 end.    
1ff0: 7d 0a 7d 0a                                      }.}.