UIGalleryView.st
author Claus Gittinger <cg@exept.de>
Wed, 29 Jul 2009 20:02:02 +0200
changeset 2570 4e663bc64364
parent 2563 c2298d24621d
child 3081 feb178704671
permissions -rw-r--r--
changed #requestPackage
     1 "
     2  COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
     3 	      All Rights Reserved
     4 
     5  This software is furnished under a license and may be used
     6  only in accordance with the terms of that license and with the
     7  inclusion of the above copyright notice.   This software may not
     8  be provided or otherwise made available to, or used by, any
     9  other person.  No title to or ownership of the software is
    10  hereby transferred.
    11 "
    12 "{ Package: 'stx:libtool2' }"
    13 
    14 NoteBookView subclass:#UIGalleryView
    15 	instanceVariableNames:'majorKey minorKeys minorKeysHolder'
    16 	classVariableNames:''
    17 	poolDictionaries:''
    18 	category:'Interface-UIPainter'
    19 !
    20 
    21 View subclass:#Palette
    22 	instanceVariableNames:'clientSpecHolder selection specification lastClickPoint
    23 		menuSelector uiBuilder hiddenCounter showBorders
    24 		didWarnAboutUnknownSpecs'
    25 	classVariableNames:''
    26 	poolDictionaries:''
    27 	privateIn:UIGalleryView
    28 !
    29 
    30 DropObject subclass:#DropSpec
    31 	instanceVariableNames:''
    32 	classVariableNames:''
    33 	poolDictionaries:''
    34 	privateIn:UIGalleryView::Palette
    35 !
    36 
    37 !UIGalleryView class methodsFor:'documentation'!
    38 
    39 copyright
    40 "
    41  COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
    42 	      All Rights Reserved
    43 
    44  This software is furnished under a license and may be used
    45  only in accordance with the terms of that license and with the
    46  inclusion of the above copyright notice.   This software may not
    47  be provided or otherwise made available to, or used by, any
    48  other person.  No title to or ownership of the software is
    49  hereby transferred.
    50 "
    51 
    52 
    53 !
    54 
    55 documentation
    56 "
    57     implements a selection panel, keeping widgets which could be placed
    58     into other components by drag & drop or copy @ paste. The objects
    59     which are draged/droped must be kind of UISpecification's.
    60     The UISelectionPanel used by the UIPainter is implemented in this way.
    61 
    62     [author:]
    63 	Claus Gittinger
    64 	Claus Atzkern
    65 
    66     [see also:]
    67 	UIPainter
    68 	UISelectionPanel
    69 "
    70 
    71 !
    72 
    73 examples
    74 "
    75     opens a gallery
    76 
    77 									[exBegin]
    78     |top sel|
    79 
    80     top := StandardSystemView new label:'gallery'; extent:500@300.
    81     sel := UIGalleryView origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:top.
    82 
    83     sel labels:#(    'Buttons'
    84 		     'Panels'
    85 		     'Text'
    86 		   ).
    87 
    88     sel minorKeys:#( #standardButtonToggle
    89 		     #standardPanels
    90 		     #standardText
    91 		   ).
    92 
    93     sel majorKey:UISelectionPanel.
    94     top open.
    95 									[exEnd]
    96 "
    97 ! !
    98 
    99 !UIGalleryView methodsFor:'accessing'!
   100 
   101 builder
   102     "get the builder used to setup a window from a specification (or nil in case
   103      of using a new builder)
   104     "
   105   ^ canvas builder
   106 !
   107 
   108 builder:aBuilderOrNil
   109     "set the builder used to setup a window from a specification (or nil in case
   110      of using a new builder)
   111     "
   112     canvas builder:aBuilderOrNil
   113 !
   114 
   115 canvas:aCanvas
   116     ^ self
   117 
   118 !
   119 
   120 labels:listOfLabels minorKeys:listOfMinorKeys majorKey:aMajorKey
   121     "setup for labels, selectors and class provider
   122     "
   123     self labels:listOfLabels.
   124     minorKeys := listOfMinorKeys.
   125     majorKey  := aMajorKey.
   126 !
   127 
   128 majorKey
   129     "get the class providing the window specifications
   130     "
   131   ^ majorKey
   132 !
   133 
   134 majorKey:aKey
   135     "get the class providing the window specifications
   136     "
   137     |appl|
   138 
   139     appl := self application.
   140 
   141     appl notNil ifTrue:[
   142 	majorKey := appl resolveName:aKey
   143     ] ifFalse:[
   144 	majorKey := Smalltalk resolveName:aKey inClass:self class
   145     ].
   146     self selection:nil
   147 !
   148 
   149 minorKeys
   150     "get the list of selector keys
   151     "
   152   ^ minorKeys
   153 !
   154 
   155 minorKeys:aListOfSelectors
   156     "set the list of selectors
   157     "
   158     minorKeys := aListOfSelectors.
   159     self selection:nil.
   160 !
   161 
   162 showBorders:aBoolean
   163     "show borders around dragable objects"
   164 
   165     canvas showBorders:aBoolean.
   166 ! !
   167 
   168 !UIGalleryView methodsFor:'accessing-colors'!
   169 
   170 viewBackground:aColor
   171     canvas notNil ifTrue:[
   172         canvas viewBackground:aColor.
   173     ].
   174     ^ super viewBackground:aColor
   175 ! !
   176 
   177 !UIGalleryView methodsFor:'accessing-holders'!
   178 
   179 clientSpecHolder
   180     "get the holder which keeps the current selection or in case of
   181      no selection the specification under the cursor
   182     "
   183   ^ canvas clientSpecHolder
   184 !
   185 
   186 clientSpecHolder:aHolder
   187     "set the holder which keeps the current selection or in case of
   188      no selection the specification under the cursor
   189     "
   190     canvas clientSpecHolder:aHolder
   191 !
   192 
   193 menuSelector
   194     ^ canvas menuSelector
   195 !
   196 
   197 menuSelector:aSelector
   198     ^ canvas menuSelector:aSelector
   199 !
   200 
   201 minorKeysHolder
   202     "get the holder keeping the minor keys; the selectors to access
   203      specifications from a class associated with the majorKey.
   204     "
   205   ^ minorKeysHolder
   206 !
   207 
   208 minorKeysHolder:aValueHolder
   209     "set the holder keeping the minor keys; the selectors to access
   210      specifications from a class associated with the majorKey.
   211     "
   212     minorKeysHolder notNil ifTrue:[
   213 	minorKeysHolder removeDependent:self. 
   214     ].
   215 
   216     (minorKeysHolder := aValueHolder) notNil ifTrue:[
   217 	minorKeysHolder addDependent:self.
   218     ].
   219     self minorKeys:(minorKeysHolder value)
   220 ! !
   221 
   222 !UIGalleryView methodsFor:'change & update'!
   223 
   224 selectionHasChanged
   225     "selection changed
   226     "
   227     |specification selector selection application|
   228 
   229     selection := self listIndexOf:(self selection).
   230 
   231     minorKeysHolder notNil ifTrue:[
   232         minorKeys := minorKeysHolder value.
   233     ].
   234     (selection notNil and:[minorKeys size >= selection]) ifTrue:[
   235         selector := minorKeys at:selection.
   236 
   237         (majorKey respondsTo:selector) ifTrue:[
   238             specification := majorKey perform:selector
   239         ] ifFalse:[
   240             (application := self application) notNil ifTrue:[
   241                 MessageNotUnderstood handle:[:ex|
   242                     (application class respondsTo:selector) ifTrue:[
   243                         specification := application class perform:selector
   244                     ]
   245                 ] do:[
   246                     specification := application aspectFor:selector
   247                 ]
   248             ]
   249         ]
   250     ].
   251 "/    self withWaitCursorDo:[
   252         [
   253             canvas specification:specification.
   254         ] on:NotFoundError do:[:ex|
   255             Transcript showCR:ex description.
   256             ex proceed.
   257         ]
   258 "/    ]
   259 !
   260 
   261 update
   262     self selectionHasChanged.
   263 !
   264 
   265 update:something with:aParameter from:changedObject
   266     "one of my models changed its value
   267     "
   268     changedObject == minorKeysHolder ifTrue:[
   269         ^ self minorKeys:( minorKeysHolder value)
   270     ].
   271     super update:something with:aParameter from:changedObject.
   272 
   273 ! !
   274 
   275 !UIGalleryView methodsFor:'initialization & release'!
   276 
   277 initialize
   278     "setup default attributes
   279     "
   280     canvas := Palette in:self.
   281 
   282     super initialize.
   283 
   284     self action:[:something| self selectionHasChanged ].
   285 !
   286 
   287 release
   288     minorKeysHolder notNil ifTrue:[
   289         minorKeysHolder removeDependent:self. 
   290         minorKeysHolder := nil.
   291     ].
   292     super release.
   293 ! !
   294 
   295 !UIGalleryView::Palette class methodsFor:'documentation'!
   296 
   297 documentation
   298 "
   299     I am the palette of a gallery. Most of what I do is to allow dragging of a widget out
   300     of myself and to care for the drawing of the selection.
   301     The arrangement into multiple pages is done by my container, which holds me
   302     in a subcanvas.
   303 "
   304 ! !
   305 
   306 !UIGalleryView::Palette methodsFor:'accessing'!
   307 
   308 builder
   309     "get the builder used to setup a window from a specification (or nil in case
   310      of using a new builder)
   311     "
   312   ^ uiBuilder
   313 !
   314 
   315 builder:something
   316     "set the builder used to setup a window from a specification (or nil in case
   317      of using a new builder)
   318     "
   319     uiBuilder := something.
   320 !
   321 
   322 clientSpecHolder
   323     "get the holder which keeps the current selection or in case of
   324      no selection the specification under the cursor
   325     "
   326     ^ clientSpecHolder
   327 !
   328 
   329 clientSpecHolder:aHolder
   330     "set the holder which keeps the current selection or in case of
   331      no selection the specification under the cursor
   332     "
   333     |spec|
   334 
   335     spec := clientSpecHolder value.
   336 
   337     aHolder notNil ifTrue:[ clientSpecHolder := aHolder ]
   338                   ifFalse:[ clientSpecHolder := nil asValue ].
   339 
   340     clientSpecHolder value:spec.
   341 !
   342 
   343 menuSelector
   344     "return the value of the instance variable 'menuSelector' (automatically generated)"
   345 
   346     ^ menuSelector
   347 !
   348 
   349 menuSelector:something
   350     "set the value of the instance variable 'menuSelector' (automatically generated)"
   351 
   352     menuSelector := something.
   353 !
   354 
   355 showBorders:aBoolean
   356     showBorders := aBoolean.
   357 !
   358 
   359 specification
   360     "get current specification
   361     "
   362     ^ specification
   363 !
   364 
   365 specification:aSpecOrSpecArray
   366     "set a new specification"
   367 
   368     |builder newSpec|
   369 
   370     self selection:nil.
   371     self destroySubViews.
   372 
   373     specification := nil.
   374     aSpecOrSpecArray isNil ifTrue:[^ self].
   375 
   376     "/ only warn once - otherwise, its annoying
   377     Array missingClassInLiteralArrayErrorSignal handle:[:ex |
   378         didWarnAboutUnknownSpecs == true ifFalse:[
   379             Dialog warn:(ex description,'\\(Will not warn again - please check for unloaded classes/packages)' withCRs).
   380         ].
   381         didWarnAboutUnknownSpecs := true.
   382         ex proceed.
   383     ] do:[
   384         newSpec := UISpecification from:aSpecOrSpecArray.
   385     ].
   386     newSpec isNil ifTrue:[^ self].
   387     (newSpec respondsTo:#'buildViewFor:in:') ifFalse:[^ self].
   388     specification := newSpec.
   389 
   390     (builder := uiBuilder) isNil ifTrue:[
   391         builder := UIBuilder new isEditing:true.
   392         builder showDefaults:true.
   393         builder application:self application. "/ for resources like images
   394     ].
   395 
   396     specification buildViewFor:builder in:self.
   397 
   398     "/ components notEmptyOrNil ifTrue:[ self halt ].
   399     subViews size ~~ 0 ifTrue:[
   400         showBorders ifTrue:[
   401             subViews do:[:v|
   402                 (self findSpecFor:v) notNil ifTrue:[
   403                     v borderWidth:1
   404                 ].
   405             ].
   406         ].
   407         realized ifTrue:[ self realizeAllSubViews ].
   408     ].
   409 ! !
   410 
   411 !UIGalleryView::Palette methodsFor:'building'!
   412 
   413 recursiveBuildSpecFromSpecPrototype:aSpec
   414     "build spec out of spec prototype"
   415 
   416     |spec comp coll|
   417 
   418     (aSpec notNil and:[aSpec canUIDrag]) ifFalse:[
   419         ^ nil
   420     ].
   421 
   422     spec := aSpec copy.
   423     (aSpec class supportsSubComponents and:[aSpec component notNil]) ifFalse:[
   424         ^ spec
   425     ].
   426     comp := aSpec component.
   427     spec component:nil.
   428 
   429     comp canUIDrag ifFalse:[
   430         ^ spec
   431     ].
   432     coll := OrderedCollection new.
   433 
   434     comp do:[:anEntry|
   435         |spc|
   436 
   437         (spc := self recursiveBuildSpecFromSpecPrototype:anEntry) notNil ifTrue:[
   438             coll add:spc
   439         ]
   440     ].
   441     coll isEmpty ifTrue:[
   442         ^ spec
   443     ].
   444     comp := comp copy.
   445     comp collection:coll.
   446     spec component:comp.
   447     ^ spec
   448 ! !
   449 
   450 !UIGalleryView::Palette methodsFor:'drag & drop'!
   451 
   452 startDragFrom:evView
   453     "start drag at lastClickPoint"
   454 
   455     |spec dragObj offset clickPos dragAndDropManager|
   456 
   457     clickPos := lastClickPoint.
   458     clickPos isNil ifTrue:[^ self].
   459     lastClickPoint := nil.
   460 
   461     spec := clientSpecHolder value.
   462     spec isNil ifTrue:[^ self].
   463 
   464     self withSelectionHiddenDo:[
   465         spec := self recursiveBuildSpecFromSpecPrototype:spec.
   466         spec name:nil.
   467 
   468         dragObj := DropSpec for:selection specification:spec.
   469         offset  := clickPos - selection origin.
   470     ].
   471 
   472     dragAndDropManager := DragAndDropManager new.
   473     dragAndDropManager giveFocusToTargetWidget:false.
   474 
   475     dragAndDropManager 
   476         startDrag:dragObj
   477         from:self
   478         offset:offset
   479         atEnd:nil
   480         display:nil.
   481 ! !
   482 
   483 !UIGalleryView::Palette methodsFor:'event handling'!
   484 
   485 processEvent:anEvent
   486     "filter keyboard events.
   487      Return true, if I have eaten the event"
   488 
   489     |evView p|
   490 
   491     evView := anEvent view.
   492     evView isNil ifTrue:[ ^ false ].
   493     (evView ~~ self and:[ (evView isComponentOf:self) not ]) ifTrue:[ ^ false ].
   494 
   495     (anEvent isButtonPressEvent or:[anEvent isButtonReleaseEvent])ifTrue:[
   496         lastClickPoint := nil.
   497     ].
   498     anEvent isButtonEvent ifFalse:[
   499         anEvent isInputEvent ifTrue:[^ true].
   500 
   501         anEvent isDamage ifTrue:[ self redrawSelection ].
   502         ^ false
   503     ].
   504 
   505     anEvent isButtonReleaseEvent ifTrue:[ ^ true ].
   506 
   507     anEvent isButtonMotionEvent ifTrue:[
   508         (lastClickPoint notNil and:[anEvent state ~~ 0]) ifTrue:[
   509             p := Point x:(anEvent x) y:(anEvent y).
   510             p := device translatePoint:p fromView:evView toView:self.
   511 
   512             (lastClickPoint dist:p) > 20.0 ifTrue:[
   513                 self startDragFrom:evView.
   514                 lastClickPoint := nil.
   515             ]
   516         ].
   517         ^ true
   518     ].
   519 
   520     anEvent isButtonPressEvent ifTrue:[
   521         |button application|
   522 
   523         button := anEvent button.
   524 
   525         (button == 1 or:[button == #select]) ifTrue:[
   526             p := Point x:(anEvent x) y:(anEvent y).
   527             p := device translatePoint:p fromView:evView toView:self.
   528 
   529             self selection:(self findObjectAt:p).
   530 
   531             selection notNil ifTrue:[
   532                 lastClickPoint := p.
   533             ]
   534         ] ifFalse:[
   535             (menuSelector notNil and:[(application := self application) notNil]) ifTrue:[
   536                 MessageNotUnderstood catch:[
   537                     application aspectFor:menuSelector
   538                 ]
   539             ]
   540         ].
   541         ^ true
   542     ].
   543 
   544     ^ true
   545 ! !
   546 
   547 !UIGalleryView::Palette methodsFor:'focus handling'!
   548 
   549 subviewsInFocusOrder
   550     "returns none views - focus not handled within buildin canvas"
   551 
   552     ^ #()
   553 ! !
   554 
   555 !UIGalleryView::Palette methodsFor:'initialization'!
   556 
   557 destroy
   558     |winGrp|
   559 
   560     winGrp := self windowGroup.
   561     winGrp notNil ifTrue:[
   562         winGrp removePreEventHook:self.
   563     ].
   564     super destroy.
   565 !
   566 
   567 initialize
   568     super initialize.
   569     clientSpecHolder := nil asValue.
   570     hiddenCounter := 0.
   571     showBorders := true.
   572 !
   573 
   574 realize
   575     |winGrp|
   576 
   577     super realize.
   578     winGrp := self windowGroup.
   579     winGrp notNil ifTrue:[
   580         winGrp addPreEventHook:self.
   581    ].
   582 ! !
   583 
   584 !UIGalleryView::Palette methodsFor:'searching'!
   585 
   586 findObjectAt:aPoint
   587     |seeIfWidgetIsHit p x y|
   588 
   589     seeIfWidgetIsHit := 
   590         [:v |
   591             p := device translatePoint:aPoint fromView:self toView:v.
   592             x := p x.
   593             y := p y.
   594 
   595             (     x >= 0 and:[x <= v width
   596              and:[y >= 0 and:[y <= v height
   597              and:[(self findSpecFor:v) notNil]]]]
   598             ) ifTrue:[
   599                 ^ v
   600             ]
   601         ].
   602 
   603     subViews notNil ifTrue:[ subViews do:seeIfWidgetIsHit ].
   604     components notNil ifTrue:[ components do:seeIfWidgetIsHit ].
   605     ^ nil
   606 !
   607 
   608 findSpecFor:aWidget
   609     "returns the spec which is assigned to aWidget or nil"
   610 
   611     |name|
   612 
   613     aWidget notNil ifTrue:[
   614         name := aWidget name.
   615 
   616         specification do:[:aSpec|
   617             (aSpec notNil and:[aSpec name = name]) ifTrue:[
   618                 aSpec canUIDrag ifFalse:[^ nil ].
   619                 ^ aSpec
   620             ]
   621         ]
   622     ].
   623     ^ nil
   624 
   625     "Modified: / 18.5.1999 / 14:47:25 / cg"
   626 ! !
   627 
   628 !UIGalleryView::Palette methodsFor:'selection'!
   629 
   630 handlesOf:aComponent do:aOneArgBlock
   631     "evaluate the block on each handle; the argument to the block is a rectangle"
   632 
   633     |ext|
   634 
   635     ext := 8@8.
   636 
   637     aComponent notNil ifTrue:[
   638         aOneArgBlock value:(aComponent origin       - (3@3) extent:ext).
   639         aOneArgBlock value:(aComponent corner       - (2@2) extent:ext).
   640         aOneArgBlock value:(aComponent topRight     - (2@3) extent:ext).
   641         aOneArgBlock value:(aComponent bottomLeft   - (3@2) extent:ext).
   642         aOneArgBlock value:(aComponent leftCenter rounded   - (3@0) extent:ext).
   643         aOneArgBlock value:(aComponent rightCenter rounded  - (2@0) extent:ext).
   644         aOneArgBlock value:(aComponent topCenter rounded    - (0@3) extent:ext).
   645         aOneArgBlock value:(aComponent bottomCenter rounded - (0@2) extent:ext).
   646     ]
   647 !
   648 
   649 redrawSelection
   650     "redraw all items selected"
   651 
   652     (shown and:[selection notNil and:[hiddenCounter == 0]]) ifTrue:[
   653         self clippedByChildren:false.
   654 
   655         self handlesOf:selection do:[:aRectangle|
   656             self paint:Color black.
   657             self fillRectangle:aRectangle.
   658 
   659             self paint:Color white.
   660             self displayRectangle:(aRectangle insetBy:0).
   661         ].
   662         self clippedByChildren:true.
   663     ].
   664 !
   665 
   666 selection:aView
   667     "selection changed"
   668 
   669     |spec|
   670 
   671     selection == aView ifTrue:[^ self].
   672 
   673     self withSelectionHiddenDo:[
   674         spec := self findSpecFor:aView.
   675 
   676         selection := (spec isNil) ifTrue:[nil] ifFalse:[aView].
   677         clientSpecHolder value:spec.
   678     ].
   679 !
   680 
   681 withSelectionHiddenDo:aOneArgBlock
   682     [ 
   683         |r forceExpose|
   684         
   685         hiddenCounter :=  hiddenCounter + 1.
   686         hiddenCounter == 1 ifTrue:[
   687             (shown and:[selection notNil]) ifTrue:[
   688                 self clippedByChildren:false.
   689 
   690                 self handlesOf:selection do:[:aRectangle|
   691                     self clearRectangle:aRectangle.
   692                     self invalidateRectangle:aRectangle repairNow:false.
   693                 ].
   694                 self clippedByChildren:true.
   695 
   696                 r := selection bounds.
   697 
   698                 forceExpose := 
   699                     [:sv|
   700                         |absOrg absFrame|
   701 
   702                         (sv bounds intersects:r) ifTrue:[   
   703                             sv isView ifTrue:[
   704                                 sv borderColor:(Color white).           "/ kludge to force a redraw
   705                                 sv borderColor:(Color black).
   706 
   707                                 sv withAllSubViewsDo:[:v|
   708                                     v realized ifTrue:[
   709                                         v fill:v viewBackground.
   710                                         v exposeX:0 y:0 width:v width height:v height.
   711                                     ]
   712                                 ]
   713                             ] ifFalse:[
   714                                 sv invalidate.
   715                             ].
   716                         ]
   717                     ].
   718 
   719                 (subViews ? #()) do:forceExpose.
   720                 (components ? #()) do:forceExpose.
   721             ].
   722         ].
   723         self repairDamage.  "/ ensure that any outstanding clear/redraw of the unselect are done before
   724         aOneArgBlock value.
   725     ] ensure:[
   726         self repairDamage.  "/ ensure that any outstanding clear/redraw of the unselect are done before
   727 
   728         hiddenCounter := hiddenCounter - 1.
   729         self redrawSelection.
   730     ].
   731 ! !
   732 
   733 !UIGalleryView::Palette::DropSpec class methodsFor:'instance creation'!
   734 
   735 for:aWidget specification:aSpec
   736     "create drop object for a widget derived from a specification"
   737 
   738     |point extent rootView device inst displayObject view|
   739 
   740     device   := aWidget device.
   741     rootView := device rootView.
   742     extent   := aWidget extent.
   743     aWidget isView ifTrue:[
   744         view := aWidget.
   745         point := device translatePoint:0@0 fromView:aWidget toView:rootView.
   746     ] ifFalse:[
   747         view := aWidget container.
   748         point := device translatePoint:(aWidget origin) fromView:view toView:rootView.
   749     ].
   750     (point x > 0 and:[point y > 0]) ifTrue:[
   751         point := point + extent.
   752         (point x < rootView width and:[point y < rootView height]) ifTrue:[
   753             aWidget topView raise.
   754             device flush.
   755             aWidget invalidate.
   756             aWidget windowGroup processExposeEvents.
   757             displayObject := Image fromView:aWidget grab:false.
   758         ]
   759     ].
   760     displayObject isNil ifTrue:[
   761         displayObject := Form extent:extent depth:1.
   762         displayObject colorMap:(Array with:Color white with:Color black).
   763         displayObject fill:(Color colorId:0).
   764         displayObject paint:(Color colorId:1).
   765         displayObject displayRectangleX:0 y:0 width:aWidget extent x height:aWidget extent y.
   766     ].
   767     aSpec class == UISubSpecification ifTrue:[
   768         aSpec layout:(LayoutOrigin fromPoint:0@0)
   769     ].
   770 
   771     inst := self new.
   772     inst displayObject:displayObject.
   773     inst theObject:aSpec.
   774     ^ inst.
   775 
   776     "Modified: / 10.10.2001 / 14:03:00 / cg"
   777 ! !
   778 
   779 !UIGalleryView class methodsFor:'documentation'!
   780 
   781 version
   782     ^ '$Header$'
   783 ! !