private string renderLine(DasMenuItem Item, DasMenuConfig Config, DasMenuItem Selected)
            {
                string content = Config.getFormat();
                string indent  = getIndent(Item, Config);


                content = content.Replace(DasMenuConfig.FORMAT_INDENT, indent);
                if (indent.Length > 0)
                {
                    content = content.Replace(DasMenuConfig.FORMAT_INDENTSPACE, " ");
                }
                else
                {
                    content = content.Replace(DasMenuConfig.FORMAT_INDENTSPACE, "");
                }
                if (Item.Equals(Selected))
                {
                    content = content.Replace(DasMenuConfig.FORMAT_SELECTED, Config.getSelector());
                }
                else
                {
                    content = content.Replace(DasMenuConfig.FORMAT_SELECTED, "");
                }

                content = content.Replace(DasMenuConfig.FORMAT_LABEL, Item.getLabel());

                return(content);
            }
            public DasMenuItem createFromConfig(DasMenuConfig Config)
            {
                DasMenuRootItem RootItem = (new DasMenuItemFactory()).createRootItem();


                parseConfig(Config, RootItem);

                return(RootItem);
            }
            private void parseConfig(DasMenuConfig Config, DasMenuRootItem RootItem)
            {
                List <string> dataLines = Config.getMenuItems();

                for (int i_dataLines = 0; i_dataLines < dataLines.Count; i_dataLines++)
                {
                    string dataLine = dataLines[i_dataLines];
                    parseLine(dataLine, RootItem);
                }
            }
            private string getIndent(DasMenuItem Item, DasMenuConfig Config)
            {
                string indent = "";
                int    count  = Item.countParents();

                for (int i = 0; i < count; i++)
                {
                    indent += Config.getIndent();
                }

                return(indent);
            }
            public string getContent(DasMenuItem RootItem, DasMenuConfig Config, DasMenuItem Selected)
            {
                StringBuilder content = new StringBuilder();

                if (Config.getTitle().Length > 0)
                {
                    content.AppendLine(Config.getTitle());
                }
                content.Append(getContentChilds(RootItem, Config, Selected));

                return(content.ToString());
            }
            private StringBuilder getContentChilds(DasMenuItem RootItem, DasMenuConfig Config, DasMenuItem Selected)
            {
                List <DasMenuItem> Items = RootItem.getChilds();

                StringBuilder content = new StringBuilder();


                for (int i_Items = 0; i_Items < Items.Count; i_Items++)
                {
                    DasMenuItem Item = Items[i_Items];
                    content.AppendLine(renderLine(Item, Config, Selected));

                    if (Item.hasChilds())
                    {
                        content.Append(getContentChilds(Item, Config, Selected).ToString());
                    }
                }

                return(content);
            }
        private void run(string args)
        {
            DasMenuArgs MenuArgs = new DasMenuArgs(args, ARGS_SPLIT);
            DasMenuTextPanelRepository TextPanelRepository = new DasMenuTextPanelRepository(GridTerminalSystem);
            DasMenuFactory             MenuFactory         = new DasMenuFactory(GridTerminalSystem);
            IMyTextPanel TextPanel = TextPanelRepository.findLcd(MenuArgs.getLcdPattern());

            if (TextPanel != null)
            {
                string        SelectedItemUid = TextPanelRepository.readStateFromTextPanel(TextPanel);
                DasMenuConfig MenuConfig      = new DasMenuConfig(TextPanel.GetPrivateText());
                DasMenuItem   RootItem        = MenuFactory.createFromConfig(MenuConfig);
                DasMenuView   View            = new DasMenuView();
                DasMenuItem   CurrentItem     = getCurrentItem(MenuArgs, RootItem, SelectedItemUid);
                string        content         = View.getContent(RootItem, MenuConfig, CurrentItem);

                TextPanel.WritePublicText(content);
                Echo(content);
                TextPanelRepository.saveStateToTextPanel(TextPanel, CurrentItem.getUid());
            }
        }