Browse Source

PathHandler seem's now fully workin.

Only Code cleanup needed
pull/633/head
jogibear9988 11 years ago
parent
commit
925b06c635
  1. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs
  2. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/LineExtensionBase.cs
  3. 111
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs
  4. 6
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs
  5. 4
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItem.cs

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/DefaultPlacementBehavior.cs

@ -178,7 +178,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
public virtual Point PlacePoint(Point point) public virtual Point PlacePoint(Point point)
{ {
return point; return new Point(Math.Round(point.X), Math.Round(point.Y));
} }
} }
} }

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/LineExtensionBase.cs

@ -87,6 +87,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
UpdateAdornerVisibility(); UpdateAdornerVisibility();
} }
protected override void OnRemove() protected override void OnRemove()
{ {
this.ExtendedItem.PropertyChanged -= OnPropertyChanged; this.ExtendedItem.PropertyChanged -= OnPropertyChanged;

111
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs

@ -328,6 +328,8 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
private void SelectThumb(PathThumb mprt) private void SelectThumb(PathThumb mprt)
{ {
CommitOrAbortKeyboardOperation();
var points = GetPoints(); var points = GetPoints();
Point p = points[mprt.Index].TranslatedPoint; Point p = points[mprt.Index].TranslatedPoint;
_selectedThumbs.Add(mprt.Index, new Bounds { X = p.X, Y = p.Y }); _selectedThumbs.Add(mprt.Index, new Bounds { X = p.X, Y = p.Y });
@ -375,22 +377,40 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
} }
} }
bool _isKeyboardMoveing;
void SetOperation() void SetOperation()
{ {
var designPanel = ExtendedItem.Services.DesignPanel as DesignPanel; var designPanel = ExtendedItem.Services.DesignPanel as DesignPanel;
_zoom = designPanel.TryFindParent<ZoomControl>(); _zoom = designPanel.TryFindParent<ZoomControl>();
CommitOrAbortKeyboardOperation();
//Move a Virtual Design Item arround... (for Snaplines, raster, ...) //Move a Virtual Design Item arround... (for Snaplines, raster, ...)
//And Resfresh the Points after Positioning that Item! //And Resfresh the Points after Positioning that Item!
if (resizeBehavior != null) //if (resizeBehavior != null)
operation = PlacementOperation.Start(extendedItemArray, PlacementType.MovePoint); operation = PlacementOperation.Start(extendedItemArray, PlacementType.MovePoint);
else // else
// {
// changeGroup = ExtendedItem.Context.OpenGroup("Resize", extendedItemArray);
// }
_isResizing = true;
}
void CommitOrAbortKeyboardOperation()
{ {
changeGroup = ExtendedItem.Context.OpenGroup("Resize", extendedItemArray); if (operation != null) {
if (!_isKeyboardMoveing) {
var op = operation;
operation = null;
op.Abort();
} }
_isResizing = true; else
CommitOperation();
} }
_isKeyboardMoveing = false;
}
void CommitOperation() void CommitOperation()
{ {
if (operation != null) if (operation != null)
@ -400,19 +420,21 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
pathPoints[i].Commit(); pathPoints[i].Commit();
} }
operation.Commit(); var op = operation;
operation = null; operation = null;
op.Commit();
_isKeyboardMoveing = false;
} }
else // else
{ // {
if (changeGroup != null) // if (changeGroup != null)
changeGroup.Commit(); // changeGroup.Commit();
changeGroup = null; // changeGroup = null;
} // }
_isResizing = false; _isResizing = false;
Invalidate(); //Invalidate();
} }
protected void drag_Changed(DragListener drag) protected void drag_Changed(DragListener drag)
@ -420,7 +442,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
var mprt = drag.Target as PathThumb; var mprt = drag.Target as PathThumb;
if (mprt != null) { if (mprt != null) {
_isDragging = true; _isDragging = true;
MovePoints(pathPoints, drag.Delta.X, drag.Delta.Y); MovePoints(drag.Delta.X, drag.Delta.Y);
} }
} }
@ -462,6 +484,23 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
ExtendedItem.PropertyChanged += OnPropertyChanged; ExtendedItem.PropertyChanged += OnPropertyChanged;
resizeBehavior = PlacementOperation.GetPlacementBehavior(extendedItemArray); resizeBehavior = PlacementOperation.GetPlacementBehavior(extendedItemArray);
UpdateAdornerVisibility(); UpdateAdornerVisibility();
this.ExtendedItem.Services.Selection.PrimarySelectionChanged += ExtendedItem_Services_Selection_PrimarySelectionChanged;
}
protected override void OnRemove()
{
this.ExtendedItem.Services.Selection.PrimarySelectionChanged -= ExtendedItem_Services_Selection_PrimarySelectionChanged;
base.OnRemove();
}
void ExtendedItem_Services_Selection_PrimarySelectionChanged(object sender, EventArgs e)
{
if (operation != null && _isKeyboardMoveing) {
var newSelection = this.ExtendedItem.Services.Selection.SelectedItems.ToList();
CommitOrAbortKeyboardOperation();
this.ExtendedItem.Services.Selection.SetSelectedComponents(newSelection);
}
} }
#endregion #endregion
@ -474,7 +513,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
protected List<PathPoint> GetPoints(DesignItem designItem) protected List<PathPoint> GetPoints(DesignItem designItem)
{ {
var retVal = new List<PathPoint>(); var retVal = new List<PathPoint>();
AddGeometryPoints(retVal, ((Path)designItem.View).Data, ((Path)designItem.View), () => designItem.Properties["Data"].SetValue(((Path)designItem.View).Data)); AddGeometryPoints(retVal, ((Path)designItem.View).Data, ((Path)designItem.View), () => designItem.Properties["Data"].SetValue(((Path)designItem.View).Data.ToString()));
return retVal; return retVal;
} }
@ -500,6 +539,13 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
} else if (geometry is StreamGeometry) { } else if (geometry is StreamGeometry) {
var sg = geometry as StreamGeometry; var sg = geometry as StreamGeometry;
var pg = sg.GetFlattenedPathGeometry().Clone(); var pg = sg.GetFlattenedPathGeometry().Clone();
var d = ExtendedItem.Services.Component.GetDesignItem(sg);
if (d != null)
saveDesignItem = () =>
{
d.ContentProperty.SetValue(pg.ToString());
};
//geometry.Properties[PathGeometry.FiguresProperty].SetValue(figure.ToString());
AddGeometryPoints(list, pg, shape, saveDesignItem); AddGeometryPoints(list, pg, shape, saveDesignItem);
} else if (geometry is PathGeometry) { } else if (geometry is PathGeometry) {
var g = geometry as PathGeometry; var g = geometry as PathGeometry;
@ -618,13 +664,13 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
} }
} }
List<PathPoint> MovePoints(List<PathPoint> pc, double displacementX, double displacementY) void MovePoints(double displacementX, double displacementY, bool useContainerBehavior = true)
{ {
var relativeTo = new Vector(operation.PlacedItems[0].Bounds.TopLeft.X, operation.PlacedItems[0].Bounds.TopLeft.Y); var relativeTo = new Vector(operation.PlacedItems[0].Bounds.TopLeft.X, operation.PlacedItems[0].Bounds.TopLeft.Y);
//iterate all selected points //iterate all selected points
foreach (int i in _selectedThumbs.Keys) { foreach (int i in _selectedThumbs.Keys) {
Point p = pc[i].TranslatedPoint; Point p = pathPoints[i].TranslatedPoint;
//x and y is calculated from the currentl point //x and y is calculated from the currentl point
double x = _selectedThumbs[i].X + displacementX; double x = _selectedThumbs[i].X + displacementX;
@ -633,11 +679,11 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
p.X = x; p.X = x;
p.Y = y; p.Y = y;
if (useContainerBehavior)
p = operation.CurrentContainerBehavior.PlacePoint(p + relativeTo) - relativeTo; p = operation.CurrentContainerBehavior.PlacePoint(p + relativeTo) - relativeTo;
pc[i].TranslatedPoint = p; pathPoints[i].TranslatedPoint = p;
} }
return pc;
} }
#region IKeyDown #region IKeyDown
@ -647,30 +693,35 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
get { return _selectedThumbs.Count == 0 || _selectedThumbs.Count == pathPoints.Count - 1; } get { return _selectedThumbs.Count == 0 || _selectedThumbs.Count == pathPoints.Count - 1; }
} }
int _movingDistance; int _movingDistanceX;
int _movingDistanceY;
public void KeyDownAction(object sender, KeyEventArgs e) public void KeyDownAction(object sender, KeyEventArgs e)
{ {
Debug.WriteLine("KeyDown");
if (IsArrowKey(e.Key)) { if (IsArrowKey(e.Key)) {
if (operation == null) { if (operation == null) {
SetOperation(); SetOperation();
_movingDistance = 0; _isKeyboardMoveing = true;
_movingDistanceX = 0;
_movingDistanceY = 0;
} }
} }
var dx1 = (e.Key == Key.Left) ? Keyboard.IsKeyDown(Key.LeftShift) ? _movingDistance - 10 : _movingDistance - 1 : 0; var dx1 = (e.Key == Key.Left) ? Keyboard.IsKeyDown(Key.LeftShift) ? - 10 : - 1 : 0;
var dy1 = (e.Key == Key.Up) ? Keyboard.IsKeyDown(Key.LeftShift) ? _movingDistance - 10 : _movingDistance - 1 : 0; var dy1 = (e.Key == Key.Up) ? Keyboard.IsKeyDown(Key.LeftShift) ? - 10 : - 1 : 0;
var dx2 = (e.Key == Key.Right) ? Keyboard.IsKeyDown(Key.LeftShift) ? _movingDistance + 10 : _movingDistance + 1 : 0; var dx2 = (e.Key == Key.Right) ? Keyboard.IsKeyDown(Key.LeftShift) ? + 10 : + 1 : 0;
var dy2 = (e.Key == Key.Down) ? Keyboard.IsKeyDown(Key.LeftShift) ? _movingDistance + 10 : _movingDistance + 1 : 0; var dy2 = (e.Key == Key.Down) ? Keyboard.IsKeyDown(Key.LeftShift) ? + 10 : + 1 : 0;
_movingDistanceX += (dx1 + dx2);
_movingDistanceY += (dy1 + dy2);
_movingDistance = (dx1 + dx2 + dy1 + dy2); if (operation != null)
MovePoints(_movingDistanceX, _movingDistanceY, false);
} }
public void KeyUpAction(object sender, KeyEventArgs e) public void KeyUpAction(object sender, KeyEventArgs e)
{ {
Debug.WriteLine("Keyup"); // if (IsArrowKey(e.Key))
if (IsArrowKey(e.Key)) // CommitOperation();
CommitOperation();
} }
bool IsArrowKey(Key key) bool IsArrowKey(Key key)

6
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs

@ -106,6 +106,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
List<Snapline> drawLines; List<Snapline> drawLines;
double delta; double delta;
var newPoint = base.PlacePoint(point);
if (Snap(horizontalInput, horizontalMap, Accuracy, out drawLines, out delta)) if (Snap(horizontalInput, horizontalMap, Accuracy, out drawLines, out delta))
{ {
foreach (var d in drawLines) foreach (var d in drawLines)
@ -115,6 +116,8 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
point.Y += delta; point.Y += delta;
} }
else
point.Y = newPoint.Y;
if (Snap(verticalInput, verticalMap, Accuracy, out drawLines, out delta)) if (Snap(verticalInput, verticalMap, Accuracy, out drawLines, out delta))
{ {
@ -125,6 +128,9 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
point.X += delta; point.X += delta;
} }
else
point.X = newPoint.X;
return point; return point;
} }

4
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItem.cs

@ -135,9 +135,7 @@ namespace ICSharpCode.WpfDesign
/// </summary> /// </summary>
public IEnumerable<Extension> Extensions { public IEnumerable<Extension> Extensions {
get { get {
foreach (ExtensionEntry entry in _extensions) { return _extensions.Select(x => x.Extension).ToList();
yield return entry.Extension;
}
} }
} }

Loading…
Cancel
Save