Hello again,
i already put it working with the job service. Now i'm having a bug, that i
doesn't understand. Nothing new appears in the context menu, put i'm putting
them there, and the method that does it is running, and receivies a
XContextMenu that is not null. Follow is my method that adds the entries to
the context menu, followed by the output of the method. Hope someone could
help me.
--- Method ---
//synonyms = {automovel, veículo, viatura, carruagem, coche, sege }
public void addToMenu(List<String> synonyms,
com.sun.star.ui.ContextMenuExecuteEvent aEvent) throws Exception {
int cnt = 0;
XIndexContainer xContextMenu = aEvent.ActionTriggerContainer;
System.out.println("xContextMenu: "+(xContextMenu!=null ? true :
false));
XMultiServiceFactory xMenuElementFactory =
(XMultiServiceFactory)UnoRuntime.queryInterface(com.sun.star.lang.XMultiServiceFactory.class,
xContextMenu );
for(String synonym: synonyms) {
try
{
XPropertySet xMenuEntry = (XPropertySet)
UnoRuntime.queryInterface(
XPropertySet.class,
xMenuElementFactory.createInstance(
"com.sun.star.ui.ActionTrigger"));
xMenuEntry.setPropertyValue("Text", new String(synonym));
xMenuEntry.setPropertyValue("CommandURL", new
String("org.openoffice.sapo.summerbits.otoo.
contextmenuinterceptor:"+synonym));
System.out.println("index: "+cnt);
xContextMenu.insertByIndex(cnt++, xMenuEntry);
System.out.println("xContextMenu Length:
"+xContextMenu.getCount());
} catch (UnknownPropertyException ex) {
Logger.getLogger(OtooMenuModel.class.getName()).log(Level.SEVERE, null, ex);
} catch (PropertyVetoException ex) {
Logger.getLogger(OtooMenuModel.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(OtooMenuModel.class.getName()).log(Level.SEVERE, null, ex);
} catch (WrappedTargetException ex) {
Logger.getLogger(OtooMenuModel.class.getName()).log(Level.SEVERE, null, ex);
}
}
xContextMenu.insertByIndex(cnt,
(Object)createSeparatorLine());
}
--- Output ----
xContextMenu: true
index: 0
xContextMenu Length: 37
index: 1
xContextMenu Length: 38
index: 2
xContextMenu Length: 39
index: 3
xContextMenu Length: 40
index: 4
xContextMenu Length: 41
index: 5
xContextMenu Length: 42
Thanks,
Joel Filipe Antunes Cordeiro
[EMAIL PROTECTED]
[EMAIL PROTECTED]
2008/9/19 Juergen Schmidt <[EMAIL PROTECTED]>
> Joel Cordeiro wrote:
>
>> Hi,
>>
>> really thank you for the explanation. But for now, i wouldnt like to care
>> with the those bugs you explain ( but those tricks are really helpfull in
>> the future, thanks ). So lets forget those tricks for now, and get some
>> concentration just to make something working.
>>
>> I have some questions, hope you will not considered they us much naive:
>>
>> - To add a context menu interceptor, since this topic is an Addon section
>> on the developers guide, i guess it could be done by creating a project
>> open
>> office addon on netbeans. But when we do it, it obligates us to choose
>> between a menu ou toolbar addon, and what i would like to do is a context
>> menu. How is suppose we should do it?
>>
> no the NB addon project wizard is a wizard for a ProtocolHandler addon.
> You have to implement a jobs addon. I know that is a little bit confusing
> and i don't like the term jobs addon. But it is as it is.
> See the addon term more as description for an extensions that typically
> integrates in the user interface in some way. The NB wizard helps to speed
> up the intila steps for simple menus and or toolbars. If you want more
> complex toolbars you can modify the initial Addons.xcu file later on.
>
> You have to choose the UNO component project wizard and select the service
> com.sun.star.task.Job. The wizard generates an appropriate skeleton project
> for you.
>
>
>> - On the developers guide, they talk about a xml describing the menus for
>> the menu and the toolbar, but nothing about the context menu. Doesnt we
>> need
>> that too? (i see somehting in the link of an email you replied)
>>
> no not yet. In general i would agree that all kind of menus should be
> described in the same way. But all this features grew over time and the xcu
> files are one way to extend or create menus via an extension. It is
> currently not implemented to define or merge context menus this way.
>
> See the related SDK example how you can intercept and extend a context
> menu. Combine it with your job implementation.
>
>
>> - i already tried the client application of the book, but it does not
>> work,
>> because it hasnt a main method. What should the main method do?
>> Instantiate
>> the class that implements the context menu interceptor? I havent
>> understood
>> how to make the connection between the extension and the interceptor
>> class.
>>
> see the job example from SDK to learn how you can retrieve the frame etc.
> from the arguments of the XJob.execute method.
>
> Probably that helps to move forward to combine both examples ....
>
> Otherwise feel free to come back with more questions.
>
> Juergen
>
>
>
>
>> Hope this are normal questions. I already read the developers guide, at
>> least the main topics to do that, but dont understand how to put it all
>> together.
>>
>> Thank you a lot,
>>
>> Joel Filipe Antunes Cordeiro
>> [EMAIL PROTECTED]
>> [EMAIL PROTECTED]
>>
>>
>> On Wed, Sep 17, 2008 at 7:25 PM, Ariel Constenla-Haile <
>> [EMAIL PROTECTED]> wrote:
>>
>> Hi Joel,
>>>
>>> Joel Cordeiro escribió:
>>>
>>> Thank you for the aknowledge.
>>>>
>>>> As i know, i dont need to write a Uno Component, since my extension just
>>>> adds some entries to the context menu, and make some access to the
>>>> OpenThesaurus service.
>>>>
>>>> that's why you *need* a Uno component implementing a css.task.Job
>>> [sorry
>>> if I was rather cryptic in my previous mail]
>>>
>>> (specification:
>>> http://api.openoffice.org/docs/common/ref/com/sun/star/task/Job.html
>>> documentation:
>>>
>>>
>>> http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/WritingUNO/Jobs/Implementation
>>> )
>>>
>>> If you don't need an extension, let's say you want it for yourself, in
>>> your own and only PC, you may achieve this even with OOo Basic adding a
>>> macro with the menu "Tools" - "Customize" - "Events".
>>>
>>> But if you want an extension, you must use a language which is able to
>>> implement Uno components (C++/Java/Python).
>>>
>>> Why?
>>>
>>> You know that in order to add menu entries in a context menu, you need
>>> to register a css.ui.XContextMenuInterceptor at the
>>> css.frame.Controller's css.ui.XContextMenuInterception.
>>> Besides, I guess you want to add this menu entries to *every* OOo Writer
>>> document, and in every "context" where it makes sense to add these
>>> entries (I mean, you don't want to add some entry bringing some
>>> thesaurus feature when the user right-clicks a picture, or a form
>>> control in design view)
>>>
>>> So you need first a way to access the Controller of every Writer
>>> document, every time the user creates a new document, or opens an
>>> existing one.
>>>
>>> How can your extension know when a new document is created, or an
>>> existing one is loaded?
>>> By registering a Job that will be executed upon this events:
>>>
>>> * OnNew = a new documented is created
>>> * OnLoad = a documented is loaded
>>>
>>> This is clear by the Job definition:
>>>
>>> "A job in OpenOffice.org is a UNO component that can be executed by the
>>> job execution environment upon an event."
>>>
>>> this means that every time a doc. is created, or loaded, the application
>>> framework will invoke your UNO component's execute()
>>> [
>>>
>>> http://api.openoffice.org/docs/common/ref/com/sun/star/task/XJob.html#execute
>>> ]
>>> method.
>>>
>>> In the case your Job is registered for the OnLoad / OnNew events, when
>>> the components's execute() methods is invoked you will get a reference
>>> to the document's model, and from this you can start working: access the
>>> Controller from the model with css.frame.XModel.getCurrentController() .
>>>
>>> But as the controller can be disposed, or the same model can have
>>> several controllers for different views, you need to do some extra work,
>>> as explained on my previous mail; if not, your context menu interceptor
>>> won't work in every context you'd really want it to; and your user may
>>> find very annoying that your extensions sometimes works but other times
>>> not.
>>>
>>>
>>> So my problem is just deploying it and make it
>>>
>>>> working as an extension for the extension manager of Open Office.
>>>>
>>>>
>>> you can try the NetBeans IDE plug-in; it's both user-friendly (that is,
>>> with easy-to-use wizards) and very complete; it can ease your work a
>>> lot, if you first study how to use it.
>>> I suggest you to try with the option "Debug Extension in Target
>>> openOffice.org", and set breakpoint in your code.
>>>
>>> You can try first by creating a client application with the SDK context
>>> menu interceptor example.
>>>
>>>
>>>
>>> Regards
>>> Ariel.
>>>
>>>
>>> --
>>> Ariel Constenla-Haile
>>> La Plata, Argentina
>>>
>>> [EMAIL PROTECTED]
>>> http://www.ArielConstenlaHaile.com.ar/ooo/
>>>
>>>
>>>
>>> "Aus der Kriegsschule des Lebens
>>> - Was mich nicht umbringt,
>>> macht mich härter."
>>> Nietzsche Götzendämmerung, Sprüche und Pfeile, 8.
>>>
>>>
>>>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>