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" }); }
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; } }
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(); }