diff --git a/src/BaselineOfNewTools/BaselineOfNewTools.class.st b/src/BaselineOfNewTools/BaselineOfNewTools.class.st index fcee78ce0..2758bff08 100644 --- a/src/BaselineOfNewTools/BaselineOfNewTools.class.st +++ b/src/BaselineOfNewTools/BaselineOfNewTools.class.st @@ -82,15 +82,15 @@ BaselineOfNewTools >> baseline: spec [ package: 'NewTools-RewriterTools' with: [ spec requires: #('NewTools-RewriterTools-Backend') ]; package: 'NewTools-RewriterTools-Backend-Tests' with: [ spec requires: #('NewTools-RewriterTools-Backend') ]; package: 'NewTools-RewriterTools-Tests' with: [ spec requires: #('NewTools-RewriterTools') ]; + "Profiler" + package: 'NewTools-ProfilerUI'; "Scopes Editor" package: 'NewTools-Scopes'; package: 'NewTools-Scopes-Editor' with: [ spec requires: #('NewTools-Scopes') ]; package: 'NewTools-Scopes-Tests'; package: 'NewTools-Scopes-Resources-A-Tests'; package: 'NewTools-Scopes-Resources-B-Tests'; - package: 'NewTools-Scopes-Resources-C-Tests'; - "ProfilerUI" - package: 'NewTools-ProfilerUI'. + package: 'NewTools-Scopes-Resources-C-Tests'. spec group: 'Core' with: #( 'NewTools-Core' 'NewTools-Morphic' ); @@ -134,12 +134,11 @@ BaselineOfNewTools >> baseline: spec [ group: #FileBrowser with: #( 'NewTools-FileBrowser' 'NewTools-FileBrowser-Tests' ); - group: #RewriterTools with: #( - 'NewTools-RewriterTools-Backend' - 'NewTools-RewriterTools' - 'NewTools-RewriterTools-Backend-Tests' - 'NewTools-RewriterTools-Tests' ); - group: #ProfilerUI with: #( 'NewTools-ProfilerUI' ); + group: #RewriterTools with: #( + 'NewTools-RewriterTools-Backend' + 'NewTools-RewriterTools' + 'NewTools-RewriterTools-Backend-Tests' + 'NewTools-RewriterTools-Tests' ); "ScopesEditor" group: #ScopesEditor with: #( 'NewTools-Scopes' @@ -153,13 +152,12 @@ BaselineOfNewTools >> baseline: spec [ 'Inspector' 'CritiqueBrowser' 'Debugger' - 'SystemReporter' + 'SystemReporter' 'FontChooser' 'Methods' - 'Spotter' - 'RewriterTools' - 'ScopesEditor' - 'ProfilerUI') ] + 'Spotter' + 'RewriterTools' + 'ScopesEditor') ] ] { #category : 'external projects' } diff --git a/src/NewTools-FontChooser/StFontChooserPresenter.class.st b/src/NewTools-FontChooser/StFontChooserPresenter.class.st index 22ef78ec8..270af02b0 100644 --- a/src/NewTools-FontChooser/StFontChooserPresenter.class.st +++ b/src/NewTools-FontChooser/StFontChooserPresenter.class.st @@ -167,9 +167,8 @@ StFontChooserPresenter >> initializeDialogWindow: aDialogWindowPresenter [ super initializeDialogWindow: aDialogWindowPresenter. aDialogWindowPresenter - addButton: 'Apply' do: [ :presenter | self applyChanges ]; addButton: 'Update' do: [ :presenter | self updateFonts ]; - okAction: [ self applyChanges ]. + addDefaultButton: 'Apply' do: [ :presenter | self applyChanges ] ] diff --git a/src/NewTools-Gtk/StGtkDebugSession.class.st b/src/NewTools-Gtk/StGtkDebugSession.class.st index 9b26997e3..902db28c4 100644 --- a/src/NewTools-Gtk/StGtkDebugSession.class.st +++ b/src/NewTools-Gtk/StGtkDebugSession.class.st @@ -20,7 +20,7 @@ StGtkDebugSession >> application: anApplication [ application := anApplication ] -{ #category : 'private' } +{ #category : 'initialization' } StGtkDebugSession >> initialize [ super initialize. diff --git a/src/NewTools-Gtk/StPharoGtkConfiguration.class.st b/src/NewTools-Gtk/StPharoGtkConfiguration.class.st index 3cd92a06e..76ca67204 100644 --- a/src/NewTools-Gtk/StPharoGtkConfiguration.class.st +++ b/src/NewTools-Gtk/StPharoGtkConfiguration.class.st @@ -15,14 +15,14 @@ StPharoGtkConfiguration >> commonStyle [ ^ ' /* compact toolbar */ -toolbar.stToolbar { font-size: 0.7em } -toolbar.stToolbar toolbutton > button { padding: 2px; margin: 2px } +toolbar.stToolbar { font-size: 0.7em; } +toolbar.stToolbar toolbutton > button { padding: 2px; margin: 2px; } -.dim { color: LightSlateGrey } +.dim { color: LightSlateGrey; } .codePopover, .codePopover text { background-color: transparent; } -.scrollbarPopoverLarge { min-height: 350px } +.scrollbarPopoverLarge { min-height: 350px; } ' ] @@ -41,7 +41,7 @@ StPharoGtkConfiguration >> configureOSX: anApplication [ self installTheme: self macThemeName. self addCSSProviderFromString: ' -.code { font: 12pt "Monaco" } +.code { font: 12pt "Monaco"; } ' ] @@ -50,7 +50,7 @@ StPharoGtkConfiguration >> configureUnix: anApplication [ self unixThemeName ifNotNil: [ :aName | self installTheme: aName ]. self addCSSProviderFromString: ' -.code { /* font: 10pt "Source Code Pro" */ } +/* .code { font: 10pt "Source Code Pro" } */ ' ] @@ -59,7 +59,7 @@ StPharoGtkConfiguration >> configureWindows: anApplication [ self installTheme: self windowsThemeName. self addCSSProviderFromString: ' -.code { font: 10pt "Microsoft Sans Serif" } +.code { font: 10pt "Microsoft Sans Serif"; } ' ] diff --git a/src/NewTools-Gtk/StPharoGtkDarkConfiguration.class.st b/src/NewTools-Gtk/StPharoGtkDarkConfiguration.class.st index 512771d9e..519697dc1 100644 --- a/src/NewTools-Gtk/StPharoGtkDarkConfiguration.class.st +++ b/src/NewTools-Gtk/StPharoGtkDarkConfiguration.class.st @@ -9,6 +9,12 @@ Class { #package : 'NewTools-Gtk' } +{ #category : 'testing' } +StPharoGtkDarkConfiguration >> isDarkTheme [ + + ^ true +] + { #category : 'accessing' } StPharoGtkDarkConfiguration >> macThemeName [ diff --git a/src/NewTools-Inspector/StInspector.class.st b/src/NewTools-Inspector/StInspector.class.st index 3b270f243..df5bfa480 100644 --- a/src/NewTools-Inspector/StInspector.class.st +++ b/src/NewTools-Inspector/StInspector.class.st @@ -1,3 +1,16 @@ +" +I am an inspector of objects. +I offer multiple views using a miller list as a navigation. +One particular feature is that you can use the evaluator tab to enter code, and evaluating it results in opening another pane to the right. + +The object finder asks dynamically the object for the actual presentations that are displayed in each pane. + +Example: +self openOn: Smalltalk. + +Register it as a replacement for inspector: +self registerToolsOn: Smalltalk tools. +" Class { #name : 'StInspector', #superclass : 'StInspectorPresenter', diff --git a/src/NewTools-MethodBrowsers/AbstractMessageCentricBrowser.class.st b/src/NewTools-MethodBrowsers/AbstractMessageCentricBrowser.class.st index 9fd5ac6ff..4a788cbaa 100644 --- a/src/NewTools-MethodBrowsers/AbstractMessageCentricBrowser.class.st +++ b/src/NewTools-MethodBrowsers/AbstractMessageCentricBrowser.class.st @@ -1,6 +1,6 @@ Class { #name : 'AbstractMessageCentricBrowser', - #superclass : 'AbstractMessageCentricBrowserPresenter', + #superclass : 'StAbstractMessageCentricBrowserPresenter', #category : 'NewTools-MethodBrowsers-Deprecated', #package : 'NewTools-MethodBrowsers', #tag : 'Deprecated' diff --git a/src/NewTools-MethodBrowsers/MessageBrowser.class.st b/src/NewTools-MethodBrowsers/MessageBrowser.class.st index 1795069d4..a2d852f64 100644 --- a/src/NewTools-MethodBrowsers/MessageBrowser.class.st +++ b/src/NewTools-MethodBrowsers/MessageBrowser.class.st @@ -1,6 +1,6 @@ Class { #name : 'MessageBrowser', - #superclass : 'StMessageBrowserPresenter', + #superclass : 'StMessageBrowser', #category : 'NewTools-MethodBrowsers-Deprecated', #package : 'NewTools-MethodBrowsers', #tag : 'Deprecated' diff --git a/src/NewTools-MethodBrowsers/MessageBrowserPresenter.class.st b/src/NewTools-MethodBrowsers/MessageBrowserPresenter.class.st index 2c1afce3f..8f4dcb2c2 100644 --- a/src/NewTools-MethodBrowsers/MessageBrowserPresenter.class.st +++ b/src/NewTools-MethodBrowsers/MessageBrowserPresenter.class.st @@ -1,6 +1,6 @@ Class { #name : 'MessageBrowserPresenter', - #superclass : 'StMessageBrowserPresenter', + #superclass : 'StMessageBrowser', #category : 'NewTools-MethodBrowsers-Deprecated', #package : 'NewTools-MethodBrowsers', #tag : 'Deprecated' diff --git a/src/NewTools-MethodBrowsers/MessageList.class.st b/src/NewTools-MethodBrowsers/MessageList.class.st index 3a502ebbf..a6b6beb96 100644 --- a/src/NewTools-MethodBrowsers/MessageList.class.st +++ b/src/NewTools-MethodBrowsers/MessageList.class.st @@ -1,6 +1,6 @@ Class { #name : 'MessageList', - #superclass : 'MessageListPresenter', + #superclass : 'StMessageListPresenter', #category : 'NewTools-MethodBrowsers-Deprecated', #package : 'NewTools-MethodBrowsers', #tag : 'Deprecated' diff --git a/src/NewTools-MethodBrowsers/MessageListPresenter.class.st b/src/NewTools-MethodBrowsers/MessageListPresenter.class.st deleted file mode 100644 index b7869789e..000000000 --- a/src/NewTools-MethodBrowsers/MessageListPresenter.class.st +++ /dev/null @@ -1,416 +0,0 @@ -" -I am a presenter listing messages. - -I am used by more complexe browsers such as MessageBrowser or VersionBrowser. - - -Internal Representation and Key Implementation Points. --------------------- - - Instance Variables - cachedHierarchy: A cache keeping info about the level of a class in the list. - listModel: A list presenter to show all the messages. - model:  A model grouping generic methods for managing packages/classes/groups/methods from a browser - topologySort: A boolean to know if we should use a topology sort or not. - -" -Class { - #name : 'MessageListPresenter', - #superclass : 'SpPresenter', - #instVars : [ - 'cachedHierarchy', - 'topologySort', - 'method', - 'listPresenter' - ], - #category : 'NewTools-MethodBrowsers-Base', - #package : 'NewTools-MethodBrowsers', - #tag : 'Base' -} - -{ #category : 'layout' } -MessageListPresenter class >> defaultLayout [ - - ^ SpBoxLayout newTopToBottom - add: #listPresenter; - yourself -] - -{ #category : 'private' } -MessageListPresenter >> authorOf: anItem [ - ^ anItem author -] - -{ #category : 'actions' } -MessageListPresenter >> browseClassRefs [ - - self currentMethod ifNotNil: [ :aMethod | - self systemNavigation browseAllUsersOfClassOrTrait: aMethod methodClass ] -] - -{ #category : 'actions' } -MessageListPresenter >> browseMessages [ - - self currentMethod ifNotNil: [ :aMethod | - SystemNavigation new browseImplementorsOf: aMethod selector ] -] - -{ #category : 'actions' } -MessageListPresenter >> browseMethod [ - - self currentMethod ifNotNil: [ :aMethod | self systemNavigation browse: aMethod ] -] - -{ #category : 'actions' } -MessageListPresenter >> browseSendersOfMessage [ - - self currentMethod ifNotNil: [ :aMethod | - self systemNavigation browseAllSendersOf: aMethod selector ] -] - -{ #category : 'actions' } -MessageListPresenter >> browseVersions [ - - self currentMethod ifNotNil: [ :aMethod | - self application tools versionBrowser browseVersionsForMethod: aMethod compiledMethod ] -] - -{ #category : 'testing' } -MessageListPresenter >> buildHierarchyForMessages: messages [ - | result classes | - self topologicSort ifFalse: [ - result := IdentityDictionary new. - messages do: [:m | result at: m put: {} ]. - ^ result ]. - - result := Dictionary new. - classes := (messages collect: [ :each | each methodClass ]) asSet. - messages do: [:message || level class | - class := message methodClass. - level := OrderedCollection new. - class allSuperclassesDo: [:superClass | - (classes includes: superClass) - ifTrue: [ level addFirst: superClass ]]. - level addLast: class. - level addLast: message selector. - result at: message put: level ]. - ^ result -] - -{ #category : 'testing' } -MessageListPresenter >> cacheHierarchyForClasses: aCollection [ - cachedHierarchy := self buildHierarchyForMessages: aCollection. -] - -{ #category : 'api' } -MessageListPresenter >> contextMenu: aMenuPresenter [ - listPresenter contextMenu: aMenuPresenter -] - -{ #category : 'private' } -MessageListPresenter >> currentMethod [ - - ^ method -] - -{ #category : 'transmission' } -MessageListPresenter >> defaultOutputPort [ - - ^ self outputSelectionPort -] - -{ #category : 'private - actions' } -MessageListPresenter >> doBrowseImplementors [ - - self systemNavigation browseAllImplementorsOf: self selectedMethod selector -] - -{ #category : 'private - actions' } -MessageListPresenter >> doBrowseMethod [ - - self systemNavigation browse: self selectedMethod -] - -{ #category : 'private - actions' } -MessageListPresenter >> doBrowseSenders [ - - self systemNavigation browseAllSendersOf: self selectedMethod selector -] - -{ #category : 'private - actions' } -MessageListPresenter >> doBrowseUsers [ - - self systemNavigation browseAllUsersOfClassOrTrait: self selectedMethod methodClass -] - -{ #category : 'private - actions' } -MessageListPresenter >> doBrowseVersions [ - - self systemNavigation browseVersionsOf: self selectedMethod -] - -{ #category : 'private - actions' } -MessageListPresenter >> doInspectMethod [ - - self systemNavigation inspect: self selectedMethod -] - -{ #category : 'private - actions' } -MessageListPresenter >> doRemoveMethod [ - - self selectedMethod removeFromSystem -] - -{ #category : 'private - focus' } -MessageListPresenter >> ensureKeyBindingsFor: aWidget [ - aWidget bindKeyCombination: PharoShortcuts current browseShortcut toAction: [ self browseMethod ]. - aWidget bindKeyCombination: PharoShortcuts current inspectItShortcut toAction: [ self inspectMethod ]. - aWidget bindKeyCombination: PharoShortcuts current browseImplementorsShortcut toAction: [ self browseMessages ]. - aWidget bindKeyCombination: PharoShortcuts current browseSendersShortcut toAction: [ self browseSendersOfMessage ]. - aWidget bindKeyCombination: PharoShortcuts current browseReferencesShortcut toAction: [ self browseClassRefs ]. - aWidget bindKeyCombination: PharoShortcuts current browseVersionsShortcut toAction: [ self browseVersions ]. - aWidget bindKeyCombination: PharoShortcuts current removeShortcut toAction: [ self removeMethods ] -] - -{ #category : 'initialization' } -MessageListPresenter >> initialize [ - super initialize. - topologySort := true - -] - -{ #category : 'initialization' } -MessageListPresenter >> initializePresenters [ - listPresenter := self newTable. - - listPresenter - sortingBlock: [ :a :b | self sortClassesInCachedHierarchy: a b: b ]; - addColumn: (SpStringTableColumn title: 'Location' evaluated: [ :item | self locationOf: item ]); - addColumn: (SpStringTableColumn title: 'Selector' evaluated: [ :item | self selectorOf: item ]); - addColumn: (SpStringTableColumn title: 'Package' evaluated: [ :item | self packageOf: item ]); - addColumn: (SpStringTableColumn title: 'Time' evaluated: [ :item | self timeStampOf: item ]); - addColumn: (SpStringTableColumn title: 'Author' evaluated: [ :item | self authorOf: item ]); - beResizable. - - listPresenter outputActivationPort transmitDo: [ :aMethod | self doBrowseMethod ]. - - self contextMenu: self messageListMenu -] - -{ #category : 'actions' } -MessageListPresenter >> inspectMethod [ - - self currentMethod ifNotNil: [ :aMethod | aMethod inspect ] -] - -{ #category : 'accessing' } -MessageListPresenter >> listPresenter [ - - ^ listPresenter -] - -{ #category : 'accessing' } -MessageListPresenter >> locationOf: anItem [ - ^ String - streamContents: [ :aStream | - 3 to: (cachedHierarchy at: anItem) size do: [ :i | aStream << ' ' ]. - aStream << (self methodClassNameForItem: anItem) << ' ('. - anItem isFromTrait - ifTrue: [ aStream - << anItem compiledMethod origin name; - space ]. - aStream << (self protocolNameForItem: anItem) << ')' ] -] - -{ #category : 'private' } -MessageListPresenter >> messageListMenu [ - - ^ self newMenu - addGroup: [ :group | group - addItem: [ :item | item - name: 'Browse full'; - shortcut: $b meta; - action: [ self doBrowseMethod ] ]; - addItem: [ :item | item - name: 'Inspect method'; - shortcut: $i meta; - action: [ self doInspectMethod ] ] ]; - addGroup: [ :group | group - addItem: [ :item | item - name: 'Remove method'; - shortcut: $x meta; - action: [ self doRemoveMethod ] ]; - addItem: [ :item | item - name: 'Senders'; - shortcut: $n meta; - action: [ self doBrowseSenders ] ]; - addItem: [ :item | item - name: 'Implementors'; - shortcut: $m meta; - action: [ self doBrowseImplementors ] ] ]; - addItem: [ :items | items - name: 'Users'; - shortcut: $N meta; - action: [ self doBrowseUsers ] ]; - addItem: [ :item | item - name: 'Versions'; - shortcut: $v meta; - action: [ self doBrowseVersions ] ]; - yourself -] - -{ #category : 'accessing' } -MessageListPresenter >> messages [ - ^ listPresenter items -] - -{ #category : 'accessing' } -MessageListPresenter >> messages: aCollection [ - self cacheHierarchyForClasses: aCollection. - listPresenter items: cachedHierarchy keys asOrderedCollection. - listPresenter listSize > 0 ifTrue: [ listPresenter selectIndex: 1 ] -] - -{ #category : 'private' } -MessageListPresenter >> methodClassNameForItem: anItem [ - ^ anItem methodClass ifNotNil: [ :class | class name ] ifNil: [ '' ] -] - -{ #category : 'accessing' } -MessageListPresenter >> numberOfElements [ - ^ listPresenter listSize -] - -{ #category : 'transmission' } -MessageListPresenter >> outputActivationPort [ - - ^ (SpActivationPort newPresenter: self) - delegateTo: [ listPresenter ]; - yourself -] - -{ #category : 'transmission' } -MessageListPresenter >> outputSelectionPort [ - - ^ (SpSelectionPort newPresenter: self) - delegateTo: [ listPresenter ]; - yourself -] - -{ #category : 'private' } -MessageListPresenter >> packageNameForItem: anItem [ - ^ anItem package ifNil: [ '' ] ifNotNil: [ :package | package name ] -] - -{ #category : 'private' } -MessageListPresenter >> packageOf: anItem [ - ^ '[' , (self packageNameForItem: anItem) , ']' -] - -{ #category : 'private' } -MessageListPresenter >> protocolNameForItem: anItem [ - - ^ anItem protocolName ifNil: [ '' ] -] - -{ #category : 'actions' } -MessageListPresenter >> removeMethods [ - - self currentMethod ifNotNil: [ :aMethod | - SystemNavigation new removeMethod: aMethod inClass: aMethod methodClass ] -] - -{ #category : 'selecting' } -MessageListPresenter >> selectIndex: anInteger [ - - listPresenter selectIndex: anInteger -] - -{ #category : 'accessing' } -MessageListPresenter >> selectMessage: aMessage [ - listPresenter selectItem: aMessage -] - -{ #category : 'selecting' } -MessageListPresenter >> selectedIndex [ - ^ listPresenter selection selectedIndex -] - -{ #category : 'accessing' } -MessageListPresenter >> selectedMessage [ - ^ listPresenter selection selectedItem -] - -{ #category : 'accessing' } -MessageListPresenter >> selectedMethod [ - self selectedMessage ifNil: [ ^ nil ]. - - ^ self selectedMessage compiledMethod -] - -{ #category : 'accessing' } -MessageListPresenter >> selectorOf: anItem [ - ^ anItem selector -] - -{ #category : 'initialization' } -MessageListPresenter >> setModelBeforeInitialization: aMethod [ - - method := aMethod -] - -{ #category : 'sorting' } -MessageListPresenter >> sortClassesInCachedHierarchy: aMethodDefinition b: otherMethodDefinition [ - "This method checks wether the cached inheritance hierarchy of a method should be before than the one of another method. - It compares alphabetically the hierarchy using #compare: - If both are alphabetically equals, it uses the size the hierarchy. - We do not know why this is done like this." - | aMethodHierarchy otherMethodHierarchy minSize| - aMethodHierarchy := cachedHierarchy at: aMethodDefinition. - otherMethodHierarchy := cachedHierarchy at: otherMethodDefinition. - - minSize := aMethodHierarchy size min: otherMethodHierarchy size. - - 1 to: minSize do: [ :i | |compare| - compare := (aMethodHierarchy at: i) printString compare: (otherMethodHierarchy at: i) printString. - compare ~~ 2 - ifTrue: [ ^ compare == 1 ]]. - ^ aMethodHierarchy size < otherMethodHierarchy size -] - -{ #category : 'api' } -MessageListPresenter >> sortingBlock: aBlock [ - listPresenter sortingBlock: aBlock -] - -{ #category : 'private' } -MessageListPresenter >> timeStampOf: anItem [ - ^ anItem timeStamp -] - -{ #category : 'accessing' } -MessageListPresenter >> topologicSort [ - ^ topologySort -] - -{ #category : 'accessing' } -MessageListPresenter >> topologicSort: anObject [ - topologySort := anObject -] - -{ #category : 'api - events' } -MessageListPresenter >> whenModelChangedDo: aBlock [ - listPresenter whenModelChangedDo: aBlock -] - -{ #category : 'api - events' } -MessageListPresenter >> whenSelectedDo: aBlock [ - - listPresenter whenSelectedDo: aBlock -] - -{ #category : 'api - events' } -MessageListPresenter >> whenSelectionChangedDo: aBlock [ - - listPresenter whenSelectionChangedDo: aBlock -] diff --git a/src/NewTools-MethodBrowsers/SpMethodToolbarPresenter.class.st b/src/NewTools-MethodBrowsers/SpMethodToolbarPresenter.class.st deleted file mode 100644 index 361955fc4..000000000 --- a/src/NewTools-MethodBrowsers/SpMethodToolbarPresenter.class.st +++ /dev/null @@ -1,164 +0,0 @@ -" -A MethodToolbar is xxxxxxxxx. - -self example -" -Class { - #name : 'SpMethodToolbarPresenter', - #superclass : 'SpPresenter', - #instVars : [ - 'method', - 'browseButton', - 'usersButton', - 'sendersButton', - 'implementorsButton', - 'versionButton', - 'dropList' - ], - #category : 'NewTools-MethodBrowsers-Base', - #package : 'NewTools-MethodBrowsers', - #tag : 'Base' -} - -{ #category : 'examples' } -SpMethodToolbarPresenter class >> example [ - - - | example | - - example := self new. - example - method: SpButtonPresenter >> #state:; - method: nil; - extent: 550 @ 100; - open. - ^ example -] - -{ #category : 'specs' } -SpMethodToolbarPresenter class >> title [ - - ^ 'Toolbar' -] - -{ #category : 'api' } -SpMethodToolbarPresenter >> addItemLabeled: aString do: aBlock [ - - dropList - addItemLabeled: aString - do: aBlock -] - -{ #category : 'private' } -SpMethodToolbarPresenter >> browseMethod [ - - self method ifNil: [ ^ self ]. - - self systemNavigation browse: self method -] - -{ #category : 'layout' } -SpMethodToolbarPresenter >> defaultLayout [ - - ^ SpBoxLayout newLeftToRight - spacing: 3; - borderWidth: 3; - add: browseButton; - add: usersButton; - add: sendersButton; - add: implementorsButton; - add: versionButton; - add: dropList; - yourself -] - -{ #category : 'api' } -SpMethodToolbarPresenter >> emptyDropList [ - - dropList emptyList -] - -{ #category : 'private' } -SpMethodToolbarPresenter >> implementorsMethod [ - - self method ifNil: [ ^ self ]. - - self systemNavigation browseAllImplementorsOf: self method selector -] - -{ #category : 'initialization' } -SpMethodToolbarPresenter >> initializePresenters [ - - (browseButton := self newButton) - label: 'Browse'; - action: [ self browseMethod ]. - (usersButton := self newButton) - label: 'Users'; - action: [ self usersMethod ]. - (sendersButton := self newButton) - label: 'Senders'; - action: [ self sendersMethod ]. - (implementorsButton := self newButton) - label: 'Implementors'; - action: [ self implementorsMethod ]. - (versionButton := self newButton) - label: 'Version'; - action: [ self versionMethod ]. - dropList := self newDropList -] - -{ #category : 'accessing' } -SpMethodToolbarPresenter >> method [ - ^ method -] - -{ #category : 'accessing' } -SpMethodToolbarPresenter >> method: aMethod [ - - method := aMethod -] - -{ #category : 'accessing' } -SpMethodToolbarPresenter >> replaceVersionWithLabel: aString action: aBlock [ - - versionButton - label: aString; - action: aBlock -] - -{ #category : 'api' } -SpMethodToolbarPresenter >> selectFirst [ - - dropList selectIndex: 1 -] - -{ #category : 'private' } -SpMethodToolbarPresenter >> sendersMethod [ - - self method ifNil: [ ^ self ]. - - self systemNavigation browseAllSendersOf: self method selector -] - -{ #category : 'initialization' } -SpMethodToolbarPresenter >> setModelBeforeInitialization: aMethod [ - - self method: aMethod -] - -{ #category : 'private' } -SpMethodToolbarPresenter >> usersMethod [ - - self method ifNil: [ ^ self ]. - self method methodClass ifNil: [ ^ self ]. - - self systemNavigation browseAllUsersOfClassOrTrait: self method methodClass -] - -{ #category : 'private' } -SpMethodToolbarPresenter >> versionMethod [ - - self method ifNil: [ ^ self ]. - - self systemNavigation browseVersionsOf: self method -] diff --git a/src/NewTools-MethodBrowsers/AbstractMessageCentricBrowserPresenter.class.st b/src/NewTools-MethodBrowsers/StAbstractMessageCentricBrowserPresenter.class.st similarity index 52% rename from src/NewTools-MethodBrowsers/AbstractMessageCentricBrowserPresenter.class.st rename to src/NewTools-MethodBrowsers/StAbstractMessageCentricBrowserPresenter.class.st index 432e92131..2dea66307 100644 --- a/src/NewTools-MethodBrowsers/AbstractMessageCentricBrowserPresenter.class.st +++ b/src/NewTools-MethodBrowsers/StAbstractMessageCentricBrowserPresenter.class.st @@ -2,7 +2,7 @@ I am an abstract class for browsers centered around messages such as class `MessageBrowser` or class `VersionBrowser`. " Class { - #name : 'AbstractMessageCentricBrowserPresenter', + #name : 'StAbstractMessageCentricBrowserPresenter', #superclass : 'StPresenter', #instVars : [ 'messageList', @@ -15,12 +15,12 @@ Class { } { #category : 'testing' } -AbstractMessageCentricBrowserPresenter class >> isAbstract [ - ^self name = #AbstractMessageCentricBrowserPresenter +StAbstractMessageCentricBrowserPresenter class >> isAbstract [ + ^self name = #StAbstractMessageCentricBrowserPresenter ] { #category : 'initialization' } -AbstractMessageCentricBrowserPresenter >> initialize [ +StAbstractMessageCentricBrowserPresenter >> initialize [ textConverter := self newTextConverter. super initialize @@ -28,22 +28,22 @@ AbstractMessageCentricBrowserPresenter >> initialize [ ] { #category : 'initialization' } -AbstractMessageCentricBrowserPresenter >> initializePresenters [ +StAbstractMessageCentricBrowserPresenter >> initializePresenters [ - messageList := self instantiate: MessageListPresenter. - toolbarPresenter := self instantiate: SpMethodToolbarPresenter + messageList := self newMessageList. + toolbarPresenter := self newMessageToolbar + messageList: messageList; + yourself ] { #category : 'initialization' } -AbstractMessageCentricBrowserPresenter >> initializeWindow: aWindowPresenter [ - | winExtent | - - winExtent := RealEstateAgent standardWindowExtent. - aWindowPresenter initialExtent: (900 min: winExtent x) @ (550 min: winExtent y) +StAbstractMessageCentricBrowserPresenter >> initializeWindow: aWindowPresenter [ + + aWindowPresenter initialExtent: 900@600 ] { #category : 'private - testing' } -AbstractMessageCentricBrowserPresenter >> isMethodDefinition: anItem [ +StAbstractMessageCentricBrowserPresenter >> isMethodDefinition: anItem [ "an item can be nil, a compiled method, or a ring object. Whereas a ring object can be a ring method or comment definition. Some operations are only valid for compiled methods or ring object that are a method definitions" @@ -54,23 +54,35 @@ AbstractMessageCentricBrowserPresenter >> isMethodDefinition: anItem [ or: [ anItem isCompiledMethod ] ] +{ #category : 'initialization' } +StAbstractMessageCentricBrowserPresenter >> newMessageList [ + + ^ self instantiate: StMessageListPresenter +] + +{ #category : 'initialization' } +StAbstractMessageCentricBrowserPresenter >> newMessageToolbar [ + + ^ self instantiate: StMethodToolbarPresenter +] + { #category : 'private - factory' } -AbstractMessageCentricBrowserPresenter >> newTextConverter [ +StAbstractMessageCentricBrowserPresenter >> newTextConverter [ ^ DiffSourceMethodConverter new ] { #category : 'api' } -AbstractMessageCentricBrowserPresenter >> selectedMessage [ +StAbstractMessageCentricBrowserPresenter >> selectedMessage [ ^ messageList selectedMessage ] { #category : 'accessing' } -AbstractMessageCentricBrowserPresenter >> textConverter [ +StAbstractMessageCentricBrowserPresenter >> textConverter [ ^ textConverter ] { #category : 'accessing' } -AbstractMessageCentricBrowserPresenter >> textConverter: aTextConverter [ +StAbstractMessageCentricBrowserPresenter >> textConverter: aTextConverter [ textConverter := aTextConverter method: self textConverter method ] diff --git a/src/NewTools-MethodBrowsers/StClyMessageListPresenter.class.st b/src/NewTools-MethodBrowsers/StClyMessageListPresenter.class.st new file mode 100644 index 000000000..0f2c3c08d --- /dev/null +++ b/src/NewTools-MethodBrowsers/StClyMessageListPresenter.class.st @@ -0,0 +1,131 @@ +Class { + #name : 'StClyMessageListPresenter', + #superclass : 'StMessageListPresenter', + #instVars : [ + 'scopes', + 'query', + 'navigationEnvironment' + ], + #category : 'NewTools-MethodBrowsers-Senders', + #package : 'NewTools-MethodBrowsers', + #tag : 'Senders' +} + +{ #category : 'private' } +StClyMessageListPresenter >> allNavigationScopes [ + | extraScopes | + + scopes ifNil: [ scopes := #() ]. + extraScopes := self extraScopesOfSelectedItems reject: #isBasedOnEmptyBasis. + ^ scopes, (extraScopes copyWithoutAll: scopes) +] + +{ #category : 'private' } +StClyMessageListPresenter >> classScopeOfSelectedItems [ + | classes | + + classes := { self selectedMessageOrFirst methodClass }. + ^ ClyBothMetaLevelClassScope ofAll: classes in: navigationEnvironment +] + +{ #category : 'initialization' } +StClyMessageListPresenter >> connectPresenters [ + + listPresenter whenSelectedItemChangedDo: [ :item | self updateScopeList ] +] + +{ #category : 'private - actions' } +StClyMessageListPresenter >> doRemoveMethod [ + + (RBRemoveMethodDriver new + scopes: self scopes + methods: { self selectedMethod }) + runRefactoring +] + +{ #category : 'private' } +StClyMessageListPresenter >> extraScopesOfSelectedItems [ + | classScope | + + classScope := self classScopeOfSelectedItems. + ^{ + self packageScopeOfSelectedItems. + classScope asFullHierarchyScope. + classScope + }, RefactoringSettings availableScopes +] + +{ #category : 'accessing' } +StClyMessageListPresenter >> navigationEnvironment [ + + ^ navigationEnvironment +] + +{ #category : 'accessing' } +StClyMessageListPresenter >> navigationEnvironment: anEnvironment [ + + navigationEnvironment := anEnvironment +] + +{ #category : 'private' } +StClyMessageListPresenter >> packageScopeOfSelectedItems [ + | packages | + + packages := { self selectedMessageOrFirst package }. + ^ ClyPackageScope ofAll: packages in: navigationEnvironment +] + +{ #category : 'accessing' } +StClyMessageListPresenter >> query [ + + ^ query +] + +{ #category : 'accessing' } +StClyMessageListPresenter >> query: aQuery [ + + query := aQuery +] + +{ #category : 'accessing' } +StClyMessageListPresenter >> scopes [ + + ^ scopes +] + +{ #category : 'accessing' } +StClyMessageListPresenter >> scopes: aCollectionOfScopes [ + + scopes := aCollectionOfScopes +] + +{ #category : 'private' } +StClyMessageListPresenter >> selectedMessageOrFirst [ + + ^ listPresenter selection selectedItem + ifNil: [ + listPresenter items + ifNotEmpty: [ :items | items first ] + ifEmpty: [ nil ] ] +] + +{ #category : 'updating' } +StClyMessageListPresenter >> switchScopeTo: aScope [ + + query ifNil: [ ^ self ]. + query := query withScope: aScope. + self updateMessages +] + +{ #category : 'updating' } +StClyMessageListPresenter >> updateMessages [ + + self messages: (self query execute items collect: [ :each | each actualObject ]) +] + +{ #category : 'updating' } +StClyMessageListPresenter >> updateScopeList [ + + self selectedMessageOrFirst ifNil: [ ^ self ]. + self scopes: self allNavigationScopes +] diff --git a/src/NewTools-MethodBrowsers/StClyOldMessageBrowserAdapter.class.st b/src/NewTools-MethodBrowsers/StClyOldMessageBrowserAdapter.class.st new file mode 100644 index 000000000..2771c7270 --- /dev/null +++ b/src/NewTools-MethodBrowsers/StClyOldMessageBrowserAdapter.class.st @@ -0,0 +1,168 @@ +Class { + #name : 'StClyOldMessageBrowserAdapter', + #superclass : 'Object', + #instVars : [ + 'messages', + 'title', + 'autoSelect', + 'refreshingBlock', + 'openedBrowser' + ], + #category : 'NewTools-MethodBrowsers-Senders', + #package : 'NewTools-MethodBrowsers', + #tag : 'Senders' +} + +{ #category : 'tools registration' } +StClyOldMessageBrowserAdapter class >> beDefaultBrowser [ +