Grafoscopio/repository/Grafoscopio/GrafoscopioTreeNotebook.cla...

86 lines
1.9 KiB
Smalltalk

Class {
#name : #GrafoscopioTreeNotebook,
#superclass : #SpPresenter,
#instVars : [
'#sidebar',
'#viewport',
'#model',
'=>',
'SpObservableSlot',
'#empty',
'#perspectives'
],
#category : 'Grafoscopio-New-UI'
}
{ #category : #specs }
GrafoscopioTreeNotebook class >> defaultSpec [
^ SpBoxLayout newHorizontal
add:
(SpBoxLayout newVertical
add: #empty height: self toolbarHeight;
add: #sidebar;
yourself)
width: 51;
add: #viewport;
yourself
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> createDefaultComponent [
^ GrafoscopioPerspective defaultPerspective new
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> initialize [
super initialize.
perspectives := Dictionary new.
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> initializePrivateAnnouncements [
super initializePrivateAnnouncements.
self property: #model whenChangedDo: [ self updateModel ]
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> initializeWidgets [
super initializeWidgets.
sidebar := self sidebar.
viewport := self createDefaultComponent.
empty := self newLabel.
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> installPerspective: aPerspective [
viewport ifNotNil: [ viewport aboutToBeUninstalledFrom: self ].
viewport := (perspectives at: aPerspective ifAbsentPut: [ self instantiate: aPerspective ]) .
self updateModel.
]
{ #category : #'as yet unclassified' }
GrafoscopioTreeNotebook >> open: aGrafoscopioProject [
model := aGrafoscopioProject.
self openWithSpec.
self updateModel
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> sidebar [
| bar |
bar := self instantiate: SpSidebar.
GrafoscopioPerspective perspectives
do:
[ :p | bar addAction: [ self installPerspective: p ] icon: p icon ].
^ bar
]
{ #category : #initialization }
GrafoscopioTreeNotebook >> updateModel [
viewport updateModel: model.
self needRebuild: false.
self buildWithSpec
]