Many refactors. pharo 9 en windows is working really bad
This commit is contained in:
parent
ae12fe9576
commit
9cf21cb38b
|
@ -10,6 +10,31 @@ Class {
|
||||||
#category : #'Grafoscopio-UI'
|
#category : #'Grafoscopio-UI'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ #category : #'world menu' }
|
||||||
|
GfWorldMenu class >> getProjectExample [
|
||||||
|
| project unit |
|
||||||
|
project := GrafoscopioProject new.
|
||||||
|
unit := GrafoscopioUnitNode new.
|
||||||
|
unit name: 'Pillar-Example'.
|
||||||
|
unit
|
||||||
|
addChild: [ GrafoscopioPillarNode new
|
||||||
|
text: GrafoscopioPillarASText openExample;
|
||||||
|
yourself ]
|
||||||
|
ofClass: GrafoscopioPillarNode.
|
||||||
|
project document addChild: unit ofClass: GrafoscopioUnitNode.
|
||||||
|
^ project
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'world menu' }
|
||||||
|
GfWorldMenu class >> getProjectFromFile [
|
||||||
|
| file |
|
||||||
|
file := UIManager default
|
||||||
|
chooseExistingFileReference: 'Choose a file'
|
||||||
|
extensions: #('ston')
|
||||||
|
path: FileLocator documents.
|
||||||
|
^ (STON fromStream: file readStream)
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'world menu' }
|
{ #category : #'world menu' }
|
||||||
GfWorldMenu class >> helpMenuOn: aBuilder [
|
GfWorldMenu class >> helpMenuOn: aBuilder [
|
||||||
<worldMenu>
|
<worldMenu>
|
||||||
|
@ -75,12 +100,17 @@ GfWorldMenu class >> launchMenuOn: aBuilder [
|
||||||
label: 'New notebook';
|
label: 'New notebook';
|
||||||
order: 1;
|
order: 1;
|
||||||
parent: #GfLaunch;
|
parent: #GfLaunch;
|
||||||
action: [ GrafoscopioNewNotebook new openDefault ].
|
action: [ (GrafoscopioTreeNotebook on: GrafoscopioProject new ) openWithSpec ].
|
||||||
|
(aBuilder item: #'New Notebook from example ')
|
||||||
|
label: 'Notebook from from example ';
|
||||||
|
order: 2;
|
||||||
|
parent: #GfLaunch;
|
||||||
|
action: [ (GrafoscopioTreeNotebook on: (self getProjectExample)) openWithSpec ].
|
||||||
(aBuilder item: #'Notebook from file...')
|
(aBuilder item: #'Notebook from file...')
|
||||||
label: 'Notebook from file...';
|
label: 'Notebook from file...';
|
||||||
order: 2;
|
order: 2;
|
||||||
parent: #GfLaunch;
|
parent: #GfLaunch;
|
||||||
action: [ GrafoscopioNewNotebook new openFromFileSelector ].
|
action: [ (GrafoscopioTreeNotebook on: (self getProjectFromFile)) openWithSpec ].
|
||||||
(aBuilder item: #GfLaunchOpenRecent)
|
(aBuilder item: #GfLaunchOpenRecent)
|
||||||
label: 'Open recent...';
|
label: 'Open recent...';
|
||||||
order: 2;
|
order: 2;
|
||||||
|
@ -89,7 +119,7 @@ GfWorldMenu class >> launchMenuOn: aBuilder [
|
||||||
label: 'Notebook from the Internet...';
|
label: 'Notebook from the Internet...';
|
||||||
order: 3;
|
order: 3;
|
||||||
parent: #GfLaunch;
|
parent: #GfLaunch;
|
||||||
action: [ GrafoscopioNewNotebook new openFromUrlUI ].
|
action: [ GrafoscopioTreeNotebook new openFromUrlUI ].
|
||||||
(aBuilder item: #recentNotebooks)
|
(aBuilder item: #recentNotebooks)
|
||||||
label: 'Recent notebooks...';
|
label: 'Recent notebooks...';
|
||||||
order: 4;
|
order: 4;
|
||||||
|
@ -119,19 +149,6 @@ GfWorldMenu class >> mainMenuItemsOn: aBuilder [
|
||||||
label: 'Help & Docs') target: self ]
|
label: 'Help & Docs') target: self ]
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'world menu' }
|
|
||||||
GfWorldMenu class >> openRecentMenu: aBuilder [
|
|
||||||
<worldMenu>
|
|
||||||
|
|
||||||
GrafoscopioNotebook recents
|
|
||||||
do: [ :f |
|
|
||||||
(aBuilder item: #'Open', f basename )
|
|
||||||
label: 'Open ', f basename;
|
|
||||||
order: 1;
|
|
||||||
parent: #GfLaunchOpenRecent;
|
|
||||||
action: [ GrafoscopioNotebook open: f ] ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'world menu' }
|
{ #category : #'world menu' }
|
||||||
GfWorldMenu class >> updateMenuOn: aBuilder [
|
GfWorldMenu class >> updateMenuOn: aBuilder [
|
||||||
<worldMenu>
|
<worldMenu>
|
||||||
|
|
|
@ -34,6 +34,20 @@ GrafoscopioAttributeBranchVisitor >> attributesAt: aNode [
|
||||||
^ (attributes detect: [ :a | a first = aNode ]) second
|
^ (attributes detect: [ :a | a first = aNode ]) second
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioAttributeBranchVisitor >> attributesAt: aNode force: aBlock [
|
||||||
|
^ attributes
|
||||||
|
detect: [ :a | a first = aNode ]
|
||||||
|
ifFound: [ :a | a at:2 put: aBlock value ]
|
||||||
|
ifNone: [ | val |
|
||||||
|
val := aBlock value.
|
||||||
|
attributes
|
||||||
|
add:
|
||||||
|
{aNode.
|
||||||
|
val}.
|
||||||
|
val ]
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioAttributeBranchVisitor >> attributesAt: aNode ifAbsentPut: aBlock [
|
GrafoscopioAttributeBranchVisitor >> attributesAt: aNode ifAbsentPut: aBlock [
|
||||||
^ attributes
|
^ attributes
|
||||||
|
@ -123,7 +137,7 @@ GrafoscopioAttributeBranchVisitor >> visitLineBreak: aPRLineBreak [
|
||||||
GrafoscopioAttributeBranchVisitor >> visitListItem: aPRListItem [
|
GrafoscopioAttributeBranchVisitor >> visitListItem: aPRListItem [
|
||||||
self
|
self
|
||||||
attributesAt: aPRListItem
|
attributesAt: aPRListItem
|
||||||
ifAbsentPut: [ styler attributesForListItem: aPRListItem at: index ]
|
force: [ styler attributesForListItem: aPRListItem at: index ]
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
"
|
|
||||||
This kind of a leafNodes holds code text.
|
|
||||||
"
|
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioCodeNode,
|
|
||||||
#superclass : #GrafoscopioTextNode,
|
|
||||||
#category : #'Grafoscopio-Model'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioCodeNode class >> icon [
|
|
||||||
^ self iconNamed:#objects
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioCodeNode class >> nameForSelection [
|
|
||||||
^ 'New Code Node'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioCodeNode >> acceptVisitor: aGrafoscopioVisitor [
|
|
||||||
aGrafoscopioVisitor visitCodeNode: self.
|
|
||||||
|
|
||||||
]
|
|
|
@ -1,151 +0,0 @@
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioDocumentEditionPerspective,
|
|
||||||
#superclass : #GrafoscopioPerspective,
|
|
||||||
#instVars : [
|
|
||||||
'tree',
|
|
||||||
'document'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-New-UI'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioDocumentEditionPerspective class >> defaultSpec [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add: #toolbar height: self toolbarHeight;
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add: #tree width: 100;
|
|
||||||
add: #viewport;
|
|
||||||
yourself) yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioDocumentEditionPerspective class >> icon [
|
|
||||||
^ self iconNamed: #merge
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - convenience' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addAtBeginningNewNodeOfClass: aClass [
|
|
||||||
self
|
|
||||||
addAtBeginningOf: (tree selectedItem ifNil: [ document ])
|
|
||||||
aNodeOfClass: aClass
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - base' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addAtBeginningOf: aNode aNodeOfClass: aClass [
|
|
||||||
aNode
|
|
||||||
addAtBeginningChild: [ self instantiateNode: aClass ]
|
|
||||||
ofClass: aClass.
|
|
||||||
self modelChanged
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - convenience' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addAtLastNewNodeOfClass: aClass [
|
|
||||||
self
|
|
||||||
addAtLastOf: (tree selectedItem ifNil: [ document ])
|
|
||||||
aNodeOfClass: aClass
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - base' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addAtLastOf: aNode aNodeOfClass: aClass [
|
|
||||||
aNode
|
|
||||||
addChild: [ self instantiateNode: aClass ]
|
|
||||||
ofClass: aClass.
|
|
||||||
self modelChanged
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - convenience' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addNewNodeAtBeginningOf: aNode [
|
|
||||||
self addAtBeginningOf: aNode aNodeOfClass: self chooseKindsOfNode
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - convenience' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addNewNodeAtLastOf: aNode [
|
|
||||||
self addAtLastOf: aNode aNodeOfClass: self chooseKindsOfNode
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'adding - convenience' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> addNewNodeOfClass: aClass [
|
|
||||||
^ self addAtLastNewNodeOfClass: aClass
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> createDefaultViewportVisitor [
|
|
||||||
^ GrafoscopioViewportVisitor new
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> createViewport [
|
|
||||||
^ self renderViewport: document
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> informNodeHasChanged: aNode [
|
|
||||||
| path |
|
|
||||||
path := tree selection selectedPath.
|
|
||||||
tree roots: {document}.
|
|
||||||
tree selectPath: path.
|
|
||||||
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> initializeWidgets [
|
|
||||||
super initializeWidgets.
|
|
||||||
tree := self newTreeTable.
|
|
||||||
tree
|
|
||||||
addColumn: (SpStringTableColumn evaluated: #name);
|
|
||||||
children: [ :node |
|
|
||||||
node isLeaf
|
|
||||||
ifTrue: [ {} ]
|
|
||||||
ifFalse: [ node children reject:[: a | a isLeaf ] ]].
|
|
||||||
tree activateOnDoubleClick.
|
|
||||||
tree whenSelectionChangedDo: [ : a | self renderViewport: a selectedItem ].
|
|
||||||
tree whenActivatedDo: [ : a | self tooglePresenterForEdition: a ].
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> instantiateNode: aClass [
|
|
||||||
aClass class = GrafoscopioUnitNode species
|
|
||||||
ifTrue: [ | name |
|
|
||||||
name := UIManager default
|
|
||||||
request: 'Unit name'
|
|
||||||
initialAnswer: 'New unit'.
|
|
||||||
^ aClass new
|
|
||||||
name: name;
|
|
||||||
yourself ].
|
|
||||||
^ aClass new
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> modelChanged [
|
|
||||||
| path |
|
|
||||||
viewport := self createViewport.
|
|
||||||
path := tree selection selectedPath.
|
|
||||||
tree roots: {document}.
|
|
||||||
tree selectPath: path.
|
|
||||||
self needRebuild: false.
|
|
||||||
self buildWithSpec
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> renderViewport: aNode [
|
|
||||||
^ self createDefaultViewportVisitor createViewportFor: ( aNode ifNil: [ document ]) into: self
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> setModelBeforeInitialization: aDomainObject [
|
|
||||||
super setModelBeforeInitialization: aDomainObject.
|
|
||||||
document := aDomainObject .
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> tooglePresenterForEdition: anObect [
|
|
||||||
self halt.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioDocumentEditionPerspective >> viewport [
|
|
||||||
^ viewport
|
|
||||||
]
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioDocumentRichTextEditionPerspective,
|
||||||
|
#superclass : #GrafoscopioDocumentTextEditionPerspective,
|
||||||
|
#category : #'Grafoscopio-New-UI'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioDocumentRichTextEditionPerspective class >> icon [
|
||||||
|
^ self iconNamed: #merge
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentRichTextEditionPerspective >> aboutToBeUninstalledFrom: aTreeNotebook [
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentRichTextEditionPerspective >> createDefaultViewportVisitor [
|
||||||
|
^ GrafoscopioViewportRichTextVisitor new
|
||||||
|
]
|
|
@ -0,0 +1,189 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioDocumentTextEditionPerspective,
|
||||||
|
#superclass : #GrafoscopioPerspective,
|
||||||
|
#instVars : [
|
||||||
|
'tree',
|
||||||
|
'document',
|
||||||
|
'buildingVisitor'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-New-UI'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective class >> buildCommandsGroupWith: presenterInstance forRoot: rootCommandGroup [
|
||||||
|
rootCommandGroup
|
||||||
|
register: (self buildMenuBarGroupWith: presenterInstance)";
|
||||||
|
register: (self buildContextualMenuGroupWith: presenterInstance)"
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective class >> buildContextualMenuGroupWith: presenterInstance [
|
||||||
|
^ (CmCommandGroup named: 'Context Menu') asSpecGroup
|
||||||
|
register: (self buildEditionGroupWith: presenterInstance);
|
||||||
|
register: (self buildAddingGroupWith: presenterInstance);
|
||||||
|
register: (self buildRemovingGroupWith: presenterInstance);
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective class >> buildMenuBarGroupWith: presenterInstance [
|
||||||
|
^ (CmCommandGroup named: 'Context Menu') asSpecGroup
|
||||||
|
register:
|
||||||
|
(CmBlockCommand new
|
||||||
|
name: 'Inspect node';
|
||||||
|
block:
|
||||||
|
[ :context | context viewport selectedPage activePresenter inspectNode ];
|
||||||
|
asSpecCommand);
|
||||||
|
register:
|
||||||
|
(CmBlockCommand new
|
||||||
|
name: 'Inspect runs';
|
||||||
|
block:
|
||||||
|
[ :context | context viewport selectedPage activePresenter inspectRuns ];
|
||||||
|
asSpecCommand);
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective class >> defaultSpec [
|
||||||
|
^ SpBoxLayout newVertical
|
||||||
|
add: #toolbar height: self toolbarHeight;
|
||||||
|
add:
|
||||||
|
(SpBoxLayout newHorizontal
|
||||||
|
add: #tree width: 100;
|
||||||
|
add: #viewport;
|
||||||
|
yourself) yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective class >> icon [
|
||||||
|
^ self iconNamed: #edit
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'adding - convenience' }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> aboutToBeUninstalledFrom: aTreeNotebook [
|
||||||
|
aTreeNotebook removePerspective: self
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'adding - convenience' }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> addAtLastNewNodeOfClass: aClass [
|
||||||
|
self
|
||||||
|
addAtLastOf: (tree selectedItem ifNil: [ document ])
|
||||||
|
aNodeOfClass: aClass
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'adding - base' }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> addAtLastOf: aNode aNodeOfClass: aClass [
|
||||||
|
aNode
|
||||||
|
addChild: [ self instantiateNode: aClass ]
|
||||||
|
ofClass: aClass.
|
||||||
|
self modelChanged
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'adding - convenience' }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> addNewNodeOfClass: aClass [
|
||||||
|
^ self addAtLastNewNodeOfClass: aClass
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> buildingVisitor [
|
||||||
|
^ buildingVisitor
|
||||||
|
ifNil: [ buildingVisitor := self createDefaultViewportVisitor ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> buildingVisitor: aVisitor [
|
||||||
|
buildingVisitor := aVisitor
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> createDefaultViewportVisitor [
|
||||||
|
^ GrafoscopioViewportTextVisitor new
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> createViewport [
|
||||||
|
^ self renderViewport: document
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> informNodeHasChanged: aNode [
|
||||||
|
| path |
|
||||||
|
path := tree selection selectedPath.
|
||||||
|
tree roots: {document}.
|
||||||
|
tree selectPath: path.
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> initializeWidgets [
|
||||||
|
super initializeWidgets.
|
||||||
|
tree := self newTreeTable.
|
||||||
|
tree
|
||||||
|
addColumn: (SpStringTableColumn evaluated: #name);
|
||||||
|
children: [ :node |
|
||||||
|
node isLeaf
|
||||||
|
ifTrue: [ {} ]
|
||||||
|
ifFalse: [ node children ] ].
|
||||||
|
tree activateOnDoubleClick.
|
||||||
|
tree
|
||||||
|
whenSelectionChangedDo: [ :a | self renderViewport: a selectedItem ].
|
||||||
|
tree whenActivatedDo: [ : a | self requestNewNameFor: a selectedItem ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> instantiateNode: aClass [
|
||||||
|
| name |
|
||||||
|
name := UIManager default
|
||||||
|
request: 'Please, name the item'
|
||||||
|
initialAnswer: 'New item'.
|
||||||
|
^ aClass new
|
||||||
|
name: name;
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> modelChanged [
|
||||||
|
| path |
|
||||||
|
path := tree selection selectedPath.
|
||||||
|
tree roots: {document}.
|
||||||
|
tree selectPath: path.
|
||||||
|
self needRebuild: false.
|
||||||
|
self buildWithSpec
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> nameChanged [
|
||||||
|
| path |
|
||||||
|
path := tree selection selectedPath.
|
||||||
|
tree roots: {document}.
|
||||||
|
tree buildWithSpec.
|
||||||
|
tree selectPath: path
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> renderViewport: aNode [
|
||||||
|
^ self buildingVisitor createViewportFor: ( aNode ifNil: [ document ]) into: self
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> requestNewNameFor: aNode [
|
||||||
|
| name |
|
||||||
|
name := UIManager default
|
||||||
|
request: 'Please, name the node'
|
||||||
|
initialAnswer: aNode name asString.
|
||||||
|
name ifNotNil: [ aNode name: name ].
|
||||||
|
self buildingVisitor renamePageFor: aNode.
|
||||||
|
self nameChanged .
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> setModelBeforeInitialization: aDomainObject [
|
||||||
|
super setModelBeforeInitialization: aDomainObject.
|
||||||
|
document := aDomainObject .
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioDocumentTextEditionPerspective >> viewport [
|
||||||
|
^ viewport
|
||||||
|
]
|
|
@ -6,5 +6,6 @@ Class {
|
||||||
|
|
||||||
{ #category : #'target resize' }
|
{ #category : #'target resize' }
|
||||||
GrafoscopioFmtAnchorOnTheLeft >> beInstalledIn: aNode [
|
GrafoscopioFmtAnchorOnTheLeft >> beInstalledIn: aNode [
|
||||||
|
|
||||||
self installTextNodeAtLeftWithValue: (Character value: 1) asString in: aNode
|
self installTextNodeAtLeftWithValue: (Character value: 1) asString in: aNode
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,5 +6,6 @@ Class {
|
||||||
|
|
||||||
{ #category : #'target resize' }
|
{ #category : #'target resize' }
|
||||||
GrafoscopioFmtBeginningLinebreak >> beInstalledIn: aNode [
|
GrafoscopioFmtBeginningLinebreak >> beInstalledIn: aNode [
|
||||||
self installTextNodeAtLeftWithValue: OSPlatform current lineEnding in: aNode
|
" Should be using OSPlatform current lineEnding, but our text presenter does not support to have 2 character representation "
|
||||||
|
self installTextNodeAtLeftWithValue: String cr in: aNode
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,6 +6,7 @@ Class {
|
||||||
|
|
||||||
{ #category : #'target resize' }
|
{ #category : #'target resize' }
|
||||||
GrafoscopioFmtDoubleLinebreak >> beInstalledIn: aNode [
|
GrafoscopioFmtDoubleLinebreak >> beInstalledIn: aNode [
|
||||||
self installTextNodeAtLeftWithValue: OSPlatform current lineEnding in: aNode.
|
" Should be using OSPlatform current lineEnding, but our text presenter does not support to have 2 character representation "
|
||||||
self installTextNodeAtRightWithValue: OSPlatform current lineEnding in: aNode
|
self installTextNodeAtLeftWithValue: String cr in: aNode.
|
||||||
|
self installTextNodeAtRightWithValue: String cr in: aNode
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,7 +6,8 @@ Class {
|
||||||
|
|
||||||
{ #category : #'target resize' }
|
{ #category : #'target resize' }
|
||||||
GrafoscopioFmtEndingLinebreak >> beInstalledIn: aNode [
|
GrafoscopioFmtEndingLinebreak >> beInstalledIn: aNode [
|
||||||
self installTextNodeAtRightWithValue: OSPlatform current lineEnding in: aNode
|
" Should be using OSPlatform current lineEnding, but our text presenter does not support to have 2 character representation "
|
||||||
|
self installTextNodeAtRightWithValue: String cr in: aNode
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'target resize' }
|
{ #category : #'target resize' }
|
||||||
|
|
|
@ -1,105 +0,0 @@
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioNewCodeModel,
|
|
||||||
#superclass : #GrafoscopioNewTextModel,
|
|
||||||
#instVars : [
|
|
||||||
'preview',
|
|
||||||
'previewButton'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-New-UI'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #specs }
|
|
||||||
GrafoscopioNewCodeModel class >> defaultSpec [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add: #body;
|
|
||||||
yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> content: aGrafoscopioNodeContent [
|
|
||||||
self layout: (self createLayoutFor: aGrafoscopioNodeContent).
|
|
||||||
body text: (aGrafoscopioNodeContent ifNil: [ '' ])
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> createLayoutFor: aGrafoscopioNodeContent [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newVertical
|
|
||||||
add: #up;
|
|
||||||
add: #down;
|
|
||||||
add: #delete;
|
|
||||||
yourself)
|
|
||||||
width: 30;
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add: #body;
|
|
||||||
add: #previewButton width: 30;
|
|
||||||
add: #preview;
|
|
||||||
yourself);
|
|
||||||
yourself)
|
|
||||||
height: (self heightFor: aGrafoscopioNodeContent)
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> editionLayoutFor: aGrafoscopioNodeContent [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newVertical
|
|
||||||
add: #up;
|
|
||||||
add: #down;
|
|
||||||
add: #delete;
|
|
||||||
yourself)
|
|
||||||
width: 30;
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add: #body;
|
|
||||||
add: #previewButton width: 30;
|
|
||||||
add: #preview;
|
|
||||||
yourself);
|
|
||||||
yourself)
|
|
||||||
height: (self heightFor: aGrafoscopioNodeContent)
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> initializeWidgets [
|
|
||||||
super initializeWidgets.
|
|
||||||
previewButton := self newButton.
|
|
||||||
previewButton icon: (self iconNamed: #smallFind).
|
|
||||||
previewButton action: [ self previewCode ].
|
|
||||||
preview := self newLabel
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> newTextComponent [
|
|
||||||
^ self newCode
|
|
||||||
whenTextChangedDo: [ model text: body text ];
|
|
||||||
autoAccept: true;
|
|
||||||
yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> normalLayoutFor: aGrafoscopioNodeContent [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add:
|
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add: #body;
|
|
||||||
add: #previewButton width: 30;
|
|
||||||
add: #preview;
|
|
||||||
yourself);
|
|
||||||
yourself)
|
|
||||||
height: (self heightFor: aGrafoscopioNodeContent)
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewCodeModel >> previewCode [
|
|
||||||
[ preview label: (self class compiler evaluate: body text) asString ]
|
|
||||||
on: Error
|
|
||||||
do: [ :e | preview label: e asString]
|
|
||||||
]
|
|
|
@ -1,83 +0,0 @@
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioNewTextInputModel,
|
|
||||||
#superclass : #SpDynamicPresenter,
|
|
||||||
#instVars : [
|
|
||||||
'#body',
|
|
||||||
'#model => SpObservableSlot',
|
|
||||||
'#onModifyNodeLocationDo'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-New-UI'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #specs }
|
|
||||||
GrafoscopioNewTextInputModel class >> defaultSpec [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add: #body height: 300;
|
|
||||||
yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #API }
|
|
||||||
GrafoscopioNewTextInputModel >> content: aGrafoscopioNodeContent [
|
|
||||||
self layout: (self createLayoutFor: aGrafoscopioNodeContent).
|
|
||||||
body text: (aGrafoscopioNodeContent ifNil: [ '' ])
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #API }
|
|
||||||
GrafoscopioNewTextInputModel >> createLayoutFor: aGrafoscopioNodeContent [
|
|
||||||
^ SpBoxLayout newVertical
|
|
||||||
add: #body
|
|
||||||
height: (self heightFor: aGrafoscopioNodeContent)
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioNewTextInputModel >> heightFor: aGrafoscopioNodeContent [
|
|
||||||
^ aGrafoscopioNodeContent
|
|
||||||
ifNil: [ 100 ]
|
|
||||||
ifNotNil: [ (aGrafoscopioNodeContent asString lines size * self class toolbarHeight) max: 100 ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> informModification [
|
|
||||||
onModifyNodeLocationDo
|
|
||||||
ifNotNil: [ onModifyNodeLocationDo cull: self ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> initialize [
|
|
||||||
super initialize.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> initializePrivateAnnouncements [
|
|
||||||
super initializePrivateAnnouncements.
|
|
||||||
self property: #model whenChangedDo: [ self modelChanged ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> initializeWidgets [
|
|
||||||
body := self newTextComponent.
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> model: aModel [
|
|
||||||
model := aModel
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> modelChanged [
|
|
||||||
self content: model text.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> newTextComponent [
|
|
||||||
^ self newTextInput whenTextChangedDo: [
|
|
||||||
model text: body text.
|
|
||||||
self informModification ];
|
|
||||||
yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #initialization }
|
|
||||||
GrafoscopioNewTextInputModel >> onModifyNodeLocationDo: aBlock [
|
|
||||||
onModifyNodeLocationDo := aBlock
|
|
||||||
]
|
|
|
@ -1,78 +1,77 @@
|
||||||
Class {
|
Class {
|
||||||
#name : #GrafoscopioNewTextModel,
|
#name : #GrafoscopioNewTextModel,
|
||||||
#superclass : #GrafoscopioNewTextInputModel,
|
#superclass : #SpPresenterWithModel,
|
||||||
#instVars : [
|
#instVars : [
|
||||||
'up',
|
'body',
|
||||||
'down',
|
'onModifyNodeLocationDo'
|
||||||
'delete',
|
|
||||||
'editionMode',
|
|
||||||
'lastHeightUsed'
|
|
||||||
],
|
],
|
||||||
#category : #'Grafoscopio-New-UI'
|
#category : #'Grafoscopio-New-UI'
|
||||||
}
|
}
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #specs }
|
||||||
GrafoscopioNewTextModel >> createLayoutFor: aGrafoscopioNodeContent [
|
GrafoscopioNewTextModel class >> defaultSpec [
|
||||||
lastHeightUsed := (self heightFor: aGrafoscopioNodeContent).
|
^ SpBoxLayout newVertical
|
||||||
^ editionMode
|
add: #body;
|
||||||
ifTrue: [ self editionLayoutFor: aGrafoscopioNodeContent ]
|
yourself
|
||||||
ifFalse: [ self normalLayoutFor: aGrafoscopioNodeContent ]
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioNewTextModel >> body [
|
||||||
|
^ body
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioNewTextModel >> editionLayoutFor: aGrafoscopioNodeContent [
|
GrafoscopioNewTextModel >> contextMenuFromCommandsGroup: aBlock [
|
||||||
^ SpBoxLayout newVertical
|
^ body contextMenuFromCommandsGroup: aBlock
|
||||||
add:
|
]
|
||||||
(SpBoxLayout newHorizontal
|
|
||||||
add:
|
{ #category : #initialization }
|
||||||
(SpBoxLayout newVertical
|
GrafoscopioNewTextModel >> informModification [
|
||||||
add: #up;
|
onModifyNodeLocationDo
|
||||||
add: #down;
|
ifNotNil: [ onModifyNodeLocationDo cull: self ]
|
||||||
add: #delete;
|
]
|
||||||
yourself)
|
|
||||||
width: 30;
|
{ #category : #initialization }
|
||||||
add: #body;
|
GrafoscopioNewTextModel >> initialize [
|
||||||
yourself)
|
super initialize.
|
||||||
height: (self heightFor: aGrafoscopioNodeContent)
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioNewTextModel >> initializeWidgets [
|
GrafoscopioNewTextModel >> initializeWidgets [
|
||||||
super initializeWidgets .
|
body := self newText.
|
||||||
editionMode := true.
|
body text: self model text.
|
||||||
up := self newButton icon: (self iconNamed: #up) ; color: Color transparent ; yourself .
|
body whenTextChangedDo: [ self informModification ]
|
||||||
down := self newButton icon: (self iconNamed: #down) ; color: Color transparent ; yourself .
|
|
||||||
delete := self newButton icon: (self iconNamed: #delete) ; color: Color transparent ; yourself .
|
|
||||||
up action: [ model moveUp. self informModification. ].
|
|
||||||
down action: [ model moveDown. self informModification.].
|
|
||||||
delete action: [ model remove .self informModification. ]
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioNewTextModel >> newTextComponent [
|
GrafoscopioNewTextModel >> inspectNRun [
|
||||||
^ self newText
|
body text
|
||||||
whenTextChangedDo: [ self textChanged ];
|
inspectRunAt:
|
||||||
autoAccept: true;
|
(body selectionInterval
|
||||||
yourself
|
ifNil: [ body cursorPositionIndex ]
|
||||||
|
ifNotNil: [ :i | i first ])
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioNewTextModel >> normalLayoutFor: aGrafoscopioNodeContent [
|
GrafoscopioNewTextModel >> inspectNode [
|
||||||
^ SpBoxLayout newVertical
|
body text
|
||||||
add: #body
|
inspectNodeAt:
|
||||||
height: (self heightFor: aGrafoscopioNodeContent)
|
(body selectionInterval
|
||||||
|
ifNil: [ body cursorPositionIndex ]
|
||||||
|
ifNotNil: [ :i | i first ])
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioNewTextModel >> inspectRuns [
|
||||||
|
^ self inspectNRun
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioNewTextModel >> textChanged [
|
GrafoscopioNewTextModel >> modelChanged [
|
||||||
model text: body text.
|
body text: self model text.
|
||||||
(lastHeightUsed - (self heightFor: model text )) abs
|
|
||||||
> (lastHeightUsed * 0.1)
|
|
||||||
ifTrue: [ self modelChanged ]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioNewTextModel >> toogleEditionMode [
|
GrafoscopioNewTextModel >> onModifyNodeLocationDo: aBlock [
|
||||||
editionMode := editionMode not.
|
onModifyNodeLocationDo := aBlock
|
||||||
]
|
]
|
||||||
|
|
|
@ -10,7 +10,7 @@ Class {
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPerspective class >> defaultPerspective [
|
GrafoscopioPerspective class >> defaultPerspective [
|
||||||
^ GrafoscopioDocumentEditionPerspective
|
^ GrafoscopioDocumentTextEditionPerspective
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
|
@ -31,6 +31,10 @@ GrafoscopioPerspective class >> perspectives [
|
||||||
^ self allSubclasses select: [ : c | c isAbstract not ]
|
^ self allSubclasses select: [ : c | c isAbstract not ]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPerspective >> aboutToBeInstalled: aTreeNotebook [
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
GrafoscopioPerspective >> aboutToBeUninstalledFrom: aTreeNotebook [
|
GrafoscopioPerspective >> aboutToBeUninstalledFrom: aTreeNotebook [
|
||||||
]
|
]
|
||||||
|
@ -194,3 +198,10 @@ GrafoscopioPerspective >> subMenu [
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPerspective >> updateModel: aModel [
|
GrafoscopioPerspective >> updateModel: aModel [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPerspective >> viewport: aViewport [
|
||||||
|
|
||||||
|
viewport := aViewport.
|
||||||
|
self buildWithSpec
|
||||||
|
]
|
||||||
|
|
|
@ -6,27 +6,12 @@ Class {
|
||||||
#superclass : #GrafoscopioAbstractText,
|
#superclass : #GrafoscopioAbstractText,
|
||||||
#instVars : [
|
#instVars : [
|
||||||
'ast',
|
'ast',
|
||||||
'stringDecorator',
|
|
||||||
'lastNode',
|
'lastNode',
|
||||||
'runs'
|
'runs'
|
||||||
],
|
],
|
||||||
#category : #'Grafoscopio-Pillar'
|
#category : #'Grafoscopio-Pillar'
|
||||||
}
|
}
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASText class >> now [
|
|
||||||
| pillarAst text presenter |
|
|
||||||
pillarAst := GrafoscopioPillarASText pillarExample .
|
|
||||||
text := GrafoscopioPillarASText new.
|
|
||||||
text ast: pillarAst.
|
|
||||||
|
|
||||||
presenter := SpTextPresenter new text: text ; yourself .
|
|
||||||
presenter autoAccept: true.
|
|
||||||
presenter whenTextChangedDo: [ : v | presenter violentForceRecompose ].
|
|
||||||
presenter openWithSpec.
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPillarASText class >> openExample [
|
GrafoscopioPillarASText class >> openExample [
|
||||||
^ self new
|
^ self new
|
||||||
|
@ -41,7 +26,7 @@ GrafoscopioPillarASText class >> pillarExample [
|
||||||
'!!About Pillar
|
'!!About Pillar
|
||||||
|
|
||||||
|
|
||||||
[[[label=script1|caption=My script that works|language=pharo-image
|
[[[label=script1|caption=My script that works|language=pharo
|
||||||
PolymorphSystemSettings pharoLogoForm
|
PolymorphSystemSettings pharoLogoForm
|
||||||
]]]
|
]]]
|
||||||
|
|
||||||
|
@ -103,7 +88,7 @@ Pillar is still in active development: maintainers keep improving its implementa
|
||||||
!!About Pillar
|
!!About Pillar
|
||||||
|
|
||||||
|
|
||||||
[[[label=script1|caption=My script that works|language=pharo-image
|
[[[label=script1|caption=My script that works|language=pharo
|
||||||
PolymorphSystemSettings pharoLogoForm
|
PolymorphSystemSettings pharoLogoForm
|
||||||
]]]
|
]]]
|
||||||
|
|
||||||
|
@ -165,7 +150,7 @@ Pillar is still in active development: maintainers keep improving its implementa
|
||||||
!!About Pillar
|
!!About Pillar
|
||||||
|
|
||||||
|
|
||||||
[[[label=script1|caption=My script that works|language=pharo-image
|
[[[label=script1|caption=My script that works|language=pharo
|
||||||
PolymorphSystemSettings pharoLogoForm
|
PolymorphSystemSettings pharoLogoForm
|
||||||
]]]
|
]]]
|
||||||
|
|
||||||
|
@ -227,7 +212,7 @@ Pillar is still in active development: maintainers keep improving its implementa
|
||||||
!!About Pillar
|
!!About Pillar
|
||||||
|
|
||||||
|
|
||||||
[[[label=script1|caption=My script that works|language=pharo-image
|
[[[label=script1|caption=My script that works|language=pharo
|
||||||
PolymorphSystemSettings pharoLogoForm
|
PolymorphSystemSettings pharoLogoForm
|
||||||
]]]
|
]]]
|
||||||
|
|
||||||
|
@ -288,6 +273,16 @@ Still some issues are missing. Here is a little list of features that we are wor
|
||||||
Pillar is still in active development: maintainers keep improving its implementation. The current version of Pillar is Pillar 70. This booklet only documents Pillar 70. This booklet will be synchronised with future enhancements.'
|
Pillar is still in active development: maintainers keep improving its implementation. The current version of Pillar is Pillar 70. This booklet only documents Pillar 70. This booklet will be synchronised with future enhancements.'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASText >> addAttribute: aTextFontChange [
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASText >> addAttribute: att from: start to: stop [
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPillarASText >> ast [
|
GrafoscopioPillarASText >> ast [
|
||||||
^ ast
|
^ ast
|
||||||
|
@ -295,13 +290,13 @@ GrafoscopioPillarASText >> ast [
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPillarASText >> ast: aPRDocument [
|
GrafoscopioPillarASText >> ast: aPRDocument [
|
||||||
|
self resetRuns.
|
||||||
|
lastNode := nil.
|
||||||
ast := aPRDocument.
|
ast := aPRDocument.
|
||||||
aPRDocument accept: GrafoscopioPillarTextAnnotator new.
|
aPRDocument accept: GrafoscopioPillarTextAnnotator new.
|
||||||
ast start: aPRDocument children first start.
|
ast start: aPRDocument children first start.
|
||||||
ast stop: aPRDocument children last stop.
|
ast stop: aPRDocument children last stop.
|
||||||
stringDecorator := GrafoscopioPillarASTextStringDecorator new
|
|
||||||
text: self;
|
|
||||||
yourself
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
|
@ -323,7 +318,7 @@ GrafoscopioPillarASText >> attributesAt: characterIndex do: aBlockClosure [
|
||||||
GrafoscopioPillarASText >> copyFrom: from to: to [
|
GrafoscopioPillarASText >> copyFrom: from to: to [
|
||||||
^ (ast textStart = from and: [ ast textStop = (to + 1) ])
|
^ (ast textStart = from and: [ ast textStop = (to + 1) ])
|
||||||
ifTrue: [ self ]
|
ifTrue: [ self ]
|
||||||
ifFalse: [ GrafoscopioPillarASTextStringProjectionDecorator new
|
ifFalse: [ GrafoscopioPillarASTextStringProjectionAdapter new
|
||||||
text: self;
|
text: self;
|
||||||
|
|
||||||
from: from;
|
from: from;
|
||||||
|
@ -423,7 +418,7 @@ GrafoscopioPillarASText >> extractStringFrom: aPosition to: anOtherPosition [
|
||||||
^ String
|
^ String
|
||||||
streamContents: [ :str |
|
streamContents: [ :str |
|
||||||
str nextPutAll: preffix.
|
str nextPutAll: preffix.
|
||||||
(nodes copyFrom: 2 to: nodes size)
|
(nodes allButFirst)
|
||||||
inject: str
|
inject: str
|
||||||
into: [ :stream :each |
|
into: [ :stream :each |
|
||||||
stream nextPutAll: each text.
|
stream nextPutAll: each text.
|
||||||
|
@ -443,6 +438,21 @@ GrafoscopioPillarASText >> fontAt: characterIndex withStyle: aTextStyle [
|
||||||
^ font
|
^ font
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #copying }
|
||||||
|
GrafoscopioPillarASText >> inspectNodeAt: anIndex [
|
||||||
|
(self detectAstNodeFor: anIndex) inspect
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #copying }
|
||||||
|
GrafoscopioPillarASText >> inspectRunAt: anIndex [
|
||||||
|
(self runs at: anIndex) inspect
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASText >> pillarText [
|
||||||
|
^ PRPillarWriter write: ast
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPillarASText >> rangeOf: aTextURL startingAt: anInteger [
|
GrafoscopioPillarASText >> rangeOf: aTextURL startingAt: anInteger [
|
||||||
^ self runs rangeOf: aTextURL startingAt: anInteger
|
^ self runs rangeOf: aTextURL startingAt: anInteger
|
||||||
|
@ -502,6 +512,8 @@ GrafoscopioPillarASText >> replaceFrom: start to: stop with: aCollection [
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
GrafoscopioPillarASText >> resetRuns [
|
GrafoscopioPillarASText >> resetRuns [
|
||||||
|
"^ runs := RunArray new."
|
||||||
|
|
||||||
^ runs := GrafoscopioPillarRuns new
|
^ runs := GrafoscopioPillarRuns new
|
||||||
ast: self;
|
ast: self;
|
||||||
yourself
|
yourself
|
||||||
|
@ -510,9 +522,8 @@ GrafoscopioPillarASText >> resetRuns [
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
GrafoscopioPillarASText >> runs [
|
GrafoscopioPillarASText >> runs [
|
||||||
^ runs
|
^ runs
|
||||||
ifNil: [ runs := GrafoscopioPillarRuns new
|
ifNil: [ self resetRuns.
|
||||||
ast: self;
|
runs ]
|
||||||
yourself ]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
|
@ -522,5 +533,7 @@ GrafoscopioPillarASText >> size [
|
||||||
|
|
||||||
{ #category : #accessing }
|
{ #category : #accessing }
|
||||||
GrafoscopioPillarASText >> string [
|
GrafoscopioPillarASText >> string [
|
||||||
^ stringDecorator
|
^ GrafoscopioPillarASTextStringAdapter new
|
||||||
|
text: self;
|
||||||
|
yourself
|
||||||
]
|
]
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioPillarASTextNotebook,
|
||||||
|
#superclass : #SpPresenterWithModel,
|
||||||
|
#instVars : [
|
||||||
|
'sidebar',
|
||||||
|
'viewport',
|
||||||
|
'model',
|
||||||
|
'empty',
|
||||||
|
'perspectives'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-New-UI'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #specs }
|
||||||
|
GrafoscopioPillarASTextNotebook class >> defaultSpec [
|
||||||
|
^ SpBoxLayout newHorizontal
|
||||||
|
add:
|
||||||
|
(SpBoxLayout newVertical
|
||||||
|
add: #empty height: self toolbarHeight;
|
||||||
|
add: #sidebar;
|
||||||
|
yourself)
|
||||||
|
width: 51;
|
||||||
|
add: #viewport;
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextNotebook >> basicInstallPerspective: aPerspective [
|
||||||
|
viewport ifNotNil: [ viewport aboutToBeUninstalledFrom: self ].
|
||||||
|
viewport := self perspectives
|
||||||
|
at: aPerspective
|
||||||
|
ifAbsentPut: [ self instantiate: aPerspective on: model document ].
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPillarASTextNotebook >> createDefaultComponent [
|
||||||
|
^ self basicInstallPerspective: GrafoscopioPerspective defaultPerspective
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPillarASTextNotebook >> initializeWidgets [
|
||||||
|
super initializeWidgets.
|
||||||
|
sidebar := self sidebar.
|
||||||
|
self createDefaultComponent.
|
||||||
|
empty := self newLabel.
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPillarASTextNotebook >> installPerspective: aPerspective [
|
||||||
|
self basicInstallPerspective: aPerspective .
|
||||||
|
self modelChanged
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPillarASTextNotebook >> modelChanged [
|
||||||
|
viewport modelChanged.
|
||||||
|
self needRebuild: false.
|
||||||
|
self buildWithSpec
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPillarASTextNotebook >> perspectives [
|
||||||
|
^ perspectives ifNil: [ perspectives := Dictionary new ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextNotebook >> setModelBeforeInitialization: aDomainObject [
|
||||||
|
super setModelBeforeInitialization: aDomainObject.
|
||||||
|
model := aDomainObject
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #initialization }
|
||||||
|
GrafoscopioPillarASTextNotebook >> sidebar [
|
||||||
|
| bar |
|
||||||
|
bar := self instantiate: SpSidebar.
|
||||||
|
GrafoscopioPerspective perspectives
|
||||||
|
do:
|
||||||
|
[ :p | bar addAction: [ self installPerspective: p ] icon: p icon ].
|
||||||
|
^ bar
|
||||||
|
]
|
|
@ -0,0 +1,205 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioPillarASTextStringAdapter,
|
||||||
|
#superclass : #ProtoObject,
|
||||||
|
#instVars : [
|
||||||
|
'text'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-Pillar'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> allRangesOfSubstring: aSubstring [
|
||||||
|
|
||||||
|
^ Array streamContents: [:s | | start subSize |
|
||||||
|
start := 1.
|
||||||
|
subSize := aSubstring size.
|
||||||
|
[start isZero]
|
||||||
|
whileFalse: [ start := self findString: aSubstring startingAt: start.
|
||||||
|
start > 0
|
||||||
|
ifTrue: [s nextPut: (start to: start + subSize - 1).
|
||||||
|
start := start + subSize]]]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> asString [
|
||||||
|
^ self
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> at: aNumber [
|
||||||
|
^ text at: aNumber
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> at: aNumber put: aChar [
|
||||||
|
self halt
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> copyFrom: one to: two [
|
||||||
|
^ text copyFrom: one to: two
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> findString: key startingAt: start [
|
||||||
|
^ self findString: key startingAt: start caseSensitive: true
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> findString: key startingAt: start caseSensitive: caseSensitive [
|
||||||
|
"Answer the index in this String at which the substring key first occurs,
|
||||||
|
at or beyond start. The match can be case-sensitive or not. If no match
|
||||||
|
is found, zero will be returned."
|
||||||
|
|
||||||
|
"IMPLEMENTATION NOTE: do not use CaseSensitiveOrder because it is broken for WideString
|
||||||
|
This is a temporary work around until Wide CaseSensitiveOrder search is fixed
|
||||||
|
Code should revert to:
|
||||||
|
caseSensitive
|
||||||
|
ifTrue: [^ self findSubstring: key in: self startingAt: start matchTable: CaseSensitiveOrder]
|
||||||
|
ifFalse: [^ self findSubstring: key in: self startingAt: start matchTable: CaseInsensitiveOrder]"
|
||||||
|
|
||||||
|
^ caseSensitive
|
||||||
|
ifTrue: [ WideString new
|
||||||
|
findSubstring: key
|
||||||
|
in: self
|
||||||
|
startingAt: start
|
||||||
|
matchTable: nil ]
|
||||||
|
ifFalse: [ WideString new
|
||||||
|
findSubstring: key
|
||||||
|
in: self
|
||||||
|
startingAt: start
|
||||||
|
matchTable: String newCaseInsensitiveOrder ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> ifEmpty: aBlock [
|
||||||
|
"Evaluate the given block, answering its value if the receiver is empty, otherwise answer the receiver."
|
||||||
|
|
||||||
|
"Note that the fact that this method returns its receiver in case the receiver is not empty allows one to write expressions like the following ones: self classifyMethodAs: (myProtocol ifEmpty: ['As yet unclassified'])"
|
||||||
|
|
||||||
|
^ self isEmpty
|
||||||
|
ifTrue: [ aBlock value ]
|
||||||
|
ifFalse: [ self ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> ifEmpty: emptyBlock ifNotEmpty: notEmptyBlock [
|
||||||
|
"Evaluate emptyBlock if I'm empty, notEmptyBlock otherwise"
|
||||||
|
"If the notEmptyBlock has an argument, eval with the receiver as its argument"
|
||||||
|
|
||||||
|
^ self isEmpty
|
||||||
|
ifTrue: [ emptyBlock value ]
|
||||||
|
ifFalse: [ notEmptyBlock cull: self ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> indexOf: aCharacter startingAt: anInteger ifAbsent: aBlockClosure [
|
||||||
|
| current index |
|
||||||
|
current := text detectAstNodeFor: anInteger.
|
||||||
|
index := current text
|
||||||
|
indexOf: aCharacter
|
||||||
|
startingAt: anInteger - current textStart + 1.
|
||||||
|
current := current next.
|
||||||
|
[ current isNotNil ]
|
||||||
|
whileTrue: [ index := current text indexOf: aCharacter.
|
||||||
|
index = 0
|
||||||
|
ifTrue: [ current := current next ]
|
||||||
|
ifFalse: [ ^ current textStart + index ] ].
|
||||||
|
^ aBlockClosure value
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> isByteString [
|
||||||
|
^ false
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> isEmpty [
|
||||||
|
^ text isEmpty
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> isReadOnlyObject [
|
||||||
|
"Answer if the receiver is read-only.
|
||||||
|
If the VM supports read-only objects it will not write to read-only objects.
|
||||||
|
An attempt to write to an instance variable of a read-only object will
|
||||||
|
cause the VM to send attemptToAssign:withIndex: to the read-only object.
|
||||||
|
An attempt to modify a read-only object in a primitive will cause the
|
||||||
|
primitive to fail with a #'no modification' error code."
|
||||||
|
<primitive: 163 error: ec>
|
||||||
|
^self class isImmediateClass
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> isString [
|
||||||
|
^ true
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> isWideString [
|
||||||
|
^ true
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> lastIndexOf: anElement startingAt: lastIndex ifAbsent: exceptionBlock [
|
||||||
|
"Answer the index of the last occurence of anElement within the
|
||||||
|
receiver. If the receiver does not contain anElement, answer the
|
||||||
|
result of evaluating the argument, exceptionBlock."
|
||||||
|
lastIndex to: 1 by: -1 do: [ :index |
|
||||||
|
(self at: index) = anElement
|
||||||
|
ifTrue: [ ^ index ] ].
|
||||||
|
^ exceptionBlock value
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> notEmpty [
|
||||||
|
^ text notEmpty
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> printOn: aStream [
|
||||||
|
aStream
|
||||||
|
nextPutAll: 'StringAdaptor(';
|
||||||
|
nextPutAll: self size asString;
|
||||||
|
nextPutAll: ')'
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> printString [
|
||||||
|
^ String streamContents: [ :str | self printOn: str ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> readStream [
|
||||||
|
^ ReadStream on: self
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> size [
|
||||||
|
^ text size
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> string [
|
||||||
|
^ text extractStringFrom: 1 to: self size
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> text: aGFPText [
|
||||||
|
text := aGFPText
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> trimBoth [
|
||||||
|
^ self
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> yourself [
|
||||||
|
^ self
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringAdapter >> ~= anOther [
|
||||||
|
^ (self == anOther) not
|
||||||
|
]
|
|
@ -1,74 +0,0 @@
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioPillarASTextStringDecorator,
|
|
||||||
#superclass : #Object,
|
|
||||||
#instVars : [
|
|
||||||
'text'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-Pillar'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> at: aNumber [
|
|
||||||
^ text at: aNumber
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> at: aNumber put: aChar [
|
|
||||||
self halt
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> copyFrom: one to: two [
|
|
||||||
^ text copyFrom: one to: two
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> indexOf: aCharacter startingAt: anInteger ifAbsent: aBlockClosure [
|
|
||||||
| current index |
|
|
||||||
current := text detectAstNodeFor: anInteger.
|
|
||||||
index := current text
|
|
||||||
indexOf: aCharacter
|
|
||||||
startingAt: anInteger - current textStart + 1.
|
|
||||||
current := current next.
|
|
||||||
[ current isNotNil ]
|
|
||||||
whileTrue: [ index := current text indexOf: aCharacter.
|
|
||||||
index = 0
|
|
||||||
ifTrue: [ current := current next ]
|
|
||||||
ifFalse: [ ^ current textStart + index ] ].
|
|
||||||
^ aBlockClosure value
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> isByteString [
|
|
||||||
^ false
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> isEmpty [
|
|
||||||
^ text isEmpty
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> isWideString [
|
|
||||||
^ true
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> notEmpty [
|
|
||||||
^ text notEmpty
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> size [
|
|
||||||
^ text size
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> string [
|
|
||||||
self shouldBeImplemented.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringDecorator >> text: aGFPText [
|
|
||||||
text := aGFPText
|
|
||||||
]
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioPillarASTextStringProjectionAdapter,
|
||||||
|
#superclass : #GrafoscopioPillarASTextStringAdapter,
|
||||||
|
#instVars : [
|
||||||
|
'from',
|
||||||
|
'to',
|
||||||
|
'cached'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-Pillar'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> asText [
|
||||||
|
^ self string asText
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> at: anInteger [
|
||||||
|
^ self cached at: anInteger
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> cached [
|
||||||
|
^ cached ifNil: [ cached := text extractStringFrom: from to: to ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> copyFrom: one to: two [
|
||||||
|
^ self class new
|
||||||
|
text: text;
|
||||||
|
from: from + one;
|
||||||
|
to: from + two;
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> from: anInteger [
|
||||||
|
from := anInteger
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> isEmpty [
|
||||||
|
^ to <= from
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> printOn: aStream [
|
||||||
|
aStream
|
||||||
|
nextPutAll: 'SubStringAdapter(';
|
||||||
|
nextPutAll: from asString;
|
||||||
|
nextPutAll: ':';
|
||||||
|
nextPutAll: to asString;
|
||||||
|
nextPutAll: ')'
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> size [
|
||||||
|
^ to - from
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> string [
|
||||||
|
^ text extractStringFrom: from to: to
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarASTextStringProjectionAdapter >> to: anInteger [
|
||||||
|
to := anInteger
|
||||||
|
]
|
|
@ -1,64 +0,0 @@
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioPillarASTextStringProjectionDecorator,
|
|
||||||
#superclass : #GrafoscopioPillarASTextStringDecorator,
|
|
||||||
#instVars : [
|
|
||||||
'from',
|
|
||||||
'to',
|
|
||||||
'cached'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-Pillar'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> allRangesOfSubstring: aString [
|
|
||||||
^ { }
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> asText [
|
|
||||||
^ self string asText
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> at: anInteger [
|
|
||||||
^ self cached at: anInteger
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> cached [
|
|
||||||
^ cached ifNil: [ cached := text extractStringFrom: from to: to ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> copyFrom: one to: two [
|
|
||||||
^ self class new
|
|
||||||
text: text;
|
|
||||||
from: from + one;
|
|
||||||
to: from + two;
|
|
||||||
yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> from: anInteger [
|
|
||||||
from := anInteger
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> isEmpty [
|
|
||||||
^ from <= to
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> size [
|
|
||||||
^ to - from
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> string [
|
|
||||||
^ text extractStringFrom: from to: to
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioPillarASTextStringProjectionDecorator >> to: anInteger [
|
|
||||||
to := anInteger
|
|
||||||
]
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioPillarNode,
|
||||||
|
#superclass : #GrafoscopioLeafNode,
|
||||||
|
#instVars : [
|
||||||
|
'ast',
|
||||||
|
'astText'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-Model'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #testing }
|
||||||
|
GrafoscopioPillarNode class >> icon [
|
||||||
|
^ self iconNamed: #workspace
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #testing }
|
||||||
|
GrafoscopioPillarNode class >> nameForSelection [
|
||||||
|
^ 'New Pillar node'
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #testing }
|
||||||
|
GrafoscopioPillarNode class >> showInMenu [
|
||||||
|
^ true
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarNode >> acceptVisitor: aGrafoscopioVisitor [
|
||||||
|
aGrafoscopioVisitor visitPillarNode: self.
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarNode >> text [
|
||||||
|
^ astText
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarNode >> text: anAst [
|
||||||
|
astText := anAst
|
||||||
|
]
|
|
@ -23,8 +23,8 @@ GrafoscopioPillarRuns >> at: anIndex [
|
||||||
anIndex > ast size
|
anIndex > ast size
|
||||||
ifTrue: [ ^ Array empty ].
|
ifTrue: [ ^ Array empty ].
|
||||||
newBranch := ast detectFullBranchFor: anIndex.
|
newBranch := ast detectFullBranchFor: anIndex.
|
||||||
newBranch = lastBranch
|
"newBranch = lastBranch
|
||||||
ifTrue: [ ^ lastAttributes ].
|
ifTrue: [ ^ lastAttributes ]."
|
||||||
lastAttributes := self
|
lastAttributes := self
|
||||||
calculateAttributesForBranch: newBranch
|
calculateAttributesForBranch: newBranch
|
||||||
at: anIndex.
|
at: anIndex.
|
||||||
|
@ -56,12 +56,6 @@ GrafoscopioPillarRuns >> rangeOf: aTextURL startingAt: anInteger [
|
||||||
^ 0 to: 0
|
^ 0 to: 0
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'basic api' }
|
|
||||||
GrafoscopioPillarRuns >> reset [
|
|
||||||
lastAttributes := nil.
|
|
||||||
lastBranch := nil.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPillarRuns >> runLengthFor: anInteger [
|
GrafoscopioPillarRuns >> runLengthFor: anInteger [
|
||||||
| node |
|
| node |
|
||||||
|
|
|
@ -71,7 +71,7 @@ GrafoscopioPillarStyler >> attributesForLineBreak: aPRLineBreak [
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioPillarStyler >> attributesForListItem: aPRListItem at: index [
|
GrafoscopioPillarStyler >> attributesForListItem: aPRListItem at: index [
|
||||||
^ (aPRListItem text at: index - aPRListItem textStart + 1) = Character home
|
^ (aPRListItem text at: index - aPRListItem textStart + 1) = Character home
|
||||||
ifTrue: [ {(TextIndent tabs: aPRListItem level).
|
ifTrue: [ {(TextIndent tabs: aPRListItem parent level).
|
||||||
(TextAnchor new
|
(TextAnchor new
|
||||||
anchoredMorph: (self iconNamed: #menuPin);
|
anchoredMorph: (self iconNamed: #menuPin);
|
||||||
yourself)} ] ifFalse: [ { } ]
|
yourself)} ] ifFalse: [ { } ]
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioPillarToTextDecorator,
|
||||||
|
#superclass : #Object,
|
||||||
|
#instVars : [
|
||||||
|
'pillarNode'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-Pillar'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #'instance creation' }
|
||||||
|
GrafoscopioPillarToTextDecorator class >> on: aGFPillarNode [
|
||||||
|
^ self new
|
||||||
|
pillarNode: aGFPillarNode;
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioPillarToTextDecorator >> name [
|
||||||
|
^ pillarNode name
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarToTextDecorator >> pillarNode: aNode [
|
||||||
|
pillarNode := aNode
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarToTextDecorator >> text [
|
||||||
|
^ pillarNode text pillarText
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
GrafoscopioPillarToTextDecorator >> text: aText [
|
||||||
|
| parsed |
|
||||||
|
parsed := PRPillarParser parse: aText.
|
||||||
|
^ pillarNode text ast: parsed
|
||||||
|
]
|
|
@ -8,6 +8,11 @@ Class {
|
||||||
#category : #'Grafoscopio-Model'
|
#category : #'Grafoscopio-Model'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioProject >> acceptVisitor: aGrafoscopioViewportTextVisitor [
|
||||||
|
aGrafoscopioViewportTextVisitor visitGrafoscopioProject: self
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioProject >> document [
|
GrafoscopioProject >> document [
|
||||||
^ document
|
^ document
|
||||||
|
|
|
@ -30,6 +30,7 @@ GrafoscopioTreeNotebook >> basicInstallPerspective: aPerspective [
|
||||||
viewport := self perspectives
|
viewport := self perspectives
|
||||||
at: aPerspective
|
at: aPerspective
|
||||||
ifAbsentPut: [ self instantiate: aPerspective on: model document ].
|
ifAbsentPut: [ self instantiate: aPerspective on: model document ].
|
||||||
|
viewport aboutToBeInstalled: self.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #initialization }
|
{ #category : #initialization }
|
||||||
|
@ -63,6 +64,11 @@ GrafoscopioTreeNotebook >> perspectives [
|
||||||
^ perspectives ifNil: [ perspectives := Dictionary new ]
|
^ perspectives ifNil: [ perspectives := Dictionary new ]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioTreeNotebook >> removePerspective: aPerspective [
|
||||||
|
perspectives removeKeyAtValue: aPerspective
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioTreeNotebook >> setModelBeforeInitialization: aDomainObject [
|
GrafoscopioTreeNotebook >> setModelBeforeInitialization: aDomainObject [
|
||||||
super setModelBeforeInitialization: aDomainObject.
|
super setModelBeforeInitialization: aDomainObject.
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
"
|
|
||||||
URL Node downloads content for rendering.
|
|
||||||
"
|
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioUrlNode,
|
|
||||||
#superclass : #GrafoscopioLeafNode,
|
|
||||||
#instVars : [
|
|
||||||
'link'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-Model'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
GrafoscopioUrlNode class >> icon [
|
|
||||||
^ self iconNamed: #remote
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
GrafoscopioUrlNode class >> nameForSelection [
|
|
||||||
^ 'New URL Node'
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
GrafoscopioUrlNode class >> new [
|
|
||||||
^ super new
|
|
||||||
content;
|
|
||||||
yourself
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
|
||||||
GrafoscopioUrlNode class >> showInMenu [
|
|
||||||
^ true
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> acceptVisitor: aGrafoscopioVisitor [
|
|
||||||
aGrafoscopioVisitor visitUrlNode: self.
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> content [
|
|
||||||
^ (self url
|
|
||||||
ifNil: [ ' Invalid url ' ]
|
|
||||||
ifNotNil: [ :url | self fetchContent: url ])
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> fetchContent: anUrl [
|
|
||||||
^ (ZnEasy get: anUrl) entity contents
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> getUrl [
|
|
||||||
| url |
|
|
||||||
url := UIManager default
|
|
||||||
request: 'Please insert a url '
|
|
||||||
initialAnswer: 'http://'
|
|
||||||
title: 'URL Node'.
|
|
||||||
url ifNil: [ ^ nil ].
|
|
||||||
url := url asZnUrl.
|
|
||||||
(url host isEmptyOrNil
|
|
||||||
or: [ url scheme isEmptyOrNil or: [ url authority isEmptyOrNil ] ])
|
|
||||||
ifTrue: [ ^ nil ].
|
|
||||||
^ url
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #accessing }
|
|
||||||
GrafoscopioUrlNode >> link: aZnUrl [
|
|
||||||
link := aZnUrl
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> openIn: aNotebook [
|
|
||||||
super openIn: aNotebook.
|
|
||||||
aNotebook links text: (link ifNil: 'Invalid url') asString
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> shouldAskBeforeRemove [
|
|
||||||
^ false
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #content }
|
|
||||||
GrafoscopioUrlNode >> text [
|
|
||||||
^ self content
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> text: aString [
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'as yet unclassified' }
|
|
||||||
GrafoscopioUrlNode >> url [
|
|
||||||
^ link ifNil: [ link := self getUrl ]
|
|
||||||
]
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioViewportRichTextVisitor,
|
||||||
|
#superclass : #GrafoscopioViewportTextVisitor,
|
||||||
|
#category : #'Grafoscopio-New-UI'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioViewportRichTextVisitor >> visitPillarNode: aNode [
|
||||||
|
self
|
||||||
|
showPageFor: aNode
|
||||||
|
ifProviderDoestExistInstall: [ | text |
|
||||||
|
text := presenter instantiate: GrafoscopioNewTextModel on: aNode.
|
||||||
|
text
|
||||||
|
contextMenuFromCommandsGroup: [ presenter rootCommandsGroup / 'Context Menu' ].
|
||||||
|
text
|
||||||
|
onModifyNodeLocationDo: [ presenter informNodeHasChanged: aNode ].
|
||||||
|
text ]
|
||||||
|
]
|
|
@ -0,0 +1,60 @@
|
||||||
|
Class {
|
||||||
|
#name : #GrafoscopioViewportTextVisitor,
|
||||||
|
#superclass : #GrafoscopioVisitor,
|
||||||
|
#instVars : [
|
||||||
|
'viewport',
|
||||||
|
'stack',
|
||||||
|
'presenter',
|
||||||
|
'pages'
|
||||||
|
],
|
||||||
|
#category : #'Grafoscopio-New-UI'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #visiting }
|
||||||
|
GrafoscopioViewportTextVisitor >> createViewportFor: aDocumentNode into: aPresenter [
|
||||||
|
presenter := aPresenter.
|
||||||
|
aDocumentNode acceptVisitor: self.
|
||||||
|
^ viewport
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #visiting }
|
||||||
|
GrafoscopioViewportTextVisitor >> initialize [
|
||||||
|
super initialize.
|
||||||
|
pages := Dictionary new
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioViewportTextVisitor >> renamePageFor: aNode [
|
||||||
|
pages at: aNode ifPresent: [ : p | p title: aNode name ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioViewportTextVisitor >> showPageFor: aNode ifProviderDoestExistInstall: aBlock [
|
||||||
|
| page |
|
||||||
|
page := pages at: aNode ifAbsentPut: [ aBlock value ].
|
||||||
|
presenter viewport: page
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
GrafoscopioViewportTextVisitor >> visitPillarNode: aGrafoscopioPillarNode [
|
||||||
|
self
|
||||||
|
showPageFor: aGrafoscopioPillarNode
|
||||||
|
ifProviderDoestExistInstall: [ | text |
|
||||||
|
text := presenter
|
||||||
|
instantiate: GrafoscopioNewTextModel
|
||||||
|
on: (GrafoscopioPillarToTextDecorator on: aGrafoscopioPillarNode).
|
||||||
|
text
|
||||||
|
onModifyNodeLocationDo: [ :model | model model text: model body text ].
|
||||||
|
text ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #visiting }
|
||||||
|
GrafoscopioViewportTextVisitor >> visitTextNode: aNode [
|
||||||
|
self
|
||||||
|
showPageFor: aNode
|
||||||
|
ifProviderDoestExistInstall: [ | text |
|
||||||
|
text := presenter instantiate: GrafoscopioNewTextModel on: aNode.
|
||||||
|
text
|
||||||
|
onModifyNodeLocationDo: [ :model | model model text: model body text ].
|
||||||
|
text ]
|
||||||
|
]
|
|
@ -1,77 +0,0 @@
|
||||||
Class {
|
|
||||||
#name : #GrafoscopioViewportVisitor,
|
|
||||||
#superclass : #GrafoscopioVisitor,
|
|
||||||
#instVars : [
|
|
||||||
'viewport',
|
|
||||||
'stack',
|
|
||||||
'items',
|
|
||||||
'presenter'
|
|
||||||
],
|
|
||||||
#category : #'Grafoscopio-New-UI'
|
|
||||||
}
|
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioViewportVisitor >> createViewportFor: aDocumentNode into: aPresenter [
|
|
||||||
presenter := aPresenter.
|
|
||||||
items := OrderedCollection new.
|
|
||||||
aDocumentNode acceptVisitor: self.
|
|
||||||
viewport := aPresenter viewport
|
|
||||||
ifNil: [ aPresenter instantiate: SpComponentListPresenter ].
|
|
||||||
viewport items: items.
|
|
||||||
^ viewport
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioViewportVisitor >> visitCodeNode: aNode [
|
|
||||||
| code |
|
|
||||||
code := presenter instantiate: GrafoscopioNewCodeModel.
|
|
||||||
code onModifyNodeLocationDo: [ presenter informNodeHasChanged: aNode ].
|
|
||||||
code model: aNode.
|
|
||||||
items add: code.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioViewportVisitor >> visitRootNode: aNode [
|
|
||||||
| text |
|
|
||||||
text := presenter instantiate: GrafoscopioNewTextInputModel.
|
|
||||||
text model: aNode.
|
|
||||||
text onModifyNodeLocationDo: [ presenter informNodeHasChanged: aNode ].
|
|
||||||
items add: text.
|
|
||||||
super visitRootNode: aNode.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioViewportVisitor >> visitTextNode: aNode [
|
|
||||||
| text |
|
|
||||||
text := presenter instantiate: GrafoscopioNewTextModel.
|
|
||||||
text onModifyNodeLocationDo: [ presenter informNodeHasChanged: aNode ].
|
|
||||||
text model: aNode.
|
|
||||||
items add: text.
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioViewportVisitor >> visitUnitNode: aNode [
|
|
||||||
| text |
|
|
||||||
text := presenter instantiate: GrafoscopioNewTextInputModel.
|
|
||||||
text model: aNode.
|
|
||||||
text onModifyNodeLocationDo: [ presenter informNodeHasChanged: aNode ].
|
|
||||||
items add: text.
|
|
||||||
items add: (presenter newButton
|
|
||||||
label: ' Add node on the beginning ';
|
|
||||||
action: [ presenter addNewNodeAtBeginningOf: aNode ];
|
|
||||||
yourself).
|
|
||||||
super visitUnitNode: aNode.
|
|
||||||
items add: (presenter newButton
|
|
||||||
label: ' Add node on the end ';
|
|
||||||
action: [ presenter addNewNodeAtLastOf: aNode ];
|
|
||||||
yourself)
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioViewportVisitor >> visitUrlNode: aNode [
|
|
||||||
| text |
|
|
||||||
text := presenter instantiate: GrafoscopioNewTextInputModel.
|
|
||||||
text onModifyNodeLocationDo: [ presenter informNodeHasChanged: aNode ].
|
|
||||||
text model: aNode.
|
|
||||||
items add: text.
|
|
||||||
]
|
|
|
@ -10,9 +10,10 @@ GrafoscopioVisitor >> visitBranchNode: aNode [
|
||||||
aNode children do: [ : c | c acceptVisitor: self ].
|
aNode children do: [ : c | c acceptVisitor: self ].
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #visiting }
|
{ #category : #'as yet unclassified' }
|
||||||
GrafoscopioVisitor >> visitCodeNode: aNode [
|
GrafoscopioVisitor >> visitGrafoscopioProject: aGrafoscopioProject [
|
||||||
self visitNode: aNode
|
self visitNode: aGrafoscopioProject .
|
||||||
|
aGrafoscopioProject document acceptVisitor: self.
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #visiting }
|
{ #category : #visiting }
|
||||||
|
@ -41,8 +42,3 @@ GrafoscopioVisitor >> visitUnitNode: aNode [
|
||||||
self visitNode: aNode.
|
self visitNode: aNode.
|
||||||
aNode children do: [ : c | c acceptVisitor: self ].
|
aNode children do: [ : c | c acceptVisitor: self ].
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #visiting }
|
|
||||||
GrafoscopioVisitor >> visitUrlNode: aNode [
|
|
||||||
self visitNode: aNode
|
|
||||||
]
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ PRLineBreak >> text: aString [
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio' }
|
{ #category : #'*Grafoscopio' }
|
||||||
PRLineBreak >> textSize [
|
PRLineBreak >> textSize [
|
||||||
^ self text size
|
^ 1
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'*Grafoscopio' }
|
{ #category : #'*Grafoscopio' }
|
||||||
|
|
Loading…
Reference in New Issue