Esempio n. 1
0
        private void RemoveHandlers(AdvancedPart part)
        {
            part.DeleteRequested   -= Part_DeleteRequested;
            part.IsSelectedChanged -= Part_IsSelectedChanged;

            // is the selected part in the hierarchy being removed?
            if (SelectedPart == part)
            {
                SelectedPart = null;
            }
            else if (SelectedPart != null)
            {
                var junction = SelectedPart.Container;
                while (junction != null)
                {
                    // yep, one of the parent junctions of the SelectedPart is the one being removed
                    if (junction == part)
                    {
                        SelectedPart = null;
                        break;
                    }
                    junction = junction.Container;
                }
            }
        }
        private void AddPart(AdvancedPart part, int index)
        {
            // we're going to be internally consistent
            layoutParts.SuspendLayout();
            Control control;
            if (part is WinFormsAdvancedPartJunction)
                control = new AdvancedPartJunctionView((WinFormsAdvancedPartJunction)part);
            else
                control = new AdvancedPartNodeView((WinFormsAdvancedPartNode)part);

            control.Dock = DockStyle.Fill;
            layoutParts.RowStyles.Insert(index, new RowStyle(SizeType.AutoSize));

            // shift all controls after this point down one row
            // (the last row will have nothing in it, the row of index will have an existing control
            for (int i = layoutParts.RowStyles.Count - 2; i >= index; i--)
            {
                var move = layoutParts.GetControlFromPosition(0, i);
                if (move != null)
                    layoutParts.SetCellPosition(move, new TableLayoutPanelCellPosition(0, i + 1));
            }

            layoutParts.Controls.Add(control, 0, index);
            layoutParts.ResumeLayout();

            // update height outside SuspendLayout or it won't recalculate correctly
            //ScrollHeight += ControlHeight(control);
        }
Esempio n. 3
0
        private void Part_IsSelectedChanged(object sender, EventArgs e)
        {
            var part = (AdvancedPart)sender;

            if (part.IsSelected)
            {
                SelectedPart = part;
            }
            else if (part == SelectedPart)
            {
                SelectedPart = null;
            }
        }
Esempio n. 4
0
        protected virtual void Remove(AdvancedPart part)
        {
            if (part == null)
            {
                return;
            }
            RemoveHandlers(part);

            if (Part == part)
            {
                Part = null;
            }
            else
            {
                var container = part.Container;
                container.Parts.Remove(part);

                // remove the container if it's only got 1 item left
                if (container.Parts.Count == 1)
                {
                    RemoveHandlers(container);
                    var parentContainer = container.Container;
                    if (parentContainer == null)
                    {
                        container.Parts[0].Container = null;
                        Part = container.Parts[0];
                    }
                    else
                    {
                        var index = parentContainer.Parts.IndexOf(container);
                        parentContainer.Parts.Remove(container);

                        // if the parent container junction type is the same as what we're inserting, merge the parts
                        var toMerge = container.Parts[0];
                        if (toMerge is AdvancedPartJunction && ((AdvancedPartJunction)toMerge).Type == parentContainer.Type)
                        {
                            RemoveHandlers(toMerge);
                            foreach (var p in (AdvancedPartJunction)toMerge)
                            {
                                parentContainer.Add(p);
                            }
                        }
                        else
                        {
                            parentContainer.Insert(index, container.Parts[0]);
                        }
                    }
                }
            }
        }
Esempio n. 5
0
 private void AddHandlers(AdvancedPart part)
 {
     part.DeleteRequested   += Part_DeleteRequested;
     part.IsSelectedChanged += Part_IsSelectedChanged;
 }