Andreas Raab uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-kb.240.mcz ==================== Summary ==================== Name: Morphic-kb.240 Author: kb Time: 20 November 2009, 1:40:40 am UUID: 3f82a1c6-ee8f-bf4b-98cc-a2ef45557219 Ancestors: Morphic-kb.239 - Refactoring of TheWorldMainDockingBar - Added some helper methods to MenuItemMorph, MenuMorph, DockingBarMorph - Added a menu to the docking bar listing windows not collapsed =============== Diff against Morphic-kb.238 =============== Item was added: + ----- Method: MenuItemMorph>>subMenuUpdater: (in category 'accessing') ----- + subMenuUpdater: aBlock + + subMenuUpdater := aBlock. + self changed. + ! Item was added: + ----- Method: MenuItemMorph>>updateSubMenu (in category 'selecting') ----- + updateSubMenu + + | menu | + subMenuUpdater ifNil: [^self ]. + menu := MenuMorph new. + subMenuUpdater value: menu. + self subMenu: menu! Item was changed: StringMorph subclass: #MenuItemMorph + instanceVariableNames: 'isEnabled subMenu isSelected target selector arguments icon lastMousePosition subMenuUpdater' - instanceVariableNames: 'isEnabled subMenu isSelected target selector arguments icon lastMousePosition' classVariableNames: 'SubMenuMarker' poolDictionaries: '' category: 'Morphic-Menus'! !MenuItemMorph commentStamp: '<historical>' prior: 0! I represent an item in a menu. Instance variables: isEnabled <Boolean> True if the menu item can be executed. subMenu <MenuMorph | nil> The submenu to activate automatically when the user mouses over the item. isSelected <Boolean> True if the item is currently selected. target <Object> The target of the associated action. selector <Symbol> The associated action. arguments <Array> The arguments for the associated action. icon <Form | nil> An optional icon form to be displayed to my left. If I have a dynamic marker, created by strings like <yes> or <no> in my contents, it will be installed as a submorph.! Item was added: + ----- Method: MenuMorph>>addItem: (in category 'construction') ----- + addItem: aBlock + + | item | + item := MenuItemMorph new. + aBlock value: item. + self addMorphBack: item! Item was added: + ----- Method: TheWorldMainDockingBar>>workspaceMenuItemOn: (in category 'submenu - tools') ----- + workspaceMenuItemOn: item + + item + contents: 'Workspace'; + help: 'Open a workspace'; + icon: (self colorIcon: Preferences workspaceWindowColor); + action: [ StandardToolSet openWorkspace ]! Item was added: + ----- Method: TheWorldMainDockingBar>>transcriptMenuItemOn: (in category 'submenu - tools') ----- + transcriptMenuItemOn: item + + item + contents: 'Transcript'; + help: 'Open the Transcript'; + icon: (self colorIcon: Preferences transcriptWindowColor); + action: [ Transcript open ]! Item was added: + ----- Method: TheWorldMainDockingBar>>loadProjectMenuItemOn: (in category 'submenu - projects') ----- + loadProjectMenuItemOn: item + + item + contents: 'Previous Project'; + help: 'Return to the most-recently-visited project'; + icon: MenuIcons smallBackIcon; + action: [ World goBack ]! Item was added: + ----- Method: TheWorldMainDockingBar>>toolsMenuOn: (in category 'construction') ----- + toolsMenuOn: aDockingBar + + aDockingBar addItem: [ :item | + item + contents: 'Tools' translated; + addSubMenu: [ :menu | self buildMenu: self toolsMenu on: menu ] ]! Item was added: + ----- Method: TheWorldMainDockingBar>>newProjectMenuItemOn: (in category 'submenu - projects') ----- + newProjectMenuItemOn: item + + item + contents: 'New Project'; + help: 'Start a new project'; + icon: MenuIcons smallProjectIcon; + action: [ MorphicProject openViewOn: nil ]! Item was added: + ----- Method: TheWorldMainDockingBar>>monticelloBrowserMenuItemOn: (in category 'submenu - tools') ----- + monticelloBrowserMenuItemOn: item + + item + contents: 'Monticello Browser'; + help: 'Open a Monticello Browser'; + icon: (self colorIcon: MCTool basicNew defaultBackgroundColor); + action: [ MCWorkingCopyBrowser open ]! Item was added: + ----- Method: DockingBarMorph>>addItem: (in category 'construction') ----- + addItem: aBlock + | item | + item := DockingBarItemMorph new. + aBlock value: item. + self addMorphBack: item! Item was added: + ----- Method: TheWorldMainDockingBar>>buildMenuItem:on: (in category 'private') ----- + buildMenuItem: aString on: menu + + aString first = $= ifTrue: [ ^menu addLine ]. + menu addItem: [ :item | + self perform: (aString, 'MenuItemOn:') asSymbol with: item ]. + ! Item was added: + ----- Method: TheWorldMainDockingBar>>saveAsMenuItemOn: (in category 'submenu - squeak') ----- + saveAsMenuItemOn: item + + item + contents: 'Save Image As...'; + help: 'Save the current state of Squeak on disk under a new name'; + icon: MenuIcons smallSaveAsIcon; + action: [ SmalltalkImage current saveAs ]! Item was added: + ----- Method: MenuItemMorph>>addSubMenu: (in category 'accessing') ----- + addSubMenu: aBlock + + subMenu := MenuMorph new. + aBlock value: subMenu. + self changed. + ! Item was added: + ----- Method: TheWorldMainDockingBar>>buildMenu:on: (in category 'private') ----- + buildMenu: description on: menu + + menu defaultTarget: self. + description do: [ :each | + self buildMenuItem: each on: menu ]! Item was changed: ----- Method: MenuItemMorph>>select: (in category 'selecting') ----- select: evt self isSelected: true. + self updateSubMenu. owner activeSubmenu: subMenu. subMenu ifNotNil: [ subMenu delete. subMenu popUpAdjacentTo: self adjacentTo forHand: evt hand from: self. subMenu selectItem: nil event: evt].! Item was added: + ----- Method: MenuItemMorph>>action: (in category 'accessing') ----- + action: aBlock + + self + target: aBlock; + selector: #value! Item was added: + ----- Method: TheWorldMainDockingBar>>projectsMenuOn: (in category 'construction') ----- + projectsMenuOn: aDockingBar + + aDockingBar addItem: [ :item | + item + contents: 'Projects' translated; + addSubMenu: [ :menu | self buildMenu: self projectsMenu on: menu ] ] + ! Item was added: + ----- Method: TheWorldMainDockingBar>>jumpToProjectMenuItemOn: (in category 'submenu - projects') ----- + jumpToProjectMenuItemOn: item + + item + contents: 'Jump To Project'; + icon: MenuIcons smallForwardIcon; + subMenuUpdater: [ :menu | + menu defaultTarget: Project. + Project buildJumpToMenu: menu ]! Item was added: + ----- Method: TheWorldMainDockingBar>>quitMenuItemOn: (in category 'submenu - squeak') ----- + quitMenuItemOn: item + + item + contents: 'Quit'; + help: 'Quit out of Squeak'; + icon: MenuIcons smallQuitIcon; + action: [ + SmalltalkImage current + snapshot: ( + self + confirm: 'Save changes before quitting?' translated + orCancel: [ ^self ]) + andQuit: true ]! Item was added: + ----- Method: TheWorldMainDockingBar>>saveMenuItemOn: (in category 'submenu - squeak') ----- + saveMenuItemOn: item + + item + contents: 'Save Image'; + help: 'Save the current state of Squeak on disk'; + icon: MenuIcons smallSaveIcon; + action: [ SmalltalkImage current snapshot: true andQuit: false ]! Item was added: + ----- Method: TheWorldMainDockingBar>>saveProjectMenuItemOn: (in category 'submenu - projects') ----- + saveProjectMenuItemOn: item + + item + contents: 'Save Project'; + help: 'Save this project on a file'; + icon: MenuIcons smallPublishIcon; + action: [ World saveOnFile ]! Item was added: + ----- Method: TheWorldMainDockingBar>>testRunnerMenuItemOn: (in category 'submenu - tools') ----- + testRunnerMenuItemOn: item + + item + contents: 'Test Runner'; + help: 'Open the Test Runner'; + icon: (self colorIcon: Preferences testRunnerWindowColor); + action: [ TestRunner open ]! Item was added: + ----- Method: TheWorldMainDockingBar>>squeakMenuOn: (in category 'construction') ----- + squeakMenuOn: aDockingBar + "Private - fill the given docking bar" + + aDockingBar addItem: [ :item | + item + contents: ''; + icon: MenuIcons squeakLogoIcon; + selectedIcon: MenuIcons squeakLogoInvertedIcon; + addSubMenu: [ :menu | self buildMenu: self squeakMenu on: menu ] ]! Item was added: + ----- Method: TheWorldMainDockingBar>>updateMenuItemOn: (in category 'submenu - squeak') ----- + updateMenuItemOn: item + + item + contents: 'Update Squeak'; + help: 'Load latest code updates via the internet'; + action: [ Utilities updateFromServer ]! Item was added: + ----- Method: TheWorldMainDockingBar>>saveAsNewVersionMenuItemOn: (in category 'submenu - squeak') ----- + saveAsNewVersionMenuItemOn: item + + item + contents: 'Save As New Version'; + help: 'Save the current state of Squeak on disk under a version-stamped name'; + icon: MenuIcons smallSaveAsIcon; + action: [ SmalltalkImage current saveAsNewVersion ]! Item was added: + ----- Method: TheWorldMainDockingBar>>aboutMenuItemOn: (in category 'submenu - squeak') ----- + aboutMenuItemOn: item + + item + contents: 'About Squeak...' translated; + action: [ ]! Item was added: + ----- Method: TheWorldMainDockingBar>>windowsMenuOn: (in category 'construction') ----- + windowsMenuOn: aDockingBar + + aDockingBar addItem: [ :item | + item + contents: 'Windows' translated; + subMenuUpdater: [ :menu | self listWindowsOn: menu ] ] + ! Item was added: + ----- Method: TheWorldMainDockingBar>>saveAndQuitMenuItemOn: (in category 'submenu - squeak') ----- + saveAndQuitMenuItemOn: item + + item + contents: 'Save And Quit'; + help: 'Save the current state of Squeak on disk, and quit out of Squeak'; + icon: MenuIcons smallQuitIcon; + action: [ SmalltalkImage current snapshot: true andQuit: true ]! Item was added: + ----- Method: TheWorldMainDockingBar>>browserMenuItemOn: (in category 'submenu - tools') ----- + browserMenuItemOn: item + + item + contents: 'Browser'; + help: 'Open a browser'; + icon: (self colorIcon: Preferences browserWindowColor); + action: [ StandardToolSet openClassBrowser ]! Item was added: + ----- Method: TheWorldMainDockingBar>>fileListMenuItemOn: (in category 'submenu - tools') ----- + fileListMenuItemOn: item + + item + contents: 'File List'; + help: 'Open a file list'; + icon: (self colorIcon: Preferences fileListWindowColor); + action: [ StandardToolSet openFileList ]! Item was changed: ----- Method: TheWorldMainDockingBar>>fillDockingBar: (in category 'construction') ----- fillDockingBar: aDockingBar "Private - fill the given docking bar" aDockingBar addSpace: 6. + self + squeakMenuOn: aDockingBar; + toolsMenuOn: aDockingBar; + projectsMenuOn: aDockingBar; + windowsMenuOn: aDockingBar. aDockingBar - add: '' - icon: MenuIcons squeakLogoIcon - selectedIcon: MenuIcons squeakLogoInvertedIcon - help: nil - subMenu: (self createSubmenuFrom: self squeakMenu). - aDockingBar - add: 'Tools' translated - icon: nil - help: nil - subMenu: (self createSubmenuFrom: self toolsMenu). - aDockingBar - add: 'Projects' translated - icon: nil - help: nil - subMenu: (self createSubmenuFrom: self projectsMenu). - aDockingBar setProperty: #mainDockingBarTimeStamp toValue: self class timeStamp! Item was added: + ----- Method: TheWorldMainDockingBar>>listWindowsOn: (in category 'construction') ----- + listWindowsOn: menu + + | expanded | + expanded := SystemWindow windowsIn: World satisfying: [ :w | w isCollapsed not ]. + expanded ifEmpty: [ + menu addItem: [ :item | + item + contents: 'No open Windows' translated; + isEnabled: false; + action: [ ] ] ]. + expanded do: [ :each | + menu addItem: [ :item | + item + contents: each label; + icon: (self colorIcon: each paneColor); + action: [ each activateAndForceLabelToShow ] ] ].! Item was added: + ----- Method: MenuItemMorph>>help: (in category 'accessing') ----- + help: aString + + self setBalloonText: aString! Item was removed: - ----- Method: TheWorldMainDockingBar>>updateMenuItem (in category 'submenu - squeak') ----- - updateMenuItem - - ^{ 'Update Squeak'. - 'Load latest code updates via the internet'. - nil. - [ Utilities updateFromServer ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>newProjectMenuItem (in category 'submenu - projects') ----- - newProjectMenuItem - - ^{ 'New Project'. - 'Start a new project'. - MenuIcons smallProjectIcon. - [ MorphicProject openViewOn: nil ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>saveAsNewVersionMenuItem (in category 'submenu - squeak') ----- - saveAsNewVersionMenuItem - - ^{ 'Save As New Version'. - 'Save the current state of Squeak on disk under a version-stamped name'. - MenuIcons smallSaveAsIcon. - [ SmalltalkImage current saveAsNewVersion ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>workspaceMenuItem (in category 'submenu - tools') ----- - workspaceMenuItem - - ^{ 'Workspace'. - 'Open a workspace'. - self colorIcon: Preferences workspaceWindowColor. - [ StandardToolSet openWorkspace ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>saveMenuItem (in category 'submenu - squeak') ----- - saveMenuItem - - ^{ 'Save Image'. - 'Save the current state of Squeak on disk'. - MenuIcons smallSaveIcon. - [ SmalltalkImage current snapshot: true andQuit: false ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>createMenuItem:on: (in category 'private') ----- - createMenuItem: selector on: menu - - | item wording help icon action | - selector first = $= - ifTrue: [ ^menu addLine ] - ifFalse: [ item := self perform: (selector, 'MenuItem') asSymbol ]. - wording := item first. - help := item second. - icon := item third. - action := item fourth. - action isSymbol - ifTrue: [ - menu - add: wording translated - target: self - selector: action ] - ifFalse: [ - action isBlock - ifTrue: [ - menu - add: wording translated - target: action - selector: #value ] - ifFalse: [ - menu - add: wording translated - subMenu: action ] ]. - help ifNotNil: [ - menu lastItem setBalloonText: help translated ]. - icon ifNotNil: [ - Preferences tinyDisplay ifFalse: [ - menu lastItem icon: icon ] ]! Item was removed: - ----- Method: TheWorldMainDockingBar>>saveAndQuitMenuItem (in category 'submenu - squeak') ----- - saveAndQuitMenuItem - - ^{ 'Save And Quit'. - 'Save the current state of Squeak on disk, and quit out of Squeak'. - MenuIcons smallQuitIcon. - [ SmalltalkImage current snapshot: true andQuit: true ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>fileListMenuItem (in category 'submenu - tools') ----- - fileListMenuItem - - ^{ 'File List'. - 'Open a file list'. - self colorIcon: Preferences fileListWindowColor. - [ StandardToolSet openFileList ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>monticelloBrowserMenuItem (in category 'submenu - tools') ----- - monticelloBrowserMenuItem - - ^{ 'Monticello Browser'. - 'Open a Monticello Browser'. - self colorIcon: MCTool basicNew defaultBackgroundColor. - [ MCWorkingCopyBrowser open ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>quitMenuItem (in category 'submenu - squeak') ----- - quitMenuItem - - ^{ 'Quit'. - 'Quit out of Squeak'. - MenuIcons smallQuitIcon. - [ SmalltalkImage current - snapshot: ( - self - confirm: 'Save changes before quitting?' translated - orCancel: [ ^self ]) - andQuit: true ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>aboutMenuItem (in category 'submenu - squeak') ----- - aboutMenuItem - - ^{ 'About Squeak...'. - nil. - nil. - [ ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>browserMenuItem (in category 'submenu - tools') ----- - browserMenuItem - - ^{ 'Browser'. - 'Open a browser'. - self colorIcon: Preferences browserWindowColor. - [ StandardToolSet openClassBrowser ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>saveProjectMenuItem (in category 'submenu - projects') ----- - saveProjectMenuItem - - ^{ 'Save Project'. - 'Save this project on a file'. - MenuIcons smallPublishIcon. - [ World saveOnFile ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>createSubmenuFrom: (in category 'private') ----- - createSubmenuFrom: description - - | menu | - menu := MenuMorph new defaultTarget: self. - description do: [ :each | - self createMenuItem: each on: menu ]. - ^menu! Item was removed: - ----- Method: TheWorldMainDockingBar>>loadProjectMenuItem (in category 'submenu - projects') ----- - loadProjectMenuItem - - ^{ 'Previous Project'. - 'Return to the most-recently-visited project'. - MenuIcons smallBackIcon. - [ World goBack ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>saveAsMenuItem (in category 'submenu - squeak') ----- - saveAsMenuItem - - ^{ 'Save Image As...'. - 'Save the current state of Squeak on disk under a new name'. - MenuIcons smallSaveAsIcon. - [ SmalltalkImage current saveAs ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>jumpToProjectMenuItem (in category 'submenu - projects') ----- - jumpToProjectMenuItem - - ^{ 'Jump To Project'. - 'Start a new project'. - MenuIcons smallForwardIcon. - [ Project jumpToProject ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>testRunnerMenuItem (in category 'submenu - tools') ----- - testRunnerMenuItem - - ^{ 'Test Runner'. - 'Open the Test Runner'. - self colorIcon: Preferences testRunnerWindowColor. - [ TestRunner open ] }! Item was removed: - ----- Method: TheWorldMainDockingBar>>transcriptMenuItem (in category 'submenu - tools') ----- - transcriptMenuItem - - ^{ 'Transcript'. - 'Open the Transcript'. - self colorIcon: Preferences transcriptWindowColor. - [ Transcript open ] }! |
Free forum by Nabble | Edit this page |