From cba173f6a79aaf27d2bc0edbe9fd92dfd180be81 Mon Sep 17 00:00:00 2001 From: OffrayLuna Date: Sun, 18 Dec 2016 14:33:00 +0000 Subject: [PATCH] Cut, copy & paste debugged. Long needed feature finally implemented. --- src/Grafoscopio/GrafoscopioGUI.class.st | 13 +----- src/Grafoscopio/GrafoscopioNode.class.st | 44 +++++++++++++++++--- src/Grafoscopio/GrafoscopioNotebook.class.st | 23 ++++++++-- src/Grafoscopio/ManifestGrafoscopio.class.st | 9 +++- 4 files changed, 67 insertions(+), 22 deletions(-) diff --git a/src/Grafoscopio/GrafoscopioGUI.class.st b/src/Grafoscopio/GrafoscopioGUI.class.st index 0e8dfe8..21f46c3 100644 --- a/src/Grafoscopio/GrafoscopioGUI.class.st +++ b/src/Grafoscopio/GrafoscopioGUI.class.st @@ -21,8 +21,7 @@ Class { ], #classInstVars : [ 'dockingBar', - 'recentNotebooks', - 'nodesClipboard' + 'recentNotebooks' ], #category : #'Grafoscopio-UI' } @@ -379,16 +378,6 @@ GrafoscopioGUI class >> messageNotImplementedYet [ title: 'No implementado aún'. ] -{ #category : #accessing } -GrafoscopioGUI class >> nodesClipboard [ - ^ nodesClipboard -] - -{ #category : #accessing } -GrafoscopioGUI class >> nodesClipboard: anObject [ - nodesClipboard := anObject -] - { #category : #'graphical interface' } GrafoscopioGUI class >> open [ ^ self new open diff --git a/src/Grafoscopio/GrafoscopioNode.class.st b/src/Grafoscopio/GrafoscopioNode.class.st index 83fe029..ddfa729 100644 --- a/src/Grafoscopio/GrafoscopioNode.class.st +++ b/src/Grafoscopio/GrafoscopioNode.class.st @@ -23,12 +23,37 @@ Class { 'node', 'level', 'nodesInPreorder', - 'cacheNode', 'metadata' ], + #classInstVars : [ + 'clipboard' + ], #category : #'Grafoscopio-Model' } +{ #category : #utility } +GrafoscopioNode class >> cleanTreeRootReferences [ + + | ref | + clipboard ifNil: [ ^ self ]. + clipboard children ifNil: [ ^ self ]. + clipboard preorderTraversal allButFirstDo: [ :n | + ref := n. + n level - 1 timesRepeat: [ ref := ref parent ]. + ref parent: nil + ] +] + +{ #category : #accessing } +GrafoscopioNode class >> clipboard [ + ^ clipboard +] + +{ #category : #accessing } +GrafoscopioNode class >> clipboard: anObject [ + clipboard := anObject +] + { #category : #'instance creation' } GrafoscopioNode class >> header: aHeader body: aText [ "Create a new instance with given header and body" @@ -59,7 +84,7 @@ GrafoscopioNode class >> named: aString [ yourself ] -{ #category : #'as yet unclassified' } +{ #category : #utility } GrafoscopioNode class >> specialWords [ "I return a list of word that were used in the first versions of grafoscopio to mark node headers to indicate special ways to handle them and their node contents. @@ -248,8 +273,17 @@ GrafoscopioNode >> content: anObject [ { #category : #'add/remove nodes' } GrafoscopioNode >> copyToClipboard [ - GrafoscopioGUI nodesClipboard: self copy. + self class clipboard: self copy. + self class cleanTreeRootReferences + +] + +{ #category : #utility } +GrafoscopioNode >> deleteReferencesToRoot: aRootNode [ + + | sparseTree | + sparseTree := self preorderTraversal. ] { #category : #movement } @@ -541,8 +575,8 @@ GrafoscopioNode >> parent: aNode [ { #category : #'add/remove nodes' } GrafoscopioNode >> pasteFromClipboard [ - GrafoscopioGUI nodesClipboard - ifNotNil: [ self addNode: GrafoscopioGUI nodesClipboard ] + self class clipboard + ifNotNil: [ self addNode: self class clipboard ] ifNil: [ self inform: 'Cache is emtpy. Pleas cut/copy a node before pasting' ] ] diff --git a/src/Grafoscopio/GrafoscopioNotebook.class.st b/src/Grafoscopio/GrafoscopioNotebook.class.st index 593e139..a8f7635 100644 --- a/src/Grafoscopio/GrafoscopioNotebook.class.st +++ b/src/Grafoscopio/GrafoscopioNotebook.class.st @@ -81,6 +81,17 @@ GrafoscopioNotebook >> body: anObject [ body := anObject ] +{ #category : #'editing nodes' } +GrafoscopioNotebook >> copyNodeToClipboard [ + tree highlightedItem content copyToClipboard. + self notebookContent: notebook. +] + +{ #category : #'editing nodes' } +GrafoscopioNotebook >> cutNodeToClipboard [ + self copyNodeToClipboard; removeNode. +] + { #category : #'editing nodes' } GrafoscopioNotebook >> demoteNode [ | editedNode | @@ -205,19 +216,19 @@ GrafoscopioNotebook >> newWindowMainMenu [ name: nil; description: 'Cut'; icon: Smalltalk ui icons smallCutIcon; - action: [ self inform: 'To be implemented...' ] ]. + action: [ self cutNodeToClipboard ] ]. group addItem: [ :item | item name: nil; description: 'Copy'; icon: Smalltalk ui icons smallCopyIcon; - action: [ self inform: 'To be implemented...' ] ]. + action: [ self copyNodeToClipboard ] ]. group addItem: [ :item | item name: nil; description: 'Paste'; icon: Smalltalk ui icons smallPasteIcon; - action: [ self inform: 'To be implemented...' ] ]]; + action: [ self pasteNodeFromClipboard ] ]]; addGroup: [ :group | group addItem: [ :item | item @@ -425,6 +436,12 @@ GrafoscopioNotebook >> openTutorial [ ifFalse: [ GrafoscopioGUI updateDocumentationUI ] ] +{ #category : #'editing nodes' } +GrafoscopioNotebook >> pasteNodeFromClipboard [ + tree highlightedItem content pasteFromClipboard. + self notebookContent: notebook. +] + { #category : #initialization } GrafoscopioNotebook >> projectSubMenu [ diff --git a/src/Grafoscopio/ManifestGrafoscopio.class.st b/src/Grafoscopio/ManifestGrafoscopio.class.st index d81e2a5..3dd416b 100644 --- a/src/Grafoscopio/ManifestGrafoscopio.class.st +++ b/src/Grafoscopio/ManifestGrafoscopio.class.st @@ -18,6 +18,11 @@ ManifestGrafoscopio class >> ruleRBEqualsTrueRuleV1FalsePositive [ ] { #category : #'code-critics' } -ManifestGrafoscopio class >> ruleRBSentNotImplementedRuleV1FalsePositive [ - ^ #(#(#(#RGMetaclassDefinition #(#'GrafoscopioGUI class' #GrafoscopioGUI)) #'2015-12-23T10:38:16.706667-05:00') #(#(#RGClassDefinition #(#GrafoscopioGUI)) #'2016-01-06T18:53:45.844051-05:00') ) +ManifestGrafoscopio class >> ruleRBLongMethodsRuleV1FalsePositive [ + ^ #(#(#(#RGMethodDefinition #(#GrafoscopioNotebook #newWindowMainMenu #false)) #'2016-12-17T18:51:33.99062-05:00') ) +] + +{ #category : #'code-critics' } +ManifestGrafoscopio class >> ruleRBSentNotImplementedRuleV1FalsePositive [ + ^ #(#(#(#RGMetaclassDefinition #(#'GrafoscopioGUI class' #GrafoscopioGUI)) #'2015-12-23T10:38:16.706667-05:00') #(#(#RGClassDefinition #(#GrafoscopioGUI)) #'2016-01-06T18:53:45.844051-05:00') #(#(#RGMethodDefinition #(#GrafoscopioNotebook #newWindowMainMenu #false)) #'2016-12-17T18:51:40.617924-05:00') ) ]