void btnRemoveClick(SelectionDock sender) { if (sender.Index == 0) { maxRow = startingRow; maxOrder = 0; } else { int prevIdx = sender.Index; prevIdx--; SelectionDock prev = (from d in docks where d.Index == prevIdx select d).First(); maxRow = prev.MaxRow; maxOrder = prev.Index; } info = Info; if (info.Attachments.Length > 0) { int idx = sender.Index; idx -= 3; info.Attachments = ArrayHelper.RemoveAt <ParameterCollection>(idx, info.Attachments); } else { info.Attachments = new ParameterCollection[0]; } if (docks.Count > 0) { for (int i = sender.Index; i < docks.Count; i++) { docks[i].Destroy(); } int count = 0; count = docks.Count - sender.Index; docks.RemoveRange(sender.Index, count); sender.Destroy(); int idx = maxOrder++; idx -= 2; for (int i = idx; i < info.Attachments.Length; i++) { DisplayAttachment(info.Attachments[i]); } } ReAddEnding(); }
void DisplayObject(ParameterCollection obj, DockType type, string[] options, int order) { if (order > maxOrder) { maxOrder = order; } string[] assemblyPaths = null; switch (type) { case DockType.Attachment: assemblyPaths = FileSource.Attachments.Keys.ToArray(); break; case DockType.Cycle: assemblyPaths = FileSource.Cycles.Keys.ToArray(); break; case DockType.Emitter: assemblyPaths = FileSource.EmittionTypes.Keys.ToArray(); break; default: assemblyPaths = FileSource.RenderTypes.Keys.ToArray(); break; } if (obj == null) { obj = new ParameterCollection(); obj.ObjectType = assemblyPaths[0]; } string name = Enum.GetName(typeof(DockType), type); SelectionDock dock = new SelectionDock(obj, panel, maxRow, name, options, name, assemblyPaths); dock.Index = order; dock.OnSelectionChanged += new ComboBoxSelectionChangedEvent(cboSelectionChanged); dock.Create(); dock.EndCreate(); docks.Add(dock); maxRow = dock.MaxRow; maxOrder++; }
void cboSelectionChanged(SelectionDock sender) { int idx = 0; if (sender is AddableDock) { maxRow = sender.MaxRow; idx = sender.Index; idx -= 3; info.Attachments[idx] = sender.Object; } if (sender.Index == maxOrder) { ReAddEnding(); } else { info = Info; for (int i = sender.Index; i < docks.Count; i++) { docks[i].Destroy(); } int count = docks.Count; count -= sender.Index; docks.RemoveRange(sender.Index, count); int max = maxOrder; maxOrder = sender.Index; for (int i = sender.Index; i < max; i++) { if (i >= 0 && i < 3) { ParameterCollection obj = null; if (i == 0) { obj = info.EmittionType; } else if (i == 1) { obj = info.RenderType; } else if (i == 2) { obj = info.CycleType; } DisplayObject(obj, (DockType)i, options[i], i); } else { idx = i; idx -= 3; DisplayAttachment(info.Attachments[idx]); } } ReAddEnding(); } }