From 880006df73792e7df0e56025a422b10c377c2e8f Mon Sep 17 00:00:00 2001 From: Offray Luna Date: Tue, 21 Nov 2017 19:05:17 +0000 Subject: [PATCH] Preliminar support for notebooks with proper %metadata nodes to be subscribed into the main help menu. --- .../GrafoscopioDockingBar.class.st | 150 +++++++++++++----- .../Grafoscopio/GrafoscopioNotebook.class.st | 5 + 2 files changed, 114 insertions(+), 41 deletions(-) diff --git a/repository/Grafoscopio/GrafoscopioDockingBar.class.st b/repository/Grafoscopio/GrafoscopioDockingBar.class.st index ad67d10..0fa8f67 100644 --- a/repository/Grafoscopio/GrafoscopioDockingBar.class.st +++ b/repository/Grafoscopio/GrafoscopioDockingBar.class.st @@ -21,11 +21,58 @@ Class { ], #classInstVars : [ 'dockingBar', - 'recentNotebooks' + 'recentNotebooks', + 'helpMenu' ], #category : #'Grafoscopio-UI' } +{ #category : #adding } +GrafoscopioDockingBar class >> addToHelpMenu: aGrafoscopioNotebook [ + | metadata nbFile | + metadata := aGrafoscopioNotebook metadata. + nbFile := aGrafoscopioNotebook workingFile. + (metadata at: 'showOnHelp' ifAbsent: [ ^ self ]) + ifTrue: [ + self helpMenu submorphs + detect: [ :s | s contents = (metadata at: 'shortTitle') ] + ifFound: [ + self inform: + 'The notebook: ', String cr, + nbFile fullName, String cr, + ' needs another shortTitle to be added to the docking bar Help Menu.' ] + ifNone: [ + self helpMenu + add: (metadata at: 'shortTitle') + target: [ GrafoscopioNotebook open: nbFile ] + selector: #value ] ]. + self updateUI +] + +{ #category : #accessing } +GrafoscopioDockingBar class >> defaultHelpMenu [ + | defaultHelpMenu | + defaultHelpMenu := MenuMorph new. + defaultHelpMenu + add: 'Tutorial (Spanish)' + target: [ GrafoscopioNotebook open: GrafoscopioDocs tutorial ] + selector: #value; + add: 'Manual' + target: [ GrafoscopioNotebook open: GrafoscopioDocs manual ] + selector: #value; + add: 'Manual (PDF)' + target: GrafoscopioDocs + selector: #openPDFManual; + add: 'Dataviz' + target: [ GrafoscopioNotebook open: DatavizDocs introNotebook ] + selector: #value; + add: 'Dev''s notes' + target: [ GrafoscopioNotebook open: GrafoscopioDocs devNotes ] + selector: #value; + add: 'About Grafoscopio' target: self selector: #messageAbout. + ^ defaultHelpMenu +] + { #category : #specs } GrafoscopioDockingBar class >> defaultSpec [ @@ -243,11 +290,49 @@ GrafoscopioDockingBar class >> exampleBootstrapUI [ ui openWithSpecLayout: lay. ] +{ #category : #accessing } +GrafoscopioDockingBar class >> helpMenu [ + ^ helpMenu ifNil: [ helpMenu := self defaultHelpMenu ] +] + +{ #category : #accessing } +GrafoscopioDockingBar class >> helpMenu: anObject [ + helpMenu := anObject +] + { #category : #'class initialization' } GrafoscopioDockingBar class >> initialize [ self start. ] +{ #category : #accessing } +GrafoscopioDockingBar class >> launchMenu [ + | launchMenu | + launchMenu := MenuMorph new. + launchMenu + add: 'New notebook' + target: GrafoscopioNotebook new + selector: #openDefault; + add: 'Notebook from file...' + target: GrafoscopioNotebook new + selector: #openFromFileSelector; + add: 'Notebook from the Internet...' + target: GrafoscopioNotebook new + selector: #openFromUrlUI; + add: 'Recent notebooks...' + target: self + selector: #openFromRecentlyUsed; + add: 'Example notebooks...' + target: self + selector: #messageNotImplementedYet; + add: 'Roassal visualizations gallery' + target: RTExampleBrowser new + selector: #open; + add: 'Playground' target: Smalltalk tools selector: #openWorkspace; + add: 'Transcript' target: Smalltalk tools selector: #openTranscript. + ^ launchMenu +] + { #category : #'graphical interface' } GrafoscopioDockingBar class >> messageAbout [ "I show the author(s), license, sponsors and main contributors to the project @@ -371,48 +456,14 @@ GrafoscopioDockingBar class >> showSettings [ GrafoscopioDockingBar class >> start [ "Creates a custom docking bar for grafoscopio on top, for shorcuts to the most used actions, and as a fixed place for asking for help, external tools and grafoscopio updates and about" - - | launchMenu helpMenu updateMenu | - - launchMenu := MenuMorph new. - launchMenu - add: 'New notebook' target: (GrafoscopioNotebook new) selector: #openDefault; - add: 'Notebook from file...' target: (GrafoscopioNotebook new) selector: #openFromFileSelector; - add: 'Notebook from the Internet...' target: (GrafoscopioNotebook new) selector: #openFromUrlUI; - add: 'Recent notebooks...' target: self selector: #openFromRecentlyUsed; - add: 'Example notebooks...' target: self selector: #messageNotImplementedYet; - add: 'Roassal visualizations gallery' target: (RTExampleBrowser new) selector: #open; - add: 'Playground' target: (Smalltalk tools) selector: #openWorkspace; - add: 'Transcript' target: (Smalltalk tools) selector: #openTranscript. - - updateMenu := MenuMorph new. - updateMenu - add: 'Grafoscopio' target: self selector: #updateGrafoscopioUI; - add: 'Documentation' target: GrafoscopioDocumentation selector: #updateAllUI; - add: 'DataViz package' target: self selector: #updateDatavizUI; - add: 'Notebooks places' target: GrafoscopioDocumentation selector: #updateDocsPlaceUI; - "add: 'Database engine' target: ExternalApp selector: #installSQLite32BitsUI; - add: 'Pandoc path' target: ExternalApp selector: #configurePandoc; - add: 'Fossil path' target: ExternalApp selector: #configureFossil;" - add: 'All the system' target: self selector: #updateSystem. - - helpMenu := MenuMorph new. - helpMenu - add: 'Tutorial (Spanish)' target: [GrafoscopioNotebook open: GrafoscopioDocs tutorial] selector: #value; - add: 'Manual' target: [ GrafoscopioNotebook open: GrafoscopioDocs manual ] selector: #value; - add: 'Manual (PDF)' target: GrafoscopioDocs selector: #openPDFManual; - add: 'Dataviz' target: [ GrafoscopioNotebook open: DatavizDocs introNotebook ] selector: #value ; - add: 'Dev''s notes' target: [GrafoscopioNotebook open: GrafoscopioDocs devNotes ] selector: #value; - add: 'About Grafoscopio' target: self selector: #messageAbout. - dockingBar := DockingBarMorph new. - dockingBar - add: 'Launch' subMenu: launchMenu; - add: 'Update' subMenu: updateMenu; - add: 'Help' subMenu: helpMenu. - dockingBar + dockingBar + add: 'Launch' subMenu: self launchMenu; + add: 'Update' subMenu: self updateMenu; + add: 'Help' subMenu: self helpMenu. + dockingBar adhereToTop; - openInWorld. + openInWorld ] { #category : #updating } @@ -469,6 +520,23 @@ GrafoscopioDockingBar class >> updateGrafoscopioUI [ self inform: 'Grafoscopio update finished' ] +{ #category : #accessing } +GrafoscopioDockingBar class >> updateMenu [ + | updateMenu | + updateMenu := MenuMorph new. + updateMenu + add: 'Grafoscopio' target: self selector: #updateGrafoscopioUI; + add: 'Documentation' + target: GrafoscopioDocumentation + selector: #updateAllUI; + add: 'DataViz package' target: self selector: #updateDatavizUI; + add: 'Notebooks places' + target: GrafoscopioDocumentation + selector: #updateDocsPlaceUI; + add: 'All the system' target: self selector: #updateSystem. + ^ updateMenu +] + { #category : #updating } GrafoscopioDockingBar class >> updatePrerrequisitesScript [ "Updates the system prerequisites with new versions of itself take from the source code repository" diff --git a/repository/Grafoscopio/GrafoscopioNotebook.class.st b/repository/Grafoscopio/GrafoscopioNotebook.class.st index 7c2927c..46d476d 100644 --- a/repository/Grafoscopio/GrafoscopioNotebook.class.st +++ b/repository/Grafoscopio/GrafoscopioNotebook.class.st @@ -409,6 +409,11 @@ GrafoscopioNotebook >> markdownFileChecksumUpto: anInteger [ ^ self markdownFileChecksum copyFrom: 1 to: anInteger asInteger. ] +{ #category : #utilities } +GrafoscopioNotebook >> metadata [ + ^ self notebook metadata +] + { #category : #'editing nodes' } GrafoscopioNotebook >> moveNodeAfter [ | editedNode |