Skip to content

Commit d122bfa

Browse files
Merge pull request #229 from OpenSmock/dev-menuextensionv3
Better menu building test and working on menu extension v3
2 parents 4eeae90 + d68be4d commit d122bfa

File tree

2 files changed

+31
-85
lines changed

2 files changed

+31
-85
lines changed

src/Molecule-IDE-Tests/MolWorldTest.class.st

Lines changed: 8 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,6 @@ Class {
44
#category : #'Molecule-IDE-Tests-Cases'
55
}
66

7-
{ #category : #running }
8-
MolWorldTest >> testMenuDefinition [
9-
10-
self assert: (MolWorld menuDefinition: nil) isNil
11-
]
12-
137
{ #category : #running }
148
MolWorldTest >> testMenuKey [
159

@@ -24,51 +18,18 @@ MolWorldTest >> testOpenDefineComponentDialog [
2418
self assert: dialog notNil.
2519
]
2620

27-
{ #category : #running }
28-
MolWorldTest >> testOrder [
29-
30-
self assert: MolWorld order equals: 999
31-
]
32-
33-
{ #category : #running }
34-
MolWorldTest >> testParent [
35-
36-
self assert: MolWorld parent equals: #Tools
37-
]
38-
39-
{ #category : #tests }
40-
MolWorldTest >> testWorldMenu [
41-
| menuElements moleculeMenuEntry libraryMenu |
42-
43-
menuElements := self currentWorld worldState menuBuilder menuSpec items.
44-
libraryMenu := menuElements detect:[ :e | e name = #Tools ].
45-
46-
"Find Molecule entry"
47-
moleculeMenuEntry := libraryMenu subMenu items detect:[ :e | e name = #Molecule].
48-
self assert: moleculeMenuEntry notNil.
49-
]
50-
5121
{ #category : #tests }
5222
MolWorldTest >> testWorldMenuBuilding [
53-
| menuBuilder |
54-
menuBuilder := WorldState new menuBuilder.
5523

24+
| menuBuilder menuMethods |
25+
menuBuilder := PragmaMenuAndShortcutRegistration new.
5626
MolWorld menu00MoleculeOn: menuBuilder.
5727

58-
MolWorld menu10SystemStatusOn: menuBuilder.
59-
MolWorld menu20DebugOn: menuBuilder.
60-
MolWorld menu21BrowseClassesOn: menuBuilder.
61-
MolWorld menu30ComponentManagerCleanUpOn: menuBuilder.
62-
MolWorld menu40ExamplesOn: menuBuilder.
63-
MolWorld menu50GithubOn: menuBuilder.
64-
MolWorld menu60ReportBugOn: menuBuilder.
28+
menuMethods := MolWorld class pragmas select:[ :p | p selector = #worldMenu ] thenCollect:[ :p | p methodSelector ].
29+
self assert: menuMethods notEmpty.
6530

66-
MolWorld toolsMenu110DeepCleanUp: menuBuilder.
67-
MolWorld toolsMenu10DefineComponentOn: menuBuilder.
68-
MolWorld toolsMenu90DefineDirtyComponentsOn: menuBuilder.
69-
MolWorld toolsMenu40InspectAllComponentInstances: menuBuilder.
70-
MolWorld toolsMenu80InspectDirtyComponentTypes: menuBuilder.
71-
MolWorld toolsMenu70InspectDirtyComponents: menuBuilder.
72-
MolWorld toolsMenu30ToggleDynamicContractUpdate: menuBuilder.
73-
MolWorld toolsMenu20ToggleLogsOn: menuBuilder.
31+
menuMethods do:[ :p |
32+
MolWorld perform: p with: menuBuilder.
33+
].
34+
7435
]

src/Molecule-IDE/MolWorld.class.st

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@ MolWorld class >> menu00MoleculeOn: aBuilder [
6969

7070
<worldMenu>
7171
(aBuilder item: self menuKey)
72-
parent: self parent;
72+
parent: #Tools;
7373
label: 'Molecule';
7474
icon: MolIcon moleculeIcon;
7575
help: 'A component framework';
76-
order: self order;
76+
order: 999;
7777
with:[
7878
(aBuilder group: #MoleculeStatus)
7979
order: 1;
@@ -83,7 +83,9 @@ MolWorld class >> menu00MoleculeOn: aBuilder [
8383
withSeparatorAfter.
8484
(aBuilder group: #MoleculeLinks)
8585
order: 3.
86-
]
86+
].
87+
88+
self worldMenuPostBuildSetup: aBuilder
8789
]
8890

8991
{ #category : #menu }
@@ -213,23 +215,6 @@ MolWorld class >> menu60ReportBugOn: aBuilder [
213215
action: [WebBrowser openOn: 'https://github.com/OpenSmock/Molecule/issues/new']
214216
]
215217

216-
{ #category : #'private - menu' }
217-
MolWorld class >> menuDefinition: aPragmaString [
218-
"Get a menu definition related to a pragme, if not found return nil"
219-
220-
| list |
221-
aPragmaString ifNil: [ ^ nil ].
222-
223-
list := Pragma allNamed: aPragmaString.
224-
225-
^ list ifEmpty: [ nil ] ifNotEmpty: [ :e |
226-
| pragma class |
227-
pragma := e first.
228-
class := pragma methodClass.
229-
(class instanceSide respondsTo: pragma methodSelector) ifTrue: [
230-
class instanceSide perform: pragma methodSelector ] ]
231-
]
232-
233218
{ #category : #'private - menu' }
234219
MolWorld class >> menuKey [
235220

@@ -249,24 +234,6 @@ MolWorld class >> openDefineComponentDialog [
249234
^ dialogWindow
250235
]
251236

252-
{ #category : #'menu - definitions' }
253-
MolWorld class >> order [
254-
"Define the order of the root of this World Menu, override me to change the it"
255-
256-
"Use this pragma to overidde me in a new method => <MoleculeOrderWorldMenuDefinition>"
257-
258-
^ (self menuDefinition: 'MoleculeOrderWorldMenuDefinition') ifNil: [ 999 ]
259-
]
260-
261-
{ #category : #'menu - definitions' }
262-
MolWorld class >> parent [
263-
"Define the root parent of this World Menu, override me to change the location"
264-
265-
"Use this pragma to overidde me in a new method => <MoleculeParentWorldMenuDefinition>"
266-
267-
^ (self menuDefinition: 'MoleculeParentWorldMenuDefinition') ifNil: [ #Tools ]
268-
]
269-
270237
{ #category : #'menu - tools' }
271238
MolWorld class >> toolsMenu100DefineAllComponentsOn: aBuilder [
272239
<worldMenu>
@@ -441,6 +408,24 @@ MolWorld class >> toolsMenu90DefineDirtyComponentsOn: aBuilder [
441408
label: 'Define dirty Components'
442409
]
443410

411+
{ #category : #'private - menu' }
412+
MolWorld class >> worldMenuPostBuildSetup: aBuilder [
413+
"Setup a menu item after his build"
414+
415+
| list item |
416+
aBuilder ifNil:[ ^ self ].
417+
list := (Pragma allNamed: 'worldMenuItem:') select: [ :e |
418+
e hasArguments and: [ e arguments first = self menuKey ] ].
419+
420+
item := aBuilder items detect:[ :e | e item = self menuKey ] ifNone:[ ^ self ].
421+
422+
list do: [ :pragma |
423+
| class |
424+
class := pragma methodClass.
425+
(class instanceSide respondsTo: pragma methodSelector) ifTrue: [
426+
class instanceSide perform: pragma methodSelector with: item ] ]
427+
]
428+
444429
{ #category : #'see class side' }
445430
MolWorld >> seeClassSide [
446431
]

0 commit comments

Comments
 (0)