Beispiel #1
0
        public IEnumerator <object> Task()
        {
            var g = Timeline.Instance.Globals;

            while (true)
            {
                var rq = g.Get <DragKeyframesRequest>();
                if (rq != null)
                {
                    Document.Current.History.DoTransaction(() => {
                        Operations.DragKeyframes.Perform(rq.Offset, rq.RemoveOriginals);
                        Operations.ShiftGridSelection.Perform(rq.Offset);
                        if (rq.Offset.Y != 0)
                        {
                            var selected = Document.Current.SelectedRows().Where(r => r.Selected).Select(r => r.Index).ToDictionary(x => x);
                            ClearRowSelection.Perform();
                            foreach (var row in Document.Current.Rows)
                            {
                                if (selected.ContainsKey(row.Index - rq.Offset.Y))
                                {
                                    SelectRow.Perform(row, select: true);
                                }
                            }
                        }
                        g.Remove <DragKeyframesRequest>();
                    });
                }
                yield return(null);
            }
        }
Beispiel #2
0
        protected void Populate()
        {
            _formControls.Clear();
            _container.Children.Clear();

            if (Form != null)
            {
                foreach (var field in Form.FormItems)
                {
                    switch (field.FieldType)
                    {
                    case FormField.FieldType_MultilineText: AddChild(new TextAreaRow(this, field)); break;

                    case "Bool": AddChild(new CheckBoxRow(this, field)); break;

                    case FormField.FieldType_CheckBox:
                        var cbRow = new CheckBoxRow(this, field);
                        cbRow.OptionSelected += Picker_OptionSelected;
                        AddChild(cbRow);
                        break;

                    case FormField.FeildType_EntityHeaderPicker:
                        var ehPicker = new EntityHeaderPicker(this, field);
                        ehPicker.PickerTapped += EhPicker_PickerTapped;
                        AddChild(ehPicker);
                        break;

                    case FormField.FieldType_Picker:
                        var picker = new SelectRow(this, field);
                        picker.OptionSelected += Picker_OptionSelected;
                        AddChild(picker);
                        break;

                    case FormField.FieldType_ChildList:
                        var childListControl = new ChildListRow(this, field);
                        if (Form.ChildLists.ContainsKey(field.Name))
                        {
                            childListControl.ChildItems = Form.ChildLists[field.Name];
                        }
                        childListControl.Add          += ChildListControl_Add;
                        childListControl.Deleted      += ChildListControl_Deleted;
                        childListControl.ItemSelected += ChildListControl_ItemSelected;
                        AddChild(childListControl);
                        break;

                    case FormField.FieldType_LinkButton: AddChild(new LinkButton(this, field)); break;

                    default: AddChild(new TextEditRow(this, field)); break;
                    }
                }
            }
        }
        private SelectTable ToSelectTable(ExecutedTable table)
        {
            var select = new SelectTable();

            select.Columns = table.Descriptor.Properties.Select(x => new Sdk.SelectColumn()
            {
                Name = x.Name, Type = x.Type == null ? "" : x.Type.Name.ToString().ToLower()
            }).ToArray();

            var list = new List <SelectRow>();

            foreach (var row in table.Rows)
            {
                var selectRow = new SelectRow();
                selectRow.Values = row.Values.Select(x => x.Value).ToArray();
                list.Add(selectRow);
            }

            select.Rows = list.ToArray();

            return(select);
        }
Beispiel #4
0
        public IEnumerator <object> Task()
        {
            Probers.Add(new BoneRowProber());
            Probers.Add(new FolderRowProber());
            Probers.Add(new NodeRowProber());
            Probers.Add(new AnimationTrackRowProber());
            var roll  = Timeline.Instance.Roll;
            var input = roll.RootWidget.Input;

            var cg = new ClickGesture(0, () => {
                var row = RowUnderMouse(input.MousePosition);
                if (row == null)
                {
                    return;
                }
                if (input.IsKeyPressed(Key.Shift))
                {
                    if (Document.Current.SelectedRows().Any())
                    {
                        var firstRow = Document.Current.SelectedRows().FirstOrDefault();
                        Document.Current.History.DoTransaction(() => {
                            ClearRowSelection.Perform();
                            SelectRowRange.Perform(firstRow, row);
                        });
                    }
                    else
                    {
                        Document.Current.History.DoTransaction(() => {
                            ClearRowSelection.Perform();
                            SelectRow.Perform(row);
                        });
                    }
                }
                else if (input.IsKeyPressed(Key.Control))
                {
                    Document.Current.History.DoTransaction(() => {
                        SelectRow.Perform(row, !row.Selected);
                    });
                }
                else
                {
                    Document.Current.History.DoTransaction(() => {
                        ClearRowSelection.Perform();
                        SelectRow.Perform(row);
                    });
                    input.ConsumeKey(Key.Mouse0);
                }
            });

            var dg = new DragGesture(0);

            dg.Recognized += () => {
                var row = RowUnderMouse(dg.MousePressPosition);
                // Have to turn off PreviewAnimation manually in order
                // to provide the same behaviour whether widget is selected or not
                // (PreviewAnimation is turned off when performing operation)
                if (Document.Current.PreviewAnimation)
                {
                    Document.Current.TogglePreviewAnimation();
                }
                if (!row?.Selected ?? false)
                {
                    Document.Current.History.DoTransaction(() => {
                        ClearRowSelection.Perform();
                        SelectRow.Perform(row);
                    });
                }
                roll.OnRenderOverlay += OnRollRenderOverlay;
                dragLocation          = new RowLocation(Document.Current.RowTree, 0);
            };
            dg.Changed += () => {
                dragLocation = MouseToRowLocation(input.MousePosition);
                CommonWindow.Current.Invalidate();
            };
            dg.Ended += () => {
                if (!dg.IsRecognizing())
                {
                    roll.OnRenderOverlay -= OnRollRenderOverlay;
                    CommonWindow.Current.Invalidate();
                    if (dragLocation != null)
                    {
                        DragRows(dragLocation.Value);
                    }
                }
            };

            roll.RootWidget.Gestures.Add(dg);
            roll.RootWidget.Gestures.Add(cg);
            yield break;
        }
        public IEnumerator <object> Task()
        {
            var roll  = Timeline.Instance.Roll;
            var input = roll.RootWidget.Input;

            input.AcceptMouseThroughDescendants = true;
            while (true)
            {
                yield return(null);

                if (!input.WasMousePressed() || input.WasKeyPressed(Key.Mouse0DoubleClick))
                {
                    continue;
                }
                var initialMousePosition = input.MousePosition;
                var row = RowUnderMouse(initialMousePosition);
                if (row == null)
                {
                    continue;
                }
                if (input.IsKeyPressed(Key.Shift))
                {
                    if (Document.Current.SelectedRows().Any())
                    {
                        var firstRow = Document.Current.SelectedRows().FirstOrDefault();
                        Document.Current.History.DoTransaction(() => {
                            ClearRowSelection.Perform();
                            SelectRowRange.Perform(firstRow, row);
                        });
                    }
                    else
                    {
                        Document.Current.History.DoTransaction(() => {
                            ClearRowSelection.Perform();
                            SelectRow.Perform(row);
                        });
                    }
                }
                else if (input.IsKeyPressed(Key.Control))
                {
                    Document.Current.History.DoTransaction(() => {
                        SelectRow.Perform(row, !row.Selected);
                    });
                }
                else
                {
                    if (!row.Selected)
                    {
                        Document.Current.History.DoTransaction(() => {
                            ClearRowSelection.Perform();
                            SelectRow.Perform(row);
                        });
                    }
                    while (
                        input.IsMousePressed() &&
                        Math.Abs(initialMousePosition.Y - input.MousePosition.Y) < TimelineMetrics.DefaultRowHeight / 4
                        )
                    {
                        yield return(null);
                    }
                    if (input.IsMousePressed())
                    {
                        yield return(DragTask());
                    }
                    else
                    {
                        Document.Current.History.DoTransaction(() => {
                            ClearRowSelection.Perform();
                            SelectRow.Perform(row);
                        });
                    }
                }
            }
        }