Siempre es enriquecedor ver tus videos, así que muchas gracias por preparar este material y compartirlo.
Te paso algo de feedback.
Configuraciones: Si bien la clase Settings hace su trabajo bastante bien, esta adolece de algunos problemas, por ejemplo si una variable es cero o nula la borra del archivo de configuraciones que es de tipo .ini (bastante obsoleto ya) luego no permite el uso del operador punto para recuperar o alterar los parámetros. En su lugar sugiero que usar la clase Config que usa un archivo tipo JSON, mas moderno y que permite que se construyan formularios de edición de la configuración de forma sencilla.
Clase config
Código:
' Gambas class file
Create Static
Export
'' Ejemplo de variables usadas en EditorForm
Public EditorTheme As String '' Text editor theme
Public EditorWrap As Boolean '' Wrap text in editor
Public EditorSwap As Boolean '' Swap between image or web
Public EditorTextHeight As Integer
Public EditorLineNumber As Boolean
Public EditorIcon As Boolean
Public EditorPreview As Boolean
Public EditorLayout As Integer[]
Public EditorLearning As New Collection
Public Sub Load(sFile As String)
Dim cConfig As Collection
Dim sSymbol As String
Dim obj As Object = Me
Dim MyClass As Class = Object.Class(obj)
If Exist(sFile) Then
cConfig = JSON.FromString(File.Load(sFile))
For Each sSymbol In myClass.Symbols
If cConfig.Exist(sSymbol) Then
Object.SetProperty(obj, sSymbol, cConfig[sSymbol])
Endif
Next
Endif
End
Static Public Sub Save(sFile As String, Optional j As JSONCollection)
Dim jConfig As New JSONCollection
Dim obj As Object = Me
Dim MyClass As Class = Object.Class(obj)
Dim sSymbol As String
Dim Var As String
Dim Valor As Variant
If Not Exist(File.Dir(sFile)) Then
Shell "mkdir -p " & File.Dir(sFile) Wait
Endif
If j Then
jConfig = j.Copy()
For Each sSymbol In myClass.Symbols
If jConfig.Exist(sSymbol) Then
Object.SetProperty(obj, sSymbol, jConfig[sSymbol])
Endif
Next
Else
For Each Var In myClass.Symbols
If (MyClass[var].kind = Class.Variable) Or (MyClass[var].kind = Class.Property) Then
valor = Object.GetProperty(obj, var)
jConfig.Add(Valor, var)
End If
Next
Endif
File.Save(sFile, JSON.Encode2(jConfig))
End
Luego en el formulario principal hay que iniciar la clase y cargar la configuración del archivo.
Código:
'' Startup the config environment data
Config.AppDir = User.Home &/ ".config/rad"
Config.Depot = Config.AppDir &/ "config.json"
'' Uploading and setting up the configuration
Config.Load(Config.Depot)
Luego cada vez que algún parámetro es alterado en cualquier parte
Código:
Config.Save(Config.Depot) ' Config.Depot es la ruta al arcuvo cargada al inicio, reconozco que esto podría mejorarse y ser un parametro opcional que este definido al pincipio y luego no sea necesario especificarlo cada vez. o tal vez que la misma clase guarde cada cambio instantáneamente.
Para recuperar el valor de una variable solo basta con poner, en cualquier parte del programa:
Código:
Config.NombreDeLaVariable
'Por ejemplo
Config.EditorIcon
' Esto devolverá un booleano
' para alterar el valor de la variable
Config.EditorIcon = False
' No se por que no hice que se guarde inmediatamente. revisare el tema