With Gambas 3, profiles can be managed in a configuration file in a convenient way because the Settings class has been extended by the Keys property. In order to be able to work with profiles under Gambas 2, this class was rewritten for Gambas 2 as SettingsP. The rewrite was successful - except for the fact that no umlauts and no ß may be used in the profile names. The SettingsP class requires the _Settings_Keys class and the Main module. All three files are made available to you in programme example 3. Therefore, you need to include the following three files in your Gambas2 project:
Figure 19.1.3.1.1: Module and classes for working with profiles under Gambas 2.
The Settings.Clear(Section) method was also used to clear existing profiles.
Method | Description |
Settings.Clear() | This method deletes the Settings object and frees the occupied memory. |
Settings.Clear(Section) | This method clears only the specified section in the configuration file. |
Table: 19.1.3.1 Description of Methods of the Settings Class
With the Profile Manager programme you can
Figure 19.1.3.1.2: Profile Manager - Gambas 2
The entries for the profile name, the server, the user as well as the password are necessary, while the entries for the local (start) directory and the remote directory are optional.
Since not every section in the configuration file is assigned to a profile, the two characters P_ are prefixed to the real profiles as identifiers. There is only one key-value pair in the [LastProfile] section: LastProfilName=“Online book”, which contains the information about the last profile used, as you can see from the excerpt from the configuration file used:
# Profile für einen FTP-Client [LastProfil] LastProfilName="Online-Buch" [P_Online-Buch] FTPServerName="www.gambas-buch.de" FTPUserName="hatux" FTPUserPassword="vdo#bs12" FTPInitialDirLocal="Online-Buch" FTPInitialDirRemote="dokuwiki" [P_Gymnasium] FTPServerName="www.gymnasium.de" FTPUserName="w00xyz" FTPUserPassword="f1#skkk" FTPInitialDirLocal="Bild&Ton" FTPInitialDirRemote="Projekttage" ...
Here is the full source code for the Profile Manager programme:
' Gambas class file ---> Gambas 2 PUBLIC pSettings AS SettingsP PUBLIC aProfilMatrix AS NEW String[] PUBLIC SUB Form_Open() FProfilManager.Center FProfilManager.Border = 1 aProfilMatrix.Clear pSettings = NEW SettingsP(Application.Path &/ "Profils/profils.conf", "Profile für einen FTP-Client") cmbProfilName.SetFocus txtFTPUserPassword.Password = TRUE cmbProfilName.ReadOnly = TRUE IF pSettings["LastProfil/LastProfilName"] = NULL THEN Message.Info("Es existiert kein Profil für das Client-Programm!") ' optional cmbProfilName.ReadOnly = FALSE ELSE LoadSettings(pSettings["LastProfil/LastProfilName"]) ENDIF END ' Form_Open() PUBLIC SUB LoadSettings(OPTIONAL sProfilName AS String) DIM sSection AS String cmbProfilName.Clear() aProfilMatrix.Clear pSettings.Reload() FOR EACH sSection IN pSettings.Keys ' Profile (beginnen mit P_) auslesen und in Matrix speichern IF Left(sSection, 2) = "P_" THEN aProfilMatrix.Add(Mid(sSection, 3)) ENDIF NEXT IF sProfilName THEN aProfilMatrix.Remove(aProfilMatrix.Find(sProfilName)) ' Das Profil suchen und in der Matrix löschen aProfilMatrix.Add(sProfilName, 0) ' Das Profil an die 1. Stelle in der Matrix setzen GetProfilValues(sProfilName) ' Die Profil-Daten zum Profil anzeigen ELSE GetProfilValues(aProfilMatrix[0]) ENDIF cmbProfilName.List = aProfilMatrix END PRIVATE SUB SetProfil(sProfilName AS String) SetProfilValues(sProfilName) LoadSettings(sProfilName) cmbProfilName.ReadOnly = FALSE END PRIVATE SUB Reset() cmbProfilName.Clear() cmbProfilName.ReadOnly = FALSE txtFTPServerName.Clear() txtFTPUserName.Clear() txtFTPUserPassword.Clear() txtInitialDirLocal.Clear() txtInitialDirRemote.Clear() txtFTPUserPassword.Password = FALSE END PRIVATE SUB ProfilClear(sProfilName AS String) IF Message.Question("Soll das Profil " & sProfilname & " gelöscht werden?", "Ja", "Nein") = 1 THEN pSettings.Clear("P_" & sProfilName) pSettings.Save() ELSE RETURN ENDIF LoadSettings() END PUBLIC SUB GetProfilValues(sProfilName AS String) sProfilName = "P_" & sProfilName txtFTPServerName.Text = pSettings[sProfilName & "/FTPServerName"] txtFTPUserName.Text = pSettings[sProfilName & "/FTPUserName"] txtFTPUserPassword.Text = pSettings[sProfilName & "/FTPUserPassword"] txtInitialDirLocal.Text = pSettings[sProfilName & "/FTPInitialDirLocal"] txtInitialDirRemote.Text = pSettings[sProfilName & "/FTPInitialDirRemote"] END PUBLIC SUB SetProfilValues(sProfilName AS String) sProfilName = "P_" & sProfilName pSettings[sProfilName & "/FTPServerName"] = txtFTPServerName.Text pSettings[sProfilName & "/FTPUserName"] = txtFTPUserName.Text pSettings[sProfilName & "/FTPUserPassword"] = txtFTPUserPassword.Text pSettings[sProfilName & "/FTPInitialDirLocal"] = txtInitialDirLocal.Text pSettings[sProfilName & "/FTPInitialDirRemote"] = txtInitialDirRemote.Text pSettings.Save() END PUBLIC SUB Form_Close() pSettings["LastProfil/LastProfilName"] = cmbProfilName.Text ' Auf den Save-Befehl kann verzichtet werden. Er wird automatisch ausgeführt beim Schließen des Programms. pSettings.Save() END PUBLIC SUB cmbProfilName_Click() LoadSettings(cmbProfilName.Current.Text) END PUBLIC SUB btnProfilClear_Click() ProfilClear(cmbProfilName.Text) END PUBLIC SUB btnProfilCreate_Click() IF Message.Question("Soll ein neues Profil angelegt werden?", "Ja", "Nein") = 1 THEN Reset() ELSE RETURN ENDIF END PUBLIC SUB btnProfilSave_Click() IF Message.Question("Das neue oder geänderte Profil <br><b>" & cmbProfilName.Text & "</b><br>speichern?", "Ja", "Nein") = 1 THEN IF txtFTPServerName.Text <> "" AND txtFTPUserName.Text <> "" AND \ txtFTPUserPassword.Text <> "" AND cmbProfilName.Text <> "" THEN SetProfil(cmbProfilName.Text) cmbProfilName.ReadOnly = TRUE txtFTPUserPassword.Password = TRUE ELSE Message.Error("Die Profil-Daten sind nicht vollständig oder fehlerhaft!") RETURN ENDIF ELSE RETURN ENDIF END PUBLIC SUB btnManagerClose_Click() FProfilManager.Close() END