'From Squeak3.8gamma of ''24 November 2004'' [latest update: #6662] on 17 May 2005 at 12:44:18 am'!
"Change Set: fixViewerBuilding
Date: 17 May 2005
Author: Takashi Yamamiya
This is a proposal about making a viewer of CPlayer.
- The viewer is made by CPlayer >> buildTileViewer.
- You can add #viewerSpecAdditions in new CPlayer class to make new
tiles. #viewerSpecAdditions answers a string of XML definition of
new category. The new category is shown at 5th in the categories.
- If you override #viewerSpecNode, the specification would be modified
more freely.
- If you override #buildTileViewer, you can attach any player in the
viewer ;)
"!
!CPlayer methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 21:36'!
buildTileViewer
"Answer a default viewer for the given player, not yet opened"
^ (CTileDefinition readXmlFrom: self viewerSpecNode)
newFor: self! !
!CPlayer methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:35'!
defaultViewerNode
^ XMLDOMParser parseDocumentFrom: self defaultViewerSpec readStream! !
!CPlayer methodsFor: '*Tweak-Tiles' stamp: 'tak 5/17/2005 00:31'!
defaultViewerSpec
"XMLDOMParser parseDocumentFrom: self basicNew defaultViewerSpec readStream"
^'
'! !
!CPlayer methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:39'!
viewerSpecAdditions
^ nil! !
!CPlayer methodsFor: '*Tweak-Tiles' stamp: 'tak 5/17/2005 00:32'!
viewerSpecNode
"Answer XML node of viewer definition"
"self basicNew viewerSpecNode"
| node additionalSpec additionalNode |
node _ self defaultViewerNode.
additionalSpec _ self viewerSpecAdditions.
additionalSpec
ifNotNil: [additionalNode _ XMLDOMParser parseDocumentFrom: additionalSpec readStream.
additionalNode elements
reverseDo: [:each | (node firstTagNamed: #viewer) elements add: each afterIndex: 4]].
^ node! !
!CButton methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:39'!
viewerSpecAdditions
^ '
'! !
!CImageButton methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:47'!
viewerSpecAdditions
^ super viewerSpecAdditions,
'
'! !
!CLabel methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:51'!
viewerSpecAdditions
^ '
'! !
!CList methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:52'!
viewerSpecAdditions
^ '
'! !
!CMagnifier methodsFor: '*Tweak-EToys' stamp: 'tak 5/16/2005 23:55'!
viewerSpecAdditions
^ '
'! !
!CProjectBuilder methodsFor: 'halo' stamp: 'tak 5/16/2005 21:14'!
onHaloViewer: aHandle
"The user has clicked on the open-viewer halo handle of an object"
| haloTarget viewer viewerTarget |
haloTarget := self halo target.
viewerTarget := haloTarget player ifNil: [haloTarget].
hand shiftPressed
ifTrue:
[viewer := CTileInspector open.
viewer target: viewerTarget]
ifFalse:
[Preferences viewersInFlaps
ifTrue:
[CViewerFlap openForTarget: viewerTarget inWorld: self]
ifFalse:
[viewerTarget buildTileViewer open]]! !
!CSlider methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:53'!
viewerSpecAdditions
^ '
'! !
!CTextEditor methodsFor: '*Tweak-Tiles' stamp: 'tak 5/16/2005 23:50'!
viewerSpecAdditions
^ '
'! !
!CTileDefinition class methodsFor: 'reading' stamp: 'tak 5/16/2005 21:35'!
readXmlFrom: xmlDocument
^ self xmlFrom: xmlDocument elements first! !
!CViewerFlap methodsFor: 'private' stamp: 'tak 5/16/2005 21:10'!
assureThatCategoryShows: aCategoryName
"Assure that the category of the given name is showing"
| aViewer |
(holder elements asArray detect: [:aCategoryViewer | aCategoryViewer header label = aCategoryName] ifNone: [nil]) ifNil:
[aViewer _ target buildTileViewer.
aViewer rebuildVariablesPage.
aViewer pointToCategoryNamed: aCategoryName.
holder addFirst: aViewer]! !
!CViewerFlap methodsFor: 'initialization' stamp: 'tak 5/16/2005 21:11'!
setupCostume
"Initialization: set up the costume of the receiver"
| aCategoryViewer bottommost otherTabs worldHeight |
super setupCostume.
self hResizing: #shrinkWrap;
vResizing: #spaceFill.
self layout: CTableLayout new.
self layout listDirection: #topToBottom.
self color: (Color white alpha: 0.3).
sticky := true.
header layout: CTableLayout new.
header layout listDirection: #leftToRight.
header hResizing: #spaceFill; vResizing: #shrinkWrap.
header color: Color white.
header borderStyle: #simple.
header borderColor: CWidgetLibrary default frameColor.
header borderWidth: 1.
header extent: 1@1.
closeButton roundCorners: true.
closeButton normalBorderColor: self borderColor.
closeButton label: 'x'.
closeButton normalTextColor: Color gray.
closeButton startScript: [self close "bad news if header bar is moved out of viewer"
] when: {closeButton. #mouseUp}.
closeButton balloonHelp: 'remove'.
header add: closeButton.
header add: (CPlayer new extent: 8@0; yourself). "spacer"
addCategoryViewerButton roundCorners: true.
addCategoryViewerButton normalBorderColor: self borderColor.
addCategoryViewerButton label: '+'.
addCategoryViewerButton normalTextColor: Color gray.
addCategoryViewerButton balloonHelp: 'add a category-viewer'.
header add: addCategoryViewerButton.
"header add: (CPlayer new extent: 6@0; yourself).
menuButton roundCorners: true.
menuButton normalBorderColor: header borderColor.
menuButton label: 'o'.
menuButton normalTextColor: Color gray.
menuButton balloonHelp: 'menu'.
header add: menuButton."
header add: (CPlayer new extent: 8@0; yourself).
addVariableButton roundCorners: false.
addVariableButton normalBorderColor: header borderColor.
addVariableButton label: 'v'.
addVariableButton normalTextColor: Color gray.
addVariableButton balloonHelp: 'add a variable.'.
header add: addVariableButton.
header add: (CPlayer new extent: 4@0; yourself).
namePane borderWidth: 0.
header add: namePane.
self add: header..
self holder layout: CTableLayout new.
holder layout listDirection: #topToBottom.
holder hResizing: #shrinkWrap;
vResizing: #shrinkWrap.
self add: holder.
aCategoryViewer _ self target buildTileViewer.
aCategoryViewer pointToCategoryNamed: 'basic'.
holder add: aCategoryViewer.
aCategoryViewer _ self target buildTileViewer.
aCategoryViewer pointToCategoryNamed: 'color and border'.
holder add: aCategoryViewer.
flapTab borderStyle: #simple; borderWidth: 1;
borderColor: CWidgetLibrary default frameColor; fillStyle: #solid;
extent: (self tabWidth @ self tabWidth).
flapTab propertyValueAt: #isViewerFlapTab put: true.
flapTab visible: false.
flapTab open. "So we can converse with the container"
self waitTick.
otherTabs _ flapTab container elements asArray select: [:e | ((e propertyValueAt: #isViewerFlapTab) == true) and: [e ~~ flapTab]].
bottommost _ otherTabs size > 0
ifTrue:
[(otherTabs collect: [:t | t bottom]) max]
ifFalse:
[26]. "CMenuBar's height"
worldHeight _ flapTab container height.
flapTab top _ bottommost min: (worldHeight - self tabWidth).
flapTab right _ flapTab container right - self width.
flapTab visible: true.
self height: worldHeight - self tabWidth! !
!CViewerFlap methodsFor: 'events' stamp: 'tak 5/16/2005 21:10'!
onAddCategoryViewer
"The user submitted contents to the searchField by hitting the Search button; trigger a search"
holder add: target buildTileViewer
! !
!CViewerFlap methodsFor: 'events' stamp: 'tak 5/16/2005 21:10'!
onFireInAddCategoryViewerButton
"The button for adding a category viewer was pressed -- respond accordingly"
| aCategoryViewer |
aCategoryViewer _ target buildTileViewer.
aCategoryViewer rebuildVariablesPage.
holder add: aCategoryViewer! !
CTileDefinition class removeSelector: #defaultViewerOn:!
CTileDefinition class removeSelector: #defaultViewerSpec!
CTileDefinition class removeSelector: #openDefaultViewerOn:!
!CTextEditor reorganize!
('accessing' allowEditing allowEditing: caseSensitiveSearch caseSensitiveSearch: contents contents: editor emphasis font font: hideTypeInCursor modified modified: mouseCursor mouseCursor: searchText searchText: showCaret showCaret: target target: value:)
('operations' append: enter paste: paste:select: redo revert save undo)
('text menu' copySelection cutSelection deleteSelection editMenu pasteSelection)
('initialize' defaultCostume defaultTarget initialize)
('text search' findNext findText findText: findText:wrapping: findText:wrapping:caseSensitive:)
('moving' moveCursorLeft moveCursorRight moveLineDown moveLineEnd moveLineStart moveLineUp movePageDown movePageUp moveTextEnd moveTextStart moveWordLeft moveWordRight selectCursorLeft selectCursorRight selectLineDown selectLineEnd selectLineStart selectLineUp selectTextEnd selectTextStart selectWordLeft selectWordRight)
('events' onAccept onAllowEditingChanged onContextMenu onKeyboardFocusEnter onKeyboardFocusLeave onKeyDown: onKeyStroke: onMouseDown: onMouseEnter onMouseLeave onMouseMoved: onMouseMove: onMouseUp: onTextModified onTextSelectionChanged openTextUrl: setTextCursor)
('converting' printValue: readValue:)
('selecting' selectAll selectAt: selectFrom:to: selection selectionStart selectionStart: selectionStop selectionStop: selection:)
('*Tweak-DevTools-ParseBackedText' expressionReplace:with: hideDropZones showDropZones:)
('*Tweak-Tiles' viewerSpecAdditions)
!
!CSlider reorganize!
('private' adoptValue:)
('streaming' atEnd atStart next peek prev)
('initialize' defaultCostume initialize)
('accessing' fraction max max: min min: orientation orientation: pageStep pageStep: range step step: visibleFraction visibleFraction:)
('*Tweak-Tiles' viewerSpecAdditions)
!
!CMagnifier reorganize!
('initialize' initialize setupCostume)
('accessing' showPointer showPointer: sourcePlayer sourcePlayer: trackPointer trackPointer:)
('magnifying' sourceForm sourceRectFrom:)
('updating' updateGraphics updatePosition updateTick)
('*Tweak-EToys' viewerSpecAdditions)
!
!CList reorganize!
('accessing' allowDeselect allowDeselect: collection contents contents: itemMaker itemMaker: items items:)
('initialize' defaultCostume initialize)
('events' onCursorChanged: onElementsChanged:from:to:event: onWrapCursorChanged:)
('private' drawAction)
('*Tweak-Tiles' viewerSpecAdditions)
!
!CLabel reorganize!
('initialize' defaultCostume initialize)
('accessing' label label:)
('*Tweak-Tiles' viewerSpecAdditions)
!
!CImageButton reorganize!
('initialize' defaultCostume)
('accessing' disabledImage disabledImage: normalImage normalImage: overImage overImage: pressedImage pressedImage: selectedImage selectedImage:)
('events' onButtonStateChanged onNormalImageChanged onSelectedChanged)
('*Tweak-Tiles' viewerSpecAdditions)
!
!CButton reorganize!
('initialize' defaultCostume defaultGroup initialize)
('selecting' deselect disable disabled enable select)
('accessing' group group: image image: label label: selected selected: state state:)
('*Tweak-Tiles' viewerSpecAdditions)
!