--- a/ProjectBrowser.st Tue Feb 09 19:47:38 1999 +0100
+++ b/ProjectBrowser.st Tue Feb 09 20:58:35 1999 +0100
@@ -1,5 +1,5 @@
ApplicationModel subclass:#ProjectBrowser
- instanceVariableNames:'knownProjects'
+ instanceVariableNames:'projectTree'
classVariableNames:''
poolDictionaries:''
category:'Interface-Smalltalk'
@@ -12,6 +12,13 @@
privateIn:ProjectBrowser
!
+ProjectBrowser::ProjectTreeItem subclass:#ProjectNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:ProjectBrowser
+!
+
!ProjectBrowser class methodsFor:'interface specs'!
@@ -60,6 +67,96 @@
)
!
+rightCanvasSpecForEditableText
+ "This resource specification was automatically generated
+ by the UIPainter of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the UIPainter may not be able to read the specification."
+
+ "
+ UIPainter new openOnClass:ProjectBrowser andSelector:#emptyRightCanvasSpec
+ ProjectBrowser new openInterface:#emptyRightCanvasSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+
+ #(#FullSpec
+ #window:
+ #(#WindowSpec
+ #name: 'NewApplication'
+ #layout: #(#LayoutFrame 216 0 173 0 515 0 472 0)
+ #label: 'NewApplication'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1280 1024)
+ #bounds: #(#Rectangle 216 173 516 473)
+ #usePreferredExtent: false
+ )
+ #component:
+ #(#SpecCollection
+ #collection:
+ #(
+ #(#TextEditorSpec
+ #name: 'TextEditor1'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+ #model: #rightCanvasTextHolder
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #miniScrollerHorizontal: true
+ #isReadOnly: false
+ )
+ )
+ )
+ )
+!
+
+rightCanvasSpecForReadOnlyText
+ "This resource specification was automatically generated
+ by the UIPainter of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the UIPainter may not be able to read the specification."
+
+ "
+ UIPainter new openOnClass:ProjectBrowser andSelector:#emptyRightCanvasSpec
+ ProjectBrowser new openInterface:#emptyRightCanvasSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+
+ #(#FullSpec
+ #window:
+ #(#WindowSpec
+ #name: 'NewApplication'
+ #layout: #(#LayoutFrame 216 0 173 0 515 0 472 0)
+ #label: 'NewApplication'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1280 1024)
+ #bounds: #(#Rectangle 216 173 516 473)
+ #usePreferredExtent: false
+ )
+ #component:
+ #(#SpecCollection
+ #collection:
+ #(
+ #(#TextEditorSpec
+ #name: 'TextEditor1'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+ #model: #rightCanvasTextHolder
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #miniScrollerHorizontal: true
+ #isReadOnly: true
+ )
+ )
+ )
+ )
+!
+
windowSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
@@ -81,11 +178,11 @@
#window:
#(#WindowSpec
#name: 'ProjectBrowser'
- #layout: #(#LayoutFrame 16 0 31 0 579 0 353 0)
+ #layout: #(#LayoutFrame 216 0 173 0 779 0 495 0)
#label: 'ProjectBrowser'
#min: #(#Point 10 10)
#max: #(#Point 1024 768)
- #bounds: #(#Rectangle 16 31 580 354)
+ #bounds: #(#Rectangle 216 173 780 496)
#menu: #mainMenu
#usePreferredExtent: false
)
@@ -109,6 +206,7 @@
#(#SelectionInTreeViewSpec
#name: 'TreeList1'
#model: #selectedTreeNode
+ #menu: #itemMenuHolder
#hasHorizontalScrollBar: true
#hasVerticalScrollBar: true
#miniScrollerHorizontal: true
@@ -127,7 +225,7 @@
)
)
)
- #handles: #(#Any 0.274823 1.0)
+ #handles: #(#Any 0.379433 1.0)
)
)
)
@@ -182,11 +280,13 @@
#label: 'Save'
#translateLabel: true
#value: #saveProject
+ #enabled: #hasProjectSelectedHolder
)
#(#MenuItem
#label: 'Save As...'
#translateLabel: true
#value: #saveProjectAs
+ #enabled: #hasProjectSelectedHolder
)
#(#MenuItem
#label: '-'
@@ -201,6 +301,11 @@
)
)
#(#MenuItem
+ #label: 'Project'
+ #translateLabel: true
+ #submenuChannel: #projectItemMenu
+ )
+ #(#MenuItem
#label: 'Help'
#translateLabel: true
#startGroup: #right
@@ -273,6 +378,54 @@
) nil
nil
)
+!
+
+projectItemMenu
+ "This resource specification was automatically generated
+ by the MenuEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the MenuEditor may not be able to read the specification."
+
+ "
+ MenuEditor new openOnClass:ProjectBrowser andSelector:#projectItemMenu
+ (Menu new fromLiteralArrayEncoding:(ProjectBrowser projectItemMenu)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+
+ #(#Menu
+
+ #(
+ #(#MenuItem
+ #label: 'Rename...'
+ #translateLabel: true
+ #value: #renameProject
+ #enabled: #hasProjectSelectedHolder
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'New SubProject'
+ #translateLabel: true
+ #value: #newSubProject
+ #enabled: #hasProjectSelectedHolder
+ )
+ #(#MenuItem
+ #label: '-'
+ )
+ #(#MenuItem
+ #label: 'Remove...'
+ #translateLabel: true
+ #value: #removeProject
+ #enabled: #hasProjectSelectedHolder
+ )
+ ) nil
+ nil
+ )
! !
!ProjectBrowser methodsFor:'aspects'!
@@ -292,6 +445,12 @@
^ holder.
!
+hasProjectSelectedHolder
+ ^ [
+ self hasProjectNodeSelected
+ ]
+!
+
projectTreeHolder
"automatically generated by UIPainter ..."
@@ -341,30 +500,57 @@
!ProjectBrowser methodsFor:'initialization'!
postBuildWith:aBuiler
- self setupCanvasForNoSelection
+ self setupCanvasForNoSelection.
+ ^ super postBuildWith:aBuiler
!
setupCanvasForNoSelection
- self currentCanvasHolder value:(self class emptyRightCanvasSpec).
- self rightCanvasTextHolder value:'Please select an existing,
+ self showReadOnlyText:'Please select an existing,
or create a new project.'.
! !
+!ProjectBrowser methodsFor:'menus'!
+
+itemMenu
+ self hasProjectNodeSelected ifTrue:[
+ ^ self class projectItemMenu
+ ].
+
+ ^ nil
+!
+
+itemMenuHolder
+ ^ [ self itemMenu]
+! !
+
!ProjectBrowser methodsFor:'private'!
+hasProjectNodeSelected
+ |selectedNode|
+
+ selectedNode := self selectedTreeNode value.
+ selectedNode isNil ifTrue:[^ false].
+
+ ^ selectedNode isProjectNode
+
+!
+
nodeFor:aProject
+ "generate and return a treeNode for some project"
+
|projectName pNode
propertiesNode docNode classesNode subprojectsNode filesNode
- commentNode|
+ commentNode prerequisitesNode|
projectName := aProject name.
- pNode := ProjectTreeItem name:projectName.
+ pNode := ProjectNode name:projectName.
pNode contents:aProject.
pNode add:(commentNode := ProjectTreeItem name:'Comment').
pNode add:(docNode := ProjectTreeItem name:'Documentation').
pNode add:(propertiesNode := ProjectTreeItem name:'Properties').
pNode add:(classesNode := ProjectTreeItem name:'Classes').
+ pNode add:(prerequisitesNode := ProjectTreeItem name:'Prerequisites').
pNode add:(subprojectsNode := ProjectTreeItem name:'SubProjects').
pNode add:(filesNode := ProjectTreeItem name:'Files').
@@ -373,26 +559,36 @@
].
commentNode action:[:item | self showCommentOf:item].
- docNode contents:nil.
- propertiesNode contents:nil.
- classesNode contents:nil.
- subprojectsNode contents:nil.
- filesNode contents:nil.
+ commentNode contents:#comment.
+
+ docNode contents:#documentation.
+
+ propertiesNode contents:#properties.
+
+ prerequisitesNode contents:#prerequisites.
+
+ subprojectsNode contents:#subprojects.
+
+ filesNode contents:#files.
^ pNode
+
!
projectTree
|tree root|
- tree := SelectionInTree new.
- tree root:(root := TreeItem name:'invisibleRoot').
+ projectTree isNil ifTrue:[
+ tree := SelectionInTree new.
+ tree root:(root := TreeItem name:'invisibleRoot').
- Project knownProjects do:[:aProject |
- root add:(self nodeFor:aProject).
+ Project knownProjects do:[:aProject |
+ root add:(self nodeFor:aProject).
+ ].
+ projectTree := root.
].
- ^ root
+ ^ projectTree
!
updateRightCanvas
@@ -403,10 +599,9 @@
self setupCanvasForNoSelection.
^ self
].
- nodeContents := selectedNode contents.
- (nodeContents isMemberOf:Project) ifTrue:[
- self currentCanvasHolder value:(self class emptyRightCanvasSpec).
- self rightCanvasTextHolder value:nodeContents comment.
+
+ selectedNode isProjectNode ifTrue:[
+ self showCommentOf:selectedNode.
^ self.
].
@@ -429,16 +624,70 @@
].
!
-showCommentOf:anItem
- |project|
+newProject
+ |newNode newProject|
+
+ newProject := Project new.
+ newNode := self nodeFor:newProject.
+ projectTree add:newNode.
+ self projectTreeHolder root:projectTree.
+
+!
+
+newSubProject
+ |selectedNode subNode newNode parentProject newProject|
+
+ self hasProjectNodeSelected ifTrue:[
+ selectedNode := self selectedTreeNode value.
+ parentProject := selectedNode contents.
+
+ newProject := Project new.
+ newNode := self nodeFor:newProject.
+
+ parentProject addSubProject:newProject.
+ subNode := selectedNode children detect:[:child | child contents == #subprojects].
+ subNode add:newNode.
+ self projectTreeHolder root:projectTree.
+ ]
+!
+
+removeSubProject
+ |projectToRemove selectedNode subNode newNode parentProject newProject|
- project := anItem parent contents.
+ self hasProjectNodeSelected ifTrue:[
+ selectedNode := self selectedTreeNode value.
+ projectToRemove := selectedNode contents.
+
+ selectedNode parentNode isProjectNode.
+
+ parentProject addSubProject:newProject.
+ subNode := selectedNode children detect:[:child | child contents == #subprojects].
+ subNode add:newNode.
+ self projectTreeHolder root:projectTree.
+ ]
+!
+
+showCommentOf:anItem
+ |projectItem project|
- self currentCanvasHolder value:(self class emptyRightCanvasSpec).
+ anItem contents == #comment ifTrue:[
+ projectItem := anItem parent
+ ] ifFalse:[
+ projectItem := anItem
+ ].
+ project := projectItem contents.
+
+ self currentCanvasHolder value:(self class rightCanvasSpecForEditableText).
self rightCanvasTextHolder value:project comment.
!
+showReadOnlyText:someText
+ self currentCanvasHolder value:(self class rightCanvasSpecForReadOnlyText).
+ self rightCanvasTextHolder value:someText.
+
+!
+
showTreeItem:anItem
anItem contents == #comment ifTrue:[
self showCommentOf:anItem.
@@ -458,6 +707,20 @@
action := something.! !
+!ProjectBrowser::ProjectTreeItem methodsFor:'queries'!
+
+isProjectNode
+ ^ false
+! !
+
+!ProjectBrowser::ProjectNode methodsFor:'queries'!
+
+isProjectNode
+ ^ true
+
+
+! !
+
!ProjectBrowser class methodsFor:'documentation'!
version