From 283a4523fd697ee6111654cd3aaf1bd8552ef4ee Mon Sep 17 00:00:00 2001 From: Offray Luna Date: Mon, 22 Aug 2016 16:12:45 +0000 Subject: [PATCH] Toggling support for code nodes. --- .../Grafoscopio/GrafoscopioGUI.class.st | 301 +----------------- .../Grafoscopio/GrafoscopioNode.class.st | 8 +- .../Grafoscopio/GrafoscopioNotebook.class.st | 74 ++--- 3 files changed, 54 insertions(+), 329 deletions(-) diff --git a/repository/Grafoscopio/GrafoscopioGUI.class.st b/repository/Grafoscopio/GrafoscopioGUI.class.st index 3c13737..b37c737 100644 --- a/repository/Grafoscopio/GrafoscopioGUI.class.st +++ b/repository/Grafoscopio/GrafoscopioGUI.class.st @@ -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 -] diff --git a/repository/Grafoscopio/GrafoscopioNode.class.st b/repository/Grafoscopio/GrafoscopioNode.class.st index 0403f5c..c4f6819 100644 --- a/repository/Grafoscopio/GrafoscopioNode.class.st +++ b/repository/Grafoscopio/GrafoscopioNode.class.st @@ -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 } diff --git a/repository/Grafoscopio/GrafoscopioNotebook.class.st b/repository/Grafoscopio/GrafoscopioNotebook.class.st index 69611dc..2284bfb 100644 --- a/repository/Grafoscopio/GrafoscopioNotebook.class.st +++ b/repository/Grafoscopio/GrafoscopioNotebook.class.st @@ -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 }