From aa8d09fcb11b15101a73e21db615dcc5ca23d3b2 Mon Sep 17 00:00:00 2001 From: Juraj Kubelka Date: Wed, 26 Jun 2024 20:14:30 -0400 Subject: [PATCH] Lepiter card: add Spotter button [feenkcom/gtoolkit#3847] --- ...eLepiterKnowledgeBaseSpotterStart.class.st | 52 +++++++++++++++++++ ...piterKnowledgeBaseTabGroupElement.class.st | 35 ++++++++++++- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/GToolkit-World/GtHomeLepiterKnowledgeBaseSpotterStart.class.st diff --git a/src/GToolkit-World/GtHomeLepiterKnowledgeBaseSpotterStart.class.st b/src/GToolkit-World/GtHomeLepiterKnowledgeBaseSpotterStart.class.st new file mode 100644 index 00000000..462b778f --- /dev/null +++ b/src/GToolkit-World/GtHomeLepiterKnowledgeBaseSpotterStart.class.st @@ -0,0 +1,52 @@ +Class { + #name : #GtHomeLepiterKnowledgeBaseSpotterStart, + #superclass : #Object, + #instVars : [ + 'databaseProvider' + ], + #category : #'GToolkit-World-Helpers' +} + +{ #category : #accessing } +GtHomeLepiterKnowledgeBaseSpotterStart >> database [ + + ^ self databaseProvider database +] + +{ #category : #accessing } +GtHomeLepiterKnowledgeBaseSpotterStart >> databaseProvider [ + ^ databaseProvider +] + +{ #category : #accessing } +GtHomeLepiterKnowledgeBaseSpotterStart >> databaseProvider: anObject [ + "Database provider is an object that understand #database" + + databaseProvider := anObject +] + +{ #category : #searching } +GtHomeLepiterKnowledgeBaseSpotterStart >> gtSpotterForPagesByContentFor: aSearch [ + + ^ aSearch explicit + priority: 23; + title: 'Page contents'; + search: [ :aContext | self database asyncPagesContainingText: aContext searchQuery ]; + itemName: #spotterItemName +] + +{ #category : #searching } +GtHomeLepiterKnowledgeBaseSpotterStart >> gtSpotterForPagesFor: aSearch [ + + ^ aSearch explicit + title: 'Named pages'; + priority: 1; + search: [ :aContext | self database asyncPagesForWord: aContext searchQuery ]; + itemName: #title; + wantsToDisplayOnEmptyQuery: false +] + +{ #category : #printing } +GtHomeLepiterKnowledgeBaseSpotterStart >> printOn: aStream [ + aStream nextPutAll: 'Spotter' +] diff --git a/src/GToolkit-World/GtHomeLepiterKnowledgeBaseTabGroupElement.class.st b/src/GToolkit-World/GtHomeLepiterKnowledgeBaseTabGroupElement.class.st index 3921dc9c..b3caa730 100644 --- a/src/GToolkit-World/GtHomeLepiterKnowledgeBaseTabGroupElement.class.st +++ b/src/GToolkit-World/GtHomeLepiterKnowledgeBaseTabGroupElement.class.st @@ -64,7 +64,12 @@ GtHomeLepiterKnowledgeBaseTabGroupElement >> initialize [ { #category : #initialization } GtHomeLepiterKnowledgeBaseTabGroupElement >> initializeTabGroupElement [ - tabGroupElement := BrTabGroup new aptitude: BrGlamorousTabGroupAptitude new + tabGroupElement := BrTabGroup new + aptitude: BrGlamorousTabGroupAptitude new; + actionbarStencil: [ BrToolbar new + aptitude: BrGlamorousToolbarAptitude new; + addItem: self searchButton; + yourself ] ] { #category : #'api - ui model' } @@ -105,6 +110,34 @@ GtHomeLepiterKnowledgeBaseTabGroupElement >> removeTableOfContentsTab [ tocTab := nil ] +{ #category : #'private - updating' } +GtHomeLepiterKnowledgeBaseTabGroupElement >> searchButton [ + ^ GtSpotterDropdownButtonStencil new + beMiniSize; + valuable: (GtHomeLepiterKnowledgeBaseSpotterStart new databaseProvider: self); + tooltip: 'Search Pages'; + objectActOn: [ :anActOnEvent :anItem :theButton | + self spawnPage: anItem from: theButton. + anActOnEvent beActed. + theButton fireEvent: BrDropdownHideWish new ]; + asElement +] + +{ #category : #'event handling' } +GtHomeLepiterKnowledgeBaseTabGroupElement >> spawnPage: aPage from: aButton [ + "If we are in a pager, spawn the page in the current phlow, else create a new pager." + + ^ aButton + allParentsDetect: [ :aParent | aParent isKindOf: GtPager ] + ifFound: [ :aParent | aButton phlow spawnTool: aPage asPhlowTool ] + ifNone: [ + GtWorldUtility + showSpaceWithTitle: aPage title + inPagerWith: [ aPage asLepiterPagePhlowTool asElementDo: [ :e | e ] ] + asStencil + from: aButton ] +] + { #category : #'private - subscriptions' } GtHomeLepiterKnowledgeBaseTabGroupElement >> subscribeToContent [ "Subclasses can subscribe to what they are interested in.