Skip to content

Commit 74c87c2

Browse files
author
lhwlyd
committed
add two actions
1 parent f83bd54 commit 74c87c2

File tree

4 files changed

+181
-0
lines changed

4 files changed

+181
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package actions;
2+
3+
import java.lang.reflect.Constructor;
4+
5+
import javax.swing.JOptionPane;
6+
7+
import actions.edit.undoredo.SharedUndoRedoActionManager;
8+
import actions.edit.undoredo.UndoRedoableInterface;
9+
import actions.menu.ActionsMenuBarTitles;
10+
import paintcomponents.java.interactive.ClassConstructorPaintComponent;
11+
import paintcomponents.java.lazy.ClassPaintComponent;
12+
import ui.PaintPanel;
13+
14+
public class AddInteractiveConstructorAction extends PaintAction {
15+
16+
public AddInteractiveConstructorAction(PaintPanel panel) {
17+
super(panel);
18+
}
19+
20+
@Override
21+
public boolean canPerformAction() {
22+
if (panel.getSelectTool().getSelectedComponents().size() != 1) {
23+
return false;
24+
}
25+
if (panel.getSelectTool().getSelectedComponents()
26+
.get(0) instanceof ClassPaintComponent) {
27+
return true;
28+
}
29+
return false;
30+
}
31+
32+
@Override
33+
public void performAction() {
34+
ClassPaintComponent comp = (ClassPaintComponent) panel.getSelectTool()
35+
.getSelectedComponents().get(0);
36+
Constructor[] cons = comp.getDisplayingClass().getConstructors();
37+
38+
int desiaredConstructorIndex = Integer
39+
.parseInt(JOptionPane.showInputDialog(
40+
"Please enter the index of the constructor you would like to use: \n\n\n"
41+
+ getConstructorsSelectionUI(cons)));
42+
ClassConstructorPaintComponent consComp = new ClassConstructorPaintComponent(
43+
cons[desiaredConstructorIndex], panel.getWidth() / 2,
44+
panel.getHeight() / 2);
45+
panel.addPaintComponent(consComp);
46+
// add action to undo redo manager
47+
SharedUndoRedoActionManager.getSharedInstance().pushUndoableAction(new UndoRedoableInterface() {
48+
49+
@Override
50+
public void undoAction() {
51+
consComp.remove(panel);
52+
panel.repaint();
53+
}
54+
55+
@Override
56+
public void redoAction() {
57+
panel.addPaintComponent(consComp);
58+
panel.repaint();
59+
}
60+
});
61+
panel.repaint();
62+
}
63+
64+
public String getConstructorsSelectionUI(Constructor[] cons) {
65+
StringBuilder builder = new StringBuilder();
66+
for (int i = 0; i < cons.length; i++) {
67+
Constructor constructor = cons[i];
68+
builder.append(i + " : " + constructor.toString() + "\n");
69+
}
70+
return builder.toString();
71+
72+
}
73+
74+
@Override
75+
public String locationString() {
76+
return ActionsMenuBarTitles.Developer("Interactive/Constructor").toString();
77+
}
78+
79+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package actions;
2+
3+
import java.lang.reflect.Method;
4+
5+
import javax.swing.JOptionPane;
6+
7+
import actions.edit.undoredo.SharedUndoRedoActionManager;
8+
import actions.edit.undoredo.UndoRedoableInterface;
9+
import actions.menu.ActionsMenuBarTitles;
10+
11+
import paintcomponents.java.interactive.ClassConstructorPaintComponent;
12+
import paintcomponents.java.interactive.MethodPaintComponent;
13+
import ui.PaintPanel;
14+
15+
public class AddInteractiveJavaMethodComponentAction extends PaintAction {
16+
17+
public AddInteractiveJavaMethodComponentAction(PaintPanel panel) {
18+
super(panel);
19+
}
20+
21+
//TODO
22+
//NOTE: I am copying from Constructor, consider refinement
23+
24+
@Override
25+
public boolean canPerformAction() {
26+
if (panel.getSelectTool().getSelectedComponents().size() != 1) {
27+
return false;
28+
}
29+
if (panel.getSelectTool().getSelectedComponents()
30+
.get(0) instanceof ClassConstructorPaintComponent) {
31+
return true;
32+
}
33+
return false;
34+
}
35+
36+
37+
@Override
38+
public void performAction() {
39+
ClassConstructorPaintComponent comp = (ClassConstructorPaintComponent) panel.getSelectTool()
40+
.getSelectedComponents().get(0);
41+
Method[] methods = comp.getDisplayingClass().getMethods();
42+
43+
44+
45+
46+
int desiaredConstructorIndex = Integer
47+
.parseInt(JOptionPane.showInputDialog(
48+
"Please enter the index of the constructor you would like to use: \n\n\n"
49+
+ getMethodsSelectionUI(methods)));
50+
MethodPaintComponent methodComp = new MethodPaintComponent(
51+
methods[desiaredConstructorIndex], comp.getInstance(), panel.getWidth() / 2,
52+
panel.getHeight() / 2);
53+
panel.addPaintComponent(methodComp);
54+
// add action to undo redo manager
55+
SharedUndoRedoActionManager.getSharedInstance().pushUndoableAction(new UndoRedoableInterface() {
56+
57+
@Override
58+
public void undoAction() {
59+
methodComp.remove(panel);
60+
panel.repaint();
61+
}
62+
63+
@Override
64+
public void redoAction() {
65+
panel.addPaintComponent(methodComp);
66+
panel.repaint();
67+
}
68+
});
69+
panel.repaint();
70+
}
71+
public String getMethodsSelectionUI(Method[] methods) {
72+
StringBuilder builder = new StringBuilder();
73+
for (int i = 0; i < methods.length; i++) {
74+
Method constructor = methods[i];
75+
builder.append(i + " : " + constructor.toString() + "\n");
76+
}
77+
return builder.toString();
78+
79+
}
80+
@Override
81+
public String locationString() {
82+
return ActionsMenuBarTitles.Developer("Interactive/Method").toString();
83+
}
84+
85+
}

src/actions/menu/ActionsMenuBar.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import actions.ZoomInAction;
4040
import actions.ZoomOutAction;
4141
import actions.AddInstanceOperationAction;
42+
import actions.AddInteractiveConstructorAction;
43+
import actions.AddInteractiveJavaMethodComponentAction;
4244

4345
public class ActionsMenuBar extends JMenuBar implements SelectionToolListener{
4446

@@ -64,6 +66,11 @@ public ActionsMenuBar(PaintPanel panel){
6466
addAction(new AddInstanceOperationAction(panel));
6567
addAction(new AddInstanceMethodAction(panel));
6668

69+
//interactive
70+
addAction(new AddInteractiveConstructorAction(panel));
71+
addAction(new AddInteractiveJavaMethodComponentAction(panel));
72+
73+
6774
//edit
6875
addAction(new EditRedoAction(panel));
6976
addAction(new EditUndoAction(panel));
@@ -74,6 +81,8 @@ public ActionsMenuBar(PaintPanel panel){
7481
addAction(new AddHaskellComponent(panel));
7582
addAction(new AddHaskellEvaluatorComponentAction(panel));
7683

84+
85+
7786
//file
7887
addAction(new FileSaveAs(panel));
7988
addAction(new FileOpen(panel));

src/paintcomponents/java/interactive/ClassConstructorPaintComponent.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,12 @@ public boolean canProvideInformationToDataFromPoint(
117117
return instance != null;
118118
}
119119

120+
public Class getDisplayingClass() {
121+
return displayingConstructor.getDeclaringClass();
122+
}
123+
124+
public Object getInstance() {
125+
return instance;
126+
}
127+
120128
}

0 commit comments

Comments
 (0)