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 <bbr...@paddys-hill.net>
Paddys-Hill dot net


------------------------------------------------------------------------------
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to