Skip to content

Commit 0ff3ff4

Browse files
author
x1gong
committed
Merge branch 'improveLineSelectionbyTanSu' of https://github.com/UCSDOalads/JavaSketchPad into changeFieldsInputWindowByXYG
2 parents 90d2070 + a61a8b6 commit 0ff3ff4

8 files changed

Lines changed: 132 additions & 67 deletions

File tree

src/actions/AddLazyJavaMethodComponentAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public void performAction() {
4545

4646
String desiaredConstructorIndex = JOptionPane.showInputDialog(
4747
"Please enter the index of the constructor you would like to use: \n\n\n"
48+
4849
+ getMethodsSelectionUI(methods));
4950
//call DialogInputChecker to check input
5051
DialogInputChecker inputChecker = new DialogInputChecker();
@@ -55,7 +56,6 @@ public void performAction() {
5556
assiciatedAction.setMethod(comp.getDisplayingClass().getMethods()[Integer.parseInt(desiaredConstructorIndex)]);
5657
GlobalPaintActionExecuter.getSharedInstance().execute(assiciatedAction, panel);
5758
}
58-
5959
}
6060

6161
public String getMethodsSelectionUI(Method[] methods) {

src/actions/global/globalactions/AddLazyJavaClassGlobalAction.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ protected void execute(PaintPanel panel) {
2525
ClassPaintComponent comp = new ClassPaintComponent(classToCreate, x, y);
2626
panel.addPaintComponent(comp);
2727

28+
if (panel.getSelectTool() != null) {
29+
panel.getSelectTool().clearSelection();
30+
panel.getSelectTool().selectComponent(comp);
31+
}
32+
2833
// add action to undo redo manager
2934
UndoRedoableInterface undoRedoBlock = new UndoRedoableInterface() {
3035

src/actions/global/globalactions/ConstructDataLineSegmentGlobalAction.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,37 @@ public DataLineSegment getLineSeg() {
3838

3939
@Override
4040
protected void execute(PaintPanel panel) {
41-
42-
if (!toPoint.getExpectedType().canBeAssignedFrom(fromPoint.getExpectedType())) {
41+
//Diagnostic
42+
//System.out.println(fromPoint.getExpectedType().getCurClass().getName());
43+
//System.out.println(toPoint.getExpectedType().getCurClass().getName());
44+
/*if (!toPoint.getExpectedType().canBeAssignedFrom(fromPoint.getExpectedType())) {
45+
4346
int result = JOptionPane.showConfirmDialog(panel,
4447
"The source type is " + fromPoint.getExpectedType() + ", the destination type is "
4548
+ toPoint.getExpectedType() + ". Do you want to proceed and create the connection anyway?",
4649
4750
"Type Mismatch", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
4851
if (result == JOptionPane.NO_OPTION) {
4952
return;
50-
}
53+
}*/
54+
//Below method was deprecated
55+
try{fromPoint.setExpectedType(toPoint.getExpectedType());}
56+
57+
catch(ClassCastException e){
58+
if (!toPoint.getExpectedType().canBeAssignedFrom(fromPoint.getExpectedType())) {
59+
60+
int result = JOptionPane.showConfirmDialog(panel,
61+
"The source type is " + fromPoint.getExpectedType() + ", the destination type is "
62+
+ toPoint.getExpectedType() + ". Do you want to proceed and create the connection anyway?",
63+
64+
"Type Mismatch", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
65+
if (result == JOptionPane.NO_OPTION) {
66+
return;
67+
}
5168

5269
}
70+
71+
}
5372

5473
DataLineSegment seg = new DataLineSegment(fromPoint, toPoint);
5574
panel.addPaintComponent(seg);

src/paintcomponents/LineSegment.java

Lines changed: 69 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,15 @@ public LineSegment(SimplePoint fromPoint, SimplePoint toPoint,
6868

6969
/**
7070
* Constructs a line segment with default width and default height.
71+
*
7172
* @param fromPoint
7273
* @param toPoint
7374
*/
7475
public LineSegment(SimplePoint fromPoint, SimplePoint toPoint) {
75-
this(fromPoint, toPoint,
76-
Defaults.sharedDefaults().defaultColorForLineSegment(),
77-
Defaults.sharedDefaults().defaultColorForSelectedLineSegment(),
78-
Defaults.sharedDefaults().defaultStrokeWidthForLineSegment());
76+
this(fromPoint, toPoint, Defaults.sharedDefaults()
77+
.defaultColorForLineSegment(), Defaults.sharedDefaults()
78+
.defaultColorForSelectedLineSegment(), Defaults
79+
.sharedDefaults().defaultStrokeWidthForLineSegment());
7980

8081
}
8182

@@ -102,22 +103,20 @@ public boolean contains(int x, int y) {
102103
if (fromPoint.contains(x, y) || toPoint.contains(x, y)) {
103104
return false;
104105
}
105-
// else return the D(curPoint , fromPoint) + D(curPoint, toPoint) ==
106-
// D(fromPoint, toPoint)
107-
double distanceBetweenXYandFrom = Math
108-
.sqrt(Math.pow(fromPoint.getX() - x, 2)
109-
+ Math.pow(fromPoint.getY() - y, 2));
110-
double distanceBetweenXYandTo = Math
111-
.sqrt(Math.pow(toPoint.getX() - x, 2)
112-
+ Math.pow(toPoint.getY() - y, 2));
113-
double distanceBetweenFromAndTo = Math
114-
.sqrt(Math.pow(toPoint.getX() - fromPoint.getX(), 2)
115-
+ Math.pow(toPoint.getY() - fromPoint.getY(), 2));
116-
117-
// checking delta distance
118-
// Note: this calculation is only an approximation
119-
if (Math.abs(distanceBetweenFromAndTo - distanceBetweenXYandFrom
120-
- distanceBetweenXYandTo) < Math.sqrt(strokeWidth)) {
106+
107+
double lineXDis = fromPoint.getX() - toPoint.getX();
108+
double lineYDis = toPoint.getY() - fromPoint.getY();
109+
double constantTerm = fromPoint.getY() * toPoint.getX()
110+
- toPoint.getY() * fromPoint.getX();
111+
112+
// Calculate point to line distance with formula.
113+
double pointToLineDis = Math
114+
.abs((lineYDis * x + lineXDis * y + constantTerm)
115+
/ Math.sqrt(Math.pow(lineYDis, 2)
116+
+ Math.pow(lineXDis, 2)));
117+
118+
// If the point is within 3 pixels of the line, return true.
119+
if (pointToLineDis <= 3 + strokeWidth / 2) {
121120
return true;
122121

123122
}
@@ -128,86 +127,98 @@ public boolean contains(int x, int y) {
128127
public void translate(int i, int j) {
129128
super.translate(i, j);
130129
// if from and to points are not selected, translate them as well
131-
if (this.fromPoint.isSelected() == false){
130+
if (this.fromPoint.isSelected() == false) {
132131
this.fromPoint.translate(i, j);
133132
}
134-
if (this.toPoint.isSelected() == false){
133+
if (this.toPoint.isSelected() == false) {
135134
this.toPoint.translate(i, j);
136135
}
137136

138137
}
139-
138+
140139
@Override
141140
public void saveToElement(Element rootElement, Document doc) {
142141
super.saveToElement(rootElement, doc);
143-
144-
//build elements
142+
143+
// build elements
145144
Element main = doc.createElement("linesegment");
146145

147146
Element fromPointElem = doc.createElement("frompoint");
148147
Element toPointElem = doc.createElement("topoint");
149148
Element defaultColorElem = doc.createElement("defaultcolor");
150149
Element selectColorElem = doc.createElement("selectcolor");
151150
Element strokeWidthElem = doc.createElement("strokewidth");
152-
153-
//append relationship
151+
152+
// append relationship
154153
main.appendChild(fromPointElem);
155154
main.appendChild(toPointElem);
156155
main.appendChild(defaultColorElem);
157156
main.appendChild(selectColorElem);
158157
main.appendChild(strokeWidthElem);
159158
rootElement.appendChild(main);
160-
161-
//fill data
162-
fromPointElem.setAttribute("id", Long.toString(fromPoint.getComponentID()));
159+
160+
// fill data
161+
fromPointElem.setAttribute("id",
162+
Long.toString(fromPoint.getComponentID()));
163163
toPointElem.setAttribute("id", Long.toString(toPoint.getComponentID()));
164-
XMLEncodingUtilForPaintComponents.attachRGB(defaultColor, defaultColorElem, doc);
165-
XMLEncodingUtilForPaintComponents.attachRGB(selectColor, selectColorElem, doc);
166-
strokeWidthElem.appendChild(doc.createTextNode(Double.toString(strokeWidth)));
167-
164+
XMLEncodingUtilForPaintComponents.attachRGB(defaultColor,
165+
defaultColorElem, doc);
166+
XMLEncodingUtilForPaintComponents.attachRGB(selectColor,
167+
selectColorElem, doc);
168+
strokeWidthElem.appendChild(doc.createTextNode(Double
169+
.toString(strokeWidth)));
170+
168171
}
169172

170173
/**
171174
*
172-
* Recover the line segment from a element that should be operated by saveToElement
175+
* Recover the line segment from a element that should be operated by
176+
* saveToElement
173177
*
174-
* The implementation searches all panel's paintcomponents to find the matching ids using PanelIO.idMapping
178+
* The implementation searches all panel's paintcomponents to find the
179+
* matching ids using PanelIO.idMapping
175180
*
176181
* @param rootElement
177182
* @param panel
178183
*/
179184
public LineSegment(Element rootElement, PaintPanel panel) {
180185
super(rootElement, panel);
181-
Element main = (Element) rootElement.getElementsByTagName("linesegment").item(0);
182-
Element fromPointElement = (Element) main.getElementsByTagName("frompoint").item(0);
183-
Element toPointElem = (Element) main.getElementsByTagName("topoint").item(0);
184-
Element defaultColorElem = (Element) main.getElementsByTagName("defaultcolor").item(0);
185-
Element selectColorElem = (Element) main.getElementsByTagName("selectcolor").item(0);
186-
Element strokeWidthElem = (Element) main.getElementsByTagName("strokewidth").item(0);
187-
188-
189-
defaultColor = XMLEncodingUtilForPaintComponents.getRGB(defaultColorElem);
186+
Element main = (Element) rootElement
187+
.getElementsByTagName("linesegment").item(0);
188+
Element fromPointElement = (Element) main.getElementsByTagName(
189+
"frompoint").item(0);
190+
Element toPointElem = (Element) main.getElementsByTagName("topoint")
191+
.item(0);
192+
Element defaultColorElem = (Element) main.getElementsByTagName(
193+
"defaultcolor").item(0);
194+
Element selectColorElem = (Element) main.getElementsByTagName(
195+
"selectcolor").item(0);
196+
Element strokeWidthElem = (Element) main.getElementsByTagName(
197+
"strokewidth").item(0);
198+
199+
defaultColor = XMLEncodingUtilForPaintComponents
200+
.getRGB(defaultColorElem);
190201
selectColor = XMLEncodingUtilForPaintComponents.getRGB(selectColorElem);
191202
strokeWidth = Double.parseDouble(strokeWidthElem.getTextContent());
192203
stroke = new BasicStroke((float) strokeWidth);
193-
194-
//append from and to points
195-
204+
205+
// append from and to points
206+
196207
ArrayList<PaintComponent> paintComponents = panel.getPaintComponents();
197-
198-
199-
//select only the paint components to check ID
200-
long fromPointID = PanelIO.idMapping.get(Long.parseLong(fromPointElement.getAttribute("id")));
201-
long toPointID = PanelIO.idMapping.get(Long.parseLong(toPointElem.getAttribute("id")));
202-
208+
209+
// select only the paint components to check ID
210+
long fromPointID = PanelIO.idMapping.get(Long
211+
.parseLong(fromPointElement.getAttribute("id")));
212+
long toPointID = PanelIO.idMapping.get(Long.parseLong(toPointElem
213+
.getAttribute("id")));
214+
203215
for (PaintComponent paintComponent : paintComponents) {
204-
if(paintComponent.getComponentID() == fromPointID){
216+
if (paintComponent.getComponentID() == fromPointID) {
205217
fromPoint = (SimplePoint) paintComponent;
206-
} else if (paintComponent.getComponentID() == toPointID){
207-
toPoint = (SimplePoint) paintComponent;
218+
} else if (paintComponent.getComponentID() == toPointID) {
219+
toPoint = (SimplePoint) paintComponent;
208220
}
209221
}
210222
}
211-
212223

213224
}

src/paintcomponents/data/DataToPoint.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public DataToPoint(int x, int y, Type expectedType) {
5353
public Object fetchData() throws NoConnectingLineSegmentException, NoSuchElementException, DataFromPointNoDataProviderException, DataFromPointProviderCannotProvideDataException{
5454
if(this.lineSegment == null) throw new NoConnectingLineSegmentException();
5555

56-
Object returnVal = lineSegment.getFromPoint().getData();
56+
Object returnVal = lineSegment.getFromPoint().getData().toString();
5757
if(returnVal == null) throw new NoSuchElementException();
5858
return returnVal;
5959

src/painttools/toolbar/ToolBar.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ public ToolBar(PaintPanel panel) {
4444
selectTool = new SelectTool(panel);
4545
addTool(new DotTool());
4646
addTool(selectTool);
47+
addTool(new LineTool());
4748

4849

49-
addTool(new AddClassTool(panel));
50-
addTool(new AddInputBoxTool(panel));
51-
addTool(new AddOutputBoxTool(panel));
50+
addComponentTool(new AddClassTool(panel));
51+
addComponentTool(new AddInputBoxTool(panel));
52+
addComponentTool(new AddOutputBoxTool(panel));
5253

53-
addTool(new LineTool());
5454

5555
addSeprator();
5656

@@ -80,6 +80,29 @@ public void actionPerformed(ActionEvent e) {
8080
add(button);
8181
}
8282

83+
/**
84+
* Adds a component tool to the toolbar. This method will add specific tool to the
85+
* tool bar, and an action listener associated with it
86+
*
87+
* @param tool
88+
*/
89+
private void addComponentTool(PaintTool tool) {
90+
ToolButton button = tool.getButton();
91+
buttons.add(button);
92+
button.addActionListener(new ActionListener() {
93+
94+
@Override
95+
public void actionPerformed(ActionEvent e) {
96+
setButtonSelection(e);
97+
select(tool);
98+
99+
buttons.get(1).doClick();
100+
}
101+
});
102+
addSeprator();
103+
add(button);
104+
}
105+
83106
/**
84107
* Adds a ToolBarListener to this toolbar
85108
* @param listener

src/typesystem/HaskellType.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,10 @@ public boolean canBeAssignedFrom(Type type) {
1212
return false;
1313
}
1414

15+
@Override
16+
public Class getCurClass() {
17+
// TODO Auto-generated method stub
18+
return null;
19+
}
20+
1521
}

src/typesystem/Type.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
public abstract class Type {
44

55
public abstract boolean canBeAssignedFrom(Type type);
6+
public abstract Class getCurClass();
67
}

0 commit comments

Comments
 (0)