Furthering the investigation: With groups, plugins are not working at all as package doesn't exist in DynamicClassGroup etc. I fixed the plugin I was interested in but this makes for strange code as:
packageSelected: anAnnouncement | package name | (anAnnouncement respondsTo: #package) ifTrue: [ ...
This is because the announcement comes for a package which is not one. even if one has registered it with: registerTo: aModel aModel announcer on: NautilusPackageSelected send: #packageSelected: to: self Maybe should we have other announcements for these specific items like DynamicClassGroup (e.g. DynamicClassGroupSelected announcement) I have made a little plugin to help me explore the selected classes in the left most list. Also adding RPackage>>package ^self helps with package selected code as without it it is hard to write: package node item package for both PackageTreeTagSelection and PackageTreePackageSelection This makes the TasksPlugin code like; packageSelected: anAnnouncement | package | (anAnnouncement respondsTo: #package) ifTrue: [ package := anAnnouncement package. package ifNil: [ tasks removeAll ] ifNotNil: [ (package node item respondsTo: #package) ifTrue: [ tasks := (self systemNavigation allCallsOn: 'flag:' asSymbol) select: [ :m | package node item package includesMethod: m selector ofClass: m methodClass ] ]. ]. ] ifFalse: [ tasks removeAll. ]. self changed: #tasks. Maybe can we get this leaner with the proposed changes to the announcements. Phil On Fri, Mar 21, 2014 at 7:12 PM, phil@highoctane.be <phil@highoctane.be>wrote:
I have been looking at Nautilus plugins as I wanted to be able to export some classes to other formats (e.g. CSV, XML for use with other tools).
Then, I started playing around with the URLPlugin with its buildString method, which proves helpful to find out about what is selected in the 'list2'.
So, that's where I started drilling down the rabbit hole...
So, I see that we have packages and package tags. And actions like promote as true package and demote (which kind of doesn't work and crashes, but I should test further).
One thing is that this setup breaks the PackageTasks plugin is broken at this point.
We have:
packageSelected: anAnnouncement package := anAnnouncement package. ... tasks := (self systemNavigation allCallsOn: 'flag:' asSymbol) select: [ :m | package includesMethod: m selector ofClass: m methodClass ] ]
But with the packages and tags, it doesn't work.
In fact, package is misleading as the announcement contains a PackageTreePackageSelection or a PackageTreeTagSelection.
Question: how is one filtering on either the package or a given tag? Is this possible? I saw the >>node and node>>item things.
I was trying to build the full path (Like "Nautilus-Plugin" from what is selected in the model). Question; Is there any method for doing that at this point? (e.g. fullTag?)
Then I tried this:
Object subclass: #XXXX instanceVariableNames: '' classVariableNames: '' category: 'Nautilus-Nautilus'
This gets XXXX mixed with the classes in Nautilus under the Nautilus package in the Nautilus tag.
So, a tag class is mixed with the root package. Not nice.
What's the underlying model? Is there a doc somewhere?
Going back to the digging...
TIA Phil