Ustawienia aplikacji zapiszemy na dysku w postaci pliku xml. Taki sposób umożliwi nam łatwy dostęp do edycji konfiguracji w dowolnym edytorze tekstu. Jeżeli po uruchomieniu aplikacji plik z ustawieniami nie zostanie znaleziony to zostanie utworzony z domyślnymi wartościami i zapisany w głównym katalogu aplikacji.
Skrócona wersja pliku xml wygląda następująco:
<?xml version="1.0" encoding="UTF-8"?> <Settings> <Item name="Volume">100</Item> </Settings>
Nazwa pozycji jest dowolna i zależy tylko od nas. Musimy jednak pamiętać, że to właśnie po niej będziemy odwoływać się do danej pozycji.
Przejdźmy teraz do omówienia klasy odpowiedzialnej za zapis i odczyt ustawień.
unit TRPSettings; TTRPSettings = class sealed (TObject) private // class variables and methods belongs to the class, not to the instance class var SettingsHashmap: TStringList; // if its true, the settings should be saved before exit class var IsUpdated: Boolean; class procedure CreateDefaultSettings; class function GetSettingsFilePath(): string; class procedure Initialize(); class procedure Finalize(); public // static methods class function GetValue(const Item: string; const DefaultValue: string = EMPTY_STR; const AddIfNoExists: boolean = false): string; class function GetValue(const Item: string; const DefaultValue: integer = EMPTY_INT; const AddIfNoExists: boolean = false): integer; class function SetValue(const Item: string; const Value: string): ErrorId; class function SetValue(const Item: string; const Value: integer): ErrorId; class procedure SaveSettings; class procedure LoadSettings; end; initialization TTRPSettings.Initialize(); finalization TTRPSettings.Finalize();
Wszystkie składowe klasy są statyczne więc nie tworzymy instancji tej klasy. Sekcja Initialization jest uruchamiana jeden raz przy tworzeniu Unitu. Nadaje się więc idealnie do podpięcia metody, która załaduje ustawienia aplikacji. Finalization umożliwi natomiast zapis konfiguracji i zwolnienie wcześniej utworzonych zasobów.
Po wczytaniu konfiguracji wszystkie pozycje dodajemy do listy SettingsHashmap. Aby zaktualizować lub dodać nową pozycję używamy metody SetValue. Do pobrania używamy GetValue, gdzie jako drugi parametr możemy podać domyślną wartość, która zostanie zwrócona jeżeli dana pozycja nie zostanie znaleziona. Aby wyeliminować sytuację zapisu ustawień, które nie zostały zmienione stosujemy flagę IsUpdated. Po wywołaniu metody SetValue ustawiamy jej wartość na True co pozwala później określić, czy konfiguracja została zmieniona i powinna zostać zapisana do pliku.
W celu dodania lub pobrania pozycji z konfiguracji odwołujemy się bezpośrednio do klasy TTRPSettings
// dodanie lub zmiana warości TTRPSettings.SetValue('Volume', sbVolume.Position); // pobranie warości sbVolume.Position := TTRPSettings.GetValue('Volume', 100);
Aktualizacja
W ramach dalszych prac nad aplikacją została dodana możliwość grupowania ustawień i zapis ich pod daną nazwą. Służą do tego metody SetGroupValue i GetGroupValue dostępne w TTRPSettings.
Tak jak zwykle cały kod aplikacji dostępny jest na GitHubie. Jeżeli interesują Cię zmiany dotyczące tego wpisu to zapraszam tu.
- Tiny Radio Player #01 – Wprowadzenie
- Tiny Radio Player #02 – Instalacja komponentów
- Tiny Radio Player #03 – Roboczy interfejs aplikacji
- Tiny Radio Player #04 – Budujemy silnik
- Jesteś tu => Tiny Radio Player #05 – Zapis ustawień aplikacji
- Tiny Radio Player #06 – Zmiana języka aplikacji
- Tiny Radio Player #07 – Logowanie błędów
- Tiny Radio Player #08 – Baza danych
- Tiny Radio Player #09 – Zarządzanie bazą SQLite
- Tiny Radio Player #10 – Lista stacji radiowych, konfiguracja VirtualTreeView