private static DataBindingDragDropModel UpdateDragModel(DataBindingDragDropModel dragModel) { if (!JoltHelper.DatabindingSupported(dragModel.TargetNode.ProjectContext)) { dragModel.DropFlags = DataBindingDragDropFlags.None; return(dragModel); } DataBindingDragDropHandler bindingDragDropHandler = (DataBindingDragDropHandler)null; for (int index = 0; index < DataBindingDragDropManager.handlers.Length; ++index) { bindingDragDropHandler = DataBindingDragDropManager.handlers[index]; using (bindingDragDropHandler.InitDragModel(dragModel)) { if (bindingDragDropHandler.CanHandle()) { dragModel = bindingDragDropHandler.DragModel; break; } bindingDragDropHandler = (DataBindingDragDropHandler)null; } } DataBindingDragDropManager.targetHandler = bindingDragDropHandler; if (bindingDragDropHandler == null) { dragModel.DropFlags = DataBindingDragDropFlags.None; } else { dragModel.DropFlags &= dragModel.DragFlags; } return(dragModel); }
protected override bool OnDragOver(DragEventArgs args) { if (this.dragSource == null) { this.dragSource = Enumerable.First <IDragSource>(DragSourceHelper.DataOfType <IDragSource>(args.Data)); this.dragSource.GiveFeedback += new GiveFeedbackEventHandler(this.DragSourceGiveFeedback); } this.dragCursor = (Cursor)null; args.Effects = DragDropEffects.None; DataBindingDragDropModel dragFeedback = this.GetDragFeedback(args); if (dragFeedback == null || !dragFeedback.CheckDropFlags(DataBindingDragDropFlags.SetBinding | DataBindingDragDropFlags.CreateElement, false)) { this.previewHighlighter.Option = HighlightOption.Default; this.previewHighlighter.InsertionPointPreview = (ISceneInsertionPoint)null; this.FeedbackAdorner.Text = string.Empty; this.FeedbackAdorner.CloseAdorner(); base.OnDragOver(args); return(true); } if (dragFeedback.CheckDropFlags(DataBindingDragDropFlags.CreateElement)) { if (!((SceneElement)dragFeedback.TargetNode).IsEffectiveRoot) { this.previewHighlighter.Option = HighlightOption.Insert; this.previewHighlighter.InsertionPointPreview = (ISceneInsertionPoint)dragFeedback.InsertionPoint; } else { this.previewHighlighter.Option = HighlightOption.Default; this.previewHighlighter.InsertionPointPreview = (ISceneInsertionPoint)null; } args.Effects = DragDropEffects.Copy; this.dragCursor = DataBindingModeModel.Instance.NormalizedMode != DataBindingMode.Details ? ToolCursors.DataBindingMasterAddCursor : ToolCursors.DataBindingDetailsAddCursor; } else { this.previewHighlighter.Option = HighlightOption.Preview; this.previewHighlighter.InsertionPointPreview = (ISceneInsertionPoint)dragFeedback.InsertionPoint; args.Effects = DragDropEffects.Move; this.dragCursor = DataBindingModeModel.Instance.NormalizedMode != DataBindingMode.Details ? ToolCursors.DataBindingMasterCursor : ToolCursors.DataBindingDetailsCursor; } if (DataBindingModeModel.Instance.NormalizedMode == DataBindingMode.Details) { this.FeedbackAdorner.Background = this.detailsBackground; } else { this.FeedbackAdorner.Background = this.masterBackground; } this.FeedbackAdorner.Text = dragFeedback.Tooltip; this.SetTextCuePosition(args.GetPosition((IInputElement)this.ActiveView.Artboard.ContentArea)); this.FeedbackAdorner.DrawAdorner(this.OpenFeedback()); this.CloseFeedback(); DataBindingToolBehavior.PokeWpfToRefresh(); base.OnDragOver(args); return(true); }
private void ApplyRulesInternal(DataBindingDragDropModel model, DataBindingDragDropFlags filteredDragFlags) { if ((filteredDragFlags & DataBindingDragDropFlags.SetBinding) == DataBindingDragDropFlags.SetBinding) { if (model.InsertionPoint.Property != null) { model.DropFlags &= ~DataBindingDragDropFlags.SetBinding; IType type = model.RelativeDropSchemaPath.Type; if (type != null && BindingPropertyHelper.GetPropertyCompatibility(model.InsertionPoint.Property, type, (ITypeResolver)model.TargetNode.ProjectContext) != BindingPropertyCompatibility.None) { model.TargetProperty = model.InsertionPoint.Property; model.DropFlags |= DataBindingDragDropFlags.SetBinding; } } else if ((filteredDragFlags & DataBindingDragDropFlags.AutoPickProperty) == DataBindingDragDropFlags.AutoPickProperty) { model.TargetProperty = this.GetSpecialDefaultBindingProperty(filteredDragFlags); if (model.TargetProperty == null) { model.TargetProperty = this.GetDefaultBindingProperty(filteredDragFlags, model.RelativeDropSchemaPath); } if (model.TargetProperty != null) { model.DropFlags |= DataBindingDragDropFlags.SetBinding; } } } if ((filteredDragFlags & DataBindingDragDropFlags.CreateElement) != DataBindingDragDropFlags.CreateElement || !PlatformTypes.Panel.IsAssignableFrom((ITypeId)model.TargetNode.Type)) { return; } if (DataBindingModeModel.Instance.NormalizedMode == DataBindingMode.Default && model.RelativeDropSchemaPath.IsCollection) { model.NewElementType = !model.RelativeDropSchemaPath.IsHierarchicalCollection ? DataBindingDragDropDefaultHandler.ItemsControlType : DataBindingDragDropDefaultHandler.TreeControlType; model.NewElementProperty = (IPropertyId)model.NewElementType.GetMember(MemberType.LocalProperty, "ItemsSource", MemberAccessTypes.Public); model.DropFlags |= DataBindingDragDropFlags.CreateElement; } List <DataSchemaNode> toCreateElements = this.GetNodesToCreateElements(); if (toCreateElements.Count < model.DataSource.Count) { return; } model.DropFlags |= DataBindingDragDropFlags.CreateElement; model.NodesToCreateElements = (IList <DataSchemaNode>)toCreateElements; if (model.NewElementType != null) { return; } IType dataType = toCreateElements[0].ResolveType(model.TargetNode.DocumentNode.TypeResolver); DataViewTemplateEntry viewTemplateEntry = DataViewFactory.GetDataViewTemplateEntry(model.Platform, dataType, DataViewCategory.Master); model.NewElementType = (ITypeId)viewTemplateEntry.FieldNode.Type; model.NewElementProperty = (IPropertyId)viewTemplateEntry.FieldValueProperty; }
public static DataBindingDragDropModel GetDragFeedback(DataSchemaNodePathCollection information, BindingSceneInsertionPoint insertionPoint, DataBindingDragDropFlags dragFlags, ModifierKeys modifiers) { bool flag = (modifiers & ModifierKeys.Alt) == ModifierKeys.Alt; if (!DataBindingDragDropManager.isAltModifier.HasValue) { if (flag) { DataBindingModeModel.Instance.SetMode(DataBindingMode.Details, false); } } else if (DataBindingDragDropManager.isAltModifier.Value != flag) { DataBindingModeModel.Instance.SetMode(flag ? DataBindingMode.Details : DataBindingMode.Default, false); } DataBindingDragDropManager.isAltModifier = new bool?(flag); if ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) { dragFlags &= ~DataBindingDragDropFlags.AutoPickProperty; dragFlags &= ~DataBindingDragDropFlags.AllowRetargetElement; } if (insertionPoint.Property != null) { dragFlags &= ~DataBindingDragDropFlags.CreateElement; } if (!BindingPropertyHelper.HasBindableProperties(insertionPoint.SceneNode)) { dragFlags &= ~(DataBindingDragDropFlags.SetBinding | DataBindingDragDropFlags.AutoPickProperty); } DataBindingDragDropModel bindingDragDropModel = new DataBindingDragDropModel(information, insertionPoint, dragFlags, modifiers); if (!DataBindingDragDropModel.Equals(bindingDragDropModel, DataBindingDragDropManager.effectiveDragModel)) { PerformanceUtility.StartPerformanceSequence(PerformanceEvent.DataBindingDragModelUpdate); DataBindingDragDropManager.effectiveDragModel = DataBindingDragDropManager.UpdateDragModel(bindingDragDropModel); PerformanceUtility.EndPerformanceSequence(PerformanceEvent.DataBindingDragModelUpdate); } return(DataBindingDragDropManager.effectiveDragModel); }
private void ApplyRules(DataBindingDragDropFlags filteredDragFlags) { this.ApplyRulesInternal(this.DragModel, filteredDragFlags); if (!this.ShouldTryDropOnAncestorPanel(filteredDragFlags)) { return; } DataBindingDragDropModel ancestorPanelModel = this.DragModel.AncestorPanelModel; if (ancestorPanelModel == null || ancestorPanelModel == this.DragModel) { return; } DataBindingDragDropFlags filteredDragFlags1 = filteredDragFlags & ~DataBindingDragDropFlags.SetBinding; this.ApplyRulesInternal(ancestorPanelModel, filteredDragFlags1); if (!ancestorPanelModel.CheckDropFlags(DataBindingDragDropFlags.CreateElement)) { return; } this.DragModel = ancestorPanelModel; }
protected override bool OnDrop(DragEventArgs args) { this.previewHighlighter.Option = HighlightOption.Default; this.previewHighlighter.InsertionPointPreview = (ISceneInsertionPoint)null; this.FeedbackAdorner.CloseAdorner(); DataBindingDragDropModel dragFeedback = this.GetDragFeedback(args); bool flag = false; if (dragFeedback != null && dragFeedback.CheckDropFlags(DataBindingDragDropFlags.SetBinding | DataBindingDragDropFlags.CreateElement, false)) { Point position = args.GetPosition((IInputElement)this.ActiveView.ViewRootContainer); this.ToolBehaviorContext.SnappingEngine.Start(this.ToolBehaviorContext, (BaseFrameworkElement)null, (IList <BaseFrameworkElement>)null); Point artboardSnappedDropPoint = this.ToolBehaviorContext.SnappingEngine.SnapPoint(position, EdgeFlags.TopLeft) * this.ActiveView.GetComputedTransformFromRoot((SceneElement)dragFeedback.TargetNode); this.ToolBehaviorContext.SnappingEngine.Stop(); flag = DataBindingDragDropManager.Drop(dragFeedback, artboardSnappedDropPoint); } if (!this.IsSuspended) { this.PopSelf(); } return(flag); }
public static bool Drop(DataBindingDragDropModel dragModel, Point artboardSnappedDropPoint) { if (DataBindingDragDropManager.targetHandler == null) { return(false); } bool flag = false; try { using (TemporaryCursor.SetWaitCursor()) { using (dragModel.ViewModel.AnimationEditor.DeferKeyFraming()) { using (DataBindingDragDropManager.targetHandler.InitDragModel(dragModel)) flag = DataBindingDragDropManager.targetHandler.Handle(artboardSnappedDropPoint); } } } catch (Exception ex) { } return(flag); }
public static void Reset() { DataBindingDragDropManager.isAltModifier = new bool?(); DataBindingDragDropManager.effectiveDragModel = (DataBindingDragDropModel)null; DataBindingDragDropManager.targetHandler = (DataBindingDragDropHandler)null; }
public IDisposable InitDragModel(DataBindingDragDropModel dragModel) { return((IDisposable) new DataBindingDragDropHandler.DataModelSetter(this, dragModel)); }
public DataModelSetter(DataBindingDragDropHandler handler, DataBindingDragDropModel dragModel) { this.handler = handler; this.handler.DragModel = dragModel; }
public static bool Equals(DataBindingDragDropModel left, DataBindingDragDropModel right) { return(left == right || left != null && right != null && (left.DataSource == right.DataSource && left.DragFlags == right.DragFlags) && (left.InsertionPoint.SceneNode == right.InsertionPoint.SceneNode && left.InsertionPoint.Property == right.InsertionPoint.Property && (left.InsertionPoint.InsertIndex == right.InsertionPoint.InsertIndex && left.Modifiers == right.Modifiers))); }
public bool CheckDragFlags(DataBindingDragDropFlags flags, bool exactMatch) { return(DataBindingDragDropModel.CheckFlags(this.DragFlags, flags, exactMatch)); }