19.1.3.1 Beispiel 3 – Profil-Manager GB2

Mit Gambas 3 lassen sich Profile auf komfortable Art in einer Konfigurationsdatei verwalten, weil die Klasse Settings um die Eigenschaft Keys erweitert wurde. Um auch unter Gambas 2 mit Profilen arbeiten zu können, wurde diese Klasse für Gambas 2 als SettingsP umgeschrieben. Das Umschreiben war erfolgreich – bis auf den Umstand, dass in den Profilnamen keine Umlaute und kein ß verwendet werden dürfen. Die Klasse SettingsP benötigt die Klasse _Settings_Keys und das Modul Main. Alle drei Dateien werden Ihnen im Programm-Beispiel 3 zur Verfügung gestellt. Deshalb müssen Sie die folgenden drei Dateien in Ihr Gambas2-Projekt einbinden:

Klassen und Modul

Abbildung 19.1.3.1.1: Modul und Klassen für die Arbeit mit Profilen unter Gambas 2

Es wurde auch die Methode Settings.Clear(Sektion) genutzt, um bestehende Profile zu löschen.

MethodeBeschreibung
Settings.ClearDiese Methode löscht das Settings-Objekt und gibt den belegten Speicher frei.
Settings.Clear(Sektion)Diese Methode löscht nur die angegebene Sektion in der Konfigurationsdatei.

Tabelle: 19.1.3.1 Beschreibung von Methoden der Klasse Settings

Mit dem Programm Profil-Manager kann man


Profil-Manager Gambas 2

Abbildung 19.1.3.1.2: Profil-Manager – Gambas 2

Die Einträge zum Profilnamen, zum Server, zum User sowie dem Password sind notwendig, während die Angaben zum lokalen (Start-)Verzeichnis und zum Remote-Verzeichnis optional sind.

Da nicht jede Sektion in der Konfigurationsdatei einem Profil zugeordnet ist, werden den echten Profilen die beiden Zeichen P_ als Kennung vorangestellt. In der Sektion [LastProfil] befindet sich nur ein Schlüssel-Wert-Paar: LastProfilName=„Online-Buch“, in dem die Information zum zuletzt genutzten Profil steht, wie Sie dem Ausschnitt aus der verwendeten Konfigurationsdatei entnehmen können:

# 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"
...

Hier ist der vollständige Quellcode für das Programm Profil-Manager:

' 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 ' = NULL? 
 
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 ' sProfilName
 
  cmbProfilName.List = aProfilMatrix 
END ' LoadSettings() 
 
PRIVATE SUB SetProfil(sProfilName AS String)  
  SetProfilValues(sProfilName) 
  LoadSettings(sProfilName)  
  cmbProfilName.ReadOnly = FALSE 
END ' SetProfil 
 
PRIVATE SUB Reset() 
  cmbProfilName.Clear 
  cmbProfilName.ReadOnly = FALSE  
  txtFTPServerName.Clear 
  txtFTPUserName.Clear 
  txtFTPUserPassword.Clear 
  txtInitialDirLocal.Clear 
  txtInitialDirRemote.Clear  
  txtFTPUserPassword.Password = FALSE 
END ' Reset 
 
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 ' ProfilClear(..) 
 
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 ' GetProfilValues(..) 
 
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 ' SetProfilValues(..) 
 
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 ' Form_Close() 
 
PUBLIC SUB cmbProfilName_Click() 
  LoadSettings(cmbProfilName.Current.Text) 
END ' cmbProfilName_Click() 
 
PUBLIC SUB btnProfilClear_Click() 
  ProfilClear(cmbProfilName.Text) 
END ' ProfilClear_Click() 
 
PUBLIC SUB btnProfilCreate_Click() 
  IF Message.Question("Soll ein neues Profil angelegt werden?", "Ja", "Nein") = 1 THEN   
     Reset() 
  ELSE 
     RETURN 
  ENDIF 
END ' ProfilCreate 
 
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 ' KontoDaten? 
  ELSE 
     RETURN 
  ENDIF ' Question? 
END ' Profil speichern 
 
PUBLIC SUB btnManagerClose_Click() 
  FProfilManager.Close 
END ' btnManagerClose