コード例 #1
0
ファイル: GLDataControl.cs プロジェクト: rainrcn/GLGUI
        public GLDataControl(GLGui gui) : base(gui)
        {
            Render += (s, d) => UpdateData();

            horizontal = Add(new GLFlowLayout(gui)
            {
                FlowDirection = GLFlowDirection.LeftToRight, AutoSize = true
            });
            left = horizontal.Add(new GLFlowLayout(gui)
            {
                FlowDirection = GLFlowDirection.TopDown, AutoSize = true
            });
            var skin = left.Skin;

            skin.Space = 0;
            left.Skin  = skin;
            right      = horizontal.Add(new GLFlowLayout(gui)
            {
                FlowDirection = GLFlowDirection.TopDown, AutoSize = true
            });
            right.Skin = skin;

            labelSkin     = gui.Skin.LabelEnabled;
            linkLabelSkin = gui.Skin.LinkLabelEnabled;

            // defaults
            Hidden.Add(typeof(IEnumerable), new string[] {
                "_items", "_size", "_version", "_syncRoot",
                "m_buckets", "m_slots", "m_count", "m_lastIndex", "m_freeList", "m_comparer",
                "m_version", "m_siInfo", "m_collection", "m_boundedCapacity", "m_freeNodes",
                "m_occupiedNodes", "m_isDisposed", "m_ConsumersCancellationTokenSource",
                "m_ProducersCancellationTokenSource", "m_currentAdders",
                "buckets", "entries", "count", "version", "freeList", "freeCount", "comparer", "keys", "values",
                "IsFixedSize", "IsReadOnly", "IsSynchronized", "SyncRoot"
            });
            Hidden.Add(typeof(Array), new string[] { "LongLength", "Rank", "Count" });
            Hidden.Add(typeof(KeyValuePair <,>), new string[] { "key", "value" });
            Hidden.Add(typeof(Dictionary <,>), new string[] { "Keys", "Values" });
        }
コード例 #2
0
        private void AddContent()
        {
            // ###above###
            addAbove = AddTaskAddButton(this, task => InsertAbove(task), false);

            // title
            title = Add(new GLLabel(Gui)
            {
                AutoSize = true, Text = Task.TaskType.Name
            });
            minInnerWidth = title.Width;
            var titleSkin = title.SkinEnabled;

            titleSkin.TextAlign = GLFontAlignment.Centre;
            titleSkin.Color     = Color.FromArgb(255, 255, 255);
            title.SkinEnabled   = titleSkin;
            title.AutoSize      = false;

            // description
            description = Add(new GLLabel(Gui)
            {
                Text      = Task.Description ?? "",
                AutoSize  = true,
                Multiline = true,
                WordWrap  = true,
                SizeMin   = new Size(0, 0)
            });
            var descriptionSkin = description.SkinEnabled;

            descriptionSkin.Color   = Color.FromArgb(255, 192, 96);
            description.SkinEnabled = descriptionSkin;

            // ###parameters###
            parameterTitles = new GLLabel[Task.TaskType.Parameters.Count];
            parameterValues = new GLControl[Task.TaskType.Parameters.Count];
            for (int i = 0; i < Task.TaskType.Parameters.Count; i++)
            {
                int localIndex = i;
                var parameter  = Task.TaskType.Parameters[i];
                parameterTitles[i] = Add(new GLLabel(Gui)
                {
                    Text = parameter.ShortType + " " + parameter.Name + ":", AutoSize = true
                });
                minInnerWidth = Math.Max(minInnerWidth, parameterTitles[i].Width);
                if (parameter.IsEnum)
                {
                    var parameterValue = Add(new GLButton(Gui)
                    {
                        AutoSize = true,
                        Text     = Task.ParameterValues[i] ?? "",
                    });
                    parameterValue.Click += (s, e) =>
                    {
                        var t = Editor.TreeContainer.InnerSize;
                        var p = Editor.TreeContainer.ScrollPosition;
                        Editor.TreeContainer.Add(new PBTEnumForm(Gui, this, localIndex, parameterValue)
                        {
                            Location = new Point(p.X + t.Width / 2 - 200, p.Y + t.Height / 2 - 150)
                        });
                    };
                    parameterValues[i] = parameterValue;
                }
                else
                {
                    var parameterValue = Add(new GLTextBox(Gui)
                    {
                        AutoSize  = true,
                        Text      = Task.ParameterValues[i] ?? "",
                        Multiline = true,
                        WordWrap  = false,
                    });
                    parameterValue.SkinActive   = codeBoxActive;
                    parameterValue.SkinDisabled = codeBoxDisabled;
                    parameterValue.SkinEnabled  = codeBoxEnabled;
                    parameterValue.SkinHover    = codeBoxHover;
                    parameterValue.Changed     += (s, e) => Task.ParameterValues[localIndex] = parameterValue.Text;
                    parameterValues[i]          = parameterValue;
                }
            }
            for (int i = 0; i < Task.TaskType.Parameters.Count; i++)
            {
                parameterValues[i].SizeMin = new Size(minInnerWidth, 14);
            }

            if (Task.TaskType.Name == "Reference")
            {
                var loadTask = Add(new GLButton(Gui)
                {
                    Text = "Load"
                });
                loadTask.Click += (s, e) => Editor.ShowPBT(Task.ParameterValues[0]);
            }

            // ###below###
            addBelowFlow = Add(new GLFlowLayout(Gui)
            {
                FlowDirection = GLFlowDirection.LeftToRight, AutoSize = true
            });
            var addButtonsFlowSkin = addBelowFlow.Skin;

            addButtonsFlowSkin.Padding = new GLPadding(0);
            addBelowFlow.Skin          = addButtonsFlowSkin;

            switch (Task.TaskType.Category.Name)
            {
            case "LeafTasks":
                break;

            case "Decorators":
                if (Task.Subtasks.Count == 0)
                {
                    addBelow.Add(AddTaskAddButton(addBelowFlow, task => InsertBelow(0, task)));
                }
                break;

            case "ParentTasks":
                for (int i = 0; i <= Task.Subtasks.Count; i++)
                {
                    int li = i;
                    addBelow.Add(AddTaskAddButton(addBelowFlow, task => InsertBelow(li, task)));
                }
                break;

            default:
                MessageBox.Show("Unknown Task Category: " + Task.TaskType.Category.Name, "Error during Task loading", MessageBoxButtons.OK, MessageBoxIcon.Error);
                break;
            }
        }
コード例 #3
0
        private void OnLoad(object sender, EventArgs e)
        {
            MakeCurrent();
            MouseUp  += (s, ev) => { try { MakeCurrent(); } catch (GraphicsContextException) { } }; // workaround for correct context switching (mouseclicks might change the gui directly)
            KeyDown  += (s, ev) => { try { MakeCurrent(); } catch (GraphicsContextException) { } };
            KeyPress += (s, ev) => { try { MakeCurrent(); } catch (GraphicsContextException) { } };
            glGui     = new GLGui(this);

            var verticalSplitter = glGui.Add(new GLSplitLayout(glGui)
            {
                Size             = ClientSize,
                SplitterPosition = 0.85f,
                Orientation      = GLSplitterOrientation.Vertical,
                Anchor           = GLAnchorStyles.All
            });

            TreeContainer = verticalSplitter.Add(new PBTTreeContainer(glGui));

            var sidebarFlow = verticalSplitter.Add(new GLFlowLayout(glGui)
            {
                FlowDirection = GLFlowDirection.TopDown
            });
            var sidebarSkin = sidebarFlow.Skin;

            sidebarSkin.BackgroundColor = glGui.Skin.FormActive.BackgroundColor;
            sidebarFlow.Skin            = sidebarSkin;

            reload = sidebarFlow.Add(new GLButton(glGui)
            {
                Text = "Reload", Enabled = false
            });
            reload.Click += (s, ev) => ShowPBT(currentPBTName);
            save          = sidebarFlow.Add(new GLButton(glGui)
            {
                Text = "Save", Enabled = false
            });
            save.Click += (s, ev) => SavePBT();
            create      = sidebarFlow.Add(new GLButton(glGui)
            {
                Text = "New"
            });
            create.Click += (s, ev) => CreatePBT();

            var fileListTitle = sidebarFlow.Add(new GLLabel(glGui)
            {
                Text = "Load:", AutoSize = true
            });

            var horizontalSplitter = sidebarFlow.Add(new GLSplitLayout(glGui)
            {
                Orientation      = GLSplitterOrientation.Horizontal,
                SplitterPosition = 0.8f,
                Size             = new Size(sidebarFlow.InnerWidth, sidebarFlow.InnerHeight - fileListTitle.Outer.Bottom),
                Anchor           = GLAnchorStyles.All
            });

            var fileListScrollable = horizontalSplitter.Add(new GLScrollableControl(glGui));

            fileList = fileListScrollable.Add(new GLFlowLayout(glGui)
            {
                FlowDirection = GLFlowDirection.TopDown, AutoSize = true
            });
            UpdatePBTFileList();

            Overview = horizontalSplitter.Add(new PBTOverviewControl(glGui, TreeContainer));

            Resize += (s, ev) => { MakeCurrent(); GL.Viewport(ClientSize); };
            Paint  += OnRender;
            //Application.Idle += (s, ev) => Invalidate();
            Timer t = new Timer();

            t.Interval = 16;
            t.Tick    += (s, ev) => Invalidate();
            t.Start();
        }