Chris Muller uploaded a new version of ToolBuilder-MVC to project Squeak 4.6:
http://source.squeak.org/squeak46/ToolBuilder-MVC-topa.43.mcz ==================== Summary ==================== Name: ToolBuilder-MVC-topa.43 Author: topa Time: 8 July 2015, 5:37:19.575 pm UUID: 9a12e4ba-acbe-4854-8db9-93c3efe1d7a5 Ancestors: ToolBuilder-MVC-mt.42 Cope for ToolBuilder-Kernel-topa.90 =============== Diff against ToolBuilder-MVC-mt.42 =============== Item was removed: - SystemOrganization addCategory: #'ToolBuilder-MVC'! Item was removed: - ToolBuilder subclass: #MVCToolBuilder - instanceVariableNames: 'panes topSize widgets parentMenu' - classVariableNames: '' - poolDictionaries: '' - category: 'ToolBuilder-MVC'! - - !MVCToolBuilder commentStamp: 'ar 2/11/2005 15:02' prior: 0! - The MVC tool builder.! Item was removed: - ----- Method: MVCToolBuilder class>>isActiveBuilder (in category 'accessing') ----- - isActiveBuilder - "Answer whether I am the currently active builder" - "This is really a way of answering whether 'Smalltalk isMVC'" - ScheduledControllers ifNil:[^false]. - ^(ScheduledControllers activeControllerProcess ifNil:[^false]) isTerminated not! Item was removed: - ----- Method: MVCToolBuilder>>asWindow: (in category 'private') ----- - asWindow: aRectangle - - | outer | - outer := parent window ifNil: [topSize]. - ^(aRectangle origin * outer extent) truncated - corner: (aRectangle corner * outer extent) truncated! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableAlternateMultiSelectionList: (in category 'widgets optional') ----- - buildPluggableAlternateMultiSelectionList: aSpec - - "Trim selector to one argument to match list expectations." - aSpec setIndex: (aSpec setIndex first: (aSpec setIndex findString: ':')) asSymbol. - ^ self buildPluggableList: aSpec.! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableButton: (in category 'widgets required') ----- - buildPluggableButton: aSpec - | widget label state | - label := aSpec label. - state := aSpec state. - widget := PluggableButtonView on: aSpec model - getState: (state isSymbol ifTrue:[state]) - action: aSpec action - label: (label isSymbol ifTrue:[label]). - self register: widget id: aSpec name. - label ifNotNil: [label isSymbol - ifTrue: [widget label: (aSpec model perform: label)] - ifFalse: [widget label: label]]. - self setFrame: aSpec frame in: widget. - parent ifNotNil: [parent addSubView: widget]. - ^widget! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableList: (in category 'widgets required') ----- - buildPluggableList: aSpec - | widget listClass getIndex setIndex | - aSpec getSelected ifNil:[ - listClass := PluggableListView. - getIndex := aSpec getIndex. - setIndex := aSpec setIndex. - ] ifNotNil:[ - listClass := PluggableListViewByItem. - getIndex := aSpec getSelected. - setIndex := aSpec setSelected. - ]. - widget := listClass on: aSpec model - list: aSpec list - selected: getIndex - changeSelected: setIndex - menu: aSpec menu - keystroke: aSpec keyPress. - self register: widget id: aSpec name. - self setFrame: aSpec frame in: widget. - parent ifNotNil:[parent addSubView: widget]. - panes ifNotNil:[ - aSpec list ifNotNil:[panes add: aSpec list]. - ]. - ^widget! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableMenu: (in category 'widgets required') ----- - buildPluggableMenu: menuSpec - "Just a very simple mapping to selection menu. It assumes that all item specs have the same receiver." - - | menu | - menu := CustomMenu new. - menuSpec items do: [:ea | - menu - add: ea label - target: ea action receiver - selector: ea action selector - argumentList: ea action arguments. - ea separator ifTrue: [menu addLine]]. - ^ menu! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableMenuItem: (in category 'widgets required') ----- - buildPluggableMenuItem: itemSpec - - ^ itemSpec label! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggablePanel: (in category 'widgets required') ----- - buildPluggablePanel: aSpec - | widget children | - widget := View new model: aSpec model. - widget borderWidth: 1. - self register: widget id: aSpec name. - children := aSpec children. - children isSymbol ifTrue:[ - "@@@@ FIXME: PluggablePanes need to remember their getChildrenSelector" - "widget getChildrenSelector: children. - widget update: children." - children := #(). - ]. - self setFrame: aSpec frame in: widget. - self buildAll: children in: widget. - parent ifNotNil:[parent addSubView: widget]. - self setLayout: aSpec layout in: widget. - ^widget! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableSpacer: (in category 'widgets required') ----- - buildPluggableSpacer: aSpec - - | widget | - widget := View new. - self register: widget id: aSpec name. - - widget borderWidth: 0. - widget backgroundColor: aSpec color. - widget window: (widget window topLeft extent: aSpec extent). - - self setFrame: aSpec frame in: widget. - - parent ifNotNil:[parent addSubView: widget]. - ^widget! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableText: (in category 'widgets required') ----- - buildPluggableText: aSpec - | widget | - widget := PluggableTextView on: aSpec model - text: aSpec getText - accept: aSpec setText - readSelection: aSpec selection - menu: aSpec menu. - self register: widget id: aSpec name. - self setFrame: aSpec frame in: widget. - parent ifNotNil:[parent addSubView: widget]. - panes ifNotNil:[ - aSpec getText ifNotNil:[panes add: aSpec getText]. - ]. - ^widget! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableTree: (in category 'widgets required') ----- - buildPluggableTree: aSpec - - self shouldBeImplemented.! Item was removed: - ----- Method: MVCToolBuilder>>buildPluggableWindow: (in category 'widgets required') ----- - buildPluggableWindow: aSpec - | widget children label | - topSize := 0@0 corner: 640@480. - aSpec layout == #proportional ifFalse:[ - "This needs to be implemented - probably by adding a single pane and then the rest" - ^self error: 'Not implemented'. - ]. - widget := StandardSystemView new. - self register: widget id: aSpec name. - widget model: aSpec model. - label := aSpec label. - label isSymbol ifTrue: [label := aSpec model perform: label]. - label isNil ifFalse: [widget setLabel: label]. - children := aSpec children. - children isSymbol ifTrue:[ - "This isn't implemented by StandardSystemView, so we fake it" - children := widget model perform: children. - ]. - aSpec extent ifNotNil:[topSize := 0@0 extent: aSpec extent]. - widget window: topSize. - panes := OrderedCollection new. - self buildAll: children in: widget. - widget setUpdatablePanesFrom: panes. - ^widget! Item was removed: - ----- Method: MVCToolBuilder>>close: (in category 'opening') ----- - close: aWidget - "Close a previously opened widget" - aWidget controller closeAndUnschedule.! Item was removed: - ----- Method: MVCToolBuilder>>open: (in category 'opening') ----- - open: anObject - "Build and open the object. Answer the widget opened." - | window | - window := (anObject isKindOf: View) - ifTrue: [anObject] - ifFalse: [self build: anObject]. - (window isKindOf: PopUpMenu) - ifTrue: [window invokeOn: nil]. - (window isKindOf: View) - ifTrue: [window controller open]. - ^window! Item was removed: - ----- Method: MVCToolBuilder>>open:label: (in category 'opening') ----- - open: anObject label: aString - "Build an open the object, labeling it appropriately. Answer the widget opened." - | window | - window := self build: anObject. - window label: aString. - window controller open. - ^window! Item was removed: - ----- Method: MVCToolBuilder>>openDebugger: (in category 'opening') ----- - openDebugger: anObject - "Build and open the object. Answer the widget opened." - | window | - window := self build: anObject. - window controller openNoTerminate. - ^window! Item was removed: - ----- Method: MVCToolBuilder>>openDebugger:label: (in category 'opening') ----- - openDebugger: anObject label: aString - "Build an open the object, labeling it appropriately. Answer the widget opened." - | window | - window := self build: anObject. - window label: aString. - window controller openNoTerminate. - ^window! Item was removed: - ----- Method: MVCToolBuilder>>openDebugger:label:closing: (in category 'opening') ----- - openDebugger: anObject label: aString closing: topView - "Build an open the object, labeling it appropriately. Answer the widget opened." - | window | - topView controller controlTerminate. - topView deEmphasize; erase. - - "a few hacks to get the scroll selection artifacts out when we got here by clicking in the list" - " topView subViewWantingControl ifNotNil: [ - topView subViewWantingControl controller controlTerminate - ]." - topView controller status: #closed. - window := self build: anObject. - window label: aString. - window controller openNoTerminate. - topView controller closeAndUnscheduleNoErase. - Processor terminateActive. - ^window! Item was removed: - ----- Method: MVCToolBuilder>>positionSubviewsWithin: (in category 'private') ----- - positionSubviewsWithin: widget - "Translate subviews to position the viewport of each subView relative to - the widget window origin. If subviews are repositioned, as in a row of button - views arranged within a view, then the transformations will later be rescaled - to fit the subviews within the widget window." - - widget subViews ifNotNilDo: [:subViews | - subViews isEmpty ifFalse: [ | translation | - translation := widget window origin - subViews first window origin. - subViews do: [:v | - v setTransformation: (v transformation translateBy: translation)]]]. - ! Item was removed: - ----- Method: MVCToolBuilder>>register:id: (in category 'private') ----- - register: widget id: id - id ifNil:[^self]. - widgets ifNil:[widgets := Dictionary new]. - widgets at: id put: widget.! Item was removed: - ----- Method: MVCToolBuilder>>runModal: (in category 'opening') ----- - runModal: aWidget - "Run the (previously opened) widget modally, e.g., - do not return control to the sender before the user has responded." - - ! Item was removed: - ----- Method: MVCToolBuilder>>setFrame:in: (in category 'private') ----- - setFrame: fractionsRectangleOrLayoutFrame in: widget - | win | - fractionsRectangleOrLayoutFrame ifNil: [^nil]. - win := fractionsRectangleOrLayoutFrame isRectangle - ifTrue: [self asWindow: fractionsRectangleOrLayoutFrame] - ifFalse: [fractionsRectangleOrLayoutFrame layout: nil in: topSize]. "assume LayoutFrame" - widget window: win.! Item was removed: - ----- Method: MVCToolBuilder>>setLayout:in: (in category 'private') ----- - setLayout: layout in: widget - "Arrange subview horizontally or vertically according to layout directive. - If the subview dimensions were specified with layout frames rather than explicit - rectangle sizes, then their window horizontal or vertical dimensions will be resized - as needed to fit within the widget extent." - - self positionSubviewsWithin: widget. - layout == #proportional ifTrue:[^self]. - layout == #horizontal ifTrue:[ - | prev subViewWidth widgetWidth xScale | - subViewWidth := (widget subViews collect: [:e | e window extent x]) sum. - widgetWidth := widget window extent x. - xScale := widgetWidth / subViewWidth. "to adjust corner of prev prior to align:" - prev := nil. - widget subViews do:[:next| | newWindowWidth newCorner | - prev ifNotNil:[ "resize prev window prior to aligning next" - xScale < 1 ifTrue: [ "proportional placement spec requires resizing" - newWindowWidth := (prev window extent x * xScale) truncated. - newCorner := (prev window origin x + newWindowWidth)@(prev window corner y). - prev setWindow: (prev window origin corner: newCorner)]. - next align: next viewport topLeft with: prev viewport topRight. - ]. - prev := next. - ]. - ^self]. - layout == #vertical ifTrue:[ - | prev subViewHeight widgetHeight yScale | - subViewHeight := (widget subViews collect: [:e | e window extent y]) sum. - widgetHeight := widget window extent y. - yScale := widgetHeight / subViewHeight. "to adjust corner of prev prior to align:" - prev := nil. - widget subViews do:[:next| | newWindowHeight newCorner | - prev ifNotNil:[ "resize prev window prior to aligning next" - yScale < 1 ifTrue: [ "proportional placement spec requires resizing" - newWindowHeight := (prev window extent y * yScale) truncated. - newCorner := (prev window corner x)@(prev window origin y + newWindowHeight). - prev setWindow: (prev window origin corner: newCorner)]. - next align: next viewport topLeft with: prev viewport bottomLeft. - ]. - prev := next. - ]. - ^self]. - ^self error: 'Unknown layout: ', layout.! Item was removed: - ----- Method: MVCToolBuilder>>widgetAt:ifAbsent: (in category 'private') ----- - widgetAt: id ifAbsent: aBlock - widgets ifNil:[^aBlock value]. - ^widgets at: id ifAbsent: aBlock! Item was removed: - UIManager subclass: #MVCUIManager - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'ToolBuilder-MVC'! - - !MVCUIManager commentStamp: 'dtl 5/2/2010 16:06' prior: 0! - MVCUIManager is a UIManager that implements user interface requests for an MVC user interface.! Item was removed: - ----- Method: MVCUIManager class>>isActiveManager (in category 'accessing') ----- - isActiveManager - "Answer whether I should act as the active ui manager" - "This is really a way of answering whether 'Smalltalk isMVC'" - ScheduledControllers ifNil:[^false]. - ^ScheduledControllers activeControllerProcess == Processor activeProcess! Item was removed: - ----- Method: MVCUIManager>>chooseDirectory:from: (in category 'ui requests') ----- - chooseDirectory: label from: dir - "Let the user choose a directory" - ^self notYetImplemented! Item was removed: - ----- Method: MVCUIManager>>chooseFileMatching:label: (in category 'ui requests') ----- - chooseFileMatching: patterns label: labelString - "Let the user choose a file matching the given patterns" - ^self notYetImplemented! Item was removed: - ----- Method: MVCUIManager>>chooseFont:for:setSelector:getSelector: (in category 'ui requests') ----- - chooseFont: aPrompt for: aTarget setSelector: setSelector getSelector: getSelector - "MVC Only!! prompt for a font and if one is provided, send it to aTarget using a message with selector aSelector." - | aMenu aChoice aStyle namesAndSizes aFont | - aMenu := CustomMenu new. - TextStyle actualTextStyles keysSortedSafely do: - [:styleName | - aMenu add: styleName action: styleName]. - aChoice := aMenu startUpWithCaption: aPrompt. - aChoice ifNil: [^ self]. - aMenu := CustomMenu new. - aStyle := TextStyle named: aChoice. - (namesAndSizes := aStyle fontNamesWithPointSizes) do: - [:aString | aMenu add: aString action: aString]. - aChoice := aMenu startUpWithCaption: nil. - aChoice ifNil: [^ self]. - aFont := aStyle fontAt: (namesAndSizes indexOf: aChoice). - aTarget perform: setSelector with: aFont! Item was removed: - ----- Method: MVCUIManager>>chooseFrom:lines:title: (in category 'ui requests') ----- - chooseFrom: aList lines: linesArray title: aString - "Choose an item from the given list. Answer the index of the selected item." - | menu | - menu := PopUpMenu labelArray: aList lines: linesArray. - ^aString isEmpty ifTrue:[menu startUp] ifFalse:[menu startUpWithCaption: aString]! Item was removed: - ----- Method: MVCUIManager>>chooseFrom:values:lines:title: (in category 'ui requests') ----- - chooseFrom: labelList values: valueList lines: linesArray title: aString - "Choose an item from the given list. Answer the selected item." - | menu | - menu := SelectionMenu labels: labelList lines: linesArray selections: valueList. - ^aString isEmpty ifTrue:[menu startUp] ifFalse:[menu startUpWithCaption: aString]! Item was removed: - ----- Method: MVCUIManager>>confirm: (in category 'ui requests') ----- - confirm: queryString - "Put up a yes/no menu with caption queryString. Answer true if the - response is yes, false if no. This is a modal question--the user must - respond yes or no." - ^PopUpMenu confirm: queryString! Item was removed: - ----- Method: MVCUIManager>>confirm:orCancel: (in category 'ui requests') ----- - confirm: aString orCancel: cancelBlock - "Put up a yes/no/cancel menu with caption aString. Answer true if - the response is yes, false if no. If cancel is chosen, evaluate - cancelBlock. This is a modal question--the user must respond yes or no." - ^PopUpMenu confirm: aString orCancel: cancelBlock! Item was removed: - ----- Method: MVCUIManager>>confirm:orCancel:title: (in category 'ui requests') ----- - confirm: aString orCancel: cancelBlock title: titleString - "Put up a yes/no/cancel menu with caption aString, and titleString to label the dialog. - Answer true if the response is yes, false if no. If cancel is chosen, evaluate cancelBlock. - This is a modal question--the user must respond yes or no." - ^ PopUpMenu - confirm: (self dialogStringFromQuery: aString withTitle: titleString) - orCancel: cancelBlock! Item was removed: - ----- Method: MVCUIManager>>confirm:title: (in category 'ui requests') ----- - confirm: queryString title: titleString - "Put up a yes/no menu with caption queryString, and titleString to label the dialog. - Answer true if the response is yes, false if no. This is a modal question--the user - must respond yes or no." - ^PopUpMenu confirm: (self dialogStringFromQuery: queryString withTitle: titleString) - ! Item was removed: - ----- Method: MVCUIManager>>confirm:title:trueChoice:falseChoice: (in category 'ui requests') ----- - confirm: queryString title: titleString trueChoice: trueChoice falseChoice: falseChoice - "Put up a yes/no menu with caption queryString, and titleString to label the dialog. - The actual wording for the two choices will be as provided in the trueChoice and - falseChoice parameters. Answer true if the response is the true-choice, false if it - is the false-choice. This is a modal question -- the user must respond one way or - the other." - ^ PopUpMenu - confirm: (self dialogStringFromQuery: queryString withTitle: titleString) - trueChoice: trueChoice - falseChoice: falseChoice! Item was removed: - ----- Method: MVCUIManager>>confirm:trueChoice:falseChoice: (in category 'ui requests') ----- - confirm: queryString trueChoice: trueChoice falseChoice: falseChoice - "Put up a yes/no menu with caption queryString. The actual wording for the two choices will be as provided in the trueChoice and falseChoice parameters. Answer true if the response is the true-choice, false if it's the false-choice. - This is a modal question -- the user must respond one way or the other." - ^PopUpMenu confirm: queryString trueChoice: trueChoice falseChoice: falseChoice! Item was removed: - ----- Method: MVCUIManager>>dialogStringFromQuery:withTitle: (in category 'private') ----- - dialogStringFromQuery: queryString withTitle: titleString - "In Morphic, it is common to display a simple dialog that has a title bar. In MVC, simple - dialogs are simple. If the UIManager requests a dialog with title, add the title as a simply - decorated line at the top of the dialog text." - ^String streamContents: [ :strm | - strm nextPutAll: '- '; - nextPutAll: titleString; - nextPutAll: ' -'; - nextPut: Character cr; - nextPutAll: queryString ] - ! Item was removed: - ----- Method: MVCUIManager>>displayProgress:at:from:to:during: (in category 'ui requests') ----- - displayProgress: titleString at: aPoint from: minVal to: maxVal during: workBlock - "Display titleString as a caption over a progress bar while workBlock is evaluated." - | delta savedArea captionText textFrame barFrame outerFrame result range lastW | - barFrame := aPoint - (75@10) corner: aPoint + (75@10). - captionText := DisplayText text: titleString asText allBold. - captionText - foregroundColor: Color black - backgroundColor: Color white. - textFrame := captionText boundingBox insetBy: -4. - textFrame := textFrame align: textFrame bottomCenter - with: barFrame topCenter + (0@2). - outerFrame := barFrame merge: textFrame. - delta := outerFrame amountToTranslateWithin: Display boundingBox. - barFrame := barFrame translateBy: delta. - textFrame := textFrame translateBy: delta. - outerFrame := outerFrame translateBy: delta. - savedArea := Form fromDisplay: outerFrame. - Display fillBlack: barFrame; fillWhite: (barFrame insetBy: 2). - Display fillBlack: textFrame; fillWhite: (textFrame insetBy: 2). - captionText displayOn: Display at: textFrame topLeft + (4@4). - range := maxVal = minVal ifTrue: [1] ifFalse: [maxVal - minVal]. "Avoid div by 0" - lastW := 0. - [result := workBlock value: "Supply the bar-update block for evaluation in the work block" - [:barVal | - | w | - w := ((barFrame width-4) asFloat * ((barVal-minVal) asFloat / range min: 1.0)) asInteger. - w ~= lastW ifTrue: [ - Display fillGray: (barFrame topLeft + (2@2) extent: w@16). - lastW := w]]] - ensure: [savedArea displayOn: Display at: outerFrame topLeft]. - ^result! Item was removed: - ----- Method: MVCUIManager>>edit:label:accept: (in category 'ui requests') ----- - edit: aText label: labelString accept: anAction - "Open an editor on the given string/text" - - Workspace new - acceptContents: aText; - acceptAction: anAction; - openLabel: labelString - ! Item was removed: - ----- Method: MVCUIManager>>inform: (in category 'ui requests') ----- - inform: aString - "Display a message for the user to read and then dismiss" - ^PopUpMenu inform: aString! Item was removed: - ----- Method: MVCUIManager>>informUser:during: (in category 'ui requests') ----- - informUser: aString during: aBlock - "Display a message above (or below if insufficient room) the cursor - during execution of the given block. - UIManager default informUser: 'Just a sec!!' during: [(Delay forSeconds: 1) wait]. - " - (SelectionMenu labels: '') - displayAt: Sensor cursorPoint - withCaption: aString - during: aBlock! Item was removed: - ----- Method: MVCUIManager>>informUserDuring: (in category 'ui requests') ----- - informUserDuring: aBlock - "Display a message above (or below if insufficient room) the cursor - during execution of the given block. - UIManager default informUserDuring:[:bar| - #(one two three) do:[:info| - bar value: info. - (Delay forSeconds: 1) wait]]" - aBlock value:[:string| Transcript cr; show: string].! Item was removed: - ----- Method: MVCUIManager>>multiLineRequest:centerAt:initialAnswer:answerHeight: (in category 'ui requests') ----- - multiLineRequest: queryString centerAt: aPoint initialAnswer: defaultAnswer answerHeight: answerHeight - "Create a multi-line instance of me whose question is queryString with - the given initial answer. Invoke it centered at the given point, and - answer the string the user accepts. Answer nil if the user cancels. An - empty string returned means that the ussr cleared the editing area and - then hit 'accept'. Because multiple lines are invited, we ask that the user - use the ENTER key, or (in morphic anyway) hit the 'accept' button, to - submit; that way, the return key can be typed to move to the next line." - ^FillInTheBlank multiLineRequest: queryString centerAt: aPoint initialAnswer: defaultAnswer answerHeight: answerHeight! Item was removed: - ----- Method: MVCUIManager>>newDisplayDepthNoRestore: (in category 'display') ----- - newDisplayDepthNoRestore: pixelSize - "Change depths. Check if there is enough space!! , di" - | area need | - pixelSize = Display depth ifTrue: [^ self "no change"]. - pixelSize abs < Display depth ifFalse: - ["Make sure there is enough space" - area := Display boundingBox area. "pixels" - ScheduledControllers scheduledWindowControllers do: - [:aController | "This should be refined..." - aController view cacheBitsAsTwoTone ifFalse: - [area := area + aController view windowBox area]]. - need := (area * (pixelSize abs - Display depth) // 8) "new bytes needed" - + Smalltalk lowSpaceThreshold. - (Smalltalk garbageCollectMost <= need - and: [Smalltalk garbageCollect <= need]) - ifTrue: [self error: 'Insufficient free space']]. - Display setExtent: Display extent depth: pixelSize. - ScheduledControllers updateGray. - DisplayScreen startUp! Item was removed: - ----- Method: MVCUIManager>>request:initialAnswer: (in category 'ui requests') ----- - request: queryString initialAnswer: defaultAnswer - "Create an instance of me whose question is queryString with the given - initial answer. Invoke it centered at the given point, and answer the - string the user accepts. Answer the empty string if the user cancels." - ^FillInTheBlank request: queryString initialAnswer: defaultAnswer ! Item was removed: - ----- Method: MVCUIManager>>request:initialAnswer:centerAt: (in category 'ui requests') ----- - request: queryString initialAnswer: defaultAnswer centerAt: aPoint - "Create an instance of me whose question is queryString with the given - initial answer. Invoke it centered at the given point, and answer the - string the user accepts. Answer the empty string if the user cancels." - ^ FillInTheBlank request: queryString initialAnswer: defaultAnswer centerAt: aPoint ! Item was removed: - ----- Method: MVCUIManager>>requestPassword: (in category 'ui requests') ----- - requestPassword: queryString - "Create an instance of me whose question is queryString. Invoke it centered - at the cursor, and answer the string the user accepts. Answer the empty - string if the user cancels." - ^FillInTheBlank requestPassword: queryString! Item was removed: - ----- Method: MVCUIManager>>restoreDisplay (in category 'display') ----- - restoreDisplay - "Restore the bits on Display" - Project current ifNotNil:[:p| p invalidate; restore].! Item was removed: - ----- Method: MVCUIManager>>restoreDisplayAfter: (in category 'display') ----- - restoreDisplayAfter: aBlock - "Evaluate the block, wait for a mouse click, and then restore the screen." - - aBlock value. - Sensor waitButton. - self restoreDisplay! |
Free forum by Nabble | Edit this page |