Toggling support for code nodes.
This commit is contained in:
parent
a4dadda39b
commit
283a4523fd
@ -444,13 +444,14 @@ GrafoscopioGUI class >> openFromRecentlyUsed [
|
||||
"Opens a recent notebooks list"
|
||||
| selection |
|
||||
|
||||
recentTrees isNil
|
||||
ifFalse: [
|
||||
selection := UIManager default chooseFrom: recentTrees title: 'Elija una documento'.
|
||||
GrafoscopioBrowser new openFromFile: (recentTrees at: selection)
|
||||
]
|
||||
ifTrue: [self messageNoRecentDocuments].
|
||||
"browser update".
|
||||
self recentNotebooks
|
||||
ifNotEmpty: [
|
||||
selection := UIManager default chooseFrom: recentNotebooks title: 'Elija una documento'.
|
||||
selection > 0
|
||||
ifTrue: [ GrafoscopioNotebook new openFromFile: (recentNotebooks at: selection)]
|
||||
ifFalse: [ self inform: 'No notebook selected!' ]
|
||||
]
|
||||
ifEmpty: [self messageNoRecentDocuments]
|
||||
|
||||
|
||||
|
||||
@ -487,12 +488,12 @@ GrafoscopioGUI class >> openHelpInPdf [
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI class >> recentNotebooks [
|
||||
^ recentNotebooks ifNil: [ ^ OrderedCollection new ]
|
||||
^ recentNotebooks ifNil: [recentNotebooks := OrderedCollection new ]
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI class >> recentNotebooks: anObject [
|
||||
recentNotebooks := anObject
|
||||
GrafoscopioGUI class >> recentNotebooks: anOrderedCollection [
|
||||
recentNotebooks := anOrderedCollection
|
||||
]
|
||||
|
||||
{ #category : #configuration }
|
||||
@ -711,7 +712,8 @@ GrafoscopioGUI class >> updatePrerrequisitesScript [
|
||||
|
||||
{ #category : #updating }
|
||||
GrafoscopioGUI class >> updateRecentNotebooksWith: aFileReference [
|
||||
self recentNotebooks add: aFileReference.
|
||||
(self recentNotebooks includes: aFileReference)
|
||||
ifFalse: [self recentNotebooks add: aFileReference].
|
||||
]
|
||||
|
||||
{ #category : #updating }
|
||||
@ -744,100 +746,11 @@ GrafoscopioGUI class >> updateUI [
|
||||
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
GrafoscopioGUI >> initializePresenter [
|
||||
tree.
|
||||
nodeHeader acceptBlock: [ :text|
|
||||
tree selectedItem
|
||||
ifNotNil: [:x |
|
||||
x content: text.
|
||||
self updateTree
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
GrafoscopioGUI >> initializeWidgets [
|
||||
|
||||
"Buils graphical interface elements"
|
||||
|
||||
windowMainMenu := self windowMainMenu.
|
||||
tree := self tree.
|
||||
nodeHeader := self newTextInput.
|
||||
nodeBody :=
|
||||
tree selectedItem
|
||||
ifNotNil: [ self updateBody ]
|
||||
ifNil: [nodeBody := self newText].
|
||||
windowMainMenu applyTo: self.
|
||||
self focusOrder
|
||||
add: windowMainMenu;
|
||||
add: tree;
|
||||
add: nodeHeader;
|
||||
add: nodeBody.
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> nodeBody [
|
||||
^ nodeBody
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> nodeBody: anObject [
|
||||
nodeBody := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> nodeHeader [
|
||||
^ nodeHeader
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> nodeHeader: anObject [
|
||||
nodeHeader := anObject
|
||||
]
|
||||
|
||||
{ #category : #'ui-building' }
|
||||
GrafoscopioGUI >> notebookSubMenu [
|
||||
|
||||
^ MenuModel new
|
||||
addGroup: [ :group |
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Guardar';
|
||||
icon: Smalltalk ui icons smallSaveIcon;
|
||||
shortcut: $s command;
|
||||
action: [ self inform: 'Guardar | Por implementar ...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Guardar como...';
|
||||
icon: Smalltalk ui icons smallSaveAsIcon;
|
||||
action: [ self inform: 'Guardar | Por implementar ...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Exportar como html';
|
||||
icon: Smalltalk ui icons smallWindowIcon;
|
||||
action: [ self inform: 'Por implementar ...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Exportar como pdf';
|
||||
icon: Smalltalk ui icons smallPrintIcon;
|
||||
action: [ self inform: 'Por implementar ...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Ver html';
|
||||
icon: Smalltalk ui icons smallInspectItIcon;
|
||||
action: [ self inform: 'Por implementar ...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Ver pdf';
|
||||
icon: Smalltalk ui icons smallInspectItIcon;
|
||||
action: [ self inform: 'Por implementar ...' ] ] ]
|
||||
|
||||
]
|
||||
|
||||
{ #category : #'ui-building' }
|
||||
GrafoscopioGUI >> proyectSubMenu [
|
||||
|
||||
"This should be integrated with the GrafoscopioNotebook same messages.
|
||||
Was originally wrote in Spanish, and something is lost in translation, but Grafoscopio
|
||||
should be available in several languages..."
|
||||
^ MenuModel new
|
||||
addGroup: [ :group |
|
||||
group addItem: [ :item |
|
||||
@ -872,185 +785,3 @@ GrafoscopioGUI >> proyectSubMenu [
|
||||
action: [ self inform: 'Por implementar ...' ] ] ]
|
||||
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> selected [
|
||||
^ selected value
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> selected: aBoolean [
|
||||
selected value: aBoolean
|
||||
]
|
||||
|
||||
{ #category : #api }
|
||||
GrafoscopioGUI >> title [
|
||||
^ ' | Grafoscopio'
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> tree [
|
||||
| notebook |
|
||||
notebook := GrafoscopioNode new becomeDefaultTestTree.
|
||||
tree := TreeModel new.
|
||||
tree
|
||||
roots: notebook children;
|
||||
childrenBlock: [:node | node children];
|
||||
displayBlock: [:node | node title ].
|
||||
tree whenHighlightedItemChanged:
|
||||
[tree selectedItem notNil
|
||||
ifTrue: [
|
||||
self updateHeader.
|
||||
self updateBody.
|
||||
]
|
||||
].
|
||||
^ tree
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> tree: anObject [
|
||||
tree := anObject
|
||||
]
|
||||
|
||||
{ #category : #update }
|
||||
GrafoscopioGUI >> updateBody [
|
||||
"update the displayed content associated to the body of a node"
|
||||
|
||||
(tree selectedItem content tags = 'código')
|
||||
ifTrue: [
|
||||
^ nodeBody text: 'I should be playground because I am tagged as ', tree selectedItem content tags
|
||||
]
|
||||
ifFalse: [
|
||||
"nodeBody := self newText."
|
||||
^ nodeBody text: tree selectedItem content body
|
||||
]
|
||||
|
||||
|
||||
]
|
||||
|
||||
{ #category : #update }
|
||||
GrafoscopioGUI >> updateBody2 [
|
||||
"update the displayed content associated to the body of a node"
|
||||
|
||||
(tree selectedItem content tags = 'código')
|
||||
ifTrue: [
|
||||
^ nodeBody text: 'I should be playground because I am tagged as ', tree selectedItem content tags
|
||||
]
|
||||
ifFalse: [
|
||||
"nodeBody := self newText."
|
||||
^ nodeBody text: tree selectedItem content body
|
||||
]
|
||||
|
||||
|
||||
]
|
||||
|
||||
{ #category : #update }
|
||||
GrafoscopioGUI >> updateHeader [
|
||||
"update the displayed text associated to the header of a node"
|
||||
|
||||
^ nodeHeader text: tree selectedItem content header.
|
||||
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> windowMainMenu [
|
||||
windowMainMenu := MenuModel new
|
||||
addGroup: [ :group |
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Cuaderno';
|
||||
icon: Smalltalk ui icons smallObjectsIcon;
|
||||
subMenu: self notebookSubMenu ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: 'Proyecto';
|
||||
icon: Smalltalk ui icons catalogIcon;
|
||||
subMenu: self proyectSubMenu ] ];
|
||||
addGroup: [ :group |
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Guardar documento';
|
||||
icon: Smalltalk ui icons smallSaveIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Deshacer';
|
||||
icon: Smalltalk ui icons smallUndoIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Rehacer';
|
||||
icon: Smalltalk ui icons smallRedoIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ]];
|
||||
addGroup: [ :group |
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Agregar nodo';
|
||||
icon: MendaIcons new plusIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Eliminar nodo';
|
||||
icon: MendaIcons new minusIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Subir nodo';
|
||||
icon: MendaIcons new arrowUpIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Bajar nodo';
|
||||
icon: MendaIcons new arrowDownIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Mover nodo a la izquierda';
|
||||
icon: MendaIcons new arrowLeftIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Mover nodo a la derecha';
|
||||
icon: MendaIcons new arrowRightIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ]];
|
||||
addGroup: [ :group |
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Intercambiar: código <--> texto';
|
||||
icon: MendaIcons new smalltalkCodeIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Etiquetar como...';
|
||||
icon: MendaIcons new tagAddIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Desetiquetar ....';
|
||||
icon: MendaIcons new tagMinusIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
description: 'Editar etiquetas...';
|
||||
icon: FontAwesomeIcons new tagsIcon;
|
||||
action: [ self inform: 'Por implementar...' ] ]. ].
|
||||
^ windowMainMenu
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioGUI >> windowMainMenu: anObject [
|
||||
windowMainMenu := anObject
|
||||
]
|
||||
|
@ -609,12 +609,10 @@ GrafoscopioNode >> specModelClass [
|
||||
|
||||
{ #category : #accessing }
|
||||
GrafoscopioNode >> tagAs: aTag [
|
||||
"Tags the recipient node with aTag. For the moment we will have only one tag. In the future we will have several and there will be rules to
|
||||
know if a tag excludes others from the same node"
|
||||
|
||||
"Tags the recipient node with aTag. For the moment we will have only one tag.
|
||||
In the future we will have several and there will be rules to know how tags interact with
|
||||
each other"
|
||||
tags := aTag.
|
||||
"aTag = 'código'
|
||||
ifTrue: [self body: (GTPlayPage new content: self body) content]"
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
|
@ -51,10 +51,7 @@ GrafoscopioNotebook >> addNode [
|
||||
| addedNode |
|
||||
tree needRebuild: true.
|
||||
addedNode := tree highlightedItem content addNodeAfterMe.
|
||||
self notebookContent: notebook.
|
||||
tree roots: tree roots.
|
||||
self highlightItemFor: addedNode.
|
||||
self buildWithSpecLayout: self class defaultSpec.
|
||||
self updateTreeEditing: addedNode
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
@ -96,10 +93,7 @@ GrafoscopioNotebook >> demoteNode [
|
||||
| currentContent |
|
||||
currentContent := tree highlightedItem content.
|
||||
currentContent demote.
|
||||
self notebookContent: notebook.
|
||||
self highlightItemFor: currentContent.
|
||||
tree needRebuild: true.
|
||||
self buildWithSpecLayout: self class defaultSpec.
|
||||
self updateTreeEditing: currentContent
|
||||
]
|
||||
|
||||
{ #category : #persistence }
|
||||
@ -115,9 +109,9 @@ GrafoscopioNotebook >> exportAsSton: aNotebook on: aFileStream [
|
||||
aFileStream nextPutAll: stonPrettyString
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
{ #category : #api }
|
||||
GrafoscopioNotebook >> extent [
|
||||
^800@500
|
||||
^900@500
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
@ -146,8 +140,7 @@ GrafoscopioNotebook >> highlightItemFor: nodeContent [
|
||||
childrenSize := currentItem content parent children size.
|
||||
index := allItems indexOf: currentItem.
|
||||
(index < childrenSize) ifTrue: [
|
||||
"{allItems . currentItem . index } inspect."
|
||||
currentItem selected: false.
|
||||
currentItem ifNotNil: [currentItem selected: false].
|
||||
parentNode
|
||||
highlightedItem: ((allItems at:(index+1)) selected:true;
|
||||
takeHighlight;yourself).
|
||||
@ -209,22 +202,18 @@ GrafoscopioNotebook >> initializeWidgets [
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioNotebook >> moveNodeAfter [
|
||||
| currentNode |
|
||||
currentNode := tree selectedItem content.
|
||||
currentNode moveAfter.
|
||||
tree needRebuild: true.
|
||||
tree roots: tree roots.
|
||||
self buildWithSpecLayout: self class defaultSpec.
|
||||
| currentContent |
|
||||
currentContent := tree selectedItem content.
|
||||
currentContent moveAfter.
|
||||
self updateTreeEditing: currentContent
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioNotebook >> moveNodeBefore [
|
||||
| currentNode |
|
||||
currentNode := tree selectedItem content.
|
||||
currentNode moveBefore.
|
||||
tree needRebuild: true.
|
||||
tree roots: tree roots.
|
||||
self buildWithSpecLayout: self class defaultSpec.
|
||||
| currentContent |
|
||||
currentContent := tree selectedItem content.
|
||||
currentContent moveBefore.
|
||||
self updateTreeEditing: currentContent
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
@ -303,7 +292,7 @@ GrafoscopioNotebook >> newWindowMainMenu [
|
||||
name: nil;
|
||||
description: 'Togle: code <--> text';
|
||||
icon: MendaIcons new smalltalkCodeIcon;
|
||||
action: [ self inform: 'To be implemented...' ] ].
|
||||
action: [ self toggleCodeNode ] ].
|
||||
group addItem: [ :item |
|
||||
item
|
||||
name: nil;
|
||||
@ -503,10 +492,7 @@ GrafoscopioNotebook >> promoteNode [
|
||||
| currentContent |
|
||||
currentContent := tree selectedItem content.
|
||||
currentContent promote.
|
||||
self notebookContent: notebook.
|
||||
self highlightItemFor: currentContent.
|
||||
tree needRebuild: true.
|
||||
self buildWithSpecLayout: self class defaultSpec.
|
||||
self updateTreeEditing: currentContent
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
@ -522,10 +508,7 @@ GrafoscopioNotebook >> removeNode [
|
||||
]
|
||||
ifFalse: [ newSelectedContent := parentContent ].
|
||||
contentToDelete parent removeNode: contentToDelete.
|
||||
self notebookContent: notebook.
|
||||
self highlightItemFor: newSelectedContent.
|
||||
tree needRebuild: true.
|
||||
self buildWithSpecLayout: self class defaultSpec.
|
||||
self updateTreeEditing: newSelectedContent
|
||||
]
|
||||
|
||||
{ #category : #persistence }
|
||||
@ -563,8 +546,20 @@ GrafoscopioNotebook >> saveWorkingNotebook [
|
||||
"Saves the current tree to the user predefined file location used when he/she opened it."
|
||||
self workingFile
|
||||
ifNil: [ self saveToFileUI ]
|
||||
ifNotNil: [ self saveToFile: workingFile ]
|
||||
ifNotNil: [ self saveToFile: workingFile ].
|
||||
GrafoscopioGUI updateRecentNotebooksWith: workingFile
|
||||
|
||||
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioNotebook >> toggleCodeNode [
|
||||
| currentNode |
|
||||
currentNode := tree highlightedItem.
|
||||
(currentNode content tags = 'código')
|
||||
ifTrue: [ currentNode content tagAs: '' ]
|
||||
ifFalse: [ currentNode content tagAs: 'código' ].
|
||||
self changeBody: currentNode.
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
@ -581,14 +576,15 @@ GrafoscopioNotebook >> tree: anObject [
|
||||
GrafoscopioNotebook >> updateBodyFor: item [
|
||||
item
|
||||
ifNotNil: [ self changeBody: item ]
|
||||
ifNil: [ ]
|
||||
ifNil: [ "self inform: 'Select a node.'" ]
|
||||
]
|
||||
|
||||
{ #category : #operation }
|
||||
GrafoscopioNotebook >> updateBodyFor: item or: bufferedSelection [
|
||||
item
|
||||
ifNotNil: [ self changeBody: item ]
|
||||
ifNil: [ self changeBody: bufferedSelection ]
|
||||
GrafoscopioNotebook >> updateTreeEditing: currentContent [
|
||||
self notebookContent: notebook.
|
||||
self highlightItemFor: currentContent.
|
||||
tree needRebuild: true.
|
||||
self buildWithSpecLayout: self class defaultSpec
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
|
Loading…
Reference in New Issue
Block a user