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!

-- 
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
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to