diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml
index 90fffbf5..5a1e99f0 100644
--- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml
+++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml
@@ -20,12 +20,12 @@
-
- metric
- false
-
lastPath
C:\Documents and Settings\Branislav Stojkovic\Desktop
+
+ metric
+ true
+
\ No newline at end of file
diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/com/diyfever/diylc/components/ResistorInstance.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/com/diyfever/diylc/components/ResistorInstance.java
index 12a98402..dd023ec0 100644
--- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/com/diyfever/diylc/components/ResistorInstance.java
+++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/com/diyfever/diylc/components/ResistorInstance.java
@@ -18,6 +18,7 @@ import com.diyfever.diylc.model.measures.Resistance;
import com.diyfever.diylc.model.measures.ResistanceUnit;
import com.diyfever.diylc.model.measures.Size;
import com.diyfever.diylc.model.measures.SizeUnit;
+import com.diyfever.diylc.utils.Constants;
public class ResistorInstance implements IComponentInstance {
@@ -29,7 +30,7 @@ public class ResistorInstance implements IComponentInstance {
private Size s = new Size(1d, SizeUnit.cm);
private Color color = Color.green;
private Point leftTopCorner = new Point(0, 0);
- private Point otherCorner = new Point(100, 100);
+ private Point otherCorner = new Point((int) (Constants.GRID * 10), (int) (Constants.GRID * 10));
private String name = "something";
public ResistorInstance(String testField, Capacitance c, Resistance r, Size s, Color color,
diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/gui/MainFrame.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/gui/MainFrame.java
index a20a34e4..1c0c1217 100644
--- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/gui/MainFrame.java
+++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/gui/MainFrame.java
@@ -3,6 +3,8 @@ package com.diyfever.diylc.gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashMap;
@@ -17,7 +19,7 @@ import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
+import javax.swing.Timer;
import com.diyfever.diylc.common.BadPositionException;
import com.diyfever.diylc.model.Project;
@@ -95,14 +97,24 @@ public class MainFrame extends JFrame implements IView {
super.setVisible(b);
// TODO: hack to prevent painting issues in the scroll bar rulers. Find
// a better fix if possible.
- if (b) {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- canvasPlugin.refresh();
- }
- });
- }
+ Timer timer = new Timer(50, new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ canvasPlugin.refresh();
+ }
+
+ });
+ timer.setRepeats(false);
+ timer.start();
+ // if (b) {
+ // SwingUtilities.invokeLater(new Runnable() {
+ // @Override
+ // public void run() {
+ //
+ // }
+ // });
+ // }
}
private void createBasePanels() {
diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/presenter/Presenter.java
index 23fb5574..975fd7c0 100644
--- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/presenter/Presenter.java
+++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/com/diyfever/diylc/presenter/Presenter.java
@@ -87,7 +87,8 @@ public class Presenter implements IPlugInPort {
// D&D
private boolean dragInProgress = false;
- private Point dragStartPoint = null;
+ // Previous mouse location, not scaled for zoom factor.
+ private Point previousDragPoint = null;
private Project preDragProject = null;
private IComponentType componentSlot;
@@ -136,16 +137,19 @@ public class Presenter implements IPlugInPort {
@Override
public Cursor getCursorAt(Point point) {
- // Scale point to remove zoom factor.
- Point2D scaledPoint = new Point2D.Double(point.getX() / zoomLevel, point.getY() / zoomLevel);
- for (Map.Entry entry : componentAreaMap.entrySet()) {
- if (entry.getValue().contains(scaledPoint)) {
+ // Only change the cursor if we're not making a new component.
+ if (componentSlot == null) {
+ // Scale point to remove zoom factor.
+ Point2D scaledPoint = scalePoint(point);
+ for (Map.Entry entry : componentAreaMap.entrySet()) {
+ if (entry.getValue().contains(scaledPoint)) {
+ return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
+ }
+ }
+ if (componentsUnderCursor != null && !componentsUnderCursor.isEmpty()) {
return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
}
}
- if (componentsUnderCursor != null && !componentsUnderCursor.isEmpty()) {
- return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
- }
return Cursor.getDefaultCursor();
}
@@ -297,17 +301,23 @@ public class Presenter implements IPlugInPort {
}
g2d.setTransform(initialTx);
+ if ((drawOptions.contains(DrawOption.ZOOM)) && (Math.abs(1.0 - zoomLevel) > 1e-4)) {
+ g2d.scale(zoomLevel, zoomLevel);
+ }
// At the end draw selection rectangle.
if (drawOptions.contains(DrawOption.SELECTION) && (selectionRect != null)) {
g2d.setColor(Color.white);
- g2d.drawRect(selectionRect.x, selectionRect.y, selectionRect.width,
- selectionRect.height);
+ g2d.draw(selectionRect);
g2d.setColor(Color.black);
g2d.setStroke(Constants.dashedStroke);
- g2d.drawRect(selectionRect.x, selectionRect.y, selectionRect.width,
- selectionRect.height);
+ g2d.draw(selectionRect);
}
+
+ // g2d.setColor(Color.red);
+ // for (Area area : componentAreaMap.values()) {
+ // g2d.draw(area);
+ // }
}
@Override
@@ -431,9 +441,9 @@ public class Presenter implements IPlugInPort {
public void dragStarted(Point point) {
LOG.debug(String.format("dragStarted(%s)", point));
dragInProgress = true;
- dragStartPoint = point;
preDragProject = cloner.deepClone(currentProject);
Point scaledPoint = scalePoint(point);
+ previousDragPoint = scaledPoint;
List components = findComponentsAt(scaledPoint);
if (!componentsUnderCursor.isEmpty()) {
// If there are control points under the cursor, drag them.
@@ -457,33 +467,53 @@ public class Presenter implements IPlugInPort {
@Override
public boolean dragOver(Point point) {
+ Point scaledPoint = scalePoint(point);
if (!componentsUnderCursor.isEmpty()) {
- int dx = (int) ((point.x - dragStartPoint.x) / zoomLevel);
- int dy = (int) ((point.y - dragStartPoint.y) / zoomLevel);
+ // We're dragging control point(s).
+ // int dx = (int) ((point.x - dragStartPoint.x) / zoomLevel);
+ // int dy = (int) ((point.y - dragStartPoint.y) / zoomLevel);
+ //
+ IComponentInstance firstComponent = componentsUnderCursor.keySet().iterator().next();
+ ControlPointWrapper controlPoint = componentsUnderCursor.get(firstComponent);
+ // Re-read the value just in case.
+ try {
+ controlPoint.readFrom(firstComponent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ int x = (int) (Math
+ .round((controlPoint.getValue().x + scaledPoint.x - previousDragPoint.x)
+ / Constants.GRID) * Constants.GRID);
+ int y = (int) (Math
+ .round((controlPoint.getValue().y + scaledPoint.y - previousDragPoint.y)
+ / Constants.GRID) * Constants.GRID);
+ previousDragPoint.setLocation(x, y);
+
for (Entry entry : componentsUnderCursor
.entrySet()) {
try {
- ControlPointWrapper controlPoint = entry.getValue();
+ controlPoint = entry.getValue();
IComponentInstance component = entry.getKey();
controlPoint.readFrom(component);
if (controlPoint.isEditable()) {
- controlPoint.getValue().translate(dx, dy);
+ controlPoint.getValue().setLocation(x, y);
}
controlPoint.writeTo(component);
} catch (Exception e) {
}
}
- dragStartPoint = point;
+ // dragStartPoint = point;
} else if (selectedComponents.isEmpty()) {
// If there's no selection, the only thing to do is update the
// selection rectangle and refresh.
- this.selectionRect = Utils.createRectangle(point, dragStartPoint);
- messageDispatcher.dispatchMessage(EventType.SELECTION_RECT_CHANGED, selectionRect);
+ this.selectionRect = Utils.createRectangle(scaledPoint, previousDragPoint);
+ // messageDispatcher.dispatchMessage(EventType.SELECTION_RECT_CHANGED,
+ // selectionRect);
} else {
// If there are components selected translate their control points.
- translateSelectedComponents(dragStartPoint, point);
- dragStartPoint = point;
+ translateSelectedComponents(previousDragPoint, scaledPoint);
+ // dragStartPoint = point;
}
messageDispatcher.dispatchMessage(EventType.REPAINT);
return true;
@@ -495,19 +525,17 @@ public class Presenter implements IPlugInPort {
if (!dragInProgress) {
return;
}
+ Point scaledPoint = scalePoint(point);
if (selectedComponents.isEmpty()) {
// If there's no selection finalize selectionRect and see which
// components intersect with it.
- if (point != null) {
- this.selectionRect = Utils.createRectangle(point, dragStartPoint);
+ if (scaledPoint != null) {
+ this.selectionRect = Utils.createRectangle(scaledPoint, previousDragPoint);
}
selectedComponents.clear();
for (IComponentInstance component : currentProject.getComponents()) {
Area area = componentAreaMap.get(component);
- if ((area != null)
- && area.intersects(selectionRect.x / zoomLevel,
- selectionRect.y / zoomLevel, selectionRect.width / zoomLevel,
- selectionRect.height / zoomLevel)) {
+ if ((area != null) && area.intersects(selectionRect)) {
selectedComponents.add(component);
}
}
@@ -530,8 +558,9 @@ public class Presenter implements IPlugInPort {
LOG.debug("Drag ended outside the drawing area.");
return;
}
- int dx = (int) ((toPoint.x - fromPoint.x) / zoomLevel);
- int dy = (int) ((toPoint.y - fromPoint.y) / zoomLevel);
+ int dx = (int) (Math.round((toPoint.x - fromPoint.x) / zoomLevel / Constants.GRID) * Constants.GRID);
+ int dy = (int) (Math.round((toPoint.y - fromPoint.y) / zoomLevel / Constants.GRID) * Constants.GRID);
+ fromPoint.translate(dx, dy);
for (IComponentInstance component : selectedComponents) {
List controlPoints = ComponentProcessor.getInstance()
.extractControlPoints(component.getClass());
@@ -539,7 +568,7 @@ public class Presenter implements IPlugInPort {
try {
controlPoint.readFrom(component);
if (controlPoint.isEditable()) {
- controlPoint.getValue().translate(dx, dy);
+ translateControlPoint(controlPoint, dx, dy);
}
controlPoint.writeTo(component);
} catch (Exception e) {
@@ -549,6 +578,12 @@ public class Presenter implements IPlugInPort {
}
}
+ private void translateControlPoint(ControlPointWrapper controlPoint, int dx, int dy) {
+ int x = controlPoint.getValue().x + dx;
+ int y = controlPoint.getValue().y + dy;
+ controlPoint.getValue().setLocation(x, y);
+ }
+
@Override
public void addComponents(List components, Point preferredPoint) {
LOG.debug(String.format("addComponents(%s)", components));
@@ -628,7 +663,11 @@ public class Presenter implements IPlugInPort {
if (point != null) {
for (ControlPointWrapper controlPoint : controlPoints) {
controlPoint.readFrom(component);
- controlPoint.getValue().translate(point.x, point.y);
+ int x = controlPoint.getValue().x + point.x;
+ int y = controlPoint.getValue().y + point.y;
+ x = (int) (Math.round(x / Constants.GRID) * Constants.GRID);
+ y = (int) (Math.round(y / Constants.GRID) * Constants.GRID);
+ controlPoint.getValue().setLocation(x, y);
controlPoint.writeTo(component);
}
}