private void Throw(string text, ErrorType errorType, Screen menuType = Screen.MainMenu) { UserControlHost.Throw(text, GetMenuTypeString(menuType) + "設定に関する" + GetErrorTypeString(errorType), errorType); }
public void LoadFromFile(string path) { void ThrowError(string text, bool isInGroupMenu = false) { string menuName = isInGroupMenu ? "券種メニュー" : "メインメニュー"; UserControlHost.Throw(text, menuName + "設定に関するエラー", ErrorType.Error); } void ThrowWarning(string text, bool isInGroupMenu = false) { string menuName = isInGroupMenu ? "券種メニュー" : "メインメニュー"; UserControlHost.Throw(text, menuName + "設定に関する警告", ErrorType.Warning); } void ThrowInformation(string text, bool isInGroupMenu = false) { string menuName = isInGroupMenu ? "券種メニュー" : "メインメニュー"; UserControlHost.Throw(text, menuName + "設定に関する情報", ErrorType.Warning); } XDocument oneTouchMenuLayoutFile; try { oneTouchMenuLayoutFile = XDocument.Load(path); } catch { ThrowError("ファイル \"" + path + "\" の読込に失敗しました。"); return; } XElement oneTouchMenuLayout = oneTouchMenuLayoutFile.Element("OneTouchMenuLayout"); if (oneTouchMenuLayout == null) { ThrowError("ファイル \"" + IOPath.GetFileName(path) + "\" はワンタッチメニューレイアウトファイルではありません。\n" + "OneTouchMenuLayout タグが見つかりません。"); return; } List <OneTouchMenuGroup> groups = new List <OneTouchMenuGroup>(); foreach (XElement groupElement in oneTouchMenuLayout.Elements("Group")) { XDocument oneTouchMenuGroupFile; string groupPath = IOPath.Combine(IOPath.GetDirectoryName(path), (string)groupElement.Attribute("Source")); try { oneTouchMenuGroupFile = XDocument.Load(groupPath); } catch { ThrowWarning("ファイル \"" + groupPath + "\" の読込に失敗しました。"); continue; } XElement oneTouchMenuGroup = oneTouchMenuGroupFile.Element("OneTouchMenuGroup"); if (oneTouchMenuGroup == null) { ThrowWarning("ファイル \"" + IOPath.GetFileName(groupPath) + "\" はワンタッチメニューグループファイルではありません。\n" + "OneTouchMenuGroup タグが見つかりません。"); continue; } List <TicketButton> shortcuts = new List <TicketButton>(); XElement shortcutsElement = oneTouchMenuGroup.Element("Shortcuts"); if (shortcutsElement == null) { ThrowWarning("ワンタッチメニューグループファイル \"" + IOPath.GetFileName(groupPath) + "\" で Shortcuts タグが見つかりません。", true); } else { foreach (XElement shortcutElement in shortcutsElement.Elements("Shortcut")) { string ticketPluginClassName = (string)shortcutElement.Attribute("Type") ?? ""; ITicketPlugin ticketPlugin = UserControlHost.TicketPlugins.Find(p => p.GetType().FullName == TicketPluginsNamespace + ticketPluginClassName); if (ticketPluginClassName == "") { } else if (ticketPlugin == null) { ThrowWarning("券種 \"" + TicketPluginsNamespace + ticketPluginClassName + "\" が見つかりません。", true); } else { shortcuts.Add(new TicketButton() { TypeName = (string)shortcutElement.Attribute("Name") ?? "", TicketPlugin = ticketPlugin, }); } } while (shortcuts.Count < 9) { shortcuts.Add(new TicketButton() { TypeName = "", TicketPlugin = null, }); } } List <OneTouchMenuGroupPage> pages = new List <OneTouchMenuGroupPage>(); XElement pagesElement = oneTouchMenuGroup.Element("Pages"); if (pagesElement == null) { ThrowWarning("ワンタッチメニューグループファイル \"" + IOPath.GetFileName(groupPath) + "\" で Pages タグが見つかりません。", true); } else { foreach (XElement pageElement in pagesElement.Elements("Page")) { List <TicketButton> buttons = new List <TicketButton>(); foreach (XElement buttonElement in pageElement.Elements("Content")) { string ticketPluginClassName = (string)buttonElement.Attribute("Type") ?? ""; ITicketPlugin ticketPlugin = UserControlHost.TicketPlugins.Find(p => p.GetType().FullName == TicketPluginsNamespace + ticketPluginClassName); if (ticketPluginClassName == "") { } else if (ticketPlugin == null) { ThrowWarning("券種 \"" + TicketPluginsNamespace + ticketPluginClassName + "\" が見つかりません。", true); } else { buttons.Add(new TicketButton() { TypeName = (string)buttonElement.Attribute("Name") ?? "", TicketPlugin = ticketPlugin, Command = (string)buttonElement.Attribute("Command") ?? "", }); } } while (buttons.Count < 90) { buttons.Add(new TicketButton() { TypeName = "", TicketPlugin = null, }); } pages.Add(new OneTouchMenuGroupPage() { Name = (string)pageElement.Attribute("Name") ?? "", Buttons = buttons, }); } while (pages.Count < 10) { pages.Add(new OneTouchMenuGroupPage() { Name = "", Buttons = null, }); } } groups.Add(new OneTouchMenuGroup() { Header = (string)groupElement.Attribute("Header") ?? "", Shortcuts = shortcuts, Pages = pages, }); } while (groups.Count < 9) { groups.Add(new OneTouchMenuGroup() { Header = "", Shortcuts = null, Pages = null, }); } Groups = groups; }