Einstellungen als Dictionary

Tools, die Dateien nach dem Download entpacken gibt es ja wie Sand am Meer, aber ich brauche wieder was Eigenes. Als Download werde ich das ganze (noch) nicht anbieten, aber wenn es draußen ‚Junkies‘ gibt, die daran Interesse habe – einfach kurz melden …


AutoEntpacker

Das Tool ist mehr oder weniger eine grafische Oberfläche für Unrar und funktioniert so weit ganz gut. Hab‘ heute die letzten Features implementiert:

– Direkte Eingabe von Verzeichnissen ist nun möglich
– Zielverzeichnis kann mit angegeben werden
– Dateien können nun auch in den Papierkorb verschoben werden
– Einstellungen in XML ausgelagert (Passwortliste kann erweitert werden)
– Letztes gewähltes (Ziel-)Verzeichnis wird gespeichert und beim Start wieder geladen
– Log -> Scrollt automatisch mit
– Start -> Elemente werden deaktiviert, bis der Vorgang abgeschlossen ist.

Wie man an der Maske erkennen kann gibt’s es einige Checkboxen um Funktionen zu aktivieren bzw. deaktivieren. Ich habe mich Entschieden diese Laufzeiteinstellungen in einem Dictionary abzulegen. In Verbindung mit einer Enumeration kann man das recht schön verwenden. Ich habe das ganze hier mal exemplarisch zusammengestellt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System.Collections.Generic;
 
namespace Sample
{
    private enum enumRuntimeSettings
    {
        IncludeSubdirs,
        DeleteFiles,
        NoPassword,
        AllPasswords,
        AllAnswersYes,
        UseDestinationDirectory,
        UseTrash
    }
 
    public class TutorialSettings
    {
        Dictionary<enumRuntimeSettings, bool> _runtimeSettings = new Dictionary<enumRuntimeSettings, bool>();
 
        private TutorialSettings()
        {
            // default values
            _runtimeSettings.Add(enumRuntimeSettings.IncludeSubdirs, false);
            _runtimeSettings.Add(enumRuntimeSettings.DeleteFiles, false);
            _runtimeSettings.Add(enumRuntimeSettings.AllPasswords, false);
            _runtimeSettings.Add(enumRuntimeSettings.NoPassword, false);
            _runtimeSettings.Add(enumRuntimeSettings.AllAnswersYes, true);
            _runtimeSettings.Add(enumRuntimeSettings.UseDestinationDirectory, false);
            _runtimeSettings.Add(enumRuntimeSettings.UseTrash, false);
        }
 
        private void DoSomething()
        {
            if (_runtimeSettings[enumRuntimeSettings.AllAnswersYes])
            {
                // Don't ask
            }
 
            // ....
        }
 
        private void ChangeRuntimeSetting(enumRuntimeSettings pSetting)
        {
            // Switch current setting (true -> false; false -> true)
            _runtimeSettings[pSetting] = !_runtimeSettings[pSetting];
        }
 
        private void SetRuntimeSetting(enumRuntimeSettings pSetting, bool pValue)
        {
            // Set a value
            _runtimeSettings[pSetting] = pValue;
        }
    }
}

Auch beim AutoEntpacker habe ich wieder versucht das MVP Pattern umzusetzen (in einer einfachen Version). Sprich der oben gezeigt Code könnte so im Presenter stehen. Durch das Dictionary ist es auch recht einfach die Einstellungen an den View weiterzureichen:

1
2
3
4
foreach (KeyValuePair<enumSettings, bool> kvp in _runtimeSettings)
{
    _View.SetSetting(kvp.Key, kvp.Value);
}

Im View:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void SetSetting(enumSettings pSetting, bool pValue)
{
    switch (pSetting)
    {
        case enumSettings.IncludeSubdirs:
            cbIncludeSubfolders.Checked = pValue;
            break;
        case enumSettings.DeleteFiles:
            cbDeleteFilesAfterUnzip.Checked = pValue;
            break;
        case enumSettings.NoPassword:
            cbWithoutPassword.Checked = pValue;
            break;
        case enumSettings.AllPasswords:
            cbAllPasswords.Checked = pValue;
            break;
        case enumSettings.AllAnswersYes:
            cbAllAnswersYes.Checked = pValue;
            break;
        case enumSettings.UseDestinationDirectory:
            cbDestinationDirectory.Checked = pValue;
            break;
        case enumSettings.UseTrash:
            cbPapierkorb.Checked = pValue;
            break;
        default:
            break;
    }
}

(Anm. Im fertigen Code ist die Enumeration in einer gemeinsamen Klasse ausgelagert, daher kann der View auch die Enumeration nutzen)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert