[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