private void ColourClicked(object sender, EventArgs e)
        {
            var visgroup = VisgroupPanel.SelectedVisgroup;

            if (visgroup == null)
            {
                return;
            }

            var vg = (Vg)visgroup.Tag;

            using (var cp = new ColorDialog {
                Color = vg.Colour
            })
            {
                if (cp.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                ColourPanel.BackColor = visgroup.Colour = vg.Colour = cp.Color;
                ColourPanel.ForeColor = vg.Colour.GetIdealForegroundColour();
                VisgroupPanel.UpdateVisgroupState(visgroup);
            }
        }
 private void Update(MapDocument document)
 {
     Task.Factory.StartNew(() =>
     {
         if (document == null)
         {
             this.InvokeLater(() => VisgroupPanel.Clear());
         }
         else
         {
             var tree = GetItemHierarchies(document);
             this.InvokeLater(() => VisgroupPanel.Update(tree));
         }
     });
 }
        private IEnumerable <IMapObject> GetVisgroupObjects(VisgroupItem item)
        {
            if (item?.Tag is Primitives.MapData.Visgroup v)
            {
                return(v.Objects);
            }
            if (item?.Tag is AutomaticVisgroup av)
            {
                return(av.Objects);
            }

            var children = VisgroupPanel.GetAllItems().Where(x => x.Parent == item).SelectMany(GetVisgroupObjects);

            return(new HashSet <IMapObject>(children));
        }
        private void GroupNameChanged(object sender, EventArgs e)
        {
            var visgroup = VisgroupPanel.SelectedVisgroup;

            if (visgroup == null)
            {
                return;
            }

            var vg = (Vg)visgroup.Tag;

            if (vg.Name == GroupName.Text)
            {
                return;
            }
            visgroup.Text = vg.Name = GroupName.Text;
            VisgroupPanel.UpdateVisgroupState(visgroup);
        }
 private void UpdateVisgroups()
 {
     VisgroupPanel.Update(GetVisgroupItemList());
 }