'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) !