SystemOrganization addCategory: #'OB-Package-Core'! OBFilter subclass: #OPPackageFilter instanceVariableNames: 'browser' classVariableNames: '' poolDictionaries: '' category: 'OB-Package-Core'! !OPPackageFilter class methodsFor: 'as yet unclassified' stamp: 'lr 4/9/2010 17:20'! on: aBrowser ^ self new initializeOn: aBrowser! ! !OPPackageFilter methodsFor: 'filtering' stamp: 'lr 4/9/2010 17:21'! displayString: aString forParent: aParentNode child: aNode ^ (aNode definedWithinBrowserEnvironment: self environment) ifFalse: [ aString asText addAttribute: TextColor gray ] ifTrue: [ aString ] ! ! !OPPackageFilter methodsFor: 'accessing' stamp: 'lr 4/9/2010 17:39'! environment ^ (browser navigationPanel columns at: 2 ifAbsent: [ ^ nil ]) parent environment! ! !OPPackageFilter methodsFor: 'initialization' stamp: 'lr 4/9/2010 17:21'! initializeOn: aBrowser browser := aBrowser! ! OBSystemBrowser subclass: #OPPackageBrowser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Package-Core'! !OPPackageBrowser class methodsFor: 'configuration' stamp: 'lr 4/9/2010 18:05'! defaultMetaNode | packageOrganizer workingCopy classCategory | packageOrganizer := OBMetaNode named: 'Organizer'. workingCopy := OBMetaNode named: 'Working'. classCategory := OBMetaNode named: 'Category'. classCategory displaySelector: #displayName. packageOrganizer childAt: #workingCopies put: workingCopy. packageOrganizer autoSelect: (OBAutoSelection on: classCategory). workingCopy childAt: #extensions put: classCategory. workingCopy childAt: #categories put: classCategory. self buildMetagraphOn: classCategory. classCategory edges do: [ :each | each metaNode doubleClickSelector: #browseHierarchy ]. ^ packageOrganizer! ! !OPPackageBrowser class methodsFor: 'configuration' stamp: 'lr 4/4/2010 10:00'! defaultRootNode ^ OPOrganizerNode new! ! !OPPackageBrowser class methodsFor: 'configuration' stamp: 'lr 4/4/2010 10:09'! paneCount ^ 5! ! !OPPackageBrowser class methodsFor: 'configuration' stamp: 'lr 4/9/2010 18:19'! title ^ 'Package Browser'! ! !OPPackageBrowser methodsFor: 'building' stamp: 'lr 4/5/2010 15:22'! initialExtent ^ super initialExtent * (1.25 @ 1)! ! !OPPackageBrowser methodsFor: 'initializing' stamp: 'lr 4/9/2010 17:20'! setMetaNode: aMetaNode node: aNode | filter | filter := OPPackageFilter on: self. aMetaNode withAllChildrenDo: [ :each | (self unfilteredNames includes: each name) ifFalse: [ each addFilter: filter ] ]. super setMetaNode: aMetaNode node: aNode! ! !OPPackageBrowser methodsFor: 'initializing' stamp: 'lr 4/9/2010 18:08'! unfilteredNames ^ #('Organizer' 'Working')! ! OBCodeNode subclass: #OPExtensionNode instanceVariableNames: 'packageInfo' classVariableNames: '' poolDictionaries: '' category: 'OB-Package-Core'! !OPExtensionNode class methodsFor: 'as yet unclassified' stamp: 'lr 4/9/2010 17:42'! packageInfo: aPackageInfo ^ self new setPackageInfo: aPackageInfo! ! !OPExtensionNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:16'! browserEnvironment ^ super browserEnvironment forPackages: (Array with: self packageInfo)! ! !OPExtensionNode methodsFor: 'navigation' stamp: 'lr 4/9/2010 17:51'! classes ^ packageInfo extensionClasses collect: [ :each | each asNode ]! ! !OPExtensionNode methodsFor: 'navigation' stamp: 'lr 4/9/2010 17:52'! comments ^ packageInfo extensionClasses collect: [ :each | each asCommentNode ]! ! !OPExtensionNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:10'! containingPackage ^ self packageInfo! ! !OPExtensionNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:06'! displayName ^ '*Extensions'! ! !OPExtensionNode methodsFor: 'navigation' stamp: 'lr 4/9/2010 17:51'! metaclasses ^ packageInfo extensionClasses collect: [ :each | each asClassSideNode ]! ! !OPExtensionNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 17:54'! name ^ '*Extensions'! ! !OPExtensionNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 17:48'! packageInfo ^ packageInfo! ! !OPExtensionNode methodsFor: 'initialize-release' stamp: 'lr 4/9/2010 17:48'! setPackageInfo: aPackageInfo packageInfo := aPackageInfo! ! OBCodeNode subclass: #OPOrganizerNode instanceVariableNames: 'workingCopies' classVariableNames: '' poolDictionaries: '' category: 'OB-Package-Core'! !OPOrganizerNode methodsFor: 'private' stamp: 'lr 4/4/2010 09:55'! buildWorkingCopies ^ (MCWorkingCopy registry values sort: [ :a :b | a packageName < b packageName ]) collect: [ :each | OPWorkingCopyNode on: each ]! ! !OPOrganizerNode methodsFor: 'navigation' stamp: 'lr 4/4/2010 10:03'! workingCopies ^ workingCopies ifNil: [ workingCopies := self buildWorkingCopies ]! ! OBCodeNode subclass: #OPWorkingCopyNode instanceVariableNames: 'workingCopy' classVariableNames: '' poolDictionaries: '' category: 'OB-Package-Core'! !OPWorkingCopyNode class methodsFor: 'as yet unclassified' stamp: 'lr 4/4/2010 09:56'! on: aWorkingCopy ^ self basicNew initializeOn: aWorkingCopy! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:16'! browserEnvironment ^ super browserEnvironment forPackages: (Array with: self packageInfo)! ! !OPWorkingCopyNode methodsFor: 'navigation' stamp: 'lr 4/9/2010 18:00'! categories ^ self packageInfo systemCategories collect: [ :each | OPCategoryNode on: each packageInfo: self packageInfo ]! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:15'! containingPackage ^ self packageInfo! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 17:46'! environment ^ BrowserEnvironment new forPackages: (Array with: self packageInfo)! ! !OPWorkingCopyNode methodsFor: 'navigation' stamp: 'lr 4/9/2010 17:46'! extensions ^ Array with: (OPExtensionNode packageInfo: self packageInfo)! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/11/2010 16:41'! icon ^ (workingCopy repositoryGroup repositories size < 2) ifTrue: [ workingCopy needsSaving ifTrue: [ #dirtyNewPackage ] ifFalse: [ #cleanNewPackage ] ] ifFalse: [ workingCopy needsSaving ifTrue: [ #dirtyPackage ] ifFalse: [ #cleanPackage ] ]! ! !OPWorkingCopyNode methodsFor: 'initialization' stamp: 'lr 4/4/2010 09:56'! initializeOn: aWorkingCopy workingCopy := aWorkingCopy! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/4/2010 10:08'! name ^ workingCopy packageName! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 17:44'! packageInfo ^ workingCopy packageInfo! ! !OPWorkingCopyNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 17:44'! workingCopy ^ workingCopy! ! OBClassCategoryNode subclass: #OPCategoryNode instanceVariableNames: 'packageInfo displayName' classVariableNames: '' poolDictionaries: '' category: 'OB-Package-Core'! !OPCategoryNode class methodsFor: 'as yet unclassified' stamp: 'lr 4/9/2010 17:54'! on: aSymbol packageInfo: aPackageInfo ^ (self on: aSymbol) setPackageInfo: aPackageInfo! ! !OPCategoryNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:17'! browserEnvironment ^ super browserEnvironment forPackages: (Array with: self packageInfo)! ! !OPCategoryNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:10'! containingPackage ^ self packageInfo! ! !OPCategoryNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:01'! displayName ^ displayName! ! !OPCategoryNode methodsFor: 'accessing' stamp: 'lr 4/9/2010 18:13'! packageInfo ^ packageInfo! ! !OPCategoryNode methodsFor: 'initialize-release' stamp: 'lr 4/9/2010 18:00'! setPackageInfo: aPackageInfo packageInfo := aPackageInfo. displayName := name = packageInfo systemCategoryPrefix ifTrue: [ '*Root' ] ifFalse: [ (name beginsWith: packageInfo systemCategoryPrefix , '-') ifTrue: [ name copyFrom: packageInfo systemCategoryPrefix size + 2 to: name size ] ifFalse: [ name ] ]! !