Exemple #1
0
        //-----------------------------------------------------------------------
        private void GenerateSnapList(KeyframeItem dragged)
        {
            snapLines.Clear();

            foreach (var timeline in TimelineItem.TimelineGroup)
            {
                foreach (KeyframeItem keyframe in timeline.Children)
                {
                    if (keyframe != dragged && !keyframe.IsSelected)
                    {
                        var time = keyframe.Time;
                        if (!snapLines.Contains(time))
                        {
                            snapLines.Add(time);
                        }
                        if (keyframe.Duration > 0)
                        {
                            time = keyframe.EndTime;
                            if (!snapLines.Contains(time))
                            {
                                snapLines.Add(time);
                            }
                        }
                    }
                }
            }

            snapLines.Sort();
        }
Exemple #2
0
 public DragAction(KeyframeItem item, double originalPos, double startOffset, int timelineIndex)
 {
     Item               = item;
     OriginalPosition   = originalPos;
     ActionStartOffset  = startOffset;
     StartTimelineIndex = timelineIndex;
 }
Exemple #3
0
        public void CreateChildren(KeyframeItem item, UndoRedoManager undoRedo)
        {
            foreach (var def in Children)
            {
                var      name      = def.Name;
                DataItem childItem = def.CreateData(undoRedo);

                item.Children.Add(childItem);
            }
        }
Exemple #4
0
        //-----------------------------------------------------------------------
        private double GetKeyframeWidth(KeyframeItem keyframe)
        {
            double pixelsASecond = ActualWidth / TimelineItem.TimelineRange;

            if (keyframe.Duration > 0f)
            {
                return(keyframe.Duration * pixelsASecond);
            }

            var preview = keyframe.GetImagePreview();

            if (preview != null)
            {
                return(ActualHeight - 20);
            }
            else
            {
                return(10);
            }
        }
Exemple #5
0
        public override DataItem CreateData(UndoRedoManager undoRedo)
        {
            var item = new KeyframeItem(this, undoRedo);

            foreach (var att in Attributes)
            {
                var attItem = att.CreateData(undoRedo);
                item.Attributes.Add(attItem);
            }

            CreateChildren(item, undoRedo);

            foreach (var child in item.Attributes)
            {
                child.UpdateVisibleIfBinding();
            }
            foreach (var child in item.Children)
            {
                child.UpdateVisibleIfBinding();
            }

            return(item);
        }
Exemple #6
0
        public override DataItem LoadData(XElement element, UndoRedoManager undoRedo)
        {
            var item = new KeyframeItem(this, undoRedo);

            if (Collapse)
            {
                var split = element.Value.Split(new string[] { Seperator }, StringSplitOptions.None);

                if (split.Length == Children.Count)
                {
                    for (int i = 0; i < split.Length; i++)
                    {
                        var      data      = split[i];
                        var      def       = Children[i] as PrimitiveDataDefinition;
                        DataItem childItem = def.LoadFromString(data, undoRedo);
                        item.Children.Add(childItem);
                    }
                }
                else
                {
                    foreach (var def in Children)
                    {
                        var child = def.CreateData(undoRedo);
                        item.Children.Add(child);
                    }
                }
            }
            else
            {
                var commentTexts = Children.Where(e => e is CommentDefinition).Select(e => (e as CommentDefinition).Text);

                var createdChildren = new List <DataItem>();

                foreach (var def in Children)
                {
                    var name = def.Name;

                    var els = element.Elements(name);

                    if (els.Count() > 0)
                    {
                        var prev = els.First().PreviousNode as XComment;
                        if (prev != null)
                        {
                            var comment = new CommentDefinition().LoadData(prev, undoRedo);
                            if (!commentTexts.Contains(comment.TextValue))
                            {
                                item.Children.Add(comment);
                            }
                        }

                        if (def is CollectionDefinition)
                        {
                            CollectionItem childItem = (CollectionItem)def.LoadData(els.First(), undoRedo);
                            if (childItem.Children.Count == 0)
                            {
                                var dummyEl = new XElement(els.First().Name);
                                foreach (var el in els)
                                {
                                    dummyEl.Add(el);
                                }

                                childItem = (CollectionItem)def.LoadData(dummyEl, undoRedo);
                            }

                            item.Children.Add(childItem);
                        }
                        else
                        {
                            DataItem childItem = def.LoadData(els.First(), undoRedo);
                            item.Children.Add(childItem);
                        }
                    }
                    else
                    {
                        DataItem childItem = def.CreateData(undoRedo);
                        item.Children.Add(childItem);
                    }
                }

                if (element.LastNode is XComment)
                {
                    var comment = new CommentDefinition().LoadData(element.LastNode as XComment, undoRedo);
                    if (!commentTexts.Contains(comment.TextValue))
                    {
                        item.Children.Add(comment);
                    }
                }
            }

            foreach (var att in Attributes)
            {
                var      el      = element.Attribute(att.Name);
                DataItem attItem = null;

                if (el != null)
                {
                    attItem = att.LoadData(new XElement(el.Name, el.Value.ToString()), undoRedo);
                }
                else
                {
                    attItem = att.CreateData(undoRedo);
                }
                item.Attributes.Add(attItem);
            }

            item.Children.OrderBy(e => Children.IndexOf(e.Definition));

            foreach (var child in item.Attributes)
            {
                child.UpdateVisibleIfBinding();
            }
            foreach (var child in item.Children)
            {
                child.UpdateVisibleIfBinding();
            }

            return(item);
        }
Exemple #7
0
        public override void DoSaveData(XElement parent, DataItem item)
        {
            KeyframeItem si = item as KeyframeItem;

            if (Collapse)
            {
                var name = Name;
                var data = "";

                foreach (var child in si.Children)
                {
                    var primDef = child.Definition as PrimitiveDataDefinition;

                    data += primDef.WriteToString(child) + Seperator;
                }

                data = data.Remove(data.Length - Seperator.Length, Seperator.Length);

                var el = new XElement(name, data);
                parent.Add(el);

                foreach (var att in si.Attributes)
                {
                    var primDef         = att.Definition as PrimitiveDataDefinition;
                    var asString        = primDef.WriteToString(att);
                    var defaultAsString = primDef.DefaultValueString();

                    if (att.Name == "Name" || !primDef.SkipIfDefault || asString != defaultAsString)
                    {
                        el.SetAttributeValue(att.Name, asString);
                    }
                }
            }
            else
            {
                var name = Name;

                var el = new XElement(name);
                parent.Add(el);

                foreach (var att in si.Attributes)
                {
                    var primDef         = att.Definition as PrimitiveDataDefinition;
                    var asString        = primDef.WriteToString(att);
                    var defaultAsString = primDef.DefaultValueString();

                    if (att.Name == "Name" || !primDef.SkipIfDefault || asString != defaultAsString)
                    {
                        el.SetAttributeValue(att.Name, asString);
                    }
                }

                foreach (var child in si.Children)
                {
                    var childDef = child.Definition;
                    if (!Children.Contains(childDef))
                    {
                        throw new Exception("A child has a definition that we dont have! Something broke!");
                    }

                    child.Definition.SaveData(el, child);
                }
            }
        }