[Gambas-user] Settings: how to get (unknown) Keys?
Benoît Minisini
gambas at ...1...
Sat Jul 5 17:41:06 CEST 2014
Le 05/07/2014 14:47, Benoît Minisini a écrit :
> Le 18/06/2014 15:08, wig a écrit :
>>
>> How the get the (unknown keys) from a Settings file?
>>
>>
>> Terminology of Keys and "Slot" for the group of keys in a settings file
>> taken from documentation;
>>
>> This gives the names of the slots:
>>
>>
>> Dim SettingsToImport As New Settings(User.Home &/
>> ".config/gambas3/gambas3.conf")
>>
>> Dim sKeySlot As String
>> Dim iSlotCounter As Integer
>>
>> For Each sKeySlot In SettingsToImport.Keys
>> Debug sKeySlot
>> Inc iSlotCounter
>> Next
>> Debug " - - - - " & iSlotCounter
>>
>>
>> Works fine, gives me all the slotnames, and the count of e.g.23:
>>
>>> Editor
>>> FColorChooser
>>> FConnectionEditor
>> ...
>>> gb.form.mdi/FShortcut
>>> gb.form.mdi/FToolbarConfig
>>> gb.form.mdi/Toolbars/main
>>> - - - - 23
>>
>> Next step; I want to have the keys themselves. But how? (assuming I do
>> not know the keynames)
>>
>>
>> Dim SettingsToImport As New Settings(User.Home &/
>> ".config/gambas3/gambas3.conf")
>>
>> Dim sKey As String
>> Dim iKeyCounter As Integer
>>
>> Dim hSettingsKeys As _Settings_Keys ' what I found in gb.settings
>> docum.
>>
>> For Each sKeySlot In SettingsToImport.Keys
>> Debug sKeySlot
>> Inc iSlotCounter
>>
>> hSettingsKeys = SettingsToImport.Keys[sKeySlot] ' docum says
>> hSettings.Keys [ Parent As String ]
>>
>> For Each sKeySlot In hSettingsKeys
>> Inc iKeyCounter
>> Debug iKeyCounter & ": " & sKey
>> Next
>>
>> Next
>>
>>
>>
>> Doesn't crash, doesn't freeze, but gives the output:
>>
>>> Editor
>>> 1: Font
>>> 2: KeywordsUseUpperCase
>>> KeywordsUseUpperCase
>>
>>
>> That's all, it stops.
>>
>> (I want to import a Settings file, not use it for my app itself; I know
>> how to save and use settings for my app).
>>
>> This in Gambas 3.4.1 on OpenSuse 13.1/KDE
>>
>>
>> WiG.
>>
>
> Well, I admit that the Settings interface is weird for that. :-/
>
> For the moment, you can't imbricate enumerations of the Keys property,
> unless you first put all keys in an intermediate string array.
>
> Something like that:
>
> Public Sub GetAllKeys(hSettings As Settings, Optional sParent As String,
> Optional aResult As String[]) As String[]
>
> Dim aKeys As New String[]
> Dim sKey As String
>
> For Each sKey In hSettings[sParent].Keys
> aKeys.Add(sKey)
> Next
>
> If Not aResult Then aResult = New String[]
>
> For Each sKey In aKeys
> aResult.Add(sKey)
> aResult.Insert(GetAllKeys(hSettings, sKey, aResult))
> Next
>
> Return aResult
>
> End
>
> Beware, I wrote that code without testing it!
>
I told rubbish... There are only two levels in the keys:
Settings.Keys return a pseudo-collection of settings slots (what is
between "[" and "]" in the settings file).
Settings.Keys[Key] return a pseudo-collection of real settings keys.
The bug is that enumerating Settings.Keys[Key] breaks the enumeration of
Settings.Keys.
I fixed that in revision #6365, and will delay the release of 3.5.4 to
backport the fix!
Regards,
--
Benoît Minisini
More information about the User
mailing list