Ejemplo n.º 1
0
        static void AddMenuItem(List <ToolStripItem> menu_root, Type type, String name_override, Type as_type, EventHandler click_handler)
        {
            ToolStripMenuItem item_root = null;
            String            name      = (name_override == null)?type.FullName:name_override;
            XString           names     = new XString(name);
            XStringSeg        seg;
            int skip = (name_override == null) ? 1 : 0;

            for (seg = names.firstseg; seg != null; seg = seg.Next)
            {
                if ((String)seg == "+")
                {
                    XStringSeg begin = seg.Prior.Prior;
                    XStringSeg end   = seg.Next.Next;

                    XStringSeg newseg = new XStringSeg(seg.Prior + "." + seg.Next);
                    begin.Next   = newseg;
                    newseg.Prior = begin;
                    if (end != null)
                    {
                        end.Prior   = newseg;
                        newseg.Next = end;
                    }
                    seg.Prior.Next  = null;
                    seg.Next.Prior  = null;
                    seg.Prior.Prior = null;
                    seg.Next.Next   = null;
                    seg             = newseg;
                }
                if ((String)seg == ".")
                {
                    continue;
                }
                if (seg.Next != null)
                {
                    while (seg.Next != null && ((String)seg.Next != "." && (String)seg.Next != "+"))
                    {
                        XStringSeg begin = seg.Prior;
                        XStringSeg end   = seg.Next.Next;

                        XStringSeg newseg = new XStringSeg(seg + "           ".Substring(0, seg.Next.spaces) + seg.Next);
                        if (begin != null)
                        {
                            begin.Next = newseg;
                        }
                        else
                        {
                            names.firstseg = newseg;
                        }
                        newseg.Prior = begin;
                        if (end != null)
                        {
                            end.Prior   = newseg;
                            newseg.Next = end;
                        }
                        if (seg.Prior != null)
                        {
                            seg.Prior.Next  = null;
                            seg.Prior.Prior = null;
                        }
                        seg.Next.Prior = null;
                        seg.Next.Next  = null;
                        seg            = newseg;
                    }
                }
            }

            for (seg = names.firstseg; seg != null; seg = seg.Next)
            {
                if ((String)seg == ".")
                {
                }
                else
                {
                    if (skip > 0)
                    {
                        skip--;
                        continue;
                    }
                    if (item_root == null)
                    {
                        bool found = false;
                        foreach (ToolStripItem item in menu_root)
                        {
                            if (item.Text == (String)seg)
                            {
                                found     = true;
                                item_root = item as ToolStripMenuItem;
                                break;
                            }
                        }
                        if (!found)
                        {
                            if (seg.Next == null)
                            {
                                TypeMenuItem new_item;
                                menu_root.Add(new_item = new TypeMenuItem(type, as_type));
                                new_item.Text          = (String)seg;
                                new_item.Click        += click_handler;
                            }
                            else
                            {
                                menu_root.Add(item_root = new ToolStripMenuItem((String)seg));
                                item_root.DropDown      = new ToolStripDropDown();
                            }
                        }
                    }
                    else
                    {
                        bool found = false;
                        foreach (ToolStripItem item in item_root.DropDown.Items)
                        {
                            if (item.Text == (String)seg)
                            {
                                found     = true;
                                item_root = item as ToolStripMenuItem;
                                break;
                            }
                        }
                        if (!found)
                        {
                            if (seg.Next != null)
                            {
                                item_root.DropDown.Items.Add(item_root = new ToolStripMenuItem((String)seg));
                                item_root.DropDown = new ToolStripDropDown();
                            }
                            else
                            {
                                TypeMenuItem new_item;
                                InsertMenuItem(item_root.DropDown, new_item = new TypeMenuItem(type, as_type));
                                new_item.Text   = (String)seg;
                                new_item.Click += click_handler;
                            }
                        }
                    }
                }
            }
            //TypeMenuItem new_item = new TypeMenuItem( type, typeof( IReflectorButton ) );
        }
Ejemplo n.º 2
0
        void ParseCMake(XString xs)
        {
            bool line_start = true;
            int  skip_count = 0;

            foreach (XStringSeg seg in xs)
            {
                if (skip_count > 0)
                {
                    skip_count--;
                    continue;
                }

                if (((String)seg).Length == 0)
                {
                    // end of line
                    line_start = true;
                }

                if (line_start)
                {
                    if (String.Compare((String)seg, "CMAKE_MINIMUM_REQUIRED", true) == 0)
                    {
                    }
                    else if (String.Compare((String)seg, "PROJECT", true) == 0)
                    {
                    }
                    else if (String.Compare((String)seg, "SET", true) == 0)
                    {
                    }
                    else if (String.Compare((String)seg, "ADD_EXECTUABLE", true) == 0)
                    {
                    }
                    else if (String.Compare((String)seg, "ADD_LIBRARY", true) == 0)
                    {
                    }
                }

                if (String.Compare((String)seg, "$") == 0)
                {
                    StringBuilder var = new StringBuilder();
                    XStringSeg    tmp = seg;
                    // consume the next couple segments...
                    if (String.Compare((String)seg.Next, "{") == 0)
                    {
                        skip_count = 1;
                        tmp        = seg.Next.Next;
                        while (String.Compare((String)tmp, "}") != 0)
                        {
                            tmp.Expand(var);
                            tmp = tmp.Next;
                            skip_count++;
                        }
                        skip_count++;
                    }
                }


                line_start = false;
            }
        }