@@ -14,14 +14,32 @@ Class {
1414 #instVars : [
1515 ' classesTree'
1616 ],
17+ #classVars : [
18+ ' UsePhlowActions'
19+ ],
1720 #category : #' GToolkit-Coder-UI-Navigation - Helpers'
1821}
1922
23+ { #category : #settings }
24+ GtCoderClassesTreeElement class >> dontUsePhlowActions [
25+ UsePhlowActions := false
26+ ]
27+
2028{ #category : #' instance creation' }
2129GtCoderClassesTreeElement class >> fromClasses: aCollectionOfClasses [
2230 ^ self new initializeWithClasses: aCollectionOfClasses
2331]
2432
33+ { #category : #settings }
34+ GtCoderClassesTreeElement class >> isUsePhlowAction [
35+ ^ UsePhlowActions ifNil: [ false ]
36+ ]
37+
38+ { #category : #settings }
39+ GtCoderClassesTreeElement class >> usePhlowActions [
40+ UsePhlowActions := true
41+ ]
42+
2543{ #category : #' private - context menu' }
2644GtCoderClassesTreeElement >> addPreviewButtonFor: refactoring to: elem cancelSelector: cancelSelector [
2745 | button |
@@ -104,35 +122,38 @@ GtCoderClassesTreeElement >> contextMenuFor: aClass [
104122
105123{ #category : #initialization }
106124GtCoderClassesTreeElement >> contextMenuForOneItem: aClass [
107- | aMenuItems |
108- aMenuItems := BrMenuItems new .
109- GtCoderClassTarget
110- actionsForObject: aClass
111- collect: [ :eachAction |
112- eachAction
113- asMenuItem: [ :aMenuItem | aMenuItems addItem: aMenuItem ]
114- withHostElement: self ].
115-
116- true ifTrue: [ ^ aMenuItems ].
117-
118- ^ BrMenuItemsPragmaBuilder new
119- object: aClass;
120- upToSuperclass: Behavior ;
121- pragma: #gtCoderSidebarIndexOneSubjectContextMenuItem: ;
122- methodArguments: {self };
123- sortByFirstPragmaArgument;
124- build
125+ < return: #BrMenuItems >
126+ ^ self isContextMenuFromPhlowActions
127+ ifTrue: [ GtCoderClassTarget menuItemsForObject: aClass hostElement: self ]
128+ ifFalse: [ BrMenuItemsPragmaBuilder new
129+ object: aClass;
130+ upToSuperclass: Behavior ;
131+ pragma: #gtCoderSidebarIndexOneSubjectContextMenuItem: ;
132+ methodArguments: {self };
133+ sortByFirstPragmaArgument;
134+ build ]
125135]
126136
127137{ #category : #initialization }
128138GtCoderClassesTreeElement >> contextMenuForSeveralItems: someClasses [
129- ^ BrMenuItemsPragmaBuilder new
130- object: Class ;
131- upToSuperclass: Behavior ;
132- pragma: #gtCoderSidebarIndexSeveralSubjectsContextMenuItem: ;
133- methodArguments: {someClasses. self };
134- sortByFirstPragmaArgument;
135- build
139+ < return: #BrMenuItems >
140+ ^ self isContextMenuFromPhlowActions
141+ ifTrue: [
142+ | aPhlowContext |
143+ aPhlowContext := GtPhlowContext new coderSelectedClasses: someClasses.
144+ GtCoderClassesTarget
145+ menuItemsForObject: someClasses anyOne
146+ inContext: aPhlowContext
147+ hostElement: self ]
148+ ifFalse: [
149+ BrMenuItemsPragmaBuilder new
150+ object: Class ;
151+ upToSuperclass: Behavior ;
152+ pragma: #gtCoderSidebarIndexSeveralSubjectsContextMenuItem: ;
153+ methodArguments: {someClasses.
154+ self };
155+ sortByFirstPragmaArgument;
156+ build ]
136157]
137158
138159{ #category : #' private - drag and drop' }
@@ -270,6 +291,11 @@ GtCoderClassesTreeElement >> initializeWithHierachyForClass: aClass [
270291 ^ self ] ]
271292]
272293
294+ { #category : #testing }
295+ GtCoderClassesTreeElement >> isContextMenuFromPhlowActions [
296+ ^ self class isUsePhlowAction
297+ ]
298+
273299{ #category : #' private - context menu' }
274300GtCoderClassesTreeElement >> newSubclassOf: aClass [
275301 | dropdown tabGroup |
@@ -320,66 +346,19 @@ GtCoderClassesTreeElement >> removeClassSubmenuFor: aClass [
320346 ^ BrMenuExplicit new
321347 stencil: [ :anExplicitMenu |
322348 GtCoderRemoveClassPreviewStencil new
323- classToRemove: self ;
349+ classToRemove: aClass ;
324350 menuModel: anExplicitMenu;
325351 asElement ]
326352]
327353
328354{ #category : #initialization }
329355GtCoderClassesTreeElement >> removeSeveralClassesSubmenuFor: someClasses [
330- | submenu |
331- submenu := BrMenuExplicit new .
332- ^ submenu
333- stencil: [ | element change button |
334- element := BrVerticalPane new fitContent.
335- element
336- addChild: ((self buildRemoveSeveralClassesLabelFor: someClasses)
337- margin: (BlInsets
338- top: 10
339- bottom: 0
340- left: 10
341- right: 10 )).
342- element
343- addChild: (BrAsyncWidget new
344- fitContent;
345- stencil: [ | pane references subclasses |
346- references := someClasses sumNumbers: [ :eachClass | (GtPharoIndex current
347- globalVariableReferencesTo: eachClass binding) size ].
348- subclasses := someClasses sumNumbers: [ :eachClass | (eachClass allSubclasses difference: someClasses) size ].
349- pane := BrVerticalPane new .
350- pane fitContent.
351- references > 0
352- ifTrue: [ pane
353- addChild: (BrLabel new
354- margin: (BlInsets left: 10 right: 10 );
355- aptitude: BrGlamorousLabelAptitude new glamorousRegularFont thin;
356- text: (references printString , ' reference'
357- , (references > 1 ifTrue: [ ' s' ] ifFalse: [ ' ' ])) asRopedText) ].
358- subclasses > 0
359- ifTrue: [ pane
360- addChild: (BrLabel new
361- margin: (BlInsets left: 10 right: 10 );
362- aptitude: BrGlamorousLabelAptitude new glamorousRegularFont thin;
363- text: (subclasses printString , ' subclass'
364- , (subclasses > 1 ifTrue: [ ' es' ] ifFalse: [ ' ' ])) asRopedText) ].
365- pane ]).
366- change := RBCompositeRefactoryChange new
367- name: (' Remove {1} classes' format: { someClasses size });
368- changes: (someClasses collect: [ :eachClass | RBRemoveClassChange remove: eachClass ]).
369- button := BrButton new
370- aptitude: BrGlamorousButtonWithIconAptitude ;
371- beSmallSize;
372- margin: (BlInsets
373- top: 10
374- bottom: 10
375- left: 10
376- right: 10 );
377- icon: BrGlamorousVectorIcons remove;
378- label: ' Remove' ;
379- action: [ submenu hideAll.
380- change execute ].
381- element addChild: button as: #removeButton .
382- element ]
356+ ^ BrMenuExplicit new
357+ stencil: [ :aMenuExplicit |
358+ GtCoderRemoveClassesPreviewStencil new
359+ classesToRemove: someClasses;
360+ menuModel: aMenuExplicit;
361+ asElement ]
383362]
384363
385364{ #category : #initialization }
0 commit comments