Esempio n. 1
0
 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;
 }
Esempio n. 2
0
      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);
         }
      }
Esempio n. 3
0
 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);
    }
 }
Esempio n. 4
0
 public DragAdorner(UIElement editor, ScriptBlock block) : base(editor) {
    Editor = editor;
    Bounds = new Rect(block.RenderSize);
    Brush = new VisualBrush(block);
    IsHitTestVisible = false;
    Open();
 }
Esempio n. 5
0
 public DropAdorner(ScriptBlock target, ScriptBlock source) : base(target) {
    Source = source;
    Target = target;
    IsHitTestVisible = false;
 }
Esempio n. 6
0
 /// <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;
 }
Esempio n. 7
0
 /// <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;
 }
Esempio n. 8
0
 /// <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;
 }