private void NewTheme()
        {
            ErrorText = "";
            try
            {
                if (!GenericInputDialog.ShowInputDialog(Owner, "Filename for new theme", "New Theme (filename)", "MyTheme.xml", out var filename))
                {
                    throw new Exception("Aborted by user");
                }

                if (!filename.ToLower().EndsWith(".xml"))
                {
                    throw new Exception("Filename must end with xml");
                }
                if (Entries.Any(e => e.SourceFilename.ToLower() == filename.ToLower()))
                {
                    throw new Exception("Filename already exists");
                }

                var newEntry = new ThemeEditorEntry()
                {
                    OriginalSource = "",
                    SourceFilename = filename,
                    Name           = "New Theme",
                    Source         = "",
                };

                Entries.Add(newEntry);
                SelectedEntry = newEntry;
            }
            catch (Exception e)
            {
                ErrorText = e.ToString();
            }
        }
示例#2
0
        public ThemeEditorViewmodel(ThemeEditor owner)
        {
            Owner = owner;

            var dt = ThemeManager.Inst.Cache.GetDefault();

            foreach (var at in ThemeManager.Inst.Cache.GetAllAvailable())
            {
                var newEntry = new ThemeEditorEntry
                {
                    SourceFilename = at.SourceFilename,
                    Name           = at.Name,
                    Source         = at.Source,
                    OriginalSource = at.Source,
                    ParsedTheme    = at,
                    ParsedSet      = new AlephThemeSet(dt, at, new AlephTheme[0]),
                };
                Entries.Add(newEntry);
                if (at == ThemeManager.Inst.CurrentBaseTheme)
                {
                    _selectedEntry = newEntry;
                }
            }

            var def = new AlephThemeSet(dt, dt, new AlephTheme[0]);

            foreach (var prop in AlephTheme.THEME_PROPERTIES)
            {
                DefaultValues.Add(new ThemeEditorDV
                {
                    Key     = prop.Item1,
                    Default = dt.GetXmlStr(prop.Item1.ToLower()),
                    TypeStr = prop.Item2.ToString(),
                    Value   = SelectedEntry?.ParsedSet?.GetStrRepr(prop.Item1),
                    Changed = SelectedEntry?.ParsedSet?.GetStrRepr(prop.Item1) != def?.GetStrRepr(prop.Item1)
                });
            }
        }
        public ThemeEditorViewmodel(ThemeEditor owner)
        {
            Owner = owner;

            foreach (var at in ThemeManager.Inst.Cache.GetAllAvailable())
            {
                var newEntry = new ThemeEditorEntry()
                {
                    SourceFilename = at.SourceFilename,
                    Name           = at.Name,
                    Source         = at.Source,
                    OriginalSource = at.Source,
                    Parsed         = at,
                };
                Entries.Add(newEntry);
                if (at == ThemeManager.Inst.CurrentTheme)
                {
                    _selectedEntry = newEntry;
                }
            }

            var dprop = ThemeManager.Inst.Cache.GetDefaultParserProperties();
            var def   = ThemeManager.Inst.Cache.GetByFilename("default.xml", out _);

            foreach (var prop in AlephTheme.THEME_PROPERTIES)
            {
                DefaultValues.Add(new ThemeEditorDV()
                {
                    Key     = prop.Item1,
                    Default = dprop[prop.Item1.ToLower()],
                    TypeStr = prop.Item2.ToString(),
                    Value   = SelectedEntry?.Parsed?.GetStrRepr(prop.Item1),
                    Changed = SelectedEntry?.Parsed?.GetStrRepr(prop.Item1) != def?.GetStrRepr(prop.Item1)
                });
            }
        }