Skip to content

Commit

Permalink
worked on ToNotebook
Browse files Browse the repository at this point in the history
  • Loading branch information
plantec committed Nov 17, 2023
1 parent a4c2a6b commit 50b14a3
Show file tree
Hide file tree
Showing 15 changed files with 256 additions and 319 deletions.
29 changes: 0 additions & 29 deletions src/Toplo-Incubator/ToNoteBookPageTitleSkin.class.st

This file was deleted.

158 changes: 61 additions & 97 deletions src/Toplo-Incubator/ToNotebook.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -10,47 +10,41 @@ Class {
#package : 'Toplo-Incubator'
}

{ #category : 'api' }
{ #category : 'private' }
ToNotebook >> addPage: aPage [

pages add: aPage.
aPage
whenIsSelectedChangedDo: [ :new :old |
new = old
ifTrue: [ 'isSelected didnt change!' traceCr ]
ifFalse: [ self refreshOnPageIsSelectedChange: aPage ] ];
whenIsCloseableChangedDo: [ self refreshOnPageIsCloseableChange: aPage ];
whenBodyBuilderChangedDo: [ self refreshOnBodyBuilderChange: aPage ].

header addChild: aPage titleElement.

pages size = 1 ifTrue: [ aPage isSelected: true ]
header addChild: aPage button.
aPage button
when: ToCheckableChangedEvent
do: [ :event | self selectedPage: aPage ].
pages buttons size = 1 ifTrue: [ aPage selected: true ]
]

{ #category : 'adding' }
ToNotebook >> addPageTitle: aTitle [
{ #category : 'adding-removing' }
ToNotebook >> addPageEntitled: aTitle [

| aPage |
aPage := self newPageTitle: aTitle.
aPage := self newPageEntitled: aTitle.
self addPage: aPage.
^ aPage
]

{ #category : 'api' }
ToNotebook >> addPageTitle: aTitle body: aBlElement [
{ #category : 'adding-removing' }
ToNotebook >> addPageEntitled: aTitle withBody: aBlElement [

| aPage |
aPage := self newPageTitle: aTitle.
aPage := self newPageEntitled: aTitle.
aPage bodyElement: aBlElement.
self addPage: aPage.
^ aPage
]

{ #category : 'adding' }
ToNotebook >> addPageTitle: aTitle bodyBuilder: aValuable [
{ #category : 'adding-removing' }
ToNotebook >> addPageEntitled: aTitle withBodyBuilder: aValuable [

| aPage |
aPage := self newPageTitle: aTitle.
aPage := self newPageEntitled: aTitle.
aPage bodyBuilder: aValuable.
self addPage: aPage.
^ aPage
Expand All @@ -62,6 +56,12 @@ ToNotebook >> header [
^ header
]

{ #category : 'accessing' }
ToNotebook >> indexOfPage: aPage [

^ pages buttons indexOf: aPage
]

{ #category : 'initialization' }
ToNotebook >> initialize [

Expand All @@ -70,113 +70,69 @@ ToNotebook >> initialize [
self matchParent.
header := ToPane horizontal.
self addChild: header as: #header.
pages := OrderedCollection new
pages := ToCheckableGroup new.
]

{ #category : 'skin' }
ToNotebook >> installRawStyle [
{ #category : 'private' }
ToNotebook >> newButtonForPage: aPage entitled: aText [

super installRawStyle.
.
self background: self theme notebook backgroundColor
^ ToNotebookPageButton new
page: aPage;
labelText: aText;
yourself
]

{ #category : 'private' }
ToNotebook >> newPageTitle: aTitle [
ToNotebook >> newPageEntitled: aText [

| aPage titleElement |
| aPage pageButton |
aPage := ToNotebookPage new.
titleElement := self newTitleElementFor: aPage title: aTitle.
aPage titleElement: titleElement.
pageButton := self newButtonForPage: aPage entitled: aText.
pageButton when: BlElementRemovedFromParentEvent do: [ :evt |
self removePage: aPage ].
aPage button: pageButton.
^ aPage
]

{ #category : 'private' }
ToNotebook >> newTitleElementFor: aPage title: aTitle [

^ ToNotebookPageTitle new
page: aPage;
title: aTitle;
whenClickedDo: [ aPage isSelected: true ];
yourself
]

{ #category : 'accessing' }
ToNotebook >> pages [

^ pages
]

{ #category : 'private' }
ToNotebook >> refreshOnBodyBuilderChange: aPage [

selectedPage = aPage ifFalse: [ ^ self ].

self removeBodyElement.
self setBodyElement: aPage bodyElement

]

{ #category : 'private' }
ToNotebook >> refreshOnPageIsCloseableChange: aPage [

aPage isCloseable
ifTrue: [
| but |
but := ToButton new.
but defaultSkin: ToNoteBookPageTitleCloseButtonSkin new.
but icon: (ToImage new innerImage: (Smalltalk ui icons iconNamed: #windowClose)).
but constraintsDo: [ :c | c linear vertical alignCenter].
but whenClickedDo: [ :evt |
evt consumed: true.
self removePage: aPage ].
aPage titleElement addChild: but as: #closeButton ]
ifFalse: [
aPage titleElement removeChildNamed: #closeButton ]
]

{ #category : 'private' }
ToNotebook >> refreshOnPageIsSelectedChange: aPage [

aPage isSelected
ifTrue: [ "Single selection only, for now, so deselect current."
selectedPage ifNotNil: [ selectedPage isSelected: false ].
self setBodyElement: aPage bodyElement.
selectedPage := aPage ]
ifFalse: [
self removeBodyElement.
selectedPage := nil ]
]

{ #category : 'private' }
ToNotebook >> removeBodyElement [

self removeChildWithId: #body
]

{ #category : 'api' }
{ #category : 'adding-removing' }
ToNotebook >> removePage: aPage [

| pageIndex |
aPage isSelected ifTrue: [
pageIndex := pages indexOf: aPage ].
header removeChild: aPage titleElement.
aPage isSelected: false.
| removedPageSelectedIndex selectedPageIndexes |
self flag: 'to be fixed'.
removedPageSelectedIndex := aPage isSelected
ifTrue: [ self indexOfPage: aPage ]
ifFalse: [ 0 ].

pages remove: aPage.
self flag: #todo. "Unsubscribe from aPage"

pageIndex ifNil: [ ^self ].
pages ifEmpty: [ ^self ].
pages buttons ifEmpty: [ ^ self ].

selectedPageIndexes := Array streamContents: [ :str |
pages buttons withIndexDo: [ :p :idx |
p isSelected ifTrue: [ str nextPut: idx ] ] ].

((pages size < pageIndex)
ifTrue: [ pages last ]
ifFalse: [ pages at: pageIndex ]) isSelected: true
selectedPageIndexes do: [ :idx | "(pages buttons size < removedPageSelectedIndex
ifTrue: [ pages buttons last ]
ifFalse: [ pages buttons at: removedPageSelectedIndex ]) selected: true"
(pages buttons at: idx) selected: true.
self selectedPage: (pages buttons at: idx) ]
]

{ #category : 'api' }
{ #category : 'private' }
ToNotebook >> selectPage: aPage [

aPage isSelected: true
aPage selected: true
]

{ #category : 'accessing' }
Expand All @@ -185,6 +141,14 @@ ToNotebook >> selectedPage [
^ selectedPage
]

{ #category : 'private' }
ToNotebook >> selectedPage: aPage [

self removeBodyElement.
self setBodyElement: aPage bodyElement.
selectedPage := aPage
]

{ #category : 'private' }
ToNotebook >> setBodyElement: aBlElement [

Expand Down
11 changes: 6 additions & 5 deletions src/Toplo-Incubator/ToNotebookExamples.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ ToNotebookExamples class >> example_closeableTabs [
| space notebook |
space := BlSpace new.
notebook := ToNotebook new.
notebook inspect.
space root addChild: notebook.

(Color wheel: 5) withIndexDo: [ :eachColor :index |
| aPage |
aPage := notebook
addPageTitle: 'Page ', index asString
body: (BlElement new
addPageEntitled: 'Page ', index asString
withBody: (BlElement new
background: eachColor;
yourself).
aPage isCloseable: true ].
aPage closeable: true ].


space show
Expand All @@ -33,15 +34,15 @@ ToNotebookExamples class >> example_tabsWith2Pages [
aNotebook := ToNotebook new.

redCount := 0.
redPage := aNotebook addPageTitle: 'Red' bodyBuilder: [
redPage := aNotebook addPageEntitled: 'Red' withBodyBuilder: [
redCount := redCount + 1.
BlTextElement new
text:
(redCount asRopedText foreground: Color red darker);
yourself ].

greenCount := 0.
greenPage := aNotebook addPageTitle: 'Green' bodyBuilder: [
greenPage := aNotebook addPageEntitled: 'Green' withBodyBuilder: [
greenCount := greenCount + 1.
BlTextElement new
text:
Expand Down
Loading

0 comments on commit 50b14a3

Please sign in to comment.