Skip to content

Commit f6ec0ea

Browse files
committed
Fixing RotateMouseTool's rotation center detection. Minor code styling/mods for the rest.
1 parent bbdf87d commit f6ec0ea

10 files changed

Lines changed: 141 additions & 47 deletions

File tree

src/org/wandora/application/gui/topicpanels/graphpanel/TopicMapGraphPanel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,14 +397,14 @@ public Collection<Topic> getSelectedTopics(){
397397
return ret;
398398
}
399399
public void clearModel(){
400-
System.out.println("Clear model");
400+
// System.out.println("Clear model");
401401
model=null;
402402
tmModel=null;
403403
stopThread();
404404
repaint();
405405
}
406406
public void remakeModels(TopicMap tm){
407-
System.out.println("Remake model");
407+
// System.out.println("Remake model");
408408
needsRefresh=false;
409409
model=new VModel(this);
410410
tmModel=new TopicMapModel(model,tm);

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/DragNodeMouseTool.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,16 @@ public class DragNodeMouseTool extends MouseTool {
4141
private boolean pinned=false;
4242
private VNode draggingNode=null;
4343
private double dragOffsX,dragOffsY,dragOffsX2,dragOffsY2;
44+
45+
4446
/** Creates a new instance of DragNodeMouseTool */
4547
public DragNodeMouseTool() {
4648
}
4749

50+
4851
@Override
49-
public boolean mouseReleased(TopicMapGraphPanel panel, int mousex,int mousey) {
50-
if(draggingNode!=null){
52+
public boolean mouseReleased(TopicMapGraphPanel panel, int mousex, int mousey) {
53+
if(draggingNode!=null) {
5154
draggingNode.setPinned(pinned);
5255
panel.releaseMouseTool();
5356
draggingNode=null;
@@ -56,10 +59,11 @@ public boolean mouseReleased(TopicMapGraphPanel panel, int mousex,int mousey) {
5659
else return false;
5760
}
5861

62+
5963
@Override
60-
public boolean mousePressed(TopicMapGraphPanel panel, int mousex,int mousey) {
64+
public boolean mousePressed(TopicMapGraphPanel panel, int mousex, int mousey) {
6165
VNode mouseOverNode=panel.getMouseOverNode();
62-
if(mouseOverNode!=null && panel.lockMouseTool(this)){
66+
if(mouseOverNode!=null && panel.lockMouseTool(this)) {
6367
T2<Double,Double> m=panel.getMouseWorldCoordinates();
6468
draggingNode=mouseOverNode;
6569
pinned=mouseOverNode.isPinned();
@@ -71,9 +75,10 @@ public boolean mousePressed(TopicMapGraphPanel panel, int mousex,int mousey) {
7175
return false;
7276
}
7377

78+
7479
@Override
75-
public boolean mouseDragged(TopicMapGraphPanel panel, int mousex,int mousey) {
76-
if(draggingNode!=null){
80+
public boolean mouseDragged(TopicMapGraphPanel panel, int mousex, int mousey) {
81+
if(draggingNode!=null) {
7782
panel.setMouseFollowNode(null);
7883
T2<Double,Double> m=panel.getMouseWorldCoordinates();
7984
draggingNode.setX(m.e1);
@@ -83,6 +88,7 @@ public boolean mouseDragged(TopicMapGraphPanel panel, int mousex,int mousey) {
8388
return false;
8489
}
8590

91+
8692
@Override
8793
public Cursor getCursor(TopicMapGraphPanel panel, int mousex, int mousey){
8894
VNode mouseOverNode=panel.getMouseOverNode();

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/DrawAssociationMouseTool.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@
2626
*/
2727

2828
package org.wandora.application.gui.topicpanels.graphpanel.mousetools;
29+
2930
import org.wandora.application.gui.topicpanels.graphpanel.*;
3031
import org.wandora.application.gui.topicpanels.graphpanel.projections.Projection;
31-
import javax.swing.*;
3232
import java.awt.*;
33-
import org.wandora.application.*;
3433
import org.wandora.topicmap.*;
3534
import java.util.*;
3635
import static org.wandora.utils.Tuples.*;
3736
import org.wandora.application.gui.*;
3837

38+
3939
/**
4040
*
4141
* @author olli
@@ -44,10 +44,12 @@ public class DrawAssociationMouseTool extends MouseTool {
4444
private VNode startNode=null;
4545
private VNode endNode=null;
4646

47+
4748
/** Creates a new instance of DrawAssociationMouseTool */
4849
public DrawAssociationMouseTool() {
4950
}
5051

52+
5153
@Override
5254
public boolean mouseReleased(TopicMapGraphPanel panel, int mousex,int mousey) {
5355
if(startNode!=null){
@@ -64,20 +66,23 @@ public boolean mouseReleased(TopicMapGraphPanel panel, int mousex,int mousey) {
6466
d.prefill(false);
6567
d.setVisible(true);
6668
Association a=d.getCreatedAssociation();
67-
if(a!=null){
69+
if(a!=null) {
6870
TopicMapModel tmModel=panel.getTopicMapModel();
6971
VModel vModel=panel.getModel();
7072
Edge e=tmModel.getEdgeFor(a);
7173
if(e!=null) vModel.addEdge(e);
72-
else{
74+
else {
7375
Node n=tmModel.getNodeFor(a);
7476
if(n!=null){
7577
VNode vn=vModel.addNode(n);
7678
vModel.openNode(vn);
7779
}
7880
}
7981
}
80-
}catch(TopicMapException tme){tme.printStackTrace();}
82+
}
83+
catch(TopicMapException tme){
84+
tme.printStackTrace();
85+
}
8186
}
8287
}
8388
startNode=null;
@@ -87,6 +92,7 @@ public boolean mouseReleased(TopicMapGraphPanel panel, int mousex,int mousey) {
8792
else return false;
8893
}
8994

95+
9096
@Override
9197
public boolean mousePressed(TopicMapGraphPanel panel, int mousex,int mousey) {
9298
VNode mouseOverNode=panel.getMouseOverNode();
@@ -98,6 +104,7 @@ public boolean mousePressed(TopicMapGraphPanel panel, int mousex,int mousey) {
98104
return false;
99105
}
100106

107+
101108
@Override
102109
public boolean mouseDragged(TopicMapGraphPanel panel, int mousex,int mousey) {
103110
if(startNode!=null){
@@ -108,13 +115,16 @@ public boolean mouseDragged(TopicMapGraphPanel panel, int mousex,int mousey) {
108115
}
109116
return false;
110117
}
118+
119+
111120
@Override
112121
public Cursor getCursor(TopicMapGraphPanel panel, int mousex, int mousey){
113122
VNode mouseOverNode=panel.getMouseOverNode();
114123
if(mouseOverNode!=null) return Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
115124
else return null;
116125
}
117126

127+
118128
@Override
119129
public void paint(Graphics2D g2,TopicMapGraphPanel panel){
120130
if(startNode!=null){

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/EraserTool.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,24 @@
3838
*/
3939
public class EraserTool extends MouseTool {
4040

41+
4142
/** Creates a new instance of EraserTool */
4243
public EraserTool() {
4344
}
45+
4446

4547
@Override
4648
public boolean mouseClicked(TopicMapGraphPanel panel, int mousex,int mousey) {
4749
VNode mouseOverNode=panel.getMouseOverNode();
4850
VModel model=panel.getModel();
49-
if(mouseOverNode!=null) {
51+
if(mouseOverNode != null && model != null) {
5052
model.openNode(mouseOverNode);
5153
return true;
5254
}
5355
else return false;
5456
}
57+
58+
5559
@Override
5660
public Cursor getCursor(TopicMapGraphPanel panel, int mousex, int mousey){
5761
VNode mouseOverNode=panel.getMouseOverNode();

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/ExpandMouseTool.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,24 @@
3636
*/
3737
public class ExpandMouseTool extends MouseTool {
3838

39+
3940
/** Creates a new instance of ExpandMouseTool */
4041
public ExpandMouseTool() {
4142
}
4243

44+
4345
@Override
4446
public boolean mouseClicked(TopicMapGraphPanel panel, int mousex,int mousey) {
4547
VNode mouseOverNode=panel.getMouseOverNode();
4648
VModel model=panel.getModel();
47-
if(mouseOverNode!=null) {
49+
if(mouseOverNode != null && model != null) {
4850
model.openNode(mouseOverNode);
4951
return true;
5052
}
5153
else return false;
5254
}
55+
56+
5357
@Override
5458
public Cursor getCursor(TopicMapGraphPanel panel, int mousex, int mousey){
5559
VNode mouseOverNode=panel.getMouseOverNode();

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/MenuMouseTool.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import org.wandora.application.gui.topicpanels.graphpanel.*;
3131
import javax.swing.*;
32-
import java.awt.Point;
3332

3433
/**
3534
*
@@ -43,24 +42,21 @@ public MenuMouseTool() {
4342

4443

4544
@Override
46-
public boolean mouseClicked(TopicMapGraphPanel panel, int mousex,int mousey) {
45+
public boolean mouseClicked(TopicMapGraphPanel panel, int mousex, int mousey) {
4746
VNode mouseOverNode=panel.getMouseOverNode();
4847
VEdge mouseOverEdge=panel.getMouseOverEdge();
4948
VModel model=panel.getModel();
5049
if(mouseOverNode!=null){
51-
// popupOpen=true;
5250
if(!mouseOverNode.isSelected()) model.setSelection(mouseOverNode);
5351
JPopupMenu menu=panel.getNodeMenu();
5452
menu.show(panel,mousex,mousey);
5553
}
5654
else if(mouseOverEdge!=null){
57-
// popupOpen=true;
5855
if(!mouseOverEdge.isSelected()) model.setSelection(mouseOverEdge);
5956
JPopupMenu menu=panel.getEdgeMenu();
6057
menu.show(panel,mousex,mousey);
6158
}
62-
else {
63-
// popupOpen=true;
59+
else {
6460
JPopupMenu menu=panel.getGeneralMenu();
6561
menu.show(panel,mousex,mousey);
6662
}

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/OpenTopicMouseTool.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
package org.wandora.application.gui.topicpanels.graphpanel.mousetools;
2929

3030
import org.wandora.application.gui.topicpanels.graphpanel.*;
31-
import javax.swing.*;
3231
import java.awt.*;
3332
import org.wandora.application.*;
3433
import org.wandora.topicmap.*;
@@ -43,6 +42,7 @@ public class OpenTopicMouseTool extends MouseTool {
4342
public OpenTopicMouseTool() {
4443
}
4544

45+
4646
@Override
4747
public boolean mouseClicked(TopicMapGraphPanel panel, int mousex,int mousey) {
4848
VNode mouseOverNode = panel.getMouseOverNode();

src/org/wandora/application/gui/topicpanels/graphpanel/mousetools/RotateMouseTool.java

Lines changed: 63 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@
2626
*/
2727

2828
package org.wandora.application.gui.topicpanels.graphpanel.mousetools;
29+
2930
import org.wandora.application.gui.topicpanels.graphpanel.*;
30-
import javax.swing.*;
3131
import java.awt.*;
32+
import java.util.Set;
33+
import org.wandora.application.gui.topicpanels.graphpanel.projections.Projection;
3234
import static org.wandora.utils.Tuples.*;
3335

36+
3437
/**
3538
*
3639
* @author olli
@@ -42,47 +45,52 @@ public class RotateMouseTool extends MouseTool {
4245
public RotateMouseTool() {
4346
}
4447

48+
4549
@Override
4650
public boolean mouseReleased(TopicMapGraphPanel panel, int mousex,int mousey) {
47-
if(draggingView){
51+
if(draggingView) {
4852
panel.releaseMouseTool();
4953
draggingView=false;
5054
return true;
5155
}
5256
else return false;
5357
}
5458

59+
5560
@Override
5661
public boolean mousePressed(TopicMapGraphPanel panel, int mousex,int mousey) {
57-
if(panel.lockMouseTool(this)){
62+
if(panel.lockMouseTool(this)) {
5863
draggingView=true;
59-
VNode center=panel.getModel().getNode(panel.getTopicMapModel().getNodeFor(panel.getRootTopic()));
60-
T2<Double,Double> m=panel.getMouseWorldCoordinates();
61-
dragAngle=Math.atan2(m.e2-center.getY(),m.e1-center.getX());
64+
T2<Double,Double> center = getRotationCenter(panel);
65+
T2<Double,Double> m = panel.getMouseWorldCoordinates();
66+
dragAngle=Math.atan2(m.e2-center.e2, m.e1-center.e1);
6267
return true;
6368
}
6469
return false;
6570
}
6671

72+
6773
@Override
6874
public boolean mouseDragged(TopicMapGraphPanel panel, int mousex,int mousey) {
69-
if(draggingView){
70-
panel.setMouseFollowNode(null);
71-
VNode center=panel.getModel().getNode(panel.getTopicMapModel().getNodeFor(panel.getRootTopic()));
72-
T2<Double,Double> m=panel.getMouseWorldCoordinates();
73-
double angle=Math.atan2(m.e2-center.getY(),m.e1-center.getX());
74-
double d=angle-dragAngle;
75-
76-
for(VNode vnode : panel.getModel().getNodes()){
77-
double dx=vnode.getX()-center.getX();
78-
double dy=vnode.getY()-center.getY();
79-
double l=Math.sqrt(dx*dx+dy*dy);
80-
double a=Math.atan2(dy,dx);
81-
vnode.setX(center.getX()+l*Math.cos(a+d));
82-
vnode.setY(center.getY()+l*Math.sin(a+d));
75+
if(draggingView && panel != null) {
76+
VModel model = panel.getModel();
77+
if(model != null) {
78+
panel.setMouseFollowNode(null);
79+
T2<Double,Double> center = getRotationCenter(panel);
80+
T2<Double,Double> m = panel.getMouseWorldCoordinates();
81+
double angle=Math.atan2(m.e2-center.e2, m.e1-center.e1);
82+
double d=angle-dragAngle;
83+
84+
for(VNode vnode : model.getNodes()) {
85+
double dx=vnode.getX()-center.e1;
86+
double dy=vnode.getY()-center.e2;
87+
double l=Math.sqrt(dx*dx+dy*dy);
88+
double a=Math.atan2(dy,dx);
89+
vnode.setX(center.e1+l*Math.cos(a+d));
90+
vnode.setY(center.e2+l*Math.sin(a+d));
91+
}
92+
dragAngle=angle;
8393
}
84-
85-
dragAngle=angle;
8694
return true;
8795
}
8896
return false;
@@ -94,4 +102,37 @@ public Cursor getCursor(TopicMapGraphPanel panel, int mousex, int mousey){
94102
return Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
95103
}
96104

105+
106+
private T2<Double,Double> getRotationCenter(TopicMapGraphPanel panel) {
107+
double centerX = 0;
108+
double centerY = 0;
109+
110+
VNode rootNode = panel.getRootNode();
111+
if(rootNode != null) {
112+
centerX = rootNode.getX();
113+
centerY = rootNode.getY();
114+
}
115+
else {
116+
Set<VNode> selectedNodes = panel.getSelectedNodes();
117+
if(selectedNodes != null && !selectedNodes.isEmpty()) {
118+
VNode selectedNode = selectedNodes.iterator().next();
119+
if(selectedNode != null) {
120+
centerX = selectedNode.getX();
121+
centerY = selectedNode.getY();
122+
}
123+
}
124+
else {
125+
Projection projection = panel.getProjection();
126+
if(projection != null) {
127+
T2<Double,Double> leftUpper = projection.screenToWorld(0, 0);
128+
T2<Double,Double> rightLower = projection.screenToWorld(panel.getWidth(), panel.getHeight());
129+
centerX = leftUpper.e1 + ((rightLower.e1 - leftUpper.e1) / 2);
130+
centerY = leftUpper.e2 + ((rightLower.e2 - leftUpper.e2) / 2);
131+
}
132+
}
133+
}
134+
return new T2(centerX, centerY);
135+
}
136+
137+
97138
}

0 commit comments

Comments
 (0)