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

------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Gambas-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to