private void _createClipboard(ScriptBlock clipboard) { _clipboard = clipboard; _clipboard.CanDrag = false; _clipboard.CanHilight = false; _clipboard.CanSelect = false; _clipboard.Background = 0xE9ECEB.ToBrush(); _clipboard.BorderThickness = new Thickness(); _clipboard.ItemsBorderThickness = new Thickness(); _clipboard.Margin = new Thickness(3); _clipboard.Padding = new Thickness(0); _clipboard.VerticalAlignment = VerticalAlignment.Stretch; _clipboard.ScriptChanged += _onClipboardChanged; _clipboardPanel.Content = _clipboard; }
private void _openScript(ScriptBlock rootBlock) { RootBlock = rootBlock; RootBlock.CanHilight = false; RootBlock.CanSelect = false; RootBlock.HorizontalAlignment = HorizontalAlignment.Stretch; RootBlock.VerticalAlignment = VerticalAlignment.Stretch; BlocksContainer.Child = RootBlock; _renumberScriptNodes(RootBlock); IsDirty = false; SelectedBlock = null; if (RootBlock.Items.Count > 0 && (RootBlock.Items[0] is ScriptBlock)) { var initblock = RootBlock.Items[0] as ScriptBlock; initblock.SetBinding(ScriptBlock.HeaderProperty, new MultiBinding { Bindings = { new Binding("Title") { Source = initblock.ScriptNode }, new Binding("ScriptFile") { Source = this }, new Binding("IsDirty") { Source = this } }, Converter = new ValueConverter<string, string, bool, string>((title, file, dirty) => { var header = title.Nvl(); if (header.IsEmpty()) { if (file.NotEmpty()) { header = Path.GetFileName(file); } else { header = "New Script"; } } if (dirty) header += "*"; return header; }) }); GuiTimer.StartAfterRender(t => initblock.State = ScriptBlockState.Selected); } }
private void _renumberScriptNodes(ScriptBlock parent) { var isTopLevel = (parent == RootBlock); var count = (isTopLevel ? 0 : 1); foreach (ScriptBlock childBlock in parent.Items) { childBlock.ScriptNode.Id = (isTopLevel ? "" : parent.ScriptNode.Id + ".") + (count++); _renumberScriptNodes(childBlock); } }
public DragAdorner(UIElement editor, ScriptBlock block) : base(editor) { Editor = editor; Bounds = new Rect(block.RenderSize); Brush = new VisualBrush(block); IsHitTestVisible = false; Open(); }
public DropAdorner(ScriptBlock target, ScriptBlock source) : base(target) { Source = source; Target = target; IsHitTestVisible = false; }
/// <summary>Copies this block to the specified insertion point on the target block.</summary> public ScriptBlock CopyTo(ScriptBlock target, InsertionPoint insertionPoint) { var clonedBlock = Clone(true); if (clonedBlock != null) { clonedBlock.MoveTo(target, insertionPoint); } return clonedBlock; }
/// <summary>Moves this block to the specified insertion point on the target block.</summary> public ScriptBlock MoveTo(ScriptBlock target, InsertionPoint insertionPoint) { var sourceIndex = this.Index; var sourceParent = this.ParentBlock; var targetIndex = target.Index; var targetParent = target.ParentBlock; Remove(); if (sourceParent == targetParent && targetParent != null) { // adjust for move in same parent if (targetIndex >= sourceIndex) targetIndex--; } switch (insertionPoint) { case InsertionPoint.Before: if (targetParent != null && targetIndex >= 0) { targetParent.Items.Insert(targetIndex, this); targetParent._raiseScriptChangedEvent(); } break; case InsertionPoint.After: if (targetParent != null && targetIndex >= 0) { targetParent.Items.Insert(targetIndex + 1, this); targetParent._raiseScriptChangedEvent(); } break; case InsertionPoint.Inside: target.Items.Add(this); target._raiseScriptChangedEvent(); break; } return this; }
/// <summary>Creates a new script block from the given script node (recrusive).</summary> public static ScriptBlock Create(ScriptNode node, bool deep) { var block = new ScriptBlock { ScriptNode = node.Clone(false) }; if (deep) { foreach (var child in node.Children) { block.Items.Add(Create(child, deep)); } } return block; }