From 841e58bbd2695023dd942303f0061a11a4d49ae1 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 4 Feb 2025 11:22:15 +0100 Subject: [PATCH] Move keymapping UI to NewTools To fix a dependency test --- .../BaselineOfNewTools.class.st | 5 + .../KMCategory.extension.st | 13 ++ .../KMCategoryAll.class.st | 95 +++++++++ .../KMDescriptionPresenter.class.st | 186 ++++++++++++++++++ src/NewTools-Keymapping/KMKeymap.extension.st | 14 ++ src/NewTools-Keymapping/package.st | 1 + 6 files changed, 314 insertions(+) create mode 100644 src/NewTools-Keymapping/KMCategory.extension.st create mode 100644 src/NewTools-Keymapping/KMCategoryAll.class.st create mode 100644 src/NewTools-Keymapping/KMDescriptionPresenter.class.st create mode 100644 src/NewTools-Keymapping/KMKeymap.extension.st create mode 100644 src/NewTools-Keymapping/package.st diff --git a/src/BaselineOfNewTools/BaselineOfNewTools.class.st b/src/BaselineOfNewTools/BaselineOfNewTools.class.st index be4d48a9..cae05655 100644 --- a/src/BaselineOfNewTools/BaselineOfNewTools.class.st +++ b/src/BaselineOfNewTools/BaselineOfNewTools.class.st @@ -113,6 +113,8 @@ BaselineOfNewTools >> baseline: spec [ package: 'NewTools-WelcomeBrowser'; + package: 'NewTools-Keymapping'; + package: 'ColorPicker'; package: 'ColorPicker-Tests' with: [ spec requires: #( ColorPicker ) ]. @@ -191,6 +193,8 @@ BaselineOfNewTools >> baseline: spec [ group: 'WelcomeBrowser' with: #( 'NewTools-WelcomeBrowser' ); + group: 'Keymapping' with: #( 'NewTools-Keymapping' ); + group: 'ColorPickerGroup' with: #('ColorPicker' 'ColorPicker-Tests'); group: 'default' with: #( @@ -210,6 +214,7 @@ BaselineOfNewTools >> baseline: spec [ 'Profiler' 'SettingsBrowser' 'WelcomeBrowser' + 'Keymapping' 'ColorPickerGroup' ) ] ] diff --git a/src/NewTools-Keymapping/KMCategory.extension.st b/src/NewTools-Keymapping/KMCategory.extension.st new file mode 100644 index 00000000..70060f3b --- /dev/null +++ b/src/NewTools-Keymapping/KMCategory.extension.st @@ -0,0 +1,13 @@ +Extension { #name : 'KMCategory' } + +{ #category : '*NewTools-Keymapping' } +KMCategory >> scopeName [ + + ^ self name +] + +{ #category : '*NewTools-Keymapping' } +KMCategory >> shortcuts [ + + ^ (self entriesAt: #all) keymaps +] diff --git a/src/NewTools-Keymapping/KMCategoryAll.class.st b/src/NewTools-Keymapping/KMCategoryAll.class.st new file mode 100644 index 00000000..e448820b --- /dev/null +++ b/src/NewTools-Keymapping/KMCategoryAll.class.st @@ -0,0 +1,95 @@ +Class { + #name : 'KMCategoryAll', + #superclass : 'Object', + #instVars : [ + 'categoryName', + 'shortcuts' + ], + #category : 'NewTools-Keymapping', + #package : 'NewTools-Keymapping' +} + +{ #category : 'copying' } +KMCategoryAll >> , aKMCategory [ + + self shortcuts addAll: aKMCategory allEntries keymaps +] + +{ #category : 'comparing' } +KMCategoryAll >> = anObject [ + "Answer whether the receiver and anObject represent the same object." + + self == anObject ifTrue: [ ^ true ]. + self class = anObject class ifFalse: [ ^ false ]. + ^ categoryName = anObject categoryName and: [ + shortcuts = anObject shortcuts ] +] + +{ #category : 'adding' } +KMCategoryAll >> addAll: aCollection [ + "Add all shortcuts in aCollection to the receiver" + + self shortcuts addAll: aCollection +] + +{ #category : 'accessing' } +KMCategoryAll >> categoryName [ + + ^ categoryName +] + +{ #category : 'accessing' } +KMCategoryAll >> categoryName: anObject [ + + categoryName := anObject +] + +{ #category : 'comparing' } +KMCategoryAll >> hash [ + "Answer an integer value that is related to the identity of the receiver." + + ^ categoryName hash bitXor: shortcuts hash +] + +{ #category : 'accessing' } +KMCategoryAll >> icon [ + + ^ self iconNamed: self systemIconName +] + +{ #category : 'accessing' } +KMCategoryAll >> model [ + "Required by ?" + + ^ self +] + +{ #category : 'accessing' } +KMCategoryAll >> name [ + + ^ self categoryName +] + +{ #category : 'printing' } +KMCategoryAll >> printOn: aStream [ + "Generate a string representation of the receiver based on its instance variables." + + super printOn: aStream. + aStream + nextPutAll: ' ['; + print: categoryName; + nextPutAll: ']' +] + +{ #category : 'accessing' } +KMCategoryAll >> shortcuts [ + + ^ shortcuts + ifNil: [ shortcuts := OrderedCollection new ] +] + +{ #category : 'accessing' } +KMCategoryAll >> shortcuts: anObject [ + + shortcuts := anObject +] diff --git a/src/NewTools-Keymapping/KMDescriptionPresenter.class.st b/src/NewTools-Keymapping/KMDescriptionPresenter.class.st new file mode 100644 index 00000000..2342e32f --- /dev/null +++ b/src/NewTools-Keymapping/KMDescriptionPresenter.class.st @@ -0,0 +1,186 @@ +" +A KMDescription is a window showing the description of shortcuts for a specified set of symbols reprensenting KMCategories +" +Class { + #name : 'KMDescriptionPresenter', + #superclass : 'StPresenter', + #instVars : [ + 'actionBar', + 'categoryList', + 'shortcutTable', + 'inputPresenter' + ], + #category : 'NewTools-Keymapping', + #package : 'NewTools-Keymapping' +} + +{ #category : 'accessing' } +KMDescriptionPresenter class >> defaultPreferredExtent [ + + ^ 900 @ 650 +] + +{ #category : 'instance creation' } +KMDescriptionPresenter class >> descriptionText [ + + ^ 'Show the system''s shortcuts' +] + +{ #category : 'accessing' } +KMDescriptionPresenter class >> icon [ + + ^ self iconNamed: #keymapBrowser +] + +{ #category : 'instance creation' } +KMDescriptionPresenter class >> menuCommandOn: aBuilder [ + + + (aBuilder item: 'Shortcuts Browser') + action: [ self open ]; + order: 34; + parent: #Tools; + icon: self icon; + help: self descriptionText +] + +{ #category : 'instance creation' } +KMDescriptionPresenter class >> open [ + +