From 487d7587068ddb5ee58e45ddb54fd3ff1f268693 Mon Sep 17 00:00:00 2001 From: LaMendolaThomas Date: Mon, 19 Aug 2024 19:19:57 +0200 Subject: [PATCH 1/3] added custom filters --- .../GtFiltersElement.class.st | 127 +++++++++++------- 1 file changed, 81 insertions(+), 46 deletions(-) diff --git a/src/GToolkit-Coder-UI/GtFiltersElement.class.st b/src/GToolkit-Coder-UI/GtFiltersElement.class.st index caaebcdd1..2527d0b63 100644 --- a/src/GToolkit-Coder-UI/GtFiltersElement.class.st +++ b/src/GToolkit-Coder-UI/GtFiltersElement.class.st @@ -11,26 +11,24 @@ Class { #category : #'GToolkit-Coder-UI-Filters' } -{ #category : #private } +{ #category : #accessing } GtFiltersElement >> addAllDefaults [ | filterElement defaultDescriptors | - - defaultDescriptors := self descriptors select: [ :each | each showAsDefaultWhenEmpty ]. - defaultDescriptors - do: [ :defaultDescriptor | + defaultDescriptors := self descriptors + select: [:each | each showAsDefaultWhenEmpty]. + defaultDescriptors do: + [:defaultDescriptor | filterElement := self createFilterTagFor: defaultDescriptor. filterElement makeDefaultFilter. - - self addChild: filterElement at: self childrenCount ] + self addChild: filterElement at: self myChildrenCount] ] { #category : #accessing } GtFiltersElement >> addFilterForDescriptor: aFilterDescriptor andValue: aString [ | element | element := self createFilterTagFor: aFilterDescriptor. - aFilterDescriptor valueIsRequired - ifTrue: [ element valueString: aString ]. - self addChild: element at: self childrenCount + aFilterDescriptor valueIsRequired ifTrue: [element valueString: aString]. + self addChild: element at: self myChildrenCount ] { #category : #private } @@ -43,11 +41,11 @@ GtFiltersElement >> applyFiltersDueTo: aReason [ self fireEvent: (GtFiltersChangedEvent new filterElement: self; reason: aReason) ] -{ #category : #private } +{ #category : #accessing } GtFiltersElement >> areAllDefaults [ - ^ self childrenCount > 1 - and: [ (1 to: self childrenCount - 1) - allSatisfy: [ :index | (self childAt: index) isDefaultAllFilter ] ] + ^self childrenCount > self defaultButtonCount and: + [(1 to: self childrenCount - self defaultButtonCount) + allSatisfy: [:index | (self childAt: index) isDefaultAllFilter]] ] { #category : #'api - filters' } @@ -70,11 +68,11 @@ GtFiltersElement >> buildFilters: aBlock [ aBlock value ] -{ #category : #'api - filters' } +{ #category : #accessing } GtFiltersElement >> clearFilters [ "Remove all filters" - - [ self childrenCount > 1 ] whileTrue: [ self removeChildAt: 1 ] + [self childrenCount > self defaultButtonCount] + whileTrue: [self removeChildAt: 1] ] { #category : #'private - instance creation' } @@ -88,12 +86,12 @@ GtFiltersElement >> createFilterTagFor: aFilterDescription [ { #category : #private } GtFiltersElement >> createNewTag [ | tag | - self descriptors - ifNotEmpty: [ :items | + self descriptors ifNotEmpty: + [:items | "self areAllDefaults ifTrue: [ self clearFilters ]." tag := self createFilterTagFor: items first. - self addChild: tag at: self childrenCount. - tag activateEditor ] + self addChild: tag at: self myChildrenCount. + tag activateEditor] ] { #category : #'api - filters' } @@ -101,6 +99,25 @@ GtFiltersElement >> currentFilters [ ^ Array streamContents: [ :aStream | self filtersDo: [ :eachFilter :eachValue | aStream nextPut: (eachFilter -> eachValue) ] ] ] +{ #category : #'private - instance creation' } +GtFiltersElement >> defaultAptitude [ + ^ BrGlamorousButtonRectangularAptitude new + BrGlamorousButtonIconAptitude new + + BrGlamorousButtonWithLabelTooltipAptitude new + + (BrStyleCommonAptitude new + default: [ :aStyle | + aStyle + border: BlBorder empty; + background: self theme status neutralBackgroundColor ]; + hovered: [ :aStyle | aStyle background: self theme status neutralBackgroundColor darker ]; + pressed: [ :aStyle | aStyle background: self theme status neutralBackgroundColor darker darker ]; + focused: [ :aStyle | aStyle border: (BlBorder paint: self theme editor focusedBorderColor width: 1) ]) +] + +{ #category : #accessing } +GtFiltersElement >> defaultButtonCount [ + ^1 + self myFilterButtons size +] + { #category : #accessing } GtFiltersElement >> descriptors [ ^ (descriptors isBlock ifTrue: [ descriptors value ] ifFalse: [ descriptors ]) @@ -119,14 +136,33 @@ GtFiltersElement >> descriptors: aCollection [ { #category : #'api - filters' } GtFiltersElement >> filtersDo: aBlock [ "Iterate over all valid filters" + 1 to: self childrenCount - self defaultButtonCount + do: + [:i | + | filterTagElement | + filterTagElement := self childAt: i. + filterTagElement isValid + ifTrue: + [aBlock value: filterTagElement descriptor + value: filterTagElement valueString]] +] - 1 to: self childrenCount - 1 do: [ :i | - | filterTagElement | - filterTagElement := self childAt: i. - filterTagElement isValid - ifTrue: [ aBlock - value: filterTagElement descriptor - value: filterTagElement valueString ] ] +{ #category : #accessing } +GtFiltersElement >> gtTestFilter [ + + ^ BrButton new + id: GtFiltersAddButtonId; + aptitude: self defaultAptitude; + icon: BrGlamorousVectorIcons down; + label: 'Add Filter'; + margin: (BlInsets all: 2); + beSmallSize; + hExact: 20; + constraintsDo: [ :c | c flow vertical alignCenter ]; + action: [ :aButton | self createNewTag ]; + addShortcut: (BlShortcutWithAction new + combination: BlKeyCombination enter; + action: [ :anEvent | self createNewTag ]) ] { #category : #'gt - extensions' } @@ -149,28 +185,28 @@ GtFiltersElement >> initialize [ super initialize. self hMatchParent. self vFitContent. - self addChild: self newAddTagButton + self addChild: self newAddTagButton. + self myFilterButtons do: [:e | self addChild: e] +] + +{ #category : #accessing } +GtFiltersElement >> myChildrenCount [ + ^self childrenCount - self defaultButtonCount + 1 +] + +{ #category : #accessing } +GtFiltersElement >> myFilterButtons [ + ^ (Pragma allNamed: #gtFilterElement: in: self class) + sort: [ :aPragma | aPragma arguments first ] ascending + , [ :aPragma | aPragma methodSelector ] ascending; + collect: [ :e | self perform: e methodSelector ] ] { #category : #'private - instance creation' } GtFiltersElement >> newAddTagButton [ ^ BrButton new id: GtFiltersAddButtonId; - aptitude: - BrGlamorousButtonRectangularAptitude new - + BrGlamorousButtonIconAptitude new - + BrGlamorousButtonWithLabelTooltipAptitude new - + (BrStyleCommonAptitude new - default: [ :aStyle | - aStyle - border: BlBorder empty; - background: self theme status neutralBackgroundColor ]; - hovered: [ :aStyle | - aStyle background: self theme status neutralBackgroundColor darker ]; - pressed: [ :aStyle | - aStyle background: self theme status neutralBackgroundColor darker darker ]; - focused: [ :aStyle | - aStyle border: (BlBorder paint: self theme editor focusedBorderColor width: 1) ]); + aptitude: self defaultAptitude; icon: BrGlamorousVectorIcons add; label: 'Add Filter'; margin: (BlInsets all: 2); @@ -178,8 +214,7 @@ GtFiltersElement >> newAddTagButton [ hExact: 20; constraintsDo: [ :c | c flow vertical alignCenter ]; action: [ :aButton | self createNewTag ]; - addShortcut: - (BlShortcutWithAction new + addShortcut: (BlShortcutWithAction new combination: BlKeyCombination enter; action: [ :anEvent | self createNewTag ]) ] From 6deb9a0025eaa5413c9b3be9ced2c656f34a4ad6 Mon Sep 17 00:00:00 2001 From: LaMendolaThomas Date: Mon, 19 Aug 2024 22:33:18 +0200 Subject: [PATCH 2/3] Fine tuned filters --- .../GtFiltersElement.class.st | 121 +++++++++++++----- 1 file changed, 88 insertions(+), 33 deletions(-) diff --git a/src/GToolkit-Coder-UI/GtFiltersElement.class.st b/src/GToolkit-Coder-UI/GtFiltersElement.class.st index 2527d0b63..8270dcb01 100644 --- a/src/GToolkit-Coder-UI/GtFiltersElement.class.st +++ b/src/GToolkit-Coder-UI/GtFiltersElement.class.st @@ -20,7 +20,24 @@ GtFiltersElement >> addAllDefaults [ [:defaultDescriptor | filterElement := self createFilterTagFor: defaultDescriptor. filterElement makeDefaultFilter. - self addChild: filterElement at: self myChildrenCount] + self addChild: filterElement at: self nextTagPosition] +] + +{ #category : #accessing } +GtFiltersElement >> addFilterButtonFor: descriptor label: label icon: icon [ + ^ BrButton new + aptitude: self defaultAptitude; + icon: icon; + label: label; + margin: (BlInsets all: 2); + beSmallSize; + hExact: 20; + constraintsDo: [ :c | c flow vertical alignCenter ]; + action: [ :aButton | + (self filtersWithDescriptor: descriptor) + ifEmpty: [ self addFilterForDescriptor: descriptor andValue: '' ] + ifNotEmpty: [ :coll | coll do: [ :e | self removeChild: e ] ]. + self applyFilters ] ] { #category : #accessing } @@ -28,7 +45,17 @@ GtFiltersElement >> addFilterForDescriptor: aFilterDescriptor andValue: aString | element | element := self createFilterTagFor: aFilterDescriptor. aFilterDescriptor valueIsRequired ifTrue: [element valueString: aString]. - self addChild: element at: self myChildrenCount + self addChild: element at: self nextTagPosition +] + +{ #category : #accessing } +GtFiltersElement >> additionalDefaultButtons [ + | sortedPragmas | + sortedPragmas := (Pragma allNamed: #gtFilterElement: in: self class) + sort: [ :aPragma | aPragma arguments first ] ascending + , [ :aPragma | aPragma methodSelector ] ascending. + ^ (sortedPragmas collect: [ :e | self perform: e methodSelector ]) + reject: [ :e | e isNil ] ] { #category : #private } @@ -90,7 +117,7 @@ GtFiltersElement >> createNewTag [ [:items | "self areAllDefaults ifTrue: [ self clearFilters ]." tag := self createFilterTagFor: items first. - self addChild: tag at: self myChildrenCount. + self addChild: tag at: self nextTagPosition. tag activateEditor] ] @@ -115,7 +142,9 @@ GtFiltersElement >> defaultAptitude [ { #category : #accessing } GtFiltersElement >> defaultButtonCount [ - ^1 + self myFilterButtons size + | addButton | + addButton := self childWithId: GtFiltersAddButtonId. + ^ self childrenCount - (self childIndexOf: addButton) + 1 ] { #category : #accessing } @@ -127,10 +156,27 @@ GtFiltersElement >> descriptors [ { #category : #accessing } GtFiltersElement >> descriptors: aCollection [ descriptors := aCollection. - + BlFrameTelemetry time: [ 'Add default filter tag' ] - during: [ self addAllDefaults ] + during: [ self addAllDefaults ]. + + self updateAdditionalFilters +] + +{ #category : #accessing } +GtFiltersElement >> filterButtonFor: descriptor icon: icon label: label [ + ^ BrButton new + aptitude: self defaultAptitude; + icon: icon; + label: label; + margin: (BlInsets all: 2); + beSmallSize; + hExact: 20; + constraintsDo: [ :c | c flow vertical alignCenter ]; + action: [ :aButton | + self addFilterForDescriptor: descriptor andValue: ''. + self applyFilters ] ] { #category : #'api - filters' } @@ -147,22 +193,31 @@ GtFiltersElement >> filtersDo: aBlock [ value: filterTagElement valueString]] ] +{ #category : #accessing } +GtFiltersElement >> filtersWithDescriptor: aDescriptor [ + | result | + result := OrderedCollection new. + 1 + to: self childrenCount - self defaultButtonCount + do: [ :i | + | filterTagElement | + filterTagElement := self childAt: i. + filterTagElement descriptor = aDescriptor + ifTrue: [ result add: filterTagElement ] ]. + ^ result +] + { #category : #accessing } GtFiltersElement >> gtTestFilter [ - ^ BrButton new - id: GtFiltersAddButtonId; - aptitude: self defaultAptitude; - icon: BrGlamorousVectorIcons down; - label: 'Add Filter'; - margin: (BlInsets all: 2); - beSmallSize; - hExact: 20; - constraintsDo: [ :c | c flow vertical alignCenter ]; - action: [ :aButton | self createNewTag ]; - addShortcut: (BlShortcutWithAction new - combination: BlKeyCombination enter; - action: [ :anEvent | self createNewTag ]) + | descriptor | + descriptor := self descriptors + detect: [ :e | e name = 'Instance methods' ] + ifNone: [ ^ nil ]. + ^ self + addFilterButtonFor: descriptor + label: 'Add instance methods filter' + icon: BrGlamorousVectorIcons emphasizedInspect ] { #category : #'gt - extensions' } @@ -186,20 +241,7 @@ GtFiltersElement >> initialize [ self hMatchParent. self vFitContent. self addChild: self newAddTagButton. - self myFilterButtons do: [:e | self addChild: e] -] - -{ #category : #accessing } -GtFiltersElement >> myChildrenCount [ - ^self childrenCount - self defaultButtonCount + 1 -] - -{ #category : #accessing } -GtFiltersElement >> myFilterButtons [ - ^ (Pragma allNamed: #gtFilterElement: in: self class) - sort: [ :aPragma | aPragma arguments first ] ascending - , [ :aPragma | aPragma methodSelector ] ascending; - collect: [ :e | self perform: e methodSelector ] + self updateAdditionalFilters ] { #category : #'private - instance creation' } @@ -218,3 +260,16 @@ GtFiltersElement >> newAddTagButton [ combination: BlKeyCombination enter; action: [ :anEvent | self createNewTag ]) ] + +{ #category : #accessing } +GtFiltersElement >> nextTagPosition [ + ^self childrenCount - self defaultButtonCount + 1 +] + +{ #category : #accessing } +GtFiltersElement >> updateAdditionalFilters [ + [ self defaultButtonCount > 1 ] + whileTrue: [ self removeChildAt: self childrenCount - 1 ]. + + self additionalDefaultButtons do: [ :e | self addChild: e ] +] From 79065c4d303001954773624a78098518906302d0 Mon Sep 17 00:00:00 2001 From: LaMendolaThomas Date: Mon, 19 Aug 2024 22:39:15 +0200 Subject: [PATCH 3/3] Fine tuned filters --- src/GToolkit-Coder-UI/GtFiltersElement.class.st | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/GToolkit-Coder-UI/GtFiltersElement.class.st b/src/GToolkit-Coder-UI/GtFiltersElement.class.st index 8270dcb01..d8f2dfacc 100644 --- a/src/GToolkit-Coder-UI/GtFiltersElement.class.st +++ b/src/GToolkit-Coder-UI/GtFiltersElement.class.st @@ -164,21 +164,6 @@ GtFiltersElement >> descriptors: aCollection [ self updateAdditionalFilters ] -{ #category : #accessing } -GtFiltersElement >> filterButtonFor: descriptor icon: icon label: label [ - ^ BrButton new - aptitude: self defaultAptitude; - icon: icon; - label: label; - margin: (BlInsets all: 2); - beSmallSize; - hExact: 20; - constraintsDo: [ :c | c flow vertical alignCenter ]; - action: [ :aButton | - self addFilterForDescriptor: descriptor andValue: ''. - self applyFilters ] -] - { #category : #'api - filters' } GtFiltersElement >> filtersDo: aBlock [ "Iterate over all valid filters"