Hi Tim. пн, 18 февр. 2019 г. в 14:48, Tim Mackinnon <tim@testit.works>:
> Hi Dennis - I’ve been reading the book you mentioned and looking through > the code as well as your examples and I feel a bit more comfortable with > what’s going on - however I am stumped about how you do an OR context (vs. > an AND context). > > I would like my menu item to appear for either a selected RPackage OR a > ClyTaggedClassGroup - I thought I had it with: > > RPackage asCalypsoItemContext, ClyTaggedClassGroup asCalypsoItemContext > (to get a composite context) but then I realised that the composite is an > AND. > > Is there some way to create an OR context, or do I simply have to create > multiple commands? > You simply need two annotations. One for context of RPackage and another for context of tag. > > Tim > > > On 12 Feb 2019, at 19:32, Denis Kudriashov <dionisi...@gmail.com> wrote: > > Hi Tim > > вт, 12 февр. 2019 г. в 13:42, Tim Mackinnon <tim@testit.works>: > >> Is there any documentation on Calypso application contexts? I am trying >> to add a menu item to a package tag (the bit underneath a package - which I >> often call a sub-package). >> > > Only class comments are available for Calypso. Also there are a Commander > booklet > <https://github.com/SquareBracketAssociates/Booklet-Infrastructure>which > describes contexts and ClassAnnotation github readme > <https://github.com/pharo-ide/ClassAnnotation> (together with class > comments). > > >> >> I’ve specified: >> >> ^CmdContextMenuActivation >> byItemOf: ClyQueryMenuGroup for: RPackage >> asCalypsoItemContext >> >> > The #for: argument of command activations is a context where command > should be available. Context describes condition where given command (its > activation strategy) should be visible for users. > In your example "RPackage asCalypsoItemContext" is an instance of > ClyBrowserItemContext which matches any selected package in the browser > (when a kind of RPackage is selected). > And that's why you do not see it on selected tag because the tag is not a > package. > > But that puts my menu on the package and not the tag > > - and if I use the inspect extra menu in calypso, I get what looks to be >> something that could help me determine what I want but I’m struggling to >> understand what ClyTaggedClassGroup does, and what a context is all about. >> > > Inspect command opens inspector of actually selected object which is an > instance of ClyTaggedClassGroup in that case (try inspect selected method > and you will get a CompiledMethod). > Children of package in browser are instances of ClyClassGroup and > subclasses. So they are not raw tags. If you need a command for a tag you > should add a command for ClyTaggedClassGroup items: > > ^CmdContextMenuActivation > byItemOf: ClyQueryMenuGroup for: ClyTaggedClassGroup > asCalypsoItemContext > > Look for example at SycPromotePackageFromTagCommand > class>>#fullBrowserMenuActivation which is defined this way. > > There are other kind of contexts which can be used in command annotations. > For example if you want a command for selected method only in full browser > then you should use ClyMethodContextOfFullBrowser: > > ^CmdContextMenuActivation byItemOf: ClyQueryMenuGroup for: > ClyMethodContextOfFullBrowser > > > it can be confusing that simple class is used in this case. But underhood > it is converted to the instance of context where command should be > available. > > >> >> Has anyone else played around with this at all? >> >> Ideally I want to have a menu appear on all the tags underneath a >> particular package - and possibly including that package (or maybe not - I >> haven’t decided as I want to try it in the wild). >> >> While I’m at it - I have quite understood how to create submenu’s either >> - as I’d like to have several commands all as sub items of a menu item >> “Exercism”. >> > > Look at commander booklet. It includes example. > > >> >> Tim >> >> >> >> >