Skip to content

Commit

Permalink
+ ToLabel>>rotateBy:
Browse files Browse the repository at this point in the history
+ ToImage>>rotateBy:
+ ToTabPane examples with vertical labels in ToTab
  • Loading branch information
plantec committed Dec 5, 2023
1 parent 05b71e5 commit 8cce542
Show file tree
Hide file tree
Showing 14 changed files with 684 additions and 632 deletions.
8 changes: 4 additions & 4 deletions src/Toplo-Examples/ToExperiments.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -660,11 +660,11 @@ ToExperiments class >> example_TextFlowWithBlElements [
| element |
element := BlElement new
layout: (AlbLineFlowLayout new lineSpacing: 10);
constraintsDo: [ :c |
c minWidth: 50.
constraintsDo: [ :c |
c minWidth: 50.
c horizontal matchParent.
c vertical matchParent ];
addChildren: (20 timesCollect: [
addChildren: (20 timesCollect: [
| anAnimation |
anAnimation := BlSequentialAnimation new.
anAnimation add:
Expand All @@ -677,7 +677,7 @@ ToExperiments class >> example_TextFlowWithBlElements [
margin: (BlInsets all: 4);
background: (Color random alpha: 0.5);
addAnimation: anAnimation ]).
element openInOBlSpace
element openInSpace
]

{ #category : 'elements' }
Expand Down
20 changes: 15 additions & 5 deletions src/Toplo-Examples/ToSandBox.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -2299,6 +2299,16 @@ ToSandBox class >> example_rootFrameWithContextMenu_menubarVertical [
win openInSpace
]

{ #category : 'image' }
ToSandBox class >> example_rotateImage [

| im |
im := ToImage new innerImage: (Smalltalk ui icons iconNamed: #pharoBig).
im rotateBy: 270.
im border: (BlBorder paint: Color black width: 2).
im openInSpace
]

{ #category : 'image' }
ToSandBox class >> example_scaledImage [

Expand Down Expand Up @@ -2911,7 +2921,7 @@ ToSandBox class >> example_toLabel3 [
lab background: Color lightBlue.
lab hMatchParent.
lab isEditable: true.
lab layout alignCenter.
lab innerElement constraintsDo: [:c | c frame horizontal alignCenter].
lab border: (BlBorder paint: Color yellow width: 1).
lab openInSpace
]
Expand All @@ -2931,7 +2941,7 @@ ToSandBox class >> example_toLabel4 [
lab1 isEditable: true.
lab1 vFitContent.
lab1 hMatchParent.
lab1 layout alignCenter.
lab1 innerElement constraintsDo: [:c | c frame horizontal alignCenter].
lab1 border: (BlBorder paint: Color lightGray width: 1).
root addChild: lab1.

Expand Down Expand Up @@ -3024,8 +3034,9 @@ ToSandBox class >> example_toLabel_Multiline2_Centered [
lab2 beMultiLine.
lab1 matchParent.
lab2 matchParent.
lab1 layout alignCenter.
lab2 layout alignCenter.
lab1 innerElement constraintsDo: [:c | c frame horizontal alignCenter].

lab2 innerElement constraintsDo: [:c | c frame horizontal alignCenter].
lab1 innerElement layout alignCenter.
lab2 innerElement layout alignCenter.
lab1 isEditable: true.
Expand All @@ -3046,7 +3057,6 @@ ToSandBox class >> example_toWidgetAsButton0 [

| but |
but := ToElement new.
but addEventHandler: (ToSkinStateGenerator new target: but)..
but
when: BlPrimaryClickEvent
do: [ self inform: 'Click' ].
Expand Down
106 changes: 106 additions & 0 deletions src/Toplo-Incubator/ToTabNew.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
Class {
#name : 'ToTabNew',
#superclass : 'Object',
#classTraits : 'TToCheckable classTrait',
#instVars : [
'data',
'preserveOnSelect',
'closable',
'pageBuilder',
'buttonBuilder'
],
#category : 'Toplo-Incubator',
#package : 'Toplo-Incubator'
}

{ #category : 'accessing' }
ToTabNew >> buttonBuilder [

^ buttonBuilder
]

{ #category : 'accessing' }
ToTabNew >> buttonBuilder: aValuable2Args [

buttonBuilder := aValuable2Args
]

{ #category : 'accessing' }
ToTabNew >> closable: aBoolean [

closable := aBoolean.
aBoolean
ifTrue: [
| but |
but := ToButton new.
but defaultSkin: ToTabInnerCloseButtonSkin new.
but icon: (ToImage inner: (Smalltalk ui icons iconNamed: #windowClose)).
but constraintsDo: [ :c | c linear vertical alignCenter ].
but when: BlClickEvent do: [ :event | event currentTarget removeFromParent ].
but id: #innerCloseButton. ]
ifFalse: [
self removeChildNamed: #innerCloseButton ]
]

{ #category : 'accessing' }
ToTabNew >> data [

^ data
]

{ #category : 'accessing' }
ToTabNew >> data: anObject [

data := anObject
]

{ #category : 'initialization' }
ToTabNew >> defaultButtonBuilder [

^ [ :node :holder |
| but |
but := ToLabeledIcon new labelText: self data asString.
node addChild: but.
node fitContent ]
]

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

super initialize.
closable := false.
pageBuilder := [ :arg1 :arg2 | ].
buttonBuilder := self defaultButtonBuilder
]

{ #category : 'testing' }
ToTabNew >> isClosable [

^ closable
]

{ #category : 'accessing' }
ToTabNew >> pageBuilder [

^ pageBuilder
]

{ #category : 'accessing' }
ToTabNew >> pageBuilder: aValuable2Args [
"Establish what is my body. When a tab is selected in a notebook, it will send `#value:value:` to this factory,
with the page pane and the notebook as arguments"

pageBuilder := aValuable2Args
]

{ #category : 'accessing' }
ToTabNew >> preserveOnSelect [

^ preserveOnSelect
]

{ #category : 'accessing' }
ToTabNew >> preserveOnSelect: aBoolean [

preserveOnSelect := aBoolean
]
158 changes: 158 additions & 0 deletions src/Toplo-Incubator/ToTabPaneHeaderNew.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
Class {
#name : 'ToTabPaneHeaderNew',
#superclass : 'ToPane',
#classTraits : 'TToOrientable classTrait',
#instVars : [
'tabs',
'tabRow',
'tabRowContainer',
'startContainer',
'endContainer',
'vertical',
'sharedDistributor'
],
#category : 'Toplo-Incubator',
#package : 'Toplo-Incubator'
}

{ #category : 'orientation' }
ToTabPaneHeaderNew >> beHorizontal [

self tabs beHorizontal
]

{ #category : 'orientation' }
ToTabPaneHeaderNew >> beVertical [

self tabs beVertical
]

{ #category : 'tabs selection' }
ToTabPaneHeaderNew >> dataEmptinessChangeEvent: anEvent [

self tabs selectionIndexes ifEmpty: [ self selectIndex: 1 ]
]

{ #category : 'initialization' }
ToTabPaneHeaderNew >> defaultTabRowNodeBuilder [

^ [ :node :holder |
| tabModel |
tabModel := holder data.
tabModel buttonBuilder value: node value: holder ]
]

{ #category : 'accessing' }
ToTabPaneHeaderNew >> endContainer [

^ endContainer
]

{ #category : 'orientation' }
ToTabPaneHeaderNew >> horizontal [

^ self vertical not
]

{ #category : 'orientation' }
ToTabPaneHeaderNew >> horizontal: aBoolean [

self vertical: aBoolean not
]

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

super initialize.
tabRowContainer := ToPane new fitContent; yourself.
tabs := ToList new nodeBuilder: self defaultTabRowNodeBuilder; yourself.
tabs nodeClass: ToTabNode.
tabs matchParent.
tabs infinite matchParent.
tabRowContainer addChild: tabs.
tabRowContainer matchParent.
startContainer := ToPane new fitContent; yourself.
endContainer := ToPane new fitContent; yourself.
self addChild: startContainer.
self addChild: tabRowContainer.
self addChild: endContainer.
self initializeEventHandler.
self when: ToInfiniteSelectionChangedEvent do: [ :evt | self tabsSelectionChangedEvent: evt ].
tabs data when: ToDataEmptinessChangeEvent do: [ :evt | self dataEmptinessChangeEvent: evt ]
]

{ #category : 'initialization' }
ToTabPaneHeaderNew >> initializeEventHandler [

sharedDistributor := BlSharedEventDistributor new shareEvents:
self sharedEvents yourself.
self addEventHandler: sharedDistributor.
self tabs addEventHandler: sharedDistributor.

]

{ #category : 'orientation' }
ToTabPaneHeaderNew >> orientationChanged [

self vertical
ifTrue: [ self beVertical ]
ifFalse: [ self beHorizontal ]
]

{ #category : 'tabs selection' }
ToTabPaneHeaderNew >> selectIndex: anInteger [

self tabs selectIndex: anInteger
]

{ #category : 'initialization' }
ToTabPaneHeaderNew >> sharedEvents [

^ { ToInfiniteSelectionChangedEvent. }
]

{ #category : 'accessing' }
ToTabPaneHeaderNew >> startContainer [

^ startContainer
]

{ #category : 'accessing' }
ToTabPaneHeaderNew >> tabRow [

^ tabRow
]

{ #category : 'accessing' }
ToTabPaneHeaderNew >> tabRowContainer [

^ tabRowContainer
]

{ #category : 'accessing' }
ToTabPaneHeaderNew >> tabs [

^ tabs
]

{ #category : 'tabs selection' }
ToTabPaneHeaderNew >> tabsSelectionChangedEvent: anEvent [

anEvent oldSelectedIndexes trace. ' -> ' trace.
anEvent newSelectedIndexes traceCr.
]

{ #category : 'orientation' }
ToTabPaneHeaderNew >> vertical [

^ vertical
]

{ #category : 'orientation' }
ToTabPaneHeaderNew >> vertical: aBoolean [

vertical = aBoolean ifTrue: [ ^ self ].
vertical := aBoolean.
self orientationChanged

]
23 changes: 23 additions & 0 deletions src/Toplo-Incubator/ToTabPaneHeaderNewExamples.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Class {
#name : 'ToTabPaneHeaderNewExamples',
#superclass : 'Object',
#category : 'Toplo-Incubator',
#package : 'Toplo-Incubator'
}

{ #category : 'header' }
ToTabPaneHeaderNewExamples >> example_headerFourTab [

| header |
header := ToTabPaneHeaderNew new.
header tabs data add: (ToTabNew new data: 'Tab 1').
header tabs data add: (ToTabNew new data: 'Tab 2').
header tabs data add: (ToTabNew new data: 'Tab 3').
header tabs data add: (ToTabNew new data: 'Tab 4').
header background: Color yellow.
header matchParent.
header beVertical.
header openInSpace.
header inspect.
^ header
]
10 changes: 9 additions & 1 deletion src/Toplo-Widget-Album/ToLabel.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ ToLabel >> defaultEventHandler [
{ #category : 'initialization' }
ToLabel >> defaultLayout [

^ BlLinearLayout horizontal
^ BlFrameLayout new
]

{ #category : 'initialization' }
Expand Down Expand Up @@ -314,6 +314,14 @@ ToLabel >> removeEditor [

]

{ #category : 'rotation' }
ToLabel >> rotateBy: aDegreesAngle [

self innerElement
constraintsDo: [ :c | c accountTransformation ];
transformDo: [ :t | t rotateBy: aDegreesAngle ]
]

{ #category : 'accessing' }
ToLabel >> text [
<return: #BlText>
Expand Down
Loading

0 comments on commit 8cce542

Please sign in to comment.