[Gambas-user] gb.settings: Detect if a slot exists
Bruce
bbruen at ...2308...
Thu Oct 31 02:12:08 CET 2013
On Tue, 2013-10-29 at 13:43 +0100, Tobias Boege wrote:
> On Tue, 29 Oct 2013, Bruce wrote:
> > I have a need to detect if a particular Slot exists in the .config
> > file for an application. Just the Slot not whether any value lines exist
> > under it.
> >
> > There doesn't seem to be a way to do this via gb.settings? I have tried
> > using
> >
> > If Settings.Keys["Filter"] then
> >
> > but this seems always to be true. Similarly
> >
> > If Settings["Filter"] then
> >
> > always seems to be false.
> >
> > So is there a way to find out if a Slot does exist?
> >
> > ---- more info -----
> > The problem is that the value lines depend on about 8 text boxes set or
> > cleared by the user. If one or more of the text boxes are empty then
> > that value line will not appear under the [Filter] slot. So I can't
> > detect the existence of the slot by detecting a particular value line.
> > In fact if they clear all the filter strings then that whole slot will
> > disappear.
> >
> > Thus I need to check if the slot exists, so then I could
> > If Settings.Exist["Filter"] then
> > GetFilterSettings
> > Else
> > SetDefaultFilter
> > Endif
> >
>
> Hmm. Settings["Filter"] will return Null if the slot does not exist. Note
> that the slot is also non-existent if you do assign Null like
>
> Settings["Filter"] = Null
>
> which means Settings[sKey] returning Null is a necessary and sufficient
> indicator that sKey is not a slot in the Settings.
>
> So, use
>
> If IsNull(Settings["Filter"]) Then
> ' Settings["Filter"] does not exist...
> Endif
That is what I thought too but it doesn't work.
If the .config is
[Filter]
filteractive=-1
then isNull(Settings["Filter"]) will always be true as Settings will
always return a null if the key is a slot not a value.
My problem is that if no Filter/things are set, when the settings are
saved then the entire slot disappears from the .config file.
>
> in case you want to do something when the "Filter" key does not exist.
>
> Regards,
> Tobi
>
I have figured out a workaround, but its messy and fragile. I create a
dummy boolean valueitem called "filtered". I set it true if any filters
are set and false if none are set. It is fragile because I do not know
at the time I close down the app how many filter things there are. So
each bit of code that creates or sets a filter item must manage a global
boolean value (and thus it is fragile because it involves each bit
checking on all other filter items....).
But at least that way I always will have a [Filter] slot with at least
one valueitem in it.
--
Bruce <bbruen at ...2308...>
Paddys-Hill dot net
More information about the User
mailing list