Hi Derek,
Yes, now I remember we have such limitation in the
value handler mechanism.
In order to modify options from value handler the IConfiguration/IResourceConfiguration.setOption()
should be used.
Both the IConfiguration and IResourceConfiguration have
the following methods that are to be used from the value handler:
public IOption setOption(IHoldsOptions
parent, IOption option, boolean value)
throws BuildException;
public IOption setOption(IHoldsOptions parent,
IOption option, String value)
throws BuildException;
public IOption setOption(IHoldsOptions parent,
IOption option, String[] value)
throws BuildException;
I guess we should put a recursion check in the
ManagedBuildManager.setOption() ..
Mikhail
-----Original Message-----
From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx] On
Behalf Of Derek Morris
Sent: Thursday, October 19, 2006 8:38 PM
To: CDT General developers list.
Subject: Re: [cdt-dev] MBS (IManagedOptionValueHandler) questions
Mikhail,
Using ManagedBuildManager.setOption() doesn't work... It calls
handleValue,
which calls ManagedBuildManager, which...
I guess I could put a recursion check in handleValue, but this seems
rather
excessive.
--
Derek
Sennikovsky, Mikhail wrote:
> You should do
>
>
>
> handleValue(..., IBuildObject configuration, ..){
>
> ...
>
> if(configuration instanceof IConfiguration){
>
>
ManagedBuildManager.setOption((IConfiguration)configuration, ...);
>
> } else if (configuration instanceof
IResourceConfiguration){
>
>
ManagedBuildManager.setOption((IResourceConfiguration)configuration,
> ...);
>
> }
>
> ...
>
> }
>
>
>
> Mikhail
>
>
>
> -----Original Message-----
> From: cdt-dev-bounces@xxxxxxxxxxx
[mailto:cdt-dev-bounces@xxxxxxxxxxx]
> On Behalf Of Derek Morris
> Sent: Thursday, October 19, 2006 7:57 PM
> To: CDT General developers list.
> Subject: Re: [cdt-dev] MBS (IManagedOptionValueHandler) questions
>
>
>
> Just tried that...
>
>
>
> 1. I had to add a dependency on org.eclipse.cdt.core and import
>
> org.eclipse.cdt.core.AbstractCExtension to get ManagedBuildManager
> correctly.
>
>
>
> 2. Where do I get an IConfiguration from? I get passed an
IBuildObject and
>
> IOptionHolder and an IOption?
>
>
>
> Thanks,
>
> --
>
> Derek
>
>
>
> Sennikovsky, Mikhail wrote:
>
>> Hi Derek,
>
>>
>
>>
>
>>
>
>> Please see my response embedded below.
>
>>
>
>>
>
>>
>
>> Mikhail
>
>>
>
>>
>
>>
>
>> -----Original Message-----
>
>> From: cdt-dev-bounces@xxxxxxxxxxx
[mailto:cdt-dev-bounces@xxxxxxxxxxx]
>
>> On Behalf Of Derek Morris
>
>> Sent: Thursday, October 19, 2006 7:19 PM
>
>> To: CDT General developers
list.
>
>> Subject: Re: [cdt-dev] MBS (IManagedOptionValueHandler)
questions
>
>>
>
>>
>
>>
>
>> Hi Mikhail,
>
>>
>
>>
>
>>
>
>> I have written an IManagedOptionValueHandler. I have
added a new
>
>> optionCategory
>
>>
>
>> and options to that OptionCategory that uses the
valueHandler and
>
>>
>
>> valueHandlerExtraArgument extension. I have added
boolean and string
>
>> options.
>
>>
>
>>
>
>>
>
>> IManagedOptionValueHandler gets passed IOptionHolder and
IOption.
>
>>
>
>>
>
>>
>
>> From within the valuehandler I am using
IOption.setValue(). Using these
>
>>
>
>> interfaces I am almost getting the behaviour I want...
If it setValue()
>
>> on the
>
>>
>
>> boolean option, the corresponding checkbox in the GUI is
updated.
>
>> However, if I
>
>>
>
>> setValue() on the string, the corresponding textbox in
the GUI is not
>
>> updated
>
>>
>
>> until I interact with the GUI in some way (check the
booleans
> checkbox, for
>
>>
>
>> example).
>
>>
>
>> */[Mikhail] This seems like a bug. Try using the
ManagedBuildManager API
>
>> instead of IOption (see my comment below) and if this
does not help
>
>> please raise a bug./*
>
>>
>
>>
>
>>
>
>> I have no docs for ManagedBuildManager so I don't know
when/how to use
>
>> it. As I
>
>>
>
>> am passed an IOption (and it is working - mostly - for
me) I am using
> that.
>
>>
>
>> */[Mikhail] The
org.eclipse.cdt.managedbuilder.core.ManagedBuildManager
>
>> is the entry-point for all MBS core operations. It
should be used for
>
>> setting option values as well. You should not call
IOption.setValue
>
>> because it will not work for the case of extension
options (i.e. options
>
>> whose values are not overridden by user settings)./*
>
>>
>
>> */The ManagedBuildManager contains the following methods
that should be
>
>> used for option value modifications (see JavaDoc
comments for those
>
>> methods for more detail):/*
>
>>
>
>> */ /*
>
>>
>
>> *public* *static* IOption
setOption(IConfiguration config,
>
>> IHoldsOptions holder, IOption option, *boolean* value)
>
>>
>
>> *public* *static* IOption
setOption(IResourceConfiguration
>
>> resConfig, IHoldsOptions holder, IOption option,
*boolean* value)
>
>>
>
>> *public* *static* IOption
setOption(IConfiguration config,
>
>> IHoldsOptions holder, IOption option, String value)
>
>>
>
>> *public* *static* IOption
setOption(IResourceConfiguration resConfig,
>
>> IHoldsOptions holder, IOption option, String value)
>
>>
>
>> *public* *static* IOption
setOption(IConfiguration config,
>
>> IHoldsOptions holder, IOption option, String[] value)
>
>>
>
>> *public* *static* IOption
setOption(IResourceConfiguration
>
>> resConfig, IHoldsOptions holder, IOption option,
String[] value)
>
>>
>
>> */ /*
>
>>
>
>> */The “IBuildObject configuration” argument
passed to your value handler
>
>> is either an IConfiguration or an
IResourceConfiguration. You should do
>
>> instanceof and call the proper ManagedBuildManager.setOption()
method.
>
>> Please let me know if you have any questions with using
the
>
>> ManagedBuildManager.setOption()/*
>
>>
>
>> */ /*
>
>>
>
>> */Regards,/*
>
>>
>
>> */Mikhail/*
>
>>
>
>> */ /*
>
>>
>
>> --
>
>>
>
>> Derek
>
>>
>
>>
>
>>
>
>> Sennikovsky, Mikhail wrote:
>
>>
>
>> > Hi Derek,
>
>>
>
>> >
>
>>
>
>> > I did not fully understand how are you using the
value handler
>
>>
>
>> > mechanism. Could you elaborate a bit more on this
(i.e. where are you
>
>>
>
>> > calling the setValue from) so that I could
understand your issue.
>
>>
>
>> > BTW, you should not call the IOption.setValue
directly. You should use
>
>>
>
>> > the ManagedBuildManager.setOption() instead.
>
>>
>
>> >
>
>>
>
>> > Mikhail
>
>>
>
>> >
>
>>
>
>> > -----Original Message-----
>
>>
>
>> > From: cdt-dev-bounces@xxxxxxxxxxx
[mailto:cdt-dev-bounces@xxxxxxxxxxx]
>
>>
>
>> > On Behalf Of Derek Morris
>
>>
>
>> > Sent: Thursday, October 19, 2006 5:28 PM
>
>>
>
>> > To: CDT General
developers list.
>
>>
>
>> > Subject: Re: [cdt-dev] MBS
(IManagedOptionValueHandler) questions
>
>>
>
>> >
>
>>
>
>> > Mikhail,
>
>>
>
>> >
>
>>
>
>> > When I use option.setValue(boolean), then the UI
checkbox is updated
>
>>
>
>> > However, when I option.setvalue(string), the the UI
textbox is NOT
>
>>
>
>> > updated,
>
>>
>
>> > until I do something else in the UI (for example
setting a checkbox). Is
>
>>
>
>> > this I bug?
>
>>
>
>> >
>
>>
>
>> > --
>
>>
>
>> > Derek
>
>>
>
>> >
>
>>
>
>> > Sennikovsky, Mikhail wrote:
>
>>
>
>> > > Hi Derek,
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > Please see my answers embedded below.
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > Mikhail
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > -----Original Message-----
>
>>
>
>> > > From: cdt-dev-bounces@xxxxxxxxxxx
[mailto:cdt-dev-bounces@xxxxxxxxxxx]
>
>>
>
>> >
>
>>
>
>> > > On Behalf Of Derek Morris
>
>>
>
>> > > Sent: Wednesday, October 18, 2006 3:20 PM
>
>>
>
>> > > To: CDT General developers
list.
>
>>
>
>> > > Subject: [cdt-dev] MBS (IManagedOptionValueHandler)
questions
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > Hi,
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > Note: I think you're going to hate this as I'm using
this extension in
>
>>
>
>> > a
>
>>
>
>> > > way
>
>>
>
>> > >
>
>>
>
>> > > that wasn't planned...
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > In the plugin.xml have added an additional field to
a compilers
>
>>
>
>> > > optionCategory,
>
>>
>
>> > >
>
>>
>
>> > > like this:
>
>>
>
>> > >
>
>>
>
>> > > <option
>
>>
>
>> > >
>
>>
>
>> > > name='Paste area'
>
>>
>
>> > >
>
>>
>
>> > >
category='compiler.exe.debug'
>
>>
>
>> > >
>
>>
>
>> > > id='paste'
>
>>
>
>> > >
>
>>
>
>> > > valueType='string'
>
>>
>
>> > >
>
>>
>
>> > >
valueHandler='OptionValueHandler'
>
>>
>
>> > >
>
>>
>
>> > >
valueHandlerExtraArgument="paste"
>
>>
>
>> > >
>
>>
>
>> > > ></option>
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > I am using the OptionValueHandler to allow a user to
paste tool
>
>>
>
>> > options
>
>>
>
>> > > into a
>
>>
>
>> > >
>
>>
>
>> > > field which is then parsed to set the tool options
in the properties
>
>>
>
>> > > GUI. This
>
>>
>
>> > >
>
>>
>
>> > > means I can copy and paste options between
configurations and
>
>>
>
>> > correctly
>
>>
>
>> > > set the
>
>>
>
>> > >
>
>>
>
>> > > properties GUI to match. This is working.
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > The first question is that I would like to add this
field to the main
>
>>
>
>> > > compiler
>
>>
>
>> > >
>
>>
>
>> > > page (under 'expert settings'), rather than one of
the sub-pages. Is
>
>>
>
>> > > there a way
>
>>
>
>> > >
>
>>
>
>> > > to do this?
>
>>
>
>> > >
>
>>
>
>> > > */[Mikhail] It is not possible to extend/contribute
to the main
>
>>
>
>> > compiler
>
>>
>
>> > > page currently./*
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > The second question is that after I have parsed the
options, I wish to
>
>>
>
>> >
>
>>
>
>> > > clear the
>
>>
>
>> > >
>
>>
>
>> > > entry field in the GUI. I am able to clear the value
using
>
>>
>
>> > >
>
>>
>
>> > > (option.setValue("")), but this is not
reflected in the GUI until I
>
>>
>
>> > > switch from
>
>>
>
>> > >
>
>>
>
>> > > the page and switch back again. Is there a way to
get the entry field
>
>>
>
>> > to be
>
>>
>
>> > > refreshed?
>
>>
>
>> > >
>
>>
>
>> > > */[Mikhail] The MBS functionality does not have the
change
>
>>
>
>> > notification
>
>>
>
>> > > mechanism currently. That is why MBS GUI has to
refresh contents of
>
>>
>
>> > each
>
>>
>
>> > > page to ensure that proper "live" values
are displayed. Currently the
>
>>
>
>> > > refresh is performed in the following situations:/*
>
>>
>
>> > >
>
>>
>
>> > > */1. /**/the page/tab becomes
visible/*
>
>>
>
>> > >
>
>>
>
>> > > */2. /**/the value of some UI
property of the page gets changed/*
>
>>
>
>> > >
>
>>
>
>> > > */ /*
>
>>
>
>> > >
>
>>
>
>> > > */If you need some more flexible mechanism of UI
contents update we
>
>>
>
>> > > might consider changing/enhancing the current MBS UI
refresh
>
>>
>
>> > mechanism./*
>
>>
>
>> > > */ /*
>
>>
>
>> > >
>
>>
>
>> > > */Regards,/*
>
>>
>
>> > >
>
>>
>
>> > > */Mikhail/*
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > TIA
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > > --
>
>>
>
>> > >
>
>>
>
>> > > Derek
>
>>
>
>> > >
>
>>
>
>> > > _______________________________________________
>
>>
>
>> > >
>
>>
>
>> > > cdt-dev mailing list
>
>>
>
>> > >
>
>>
>
>> > > cdt-dev@xxxxxxxxxxx
>
>>
>
>> > >
>
>>
>
>> > > https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> > >
>
>>
>
>> >
------------------------------------------------------------------------
>
>>
>
>> > > _______________________________________________
>
>>
>
>> > > cdt-dev mailing list
>
>>
>
>> > > cdt-dev@xxxxxxxxxxx
>
>>
>
>> > > https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>>
>
>> >
>
>>
>
>> > _______________________________________________
>
>>
>
>> > cdt-dev mailing list
>
>>
>
>> > cdt-dev@xxxxxxxxxxx
>
>>
>
>> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>>
>
>> > _______________________________________________
>
>>
>
>> > cdt-dev mailing list
>
>>
>
>> > cdt-dev@xxxxxxxxxxx
>
>>
>
>> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>>
>
>> >
>
>>
>
>> _______________________________________________
>
>>
>
>> cdt-dev mailing list
>
>>
>
>> cdt-dev@xxxxxxxxxxx
>
>>
>
>> https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>>
>
>>
>
>>
------------------------------------------------------------------------
>
>>
>
>> _______________________________________________
>
>> cdt-dev mailing list
>
>> cdt-dev@xxxxxxxxxxx
>
>> https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>
>
> _______________________________________________
>
> cdt-dev mailing list
>
> cdt-dev@xxxxxxxxxxx
>
> https://dev.eclipse.org/mailman/listinfo/cdt-dev
>
>
>
------------------------------------------------------------------------
>
> _______________________________________________
> cdt-dev mailing list
> cdt-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-dev
_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev