private void LoadThemes() { tsmiTheme.DropDownItems.Clear(); if (!Directory.Exists("themes")) { Directory.CreateDirectory("themes"); } string[] themeParents = Directory.GetDirectories("themes"); foreach (string themeParent in themeParents) { string ThemeName = Path.GetFileName(themeParent); try { string themeMetaFile = Path.Combine(themeParent, "theme.json"); if (File.Exists(themeMetaFile)) { ThemeDesc desc = JsonConvert.DeserializeObject <ThemeDesc>(File.ReadAllText(themeMetaFile)); if (!string.IsNullOrWhiteSpace(desc.name)) { ThemeName = desc.name; } } } catch { } ToolStripMenuItem itmTop = new ToolStripMenuItem(ThemeName); tsmiTheme.DropDownItems.Add(itmTop); string[] themeFiles = Directory.GetFiles(themeParent, "*.json", SearchOption.TopDirectoryOnly); foreach (string themeFile in themeFiles) { string ThemeFileName = Path.GetFileNameWithoutExtension(themeFile); if (ThemeFileName.ToLowerInvariant() == "theme") { continue; } string DisplayName = ThemeFileName; try { ThemeSubDesc desc = JsonConvert.DeserializeObject <ThemeSubDesc>(File.ReadAllText(themeFile)); if (!string.IsNullOrWhiteSpace(desc.name)) { DisplayName = desc.name; } } catch { } ToolStripItem itm = new ToolStripMenuItem(DisplayName, null, LoadTheme); itm.Tag = themeFile; itmTop.DropDownItems.Add(itm); } } }
private void LoadThemes() { tsmiTheme.DropDownItems.Clear(); ThemeMenuItems.Clear(); if (!Directory.Exists("themes")) { Directory.CreateDirectory("themes"); } IEnumerable <string> themeParents = Directory.EnumerateFiles("themes", "theme.json", SearchOption.AllDirectories) .OrderBy(dr => dr.Split(new char[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Skip(1).FirstOrDefault()) .ThenBy(dr => (dr.Split(new char[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Skip(2).FirstOrDefault()?.ToLowerInvariant() ?? string.Empty) == "default" ? 0 : 1) .ThenBy(dr => dr); themeParents = themeParents.Select(dr => Path.GetDirectoryName(dr)).Distinct().ToArray(); foreach (string themeParent in themeParents) { string[] PathMiddleParts = themeParent.Split(Path.DirectorySeparatorChar).Reverse().Skip(1).Reverse().Skip(1).ToArray(); ToolStripMenuItem parentMenuItem = tsmiTheme; for (int j = 0; j < PathMiddleParts.Length; j++) { string dir_key = string.Join(Path.DirectorySeparatorChar.ToString(), PathMiddleParts.Take(j + 1).ToArray()); if (!ThemeMenuItems.ContainsKey(dir_key)) { string nameFile = Path.Combine("themes", dir_key, "name.txt"); string icon_file = Path.Combine("themes", dir_key, "icon.png"); string name = File.Exists(nameFile) ? File.ReadAllText(nameFile).Trim() : null; if (string.IsNullOrWhiteSpace(name)) { name = PathMiddleParts.Skip(j).First(); } ThemeMenuItems[dir_key] = new ToolStripMenuItem(name); if (File.Exists(icon_file)) { ThemeMenuItems[dir_key].Image = Image.FromFile(icon_file); ThemeMenuItems[dir_key].ImageScaling = ToolStripItemImageScaling.None; } parentMenuItem.DropDownItems.Add(ThemeMenuItems[dir_key]); } parentMenuItem = ThemeMenuItems[dir_key]; } string ThemeName = Path.GetFileName(themeParent); try { string themeMetaFile = Path.Combine(themeParent, "theme.json"); if (File.Exists(themeMetaFile)) { ThemeDesc desc = JsonConvert.DeserializeObject <ThemeDesc>(File.ReadAllText(themeMetaFile)); if (!string.IsNullOrWhiteSpace(desc.name)) { ThemeName = desc.name; } } } catch { } ToolStripMenuItem itmTop = new ToolStripMenuItem(ThemeName); string themeIconFile = Path.Combine(themeParent, "icon.png"); if (File.Exists(themeIconFile)) { itmTop.Image = Image.FromFile(themeIconFile); itmTop.ImageScaling = ToolStripItemImageScaling.None; } parentMenuItem.DropDownItems.Add(itmTop); IEnumerable <string> themeFiles = Directory.EnumerateFiles(themeParent, "*.json", SearchOption.TopDirectoryOnly); foreach (string themeFile in themeFiles) { string ThemeFileName = Path.GetFileNameWithoutExtension(themeFile); if (ThemeFileName.ToLowerInvariant() == "theme") { continue; } string DisplayName = ThemeFileName; try { ThemeSubDesc desc = JsonConvert.DeserializeObject <ThemeSubDesc>(File.ReadAllText(themeFile)); if (!string.IsNullOrWhiteSpace(desc.name)) { DisplayName = desc.name; } } catch { } ToolStripItem itm = new ToolStripMenuItem(DisplayName, null, LoadTheme); itm.Tag = themeFile; itmTop.DropDownItems.Add(itm); } } }