[Setools] Ways to extends OB-Standard
Damien Cassou
damien.cassou at laposte.net
Tue Oct 17 19:20:33 UTC 2006
Colin Putney a écrit :
>
> On Oct 17, 2006, at 11:36 AM, Damien Cassou wrote:
>
>> Hi,
>>
>> I'm working on two packages, each currently overriding an existing
>> method. Is there a solution to avoid this ?
>>
>> First Case : DynamicProtocols. It overrides
>> OBCodeBrowser>>addTo:class:comment:metaclass: adding a call to the
>> following method at the end:
>>
>> DynamicProtocols>>installDPOnClass: class metaClass: metaclass method:
>> method
>> "Install our dynamic protocol system in OmniBrowser"
>> | protocols |
>> protocols := OBMetaNode named: 'DynamicProtocols'.
>> class childAt: #dynamicProtocols put: protocols.
>> metaclass childAt: #dynamicProtocols put: protocols.
>> protocols
>> childAt: #methods put: method;
>> addActor: (OBNodeActor onNodeClass: OBMethodCategoryNode)
>
> Yeah, I haven't figured out a way to extend metagraphs just yet, so
> this is the best way for now.
>
> Note, however, that OBNodeActor is no longer needed on
> MethodCategoryNodes, since all the category operations have been
> rewritten as services.
Is the following code better then ?
DynamicProtocols>>installDPOnClass: class metaClass: metaclass method:
method
"Install our dynamic protocol system in OmniBrowser"
| protocols |
protocols := OBMetaNode named: 'DynamicProtocols'.
class childAt: #dynamicProtocols put: protocols.
metaclass childAt: #dynamicProtocols put: protocols.
protocols
childAt: #methods put: method
>> Second Case : FileOutClasses. This package just want to add 2 entries
>> in the action menu for classes, methods and protocols. I may be able
>> to use services or prefix a method with 'svc' as I read through your
>> comments.
>
> 1. Create a subclass of OBService that implements the menu items you
> need. There are lots of examples of this in the latest versions of
> OB-Standard. You'll probably need 4 methods.
>
> #label - answers a string to be used in the menu
> #isActive - answers whether the service should appear in the menu
> #isEnabled - if it answers false, the menu item will be greyed out
> #execute - the menu item has been selected, so do the action
>
> 2. Extend OBCodeBrowser with a method that begins with 'svc' and answers
> your new service classes.
>
> That's it. The next browser you open should have your new menu items.
Very cool thank you.
> By the way, I've already done this for file out of classes, methods and
> categories. Do you have some other fileout mechanism in mind?
The thing I would like is pure text and LaTeX file outs. The first one
would be use to copy/past in emails and the other one would be
copy/pasted to LaTeX articles.
> Note, however, that very shortly I'll be renaming 'service' to 'command'
> so as not to be associated with Romains services work.
Ok, thank you. Very cool work.
--
Damien Cassou
More information about the Setools
mailing list