public void UnlockElementLockGroup(TimelineElement element)
        {
            if (this.elementLockGroups.ContainsKey(element))
            {
                LockGroup group = this.elementLockGroups[element];
                foreach (var groupedElement in group)
                {
                    this.elementLockGroups.Remove(groupedElement);
                }

                this.lockGroups.Remove(group);
                this.availableIds.Add(group.Id);
            }
        }
        public int LockElements(IEnumerable <TimelineElement> elements)
        {
            if (elements.Count() < 2)
            {
                return(-1);
            }

            LockGroup group = new LockGroup();

            group.Id = this.availableIds.Min();

            foreach (var timelineElement in elements)
            {
                if (this.elementLockGroups.ContainsKey(timelineElement))
                {
                    var elementGroup = this.elementLockGroups[timelineElement];

                    foreach (var element in elementGroup)
                    {
                        if (element != timelineElement)
                        {
                            this.elementLockGroups[element] = group;
                        }
                    }

                    group.UnionWith(elementGroup);
                    this.lockGroups.Remove(elementGroup);
                    this.availableIds.Add(elementGroup.Id);
                }
                else
                {
                    group.Add(timelineElement);
                }

                this.elementLockGroups[timelineElement] = group;
            }

            group.Id = this.availableIds.Min();
            this.lockGroups.Add(group);
            this.availableIds.Remove(group.Id);

            return(group.Id);
        }