Browse Source

XamlBinding: implemented drag and drop in grid editor

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4562 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Siegfried Pammer 16 years ago
parent
commit
94a3bb4c6a
  1. 2
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs
  2. 93
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/DragDropMarkerAdorner.cs
  3. 9
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml
  4. 779
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml.cs
  5. 12
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/GridLengthEditor.xaml
  6. 45
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/GridLengthEditor.xaml.cs
  7. 38
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/UndoStep.cs
  8. 6
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/XamlMenuCommand.cs
  9. 2
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj

2
src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.XamlBinding @@ -41,7 +41,7 @@ namespace ICSharpCode.XamlBinding
public static readonly ReadOnlyCollection<string> XamlNamespaceAttributes = new List<string> {
"Class", "ClassModifier", "FieldModifier", "Name", "Subclass", "TypeArguments", "Uid", "Key"
}.AsReadOnly(); // TODO : .AsReadOnly() cannot be resolved, report to Daniel
}.AsReadOnly();
public static readonly ReadOnlyCollection<string> RootOnlyElements = new List<string> {
"Class", "ClassModifier", "Subclass"

93
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/DragDropMarkerAdorner.cs

@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="sie_pam@gmx.at"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
{
public class DragDropMarkerAdorner : Adorner
{
DragDropMarkerAdorner(UIElement adornedElement)
: base(adornedElement)
{
}
Point start, end;
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawLine(new Pen(Brushes.Black, 1), start, end);
}
protected override Size MeasureOverride(Size constraint)
{
return new Size(1, 1); // dummy values
}
protected override Size ArrangeOverride(Size finalSize)
{
return new Size(1, 1); // dummy values
}
public static DragDropMarkerAdorner CreateAdornerContentMove(StackPanel panel, FrameworkElement aboveElement)
{
DragDropMarkerAdorner adorner;
if (aboveElement is StackPanel) {
aboveElement = (panel.Children.Count > 0 ? panel.Children[panel.Children.Count - 1] : panel) as FrameworkElement;
adorner = new DragDropMarkerAdorner(aboveElement);
adorner.start = new Point(5, 5 + aboveElement.DesiredSize.Height);
adorner.end = new Point(panel.ActualWidth - 10, 5 + aboveElement.DesiredSize.Height);
} else {
aboveElement = aboveElement.TemplatedParent as FrameworkElement;
adorner = new DragDropMarkerAdorner(aboveElement);
adorner.start = new Point(5, 0);
adorner.end = new Point(panel.ActualWidth - 10, 0);
}
AdornerLayer.GetAdornerLayer(aboveElement).Add(adorner);
return adorner;
}
public static DragDropMarkerAdorner CreateAdornerCellMove(FrameworkElement element)
{
DragDropMarkerAdorner adorner = new DragDropMarkerAdorner(element);
if (element is GridLengthEditor) {
GridLengthEditor editor = element as GridLengthEditor;
if (editor.Orientation == Orientation.Horizontal) {
adorner.start = new Point(5,5);
adorner.end = new Point(5, editor.ActualWidth + 50);
} else {
adorner.start = new Point(5,5);
adorner.end = new Point(editor.ActualHeight + 250, 5);
}
} else if (element is StackPanel) {
StackPanel panel = element as StackPanel;
Dock dockState = (Dock)panel.GetValue(DockPanel.DockProperty);
if (dockState == Dock.Right) {
adorner.start = new Point(5,5);
adorner.end = new Point(5, panel.ActualHeight);
} else if (dockState == Dock.Bottom) {
adorner.start = new Point(5,5);
adorner.end = new Point(panel.ActualWidth - 10, 5);
}
}
AdornerLayer.GetAdornerLayer(element).Add(adorner);
return adorner;
}
}
}

9
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml

@ -41,10 +41,13 @@ @@ -41,10 +41,13 @@
</ControlTemplate>
</Window.Resources>
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" HorizontalAlignment="Center">
<Button x:Name="btnOK" Content="{sd:Localize Global.OKButtonText}" Click="BtnOKClick" Style="{StaticResource normal}" />
<Button x:Name="btnCancel" Content="{sd:Localize Global.CancelButtonText}" Click="BtnCancelClick" Style="{StaticResource normal}" />
<StackPanel Background="WhiteSmoke" AllowDrop="True" x:Name="buttonPanel" Drop="ButtonPanelDrop" DragOver="ButtonPanelDragOver" DockPanel.Dock="Bottom" HorizontalAlignment="Stretch">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button x:Name="btnOK" Content="{sd:Localize Global.OKButtonText}" Click="BtnOKClick" Style="{StaticResource normal}" />
<Button x:Name="btnCancel" Content="{sd:Localize Global.CancelButtonText}" Click="BtnCancelClick" Style="{StaticResource normal}" />
</StackPanel>
</StackPanel>
<StackPanel Background="WhiteSmoke" AllowDrop="True" x:Name="dropPanel" Drop="DropPanelDrop" DragOver="DropPanelDragOver" DockPanel.Dock="Right" Width="25" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />

779
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml.cs

@ -46,30 +46,6 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -46,30 +46,6 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
bool gridLengthInvalid;
class UndoStep
{
public XElement Tree { get; set; }
public XElement RowDefinitions { get; set; }
public XElement ColumnDefinitions { get; set; }
public IList<XElement> AdditionalProperties { get; set; }
public static UndoStep CreateStep(XElement tree, XElement rows, XElement cols, IEnumerable<XElement> properties)
{
XElement rowCopy = new XElement(rows);
XElement colCopy = new XElement(cols);
XElement treeCopy = new XElement(tree);
IList<XElement> propertiesCopy = properties.Select(item => new XElement(item)).ToList();
return new UndoStep() {
Tree = treeCopy,
RowDefinitions = rowCopy,
ColumnDefinitions = colCopy,
AdditionalProperties = propertiesCopy
};
}
}
Stack<UndoStep> undoStack;
Stack<UndoStep> redoStack;
@ -122,27 +98,26 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -122,27 +98,26 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
int maxCols = this.colDefitions.Elements().Count();
int maxRows = this.rowDefitions.Elements().Count();
this.gridTree.Elements()
.ForEach(
el => {
Core.LoggingService.Debug(el);
XAttribute a = el.Attribute(gridColName);
XAttribute b = el.Attribute(gridRowName);
int value;
if (a != null && int.TryParse(a.Value, out value))
el.SetAttributeValue(gridColName, Math.Min(Math.Max(0, value), maxCols - 1));
else
el.SetAttributeValue(gridColName, 0);
if (b != null && int.TryParse(b.Value, out value))
el.SetAttributeValue(gridRowName, Math.Min(Math.Max(0, value), maxRows - 1));
else
el.SetAttributeValue(gridRowName, 0);
}
);
this.gridTree.Elements().ForEach(el => NormalizeElementGridIndices(el, maxCols, maxRows));
RebuildGrid();
}
static void NormalizeElementGridIndices(XElement element, int maxCols, int maxRows)
{
XAttribute a = element.Attribute(gridColName);
XAttribute b = element.Attribute(gridRowName);
int value;
if (a != null && int.TryParse(a.Value, out value))
element.SetAttributeValue(gridColName, Math.Min(Math.Max(0, value), maxCols - 1));
else
element.SetAttributeValue(gridColName, 0);
if (b != null && int.TryParse(b.Value, out value))
element.SetAttributeValue(gridRowName, Math.Min(Math.Max(0, value), maxRows - 1));
else
element.SetAttributeValue(gridRowName, 0);
}
static MenuItem CreateItem(string header, Action<StackPanel> clickAction, StackPanel senderItem)
{
MenuItem item = new MenuItem();
@ -153,6 +128,16 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -153,6 +128,16 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
return item;
}
static MenuItem CreateItem(string header, Action<int, int> clickAction, int cellIndex)
{
MenuItem item = new MenuItem();
item.Header = header;
item.Click += delegate { clickAction(cellIndex, 1); };
return item;
}
void InsertAbove(StackPanel block)
{
UpdateUndoRedoState();
@ -181,12 +166,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -181,12 +166,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
);
controls.ForEach(
item => {
var rowAttrib = item.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) + 1);
}
);
controls.ForEach(item => MoveRowItem(item, 1));
RebuildGrid();
}
@ -219,136 +199,93 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -219,136 +199,93 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
);
controls.ForEach(
item => {
var rowAttrib = item.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) + 1);
}
);
controls.ForEach(item => MoveRowItem(item, 1));
RebuildGrid();
}
void MoveUp(StackPanel block)
void MoveUp(int row, int steps)
{
int row = (int)block.GetValue(Grid.RowProperty);
if (row > 0) {
UpdateUndoRedoState();
var items = rowDefitions.Elements().Skip(row);
var selItem = items.FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
items = rowDefitions.Elements().Skip(row - 1);
var before = items.FirstOrDefault();
if (before == null)
return;
before.AddBeforeSelf(selItem);
var controls = gridTree
.Elements()
.Where(
element => {
var rowAttrib = element.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue == row;
return false;
}
).ToList();
var controlsDown = gridTree
.Elements()
.Where(
element2 => {
var rowAttrib = element2.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue == (row - 1);
return false;
}
).ToList();
controls.ForEach(
item => {
var rowAttrib = item.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) - 1);
}
);
controlsDown.ForEach(
item2 => {
var rowAttrib = item2.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item2.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) + 1);
if (steps < 1 || row - steps < 0)
return;
UpdateUndoRedoState();
var selItem = rowDefitions.Elements().Skip(row).FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
var before = rowDefitions.Elements().Skip(row - steps).FirstOrDefault();
if (before == null)
return;
before.AddBeforeSelf(selItem);
var controls = gridTree.Elements().Where(element => IsSameRow(element, row)).ToList();
var controlsDown = gridTree.Elements()
.Where(
element2 => {
var rowAttrib = element2.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue < row && rowAttribValue >= (row - steps);
return false;
}
);
RebuildGrid();
}
).ToList();
controls.ForEach(item => MoveRowItem(item, -steps));
controlsDown.ForEach(item2 => MoveRowItem(item2, 1));
RebuildGrid();
}
void MoveDown(StackPanel block)
bool IsSameRow(XElement element, int row)
{
int row = (int)block.GetValue(Grid.RowProperty);
if (row < rowDefitions.Elements().Count() - 1) {
UpdateUndoRedoState();
var rowAttrib = element.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue == row;
return false;
}
void MoveDown(int row, int steps)
{
if (steps < 1 || row + steps > rowDefitions.Elements().Count())
return;
UpdateUndoRedoState();
var items = rowDefitions.Elements().Skip(row);
var selItem = items.FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
items = rowDefitions.Elements().Skip(row - 1);
var before = items.FirstOrDefault();
if (before == null)
return;
var selItem = rowDefitions.Elements().Skip(row).FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
var before = rowDefitions.Elements().Skip(row + steps).FirstOrDefault();
if (before == null)
rowDefitions.Add(selItem);
else
before.AddBeforeSelf(selItem);
var controls = gridTree
.Elements()
.Where(
element => {
var rowAttrib = element.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue == row;
return false;
}
).ToList();
var controlsUp = gridTree
.Elements()
.Where(
element2 => {
var rowAttrib = element2.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue == (row + 1);
return false;
}
).ToList();
controls.ForEach(
item => {
var rowAttrib = item.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) + 1);
}
);
controlsUp.ForEach(
item2 => {
var rowAttrib = item2.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item2.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) - 1);
var controls = gridTree.Elements().Where(element => IsSameRow(element, row)).ToList();
var controlsUp = gridTree.Elements()
.Where(
element2 => {
var rowAttrib = element2.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
int rowAttribValue = 0;
if (int.TryParse(rowAttrib.Value, out rowAttribValue))
return rowAttribValue > row && rowAttribValue <= (row + steps);
return false;
}
);
RebuildGrid();
}
).ToList();
controls.ForEach(item => MoveRowItem(item, steps));
controlsUp.ForEach(item2 => MoveRowItem(item2, -1));
RebuildGrid();
}
void DeleteRow(StackPanel block)
@ -361,8 +298,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -361,8 +298,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
if (selItem != null)
selItem.Remove();
var controls = gridTree
.Elements()
var controls = gridTree.Elements()
.Where(
element => {
var rowAttrib = element.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
@ -374,12 +310,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -374,12 +310,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
);
controls.ForEach(
item => {
var rowAttrib = item.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) - 1);
}
);
controls.ForEach(item => MoveRowItem(item, -1));
RebuildGrid();
}
@ -398,8 +329,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -398,8 +329,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
else
colDefitions.Add(newColumn);
var controls = gridTree
.Elements()
var controls = gridTree.Elements()
.Where(
element => {
var colAttrib = element.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
@ -411,12 +341,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -411,12 +341,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
);
controls.ForEach(
item => {
var colAttrib = item.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) + 1);
}
);
controls.ForEach(item => MoveColumnItem(item, 1));
RebuildGrid();
}
@ -448,138 +373,107 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -448,138 +373,107 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
);
controls.ForEach(
item => {
var colAttrib = item.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) + 1);
}
);
controls.ForEach(item => MoveColumnItem(item, 1));
RebuildGrid();
}
void MoveLeft(StackPanel block)
void MoveLeft(int column, int steps)
{
int column = (int)block.GetValue(Grid.ColumnProperty);
if (steps < 1 || column - steps < 0)
return;
if (column > 0) {
UpdateUndoRedoState();
var items = colDefitions.Elements().Skip(column);
var selItem = items.FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
items = colDefitions.Elements().Skip(column - 1);
var before = items.FirstOrDefault();
if (before == null)
return;
before.AddBeforeSelf(selItem);
var controls = gridTree
.Elements()
.Where(
element => {
var colAttrib = element.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue == column;
return false;
}
).ToList();
var controlsLeft = gridTree
.Elements()
.Where(
element2 => {
var colAttrib = element2.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue == (column - 1);
return false;
}
).ToList();
controls.ForEach(
item => {
var colAttrib = item.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) - 1);
}
);
controlsLeft.ForEach(
item2 => {
var colAttrib = item2.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item2.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) + 1);
UpdateUndoRedoState();
var selItem = colDefitions.Elements().Skip(column).FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
var before = colDefitions.Elements().Skip(column - steps).FirstOrDefault();
if (before == null)
return;
before.AddBeforeSelf(selItem);
var controls = gridTree.Elements().Where(element => IsSameColumn(element, column)).ToList();
var controlsLeft = gridTree
.Elements()
.Where(
element2 => {
var colAttrib = element2.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue < column && colAttribValue >= (column - steps);
return false;
}
);
RebuildGrid();
}
).ToList();
controls.ForEach(item => MoveColumnItem(item, -steps));
controlsLeft.ForEach(item => MoveColumnItem(item, 1));
RebuildGrid();
}
void MoveRight(StackPanel block)
bool IsSameColumn(XElement element, int column)
{
int column = (int)block.GetValue(Grid.ColumnProperty);
var colAttrib = element.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue == column;
if (column < colDefitions.Elements().Count() - 1) {
UpdateUndoRedoState();
var items = colDefitions.Elements().Skip(column);
var selItem = items.FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
items = colDefitions.Elements().Skip(column - 1);
var before = items.FirstOrDefault();
if (before == null)
return;
return false;
}
void MoveColumnItem(XElement item, int steps)
{
var colAttrib = item.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) + steps);
}
void MoveRowItem(XElement item, int steps)
{
var rowAttrib = item.Attribute(gridRowName) ?? new XAttribute(gridRowName, 0);
item.SetAttributeValue(gridRowName, int.Parse(rowAttrib.Value, CultureInfo.InvariantCulture) + steps);
}
void MoveRight(int column, int steps)
{
if (steps < 1 || column + steps > colDefitions.Elements().Count())
return;
UpdateUndoRedoState();
var selItem = colDefitions.Elements().Skip(column).FirstOrDefault();
if (selItem == null)
return;
selItem.Remove();
var before = colDefitions.Elements().Skip(column + steps).FirstOrDefault();
if (before == null)
colDefitions.Add(selItem);
else
before.AddBeforeSelf(selItem);
var controls = gridTree
.Elements()
.Where(
element => {
var colAttrib = element.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue == column;
return false;
}
).ToList();
var controlsRight = gridTree
.Elements()
.Where(
element2 => {
var colAttrib = element2.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue == (column + 1);
return false;
}
).ToList();
controls.ForEach(
item => {
var colAttrib = item.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) + 1);
}
);
controlsRight.ForEach(
item2 => {
var colAttrib = item2.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item2.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) - 1);
var controls = gridTree.Elements().Where(element => IsSameColumn(element, column)).ToList();
var controlsRight = gridTree
.Elements()
.Where(
element2 => {
var colAttrib = element2.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
int colAttribValue = 0;
if (int.TryParse(colAttrib.Value, out colAttribValue))
return colAttribValue > column && colAttribValue <= (column + steps);
return false;
}
);
RebuildGrid();
}
).ToList();
controls.ForEach(item => MoveColumnItem(item, steps));
controlsRight.ForEach(item2 => MoveColumnItem(item2, -1));
RebuildGrid();
}
void DeleteColumn(StackPanel block)
@ -605,12 +499,8 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -605,12 +499,8 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
);
controls.ForEach(
item => {
var colAttrib = item.Attribute(gridColName) ?? new XAttribute(gridColName, 0);
item.SetAttributeValue(gridColName, int.Parse(colAttrib.Value, CultureInfo.InvariantCulture) - 1);
}
);
controls.ForEach(item => MoveColumnItem(item, -1));
RebuildGrid();
}
@ -632,11 +522,17 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -632,11 +522,17 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
void RebuildGrid()
{
this.marker = null;
if (this.marker != null) {
AdornerLayer.GetAdornerLayer(this.buttonPanel).Remove(this.marker);
AdornerLayer.GetAdornerLayer(this.dropPanel).Remove(this.marker);
this.marker = null;
}
this.gridDisplay.Children.Clear();
this.gridDisplay.RowDefinitions.Clear();
this.gridDisplay.ColumnDefinitions.Clear();
this.columnWidthGrid.ColumnDefinitions.Clear();
this.columnWidthGrid.Children.Clear();
@ -662,6 +558,11 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -662,6 +558,11 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
editor.SelectedValueChanged += new EventHandler<GridLengthSelectionChangedEventArgs>(EditorSelectedValueChanged);
editor.Deleted += new EventHandler<GridLengthSelectionChangedEventArgs>(EditorDeleted);
editor.MouseLeftButtonDown += new MouseButtonEventHandler(EditorMouseLeftButtonDown);
editor.Drop += new DragEventHandler(EditorDrop);
editor.DragOver += new DragEventHandler(EditorDragOver);
editor.AllowDrop = true;
this.columnWidthGrid.Children.Add(editor);
@ -683,7 +584,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -683,7 +584,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
Content = "+",
HorizontalAlignment = HorizontalAlignment.Right,
Margin = new Thickness(5, 10, 0, 10),
Padding = new Thickness(3),
Padding = new Thickness(3)
};
rightAddButton.Click += BtnAddColumnClick;
@ -701,6 +602,11 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -701,6 +602,11 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
editor.SelectedValueChanged += new EventHandler<GridLengthSelectionChangedEventArgs>(EditorSelectedValueChanged);
editor.Deleted += new EventHandler<GridLengthSelectionChangedEventArgs>(EditorDeleted);
editor.MouseLeftButtonDown += new MouseButtonEventHandler(EditorMouseLeftButtonDown);
editor.Drop += new DragEventHandler(EditorDrop);
editor.DragOver += new DragEventHandler(EditorDragOver);
editor.AllowDrop = true;
this.rowHeightGrid.Children.Add(editor);
@ -722,7 +628,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -722,7 +628,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
Content = "+",
VerticalAlignment = VerticalAlignment.Bottom,
Margin = new Thickness(10, 5, 10, 0),
Padding = new Thickness(3),
Padding = new Thickness(3)
};
bottomAddButton.Click += BtnAddRowClick;
@ -742,7 +648,6 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -742,7 +648,6 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
displayRect.Drop += new DragEventHandler(DisplayRectDrop);
displayRect.DragOver += new DragEventHandler(DisplayRectDragOver);
displayRect.MouseLeftButtonDown += new MouseButtonEventHandler(DisplayRectMouseLeftButtonDown);
displayRect.Children.AddRange(BuildItemsForCell(i, j));
@ -758,11 +663,62 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -758,11 +663,62 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
this.InvalidateVisual();
}
void DisplayRectMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
void EditorDragOver(object sender, DragEventArgs e)
{
try {
GridLengthEditor target = sender as GridLengthEditor;
GridLengthEditor source = e.Data.GetData(typeof(GridLengthEditor)) as GridLengthEditor;
e.Handled = true;
if (marker != null) {
AdornerLayer.GetAdornerLayer(marker.AdornedElement).Remove(marker);
marker = null;
}
if (target != null && source != null && source.Orientation == target.Orientation
&& (target != source && (target.Cell < source.Cell || target.Cell > source.Cell + 1))) {
marker = DragDropMarkerAdorner.CreateAdornerCellMove(target);
e.Effects = DragDropEffects.Move;
return;
}
e.Effects = DragDropEffects.None;
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
}
void EditorDrop(object sender, DragEventArgs e)
{
try {
GridLengthEditor source = e.Data.GetData(typeof(GridLengthEditor)) as GridLengthEditor;
GridLengthEditor target = sender as GridLengthEditor;
if (source != null && target != null) {
if (source.Orientation == Orientation.Horizontal) {
if (source.Cell > target.Cell)
MoveLeft(source.Cell, Math.Abs(source.Cell - target.Cell));
else
MoveRight(source.Cell, Math.Abs(source.Cell - target.Cell) - 1);
}
if (source.Orientation == Orientation.Vertical) {
if (source.Cell > target.Cell)
MoveUp(source.Cell, Math.Abs(source.Cell - target.Cell));
else
MoveDown(source.Cell, Math.Abs(source.Cell - target.Cell) - 1);
}
}
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
}
void EditorMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DragDropEffects allowedEffects = DragDropEffects.Move;
StackPanel panel = sender as StackPanel;
DragDrop.DoDragDrop(panel, panel, allowedEffects);
GridLengthEditor editor = sender as GridLengthEditor;
DragDrop.DoDragDrop(editor, editor, allowedEffects);
}
void EditorDeleted(object sender, GridLengthSelectionChangedEventArgs e)
@ -797,77 +753,13 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -797,77 +753,13 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
|| rowDefitions.Elements().Any(row => (row.Attribute("Height") ?? new XAttribute("Height", "*")).Value == "Invalid");
}
class DragDropMarkerAdorner : Adorner
{
DragDropMarkerAdorner(UIElement adornedElement)
: base(adornedElement)
{
}
Point start, end;
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawLine(new Pen(Brushes.Black, 1), start, end);
}
protected override Size MeasureOverride(Size constraint)
{
return new Size(1, 1); // dummy values
}
protected override Size ArrangeOverride(Size finalSize)
{
return new Size(1, 1); // dummy values
}
public static DragDropMarkerAdorner CreateAdornerContentMove(StackPanel panel, FrameworkElement aboveElement)
{
DragDropMarkerAdorner adorner;
if (aboveElement is StackPanel) {
aboveElement = (panel.Children.Count > 0 ? panel.Children[panel.Children.Count - 1] : panel) as FrameworkElement;
adorner = new DragDropMarkerAdorner(aboveElement);
adorner.start = new Point(5, 5 + aboveElement.DesiredSize.Height);
adorner.end = new Point(panel.ActualWidth - 10, 5 + aboveElement.DesiredSize.Height);
} else {
aboveElement = aboveElement.TemplatedParent as FrameworkElement;
adorner = new DragDropMarkerAdorner(aboveElement);
adorner.start = new Point(5, 0);
adorner.end = new Point(panel.ActualWidth - 10, 0);
}
AdornerLayer.GetAdornerLayer(aboveElement).Add(adorner);
return adorner;
}
public static DragDropMarkerAdorner CreateAdornerCellMove(StackPanel panel, int count, Orientation orientation)
{
DragDropMarkerAdorner adorner = new DragDropMarkerAdorner(panel);
if (orientation == Orientation.Horizontal) {
adorner.start = new Point(5,5);
adorner.end = new Point(5, panel.ActualHeight * count);
} else {
adorner.start = new Point(5,5);
adorner.end = new Point(panel.ActualWidth * count, 5);
}
AdornerLayer.GetAdornerLayer(panel).Add(adorner);
return adorner;
}
}
DragDropMarkerAdorner marker = null;
void DisplayRectDragOver(object sender, DragEventArgs e)
{
try {
StackPanel target = sender as StackPanel;
e.Handled = true;
if (marker != null) {
AdornerLayer.GetAdornerLayer(marker.AdornedElement).Remove(marker);
@ -875,33 +767,15 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -875,33 +767,15 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
if (target != null) {
Point p = e.GetPosition(target);
FrameworkElement element = target.InputHitTest(p) as FrameworkElement;
if (e.Data.GetData(typeof(XElement)) != null) {
if (element is StackPanel || element.TemplatedParent is Label) {
marker = DragDropMarkerAdorner.CreateAdornerContentMove(target, element);
e.Effects = DragDropEffects.Move;
e.Handled = true;
} else {
e.Effects = DragDropEffects.None;
e.Handled = true;
}
} else if (e.Data.GetData(typeof(StackPanel)) != null) {
if (element is StackPanel && e.Data.GetData(typeof(StackPanel)) != element) {
marker = DragDropMarkerAdorner.CreateAdornerCellMove(target, rowDefitions.Elements().Count(), Orientation.Horizontal);
e.Effects = DragDropEffects.Move;
e.Handled = true;
} else {
e.Effects = DragDropEffects.None;
e.Handled = true;
}
} else {
e.Effects = DragDropEffects.None;
e.Handled = true;
FrameworkElement element = target.InputHitTest(e.GetPosition(target)) as FrameworkElement;
if (e.Data.GetData(typeof(XElement)) != null && (element is StackPanel || element.TemplatedParent is Label)) {
marker = DragDropMarkerAdorner.CreateAdornerContentMove(target, element);
e.Effects = DragDropEffects.Move;
return;
}
}
e.Effects = DragDropEffects.None;
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
@ -943,25 +817,6 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -943,25 +817,6 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
}
}
RebuildGrid();
} else if (e.Data.GetData(typeof(StackPanel)) != null) {
StackPanel source = e.Data.GetData(typeof(StackPanel)) as StackPanel;
int sourceX = (int)source.GetValue(Grid.ColumnProperty);
//int sourceY = (int)source.GetValue(Grid.RowProperty);
StackPanel target = sender as StackPanel;
int targetX = (int)target.GetValue(Grid.ColumnProperty);
//int targetY = (int)target.GetValue(Grid.RowProperty);
// TODO : finish this
if (sourceX > targetX) {
//XElement colDef =
// move to the right
} else {
// move to the left
}
RebuildGrid();
}
} catch (Exception ex) {
@ -1051,8 +906,8 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -1051,8 +906,8 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
CreateItem("Insert above", InsertAbove, block),
CreateItem("Insert below", InsertBelow, block),
new Separator(),
CreateItem("Move up", MoveUp, block),
CreateItem("Move down", MoveDown, block),
CreateItem("Move up", MoveUp, (int)block.GetValue(Grid.RowProperty)),
CreateItem("Move down", MoveDown, (int)block.GetValue(Grid.RowProperty)),
new Separator(),
CreateItem("Delete", DeleteRow, block)
}
@ -1063,8 +918,8 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -1063,8 +918,8 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
CreateItem("Insert before", InsertBefore, block),
CreateItem("Insert after", InsertAfter, block),
new Separator(),
CreateItem("Move left", MoveLeft, block),
CreateItem("Move right", MoveRight, block),
CreateItem("Move left", MoveLeft, (int)block.GetValue(Grid.ColumnProperty)),
CreateItem("Move right", MoveRight, (int)block.GetValue(Grid.ColumnProperty)),
new Separator(),
CreateItem("Delete", DeleteColumn, block)
}
@ -1136,5 +991,77 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -1136,5 +991,77 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
.First(item => (int)item.GetValue(Grid.ColumnProperty) == (int)b.Tag));
}
}
void ButtonPanelDrop(object sender, DragEventArgs e)
{
try {
GridLengthEditor source = e.Data.GetData(typeof(GridLengthEditor)) as GridLengthEditor;
if (source != null)
MoveDown(source.Cell, Math.Abs(source.Cell - rowDefitions.Elements().Count()) - 1);
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
}
void DropPanelDrop(object sender, DragEventArgs e)
{
try {
GridLengthEditor source = e.Data.GetData(typeof(GridLengthEditor)) as GridLengthEditor;
if (source != null)
MoveRight(source.Cell, Math.Abs(source.Cell - colDefitions.Elements().Count()) - 1);
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
}
void DropPanelDragOver(object sender, DragEventArgs e)
{
try {
StackPanel target = sender as StackPanel;
GridLengthEditor source = e.Data.GetData(typeof(GridLengthEditor)) as GridLengthEditor;
e.Handled = true;
if (marker != null) {
AdornerLayer.GetAdornerLayer(marker.AdornedElement).Remove(marker);
marker = null;
}
if (target != null && source != null && source.Orientation == Orientation.Horizontal && source.Cell + 1 < colDefitions.Elements().Count()) {
marker = DragDropMarkerAdorner.CreateAdornerCellMove(target);
e.Effects = DragDropEffects.Move;
return;
}
e.Effects = DragDropEffects.None;
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
}
void ButtonPanelDragOver(object sender, DragEventArgs e)
{
try {
StackPanel target = sender as StackPanel;
GridLengthEditor source = e.Data.GetData(typeof(GridLengthEditor)) as GridLengthEditor;
e.Handled = true;
if (marker != null) {
AdornerLayer.GetAdornerLayer(marker.AdornedElement).Remove(marker);
marker = null;
}
if (target != null && source != null && source.Orientation == Orientation.Vertical && source.Cell + 1 < rowDefitions.Elements().Count()) {
marker = DragDropMarkerAdorner.CreateAdornerCellMove(target);
e.Effects = DragDropEffects.Move;
return;
}
e.Effects = DragDropEffects.None;
} catch (Exception ex) {
Core.LoggingService.Error(ex);
}
}
}
}

12
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/GridLengthEditor.xaml

@ -6,17 +6,17 @@ @@ -6,17 +6,17 @@
Orientation="Horizontal"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Button
x:Name="btnType"
Margin="3"
Content=" * "
Click="BtnTypeClick" />
<TextBox
x:Name="txtNumericValue"
MaxLength="10"
Width="20"
Width="30"
Margin="3"
TextChanged="TxtNumericValueTextChanged" />
<Button
x:Name="btnType"
Margin="3"
Content=" * "
Click="BtnTypeClick" />
<Button
x:Name="btnDel"
Margin="3"

45
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/GridLengthEditor.xaml.cs

@ -22,8 +22,9 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -22,8 +22,9 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
/// </summary>
public partial class GridLengthEditor : UserControl
{
GridUnitType type = GridUnitType.Star;
int cell;
public GridUnitType Type { get; private set; }
public int Cell { get; private set; }
public Orientation Orientation { get; private set; }
public GridLengthEditor(Orientation type, int cell, string value)
{
@ -36,33 +37,33 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -36,33 +37,33 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
SetValue(value.Trim());
this.cell = cell;
this.Cell = cell;
this.panel.Orientation = type;
this.panel.Orientation = this.Orientation = type;
}
void SetValue(string value)
{
if (value.Equals("Auto", StringComparison.OrdinalIgnoreCase)) {
type = GridUnitType.Auto;
Type = GridUnitType.Auto;
txtNumericValue.Text = "";
} else {
if (value.EndsWith("px", StringComparison.OrdinalIgnoreCase)) {
type = GridUnitType.Pixel;
Type = GridUnitType.Pixel;
txtNumericValue.Text = value.Remove(value.Length - 2);
} else if (value.EndsWith("*", StringComparison.OrdinalIgnoreCase)) {
type = GridUnitType.Star;
Type = GridUnitType.Star;
txtNumericValue.Text = value.Remove(value.Length - 1);
} else if (string.IsNullOrEmpty(value)) {
type = GridUnitType.Star;
Type = GridUnitType.Star;
txtNumericValue.Text = "";
} else {
type = GridUnitType.Pixel;
Type = GridUnitType.Pixel;
txtNumericValue.Text = value;
}
}
switch (type) {
switch (Type) {
case GridUnitType.Star:
btnType.Content = " * ";
txtNumericValue.Visibility = Visibility.Visible;
@ -80,19 +81,21 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -80,19 +81,21 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
void BtnTypeClick(object sender, RoutedEventArgs e)
{
switch (type) {
switch (Type) {
case GridUnitType.Auto:
type = GridUnitType.Star;
if (txtNumericValue.Text == "Invalid")
txtNumericValue.Text = "";
Type = GridUnitType.Star;
btnType.Content = " * ";
txtNumericValue.Visibility = Visibility.Visible;
break;
case GridUnitType.Star:
type = GridUnitType.Pixel;
Type = GridUnitType.Pixel;
btnType.Content = "Pixel";
txtNumericValue.Visibility = Visibility.Visible;
break;
case GridUnitType.Pixel:
type = GridUnitType.Auto;
Type = GridUnitType.Auto;
btnType.Content = "Auto";
txtNumericValue.Visibility = Visibility.Collapsed;
break;
@ -102,13 +105,13 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -102,13 +105,13 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
public GridLength? SelectedValue {
get {
if (type == GridUnitType.Star || type == GridUnitType.Pixel) {
if (Type == GridUnitType.Star || Type == GridUnitType.Pixel) {
double value;
if (type == GridUnitType.Star && string.IsNullOrEmpty(txtNumericValue.Text)) {
return new GridLength(1, type);
if (Type == GridUnitType.Star && string.IsNullOrEmpty(txtNumericValue.Text)) {
return new GridLength(1, Type);
} else {
if (double.TryParse(txtNumericValue.Text, out value))
return new GridLength(value, type);
return new GridLength(value, Type);
}
return null;
@ -138,7 +141,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -138,7 +141,7 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
void TxtNumericValueTextChanged(object sender, TextChangedEventArgs e)
{
if (type == GridUnitType.Star && string.IsNullOrEmpty(txtNumericValue.Text)) {
if (Type == GridUnitType.Star && string.IsNullOrEmpty(txtNumericValue.Text)) {
txtNumericValue.ClearValue(TextBox.BackgroundProperty);
txtNumericValue.ClearValue(TextBox.ForegroundProperty);
} else {
@ -151,12 +154,12 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs @@ -151,12 +154,12 @@ namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
txtNumericValue.ClearValue(TextBox.ForegroundProperty);
}
}
OnSelectedValueChanged(new GridLengthSelectionChangedEventArgs(this.panel.Orientation, cell, SelectedValue));
OnSelectedValueChanged(new GridLengthSelectionChangedEventArgs(this.panel.Orientation, Cell, SelectedValue));
}
void BtnDelClick(object sender, RoutedEventArgs e)
{
OnDeleted(new GridLengthSelectionChangedEventArgs(this.panel.Orientation, cell, SelectedValue));
OnDeleted(new GridLengthSelectionChangedEventArgs(this.panel.Orientation, Cell, SelectedValue));
}
}

38
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/UndoStep.cs

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="sie_pam@gmx.at"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace ICSharpCode.XamlBinding.PowerToys.Dialogs
{
public class UndoStep
{
public XElement Tree { get; set; }
public XElement RowDefinitions { get; set; }
public XElement ColumnDefinitions { get; set; }
public IList<XElement> AdditionalProperties { get; set; }
public static UndoStep CreateStep(XElement tree, XElement rows, XElement cols, IEnumerable<XElement> properties)
{
XElement rowCopy = new XElement(rows);
XElement colCopy = new XElement(cols);
XElement treeCopy = new XElement(tree);
IList<XElement> propertiesCopy = properties.Select(item => new XElement(item)).ToList();
return new UndoStep() {
Tree = treeCopy,
RowDefinitions = rowCopy,
ColumnDefinitions = colCopy,
AdditionalProperties = propertiesCopy
};
}
}
}

6
src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/XamlMenuCommand.cs

@ -40,11 +40,7 @@ namespace ICSharpCode.XamlBinding.PowerToys @@ -40,11 +40,7 @@ namespace ICSharpCode.XamlBinding.PowerToys
document.Declaration = null;
if (Refactor(provider.TextEditor, document)) {
using (provider.TextEditor.Document.OpenUndoGroup()) {
StringWriter sWriter = new StringWriter(CultureInfo.InvariantCulture);
XmlWriter writer = XmlWriter.Create(sWriter, CreateSettings());
document.WriteTo(writer);
writer.Flush();
provider.TextEditor.Document.Text = sWriter.ToString();
provider.TextEditor.Document.Text = document.ToString();
}
}
}

2
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj

@ -89,6 +89,7 @@ @@ -89,6 +89,7 @@
<Compile Include="PowerToys\Commands\PropertyEntry.cs" />
<Compile Include="PowerToys\Commands\RemoveMarginCommand.cs" />
<Compile Include="PowerToys\Commands\RemoveUnnecessaryAttributesCommand.cs" />
<Compile Include="PowerToys\Dialogs\DragDropMarkerAdorner.cs" />
<Compile Include="PowerToys\Dialogs\EditGridColumnsAndRowsDialog.xaml.cs">
<DependentUpon>EditGridColumnsAndRowsDialog.xaml</DependentUpon>
<SubType>Code</SubType>
@ -109,6 +110,7 @@ @@ -109,6 +110,7 @@
<DependentUpon>SourceClassFormEditor.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="PowerToys\Dialogs\UndoStep.cs" />
<Compile Include="PowerToys\XamlMenuCommand.cs" />
<Compile Include="QualifiedNameWithLocation.cs" />
<Compile Include="Utils.cs">

Loading…
Cancel
Save