Browse Source

Cleaned up internal api

Thomas Buck 12 years ago
parent
commit
8e665acd4a

+ 4
- 43
CubeControl/AFrame.java View File

32
  * @version 1.0
32
  * @version 1.0
33
  */
33
  */
34
 
34
 
35
-public class AFrame implements Comparable<AFrame> {
35
+public class AFrame {
36
 	private short[] data = new short[64];
36
 	private short[] data = new short[64];
37
 	private short duration = 1;
37
 	private short duration = 1;
38
 	private String name = "Frame";
38
 	private String name = "Frame";
39
-	private int order;
40
-	private static int orderIndex = 0;
41
-
42
-	/**
43
-	 * Compare this frame to another frame.
44
-	 * Compares the order in the frame list.
45
-	 * @return 0 if equal, -1 if this one comes first, 1 if last
46
-	 */
47
-	public int compareTo(AFrame compareFrame) {
48
-		if (getOrder() < compareFrame.getOrder()) {
49
-			return -1;
50
-		} else if (getOrder() == compareFrame.getOrder()) {
51
-			return 0;
52
-		} else {
53
-			return 1;
54
-		} 
55
-	}
56
-
57
-	/**
58
-	 * Get index of frame in list of frames.
59
-	 * @return index
60
-	 */
61
-	public int getOrder() {
62
-		return order;
63
-	}
64
-
65
-	/**
66
-	 * Set index of frame in list of frames.
67
-	 * @param newOrder new index
68
-	 */
69
-	public void setOrder(int newOrder) {
70
-		order = newOrder;
71
-	}
72
-
73
-	/**
74
-	 * Inserts frane at end of frame list.
75
-	 */
76
-	public AFrame() {
77
-		order = orderIndex++;
78
-	}
79
 
39
 
80
 	/**
40
 	/**
81
 	 * Gets the Name of this Frame
41
 	 * Gets the Name of this Frame
83
 	 * @return Name of the Frame
43
 	 * @return Name of the Frame
84
 	 */
44
 	 */
85
 	public String getName() {
45
 	public String getName() {
86
-		return name + " (" + order + ")";
46
+		return name;
87
 	}
47
 	}
88
 
48
 
89
 	/**
49
 	/**
125
 	}
85
 	}
126
 
86
 
127
 	/**
87
 	/**
128
-	 * Gets the Duration of this Frame
88
+	 * Gets the Duration of this Frame.
89
+	 * 0 means (1/24) seconds.
129
 	 * 
90
 	 * 
130
 	 * @return Duration of frame.
91
 	 * @return Duration of frame.
131
 	 * @see AFrame#setTime(short) setTime()
92
 	 * @see AFrame#setTime(short) setTime()

+ 92
- 102
CubeControl/Animation.java View File

33
  * @version 1.0
33
  * @version 1.0
34
  */
34
  */
35
 
35
 
36
-public class Animation implements Comparable<Animation> {
37
-	List<AFrame> frames = new ArrayList<AFrame>();
38
-	private int lastFrameIndex = 0;
36
+public class Animation {
37
+	AFrame frames[] = new AFrame[1];
39
 	private String name = "Animation";
38
 	private String name = "Animation";
40
-	private int order;
41
-	private static int orderIndex = 0;
42
 
39
 
43
 	/**
40
 	/**
44
-	 * Compare this animation to another animation.
45
-	 * Compares the order in the animations list.
46
-	 * @return 0 if equal, -1 if this one comes first, 1 if last
41
+	 * Create an empty frame in this new animation.
47
 	 */
42
 	 */
48
-	public int compareTo(Animation compareAnimation) {
49
-		if (getOrder() < compareAnimation.getOrder()) {
50
-			return -1;
51
-		} else if (getOrder() == compareAnimation.getOrder()) {
52
-			return 0;
53
-		} else {
54
-			return 1;
55
-		} 
43
+	public Animation() {
44
+		frames[0] = new AFrame();
56
 	}
45
 	}
57
 
46
 
58
 	/**
47
 	/**
59
-	 * Get index of animation in list of animations.
60
-	 * @return index
48
+	 * Gets the specified frame in this animation
49
+	 * 
50
+	 * @param i Index of frame you want
51
+	 * @return The selected frame
61
 	 */
52
 	 */
62
-	public int getOrder() {
63
-		return order;
53
+	public AFrame getFrame(int i) {
54
+		if (i >= frames.length) {
55
+			return null;
56
+		} else {
57
+			return frames[i];
58
+		}
64
 	}
59
 	}
65
 
60
 
66
 	/**
61
 	/**
67
-	 * Set index of animation in list of animations.
68
-	 * @param newOrder new index
62
+	 * Move an frame up.
63
+	 * @param i the animation you want to move
69
 	 */
64
 	 */
70
-	public void setOrder(int newOrder) {
71
-		order = newOrder;
65
+	public void moveFrameUp(int i) {
66
+		if (i > 0) {
67
+			AFrame tmp = frames[i];
68
+			frames[i] = frames[i - 1];
69
+			frames[i - 1] = tmp;
70
+		}
72
 	}
71
 	}
73
 
72
 
74
 	/**
73
 	/**
75
-	 * Inserts animation at end of animation list.
74
+	 * Move an frame down.
75
+	 * @param i the animation you want to move
76
 	 */
76
 	 */
77
-	public Animation() {
78
-		order = orderIndex++;
77
+	public void moveFrameDown(int i) {
78
+		if (i < (frames.length - 1)) {
79
+			AFrame tmp = frames[i];
80
+			frames[i] = frames[i + 1];
81
+			frames[i + 1] = tmp;
82
+		}
79
 	}
83
 	}
80
 
84
 
81
 	/**
85
 	/**
82
-	 * Gets the name of this animation
86
+	 * Sets the selected Frame
83
 	 * 
87
 	 * 
84
-	 * @return name of this animation
88
+	 * @param f the frame you want to place in this animation
89
+	 * @param i Index of the frame you want to override
85
 	 */
90
 	 */
86
-	public String getName() {
87
-		return name + " (" + order + ")";
91
+	public void setFrame(AFrame f, int i) {
92
+		if (i < frames.length) {
93
+			frames[i] = f;
94
+		} else {
95
+			addFrame(f);
96
+		}
88
 	}
97
 	}
89
 
98
 
90
 	/**
99
 	/**
91
-	 * Sets the name of this animation
92
-	 * 
93
-	 * @param s
94
-	 *            new name
100
+	 * Add a new (empty) frame at the end
95
 	 */
101
 	 */
96
-	public void setName(String s) {
97
-		name = s;
102
+	public void addFrame() {
103
+		extendArray();
104
+		frames[frames.length - 1] = new AFrame();
98
 	}
105
 	}
99
 
106
 
100
 	/**
107
 	/**
101
-	 * Gets the specified frame in this animation
102
-	 * 
103
-	 * @param i Index of frame you want
104
-	 * @return The selected frame
108
+	 * Add a specified frame at the end
109
+	 *
110
+	 * @param f data for new frame
105
 	 */
111
 	 */
106
-	public AFrame get(int i) {
107
-		try {
108
-			return frames.get(i);
109
-		} catch (IndexOutOfBoundsException e) {
110
-			System.out.println(e.toString());
111
-			return null;
112
-		}
112
+	public void addFrame(AFrame f) {
113
+		addFrame();
114
+		frames[frames.length - 1] = f;
113
 	}
115
 	}
114
 
116
 
115
 	/**
117
 	/**
116
-	 * Sets the selected Frame
118
+	 * Return size of this animation, in number of frames.
117
 	 * 
119
 	 * 
118
-	 * @param f the frame you want to place in this animation
119
-	 * @param i Index of the frame you want to override
120
+	 * @return number of frames
120
 	 */
121
 	 */
121
-	public void set(AFrame f, int i) {
122
-		if (lastFrameIndex <= i) {
123
-			try {
124
-				frames.set(i, f);
125
-			} catch (IndexOutOfBoundsException e) {
126
-				System.out.println(e.toString());
127
-			}
128
-		}
122
+	public int size() {
123
+		return frames.length;
129
 	}
124
 	}
130
 
125
 
131
 	/**
126
 	/**
133
 	 * 
128
 	 * 
134
 	 * @param i Index of frame you want to remove
129
 	 * @param i Index of frame you want to remove
135
 	 */
130
 	 */
136
-	public void remove(int i) {
137
-		try {
138
-			frames.remove(i);
139
-		} catch (IndexOutOfBoundsException e) {
140
-			System.out.println(e.toString());
141
-		}
131
+	public void removeFrame(int i) {
132
+		shiftOver(i);
133
+		shrinkArray();
142
 	}
134
 	}
143
 
135
 
144
 	/**
136
 	/**
145
-	 * Add a new (empty) frame at the specified position
137
+	 * Gets the name of this animation
146
 	 * 
138
 	 * 
147
-	 * @param i Index you want to place the new frame in
148
-	 * @see Animation#size size()
139
+	 * @return name of this animation
149
 	 */
140
 	 */
150
-	public void add(int i) {
151
-		try {
152
-			frames.add(i, new AFrame());
153
-			lastFrameIndex++;
154
-		} catch (IndexOutOfBoundsException e) {
155
-			System.out.println(e.toString());
156
-		}
141
+	public String getName() {
142
+		return name;
157
 	}
143
 	}
158
 
144
 
159
 	/**
145
 	/**
160
-	 * Add a specified frame at the specified position
146
+	 * Sets the name of this animation
161
 	 * 
147
 	 * 
162
-	 * @param i Index for new frame
163
-	 * @param f data for new frame
148
+	 * @param s
149
+	 *            new name
164
 	 */
150
 	 */
165
-	public void add(int i, AFrame f) {
166
-		try {
167
-			frames.add(i, f);
168
-			lastFrameIndex++;
169
-		} catch (IndexOutOfBoundsException e) {
170
-			System.out.println(e.toString());
151
+	public void setName(String s) {
152
+		name = s;
153
+	}
154
+
155
+	private void extendArray() {
156
+		AFrame newArray[] = new AFrame[frames.length + 1];
157
+		for (int i = 0; i < frames.length; i++) {
158
+			newArray[i] = frames[i];
171
 		}
159
 		}
160
+		frames = newArray;
172
 	}
161
 	}
173
 
162
 
174
-	// return true if damaged and fixed partially
175
-	private boolean checkFrameList() {
176
-		for (int i = 0; i < frames.size(); i++) {
177
-			if (frames.get(i).getOrder() != i) {
178
-				frames.get(i).setOrder(frames.size());
179
-				return true;
180
-			}
163
+	private void shrinkArray() {
164
+		AFrame newArray[] = new AFrame[frames.length - 1];
165
+		for (int i = 0; i < newArray.length; i++) {
166
+			newArray[i] = frames[i];
181
 		}
167
 		}
182
-		return false;
168
+		frames = newArray;
183
 	}
169
 	}
184
 
170
 
185
-	/**
186
-	 * Return size of this animation, in number of frames.
187
-	 * Also fixes the order of the frame list, if needed.
188
-	 * 
189
-	 * @return number of frames
190
-	 */
191
-	public int size() {
192
-		while(checkFrameList()) {
193
-			Collections.sort(frames);
171
+	/* private void shiftSpace(int newFree) {
172
+		AFrame temp = null;
173
+		for (int i = newFree; i < (frames.length - 1); i++) {
174
+			// Max i: vorletztes element
175
+			AFrame tmp = frames[i];
176
+			frames[i] = temp;
177
+			temp = frames[i + 1];
178
+			frames[i + 1] = tmp;
179
+		}
180
+	} */
181
+
182
+	private void shiftOver(int toForget) {
183
+		for (int i = (toForget + 1); i < frames.length; i++) {
184
+			frames[i - 1] = frames[i];
194
 		}
185
 		}
195
-		return frames.size();
196
 	}
186
 	}
197
 }
187
 }

+ 18
- 11
CubeControl/AnimationUtility.java View File

46
 	 * @return Populated ArrayList
46
 	 * @return Populated ArrayList
47
 	 * @throws Excpetion When something goes wrong with the Scanner...
47
 	 * @throws Excpetion When something goes wrong with the Scanner...
48
 	 */
48
 	 */
49
-	public static List<Animation> readFile(String path) throws Exception {
49
+	public static Animation[] readFile(String path) throws Exception {
50
 		Scanner sc = new Scanner(new File(path));
50
 		Scanner sc = new Scanner(new File(path));
51
-		List<Animation> animations = new ArrayList<Animation>();
51
+		Animation[] animations = new Animation[0];
52
 		do {
52
 		do {
53
 			Animation tmp = readAnimation(sc);
53
 			Animation tmp = readAnimation(sc);
54
 			if (tmp == null) {
54
 			if (tmp == null) {
57
 			if (sc.hasNextLine()) {
57
 			if (sc.hasNextLine()) {
58
 				sc.nextLine();
58
 				sc.nextLine();
59
 			}
59
 			}
60
-			animations.add(tmp);
60
+			extendArray(animations);
61
+			animations[animations.length - 1] = tmp;
61
 		} while (sc.hasNextLine());
62
 		} while (sc.hasNextLine());
62
 
63
 
63
 		return animations;
64
 		return animations;
64
 	}
65
 	}
65
 
66
 
67
+	private static void extendArray(Animation[] animations) {
68
+		Animation newArray[] = new Animation[animations.length + 1];
69
+		for (int i = 0; i < animations.length; i++) {
70
+			newArray[i] = animations[i];
71
+		}
72
+		animations = newArray;
73
+	}
74
+
66
 	/**
75
 	/**
67
 	 * Write a file with all Animations of an ArrayList
76
 	 * Write a file with all Animations of an ArrayList
68
 	 * 
77
 	 * 
69
 	 * @param path Path to write to
78
 	 * @param path Path to write to
70
-	 * @param animations ArrayList with all animations to be saved
79
+	 * @param animations Array with all animations to be saved
71
 	 * @see AnimationUtility#getLastError() getLastError()
80
 	 * @see AnimationUtility#getLastError() getLastError()
72
 	 */
81
 	 */
73
-	public static void writeFile(String path, List<Animation> animations) {
82
+	public static void writeFile(String path, Animation[] animations) {
74
 		File f = new File(path);
83
 		File f = new File(path);
75
 		if (f.exists()) {
84
 		if (f.exists()) {
76
 			try {
85
 			try {
83
 		FileWriter output = null;
92
 		FileWriter output = null;
84
 		try {
93
 		try {
85
 			output = new FileWriter(f);
94
 			output = new FileWriter(f);
86
-			for (int i = 0; i < animations.size(); i++) {
87
-				writeAnimation(animations.get(i), output,
88
-						(i == (animations.size() - 1)));
95
+			for (int i = 0; i < animations.length; i++) {
96
+				writeAnimation(animations[i], output, (i == (animations.length - 1)));
89
 			}
97
 			}
90
 		} catch (Exception e) {
98
 		} catch (Exception e) {
91
 			lastError = e.toString();
99
 			lastError = e.toString();
106
 	 * Get the last error that occured while writing
114
 	 * Get the last error that occured while writing
107
 	 * 
115
 	 * 
108
 	 * @return Text of the exception that occured
116
 	 * @return Text of the exception that occured
109
-	 * @see AnimationUtility#writeFile(String, List) writeFile()
110
 	 */
117
 	 */
111
 	public static String getLastError() {
118
 	public static String getLastError() {
112
 		String tmp = lastError;
119
 		String tmp = lastError;
127
 		anim.setName(sc.nextLine());
134
 		anim.setName(sc.nextLine());
128
 		while (size > 0) {
135
 		while (size > 0) {
129
 			f = readFrame(sc, index);
136
 			f = readFrame(sc, index);
130
-			anim.add(index, f);
137
+			anim.setFrame(f, index);
131
 			index++;
138
 			index++;
132
 			size--;
139
 			size--;
133
 		}
140
 		}
187
 		f.write(anim.size() + "\n");
194
 		f.write(anim.size() + "\n");
188
 		f.write(anim.getName() + "\n");
195
 		f.write(anim.getName() + "\n");
189
 		for (int i = 0; i < anim.size(); i++) {
196
 		for (int i = 0; i < anim.size(); i++) {
190
-			writeFrame(anim.get(i), f);
197
+			writeFrame(anim.getFrame(i), f);
191
 		}
198
 		}
192
 		if (!last) {
199
 		if (!last) {
193
 			f.write("\n");
200
 			f.write("\n");

+ 271
- 410
CubeControl/Frame.java View File

83
 
83
 
84
 	public cubeWorker worker = new cubeWorker(this);
84
 	public cubeWorker worker = new cubeWorker(this);
85
 	private boolean fileSelected = false;
85
 	private boolean fileSelected = false;
86
+	private Frame thisFrame;
86
 
87
 
87
 	// Ende Variablen
88
 	// Ende Variablen
88
 
89
 
125
 					&& (animList.getSelectedIndex() != -1)) {
126
 					&& (animList.getSelectedIndex() != -1)) {
126
 				// animList selection changed, update frameList
127
 				// animList selection changed, update frameList
127
 				frameListModel.clear();
128
 				frameListModel.clear();
128
-				for (int i = 0; i < worker.numOfFrames(animList
129
-						.getSelectedIndex()); i++) {
130
-				// Offending statement:
131
-				// worker.numOfFrames(animList.getSelectedIndex())
132
-					frameListModel.addElement(worker.getFrameName(
133
-							animList.getSelectedIndex(), i));
129
+
130
+				// System.out.println("Selected Animation: " + animList.getSelectedIndex());
131
+				int max = worker.getAnimation(animList.getSelectedIndex()).size();
132
+
133
+				for (int i = 0; i < max; i++) {
134
+					frameListModel.addElement(worker.getAnimation(
135
+							animList.getSelectedIndex()).getFrame(i).getName());
134
 				}
136
 				}
135
 				frameList.setModel(frameListModel);
137
 				frameList.setModel(frameListModel);
136
 			}
138
 			}
137
 
139
 
138
 			// If both selections are valid, update Frame duration and set 3D
140
 			// If both selections are valid, update Frame duration and set 3D
139
 			// data
141
 			// data
140
-			if ((animList.getSelectedIndex() != -1)
141
-					&& (frameList.getSelectedIndex() != -1)) {
142
-				ledView.setData(worker.getFrame(animList.getSelectedIndex(),
143
-						frameList.getSelectedIndex()));
144
-				frameLengthText.setText(Integer.toString(worker.getFrameTime(
145
-						animList.getSelectedIndex(),
146
-						frameList.getSelectedIndex())));
142
+			if ((animList.getSelectedIndex() != -1)	&& (frameList.getSelectedIndex() != -1)) {
143
+				ledView.setData(worker.getAnimation(animList.getSelectedIndex()).getFrame(frameList.getSelectedIndex()).getData());
144
+				frameLengthText.setText(Integer.toString(worker.getAnimation(animList.getSelectedIndex()).getFrame(frameList.getSelectedIndex()).getTime()));
147
 			} else {
145
 			} else {
148
 				// clear Frame duration
146
 				// clear Frame duration
149
 				frameLengthText.setText("");
147
 				frameLengthText.setText("");
169
 	public Frame(String title) {
167
 	public Frame(String title) {
170
 		// Frame-Initialisierung
168
 		// Frame-Initialisierung
171
 		super(title);
169
 		super(title);
170
+		thisFrame = this;
172
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
171
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
173
 
172
 
174
-		String[] sPorts = worker.getSerialPorts();
173
+		String[] sPorts = HelperUtility.getPorts();
175
 		for (int i = 0; i < sPorts.length; i++) {
174
 		for (int i = 0; i < sPorts.length; i++) {
176
 			jComboBox1.addItem(sPorts[i]);
175
 			jComboBox1.addItem(sPorts[i]);
177
 		}
176
 		}
178
 
177
 
179
-		for (int i = 0; i < worker.numOfAnimations(); i++) {
180
-			animModel.addElement(worker.getAnimationName(i));
178
+		for (int i = 0; i < worker.size(); i++) {
179
+			animModel.addElement(worker.getAnimation(i).getName());
181
 		}
180
 		}
182
 
181
 
183
 		addWindowListener(new WindowAdapter() {
182
 		addWindowListener(new WindowAdapter() {
216
 		cp.add(editA);
215
 		cp.add(editA);
217
 		editA.addActionListener(new ActionListener() {
216
 		editA.addActionListener(new ActionListener() {
218
 			public void actionPerformed(ActionEvent evt) {
217
 			public void actionPerformed(ActionEvent evt) {
219
-				editA_ActionPerformed(evt);
218
+				if (animList.getSelectedIndex() == -1) {
219
+					errorMessage("Please select an animation.");
220
+				} else if (frameList.getSelectedIndex() == -1) {
221
+					errorMessage("Please select a Frame.");
222
+				} else {
223
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 0, worker, thisFrame);
224
+				}
220
 			}
225
 			}
221
 		});
226
 		});
222
 
227
 
226
 		cp.add(editB);
231
 		cp.add(editB);
227
 		editB.addActionListener(new ActionListener() {
232
 		editB.addActionListener(new ActionListener() {
228
 			public void actionPerformed(ActionEvent evt) {
233
 			public void actionPerformed(ActionEvent evt) {
229
-				editB_ActionPerformed(evt);
234
+				if (animList.getSelectedIndex() == -1) {
235
+					errorMessage("Please select an animation.");
236
+				} else if (frameList.getSelectedIndex() == -1) {
237
+					errorMessage("Please select a Frame.");
238
+				} else {
239
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 1, worker, thisFrame);
240
+				}
230
 			}
241
 			}
231
 		});
242
 		});
232
 
243
 
236
 		cp.add(editC);
247
 		cp.add(editC);
237
 		editC.addActionListener(new ActionListener() {
248
 		editC.addActionListener(new ActionListener() {
238
 			public void actionPerformed(ActionEvent evt) {
249
 			public void actionPerformed(ActionEvent evt) {
239
-				editC_ActionPerformed(evt);
250
+				if (animList.getSelectedIndex() == -1) {
251
+					errorMessage("Please select an animation.");
252
+				} else if (frameList.getSelectedIndex() == -1) {
253
+					errorMessage("Please select a Frame.");
254
+				} else {
255
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 2, worker, thisFrame);
256
+				}
240
 			}
257
 			}
241
 		});
258
 		});
242
 
259
 
246
 		cp.add(editD);
263
 		cp.add(editD);
247
 		editD.addActionListener(new ActionListener() {
264
 		editD.addActionListener(new ActionListener() {
248
 			public void actionPerformed(ActionEvent evt) {
265
 			public void actionPerformed(ActionEvent evt) {
249
-				editD_ActionPerformed(evt);
266
+				if (animList.getSelectedIndex() == -1) {
267
+					errorMessage("Please select an animation.");
268
+				} else if (frameList.getSelectedIndex() == -1) {
269
+					errorMessage("Please select a Frame.");
270
+				} else {
271
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 3, worker, thisFrame);
272
+				}
250
 			}
273
 			}
251
 		});
274
 		});
252
 
275
 
256
 		cp.add(editE);
279
 		cp.add(editE);
257
 		editE.addActionListener(new ActionListener() {
280
 		editE.addActionListener(new ActionListener() {
258
 			public void actionPerformed(ActionEvent evt) {
281
 			public void actionPerformed(ActionEvent evt) {
259
-				editE_ActionPerformed(evt);
282
+				if (animList.getSelectedIndex() == -1) {
283
+					errorMessage("Please select an animation.");
284
+				} else if (frameList.getSelectedIndex() == -1) {
285
+					errorMessage("Please select a Frame.");
286
+				} else {
287
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 4, worker, thisFrame);
288
+				}
260
 			}
289
 			}
261
 		});
290
 		});
262
 
291
 
266
 		cp.add(editF);
295
 		cp.add(editF);
267
 		editF.addActionListener(new ActionListener() {
296
 		editF.addActionListener(new ActionListener() {
268
 			public void actionPerformed(ActionEvent evt) {
297
 			public void actionPerformed(ActionEvent evt) {
269
-				editF_ActionPerformed(evt);
298
+				if (animList.getSelectedIndex() == -1) {
299
+					errorMessage("Please select an animation.");
300
+				} else if (frameList.getSelectedIndex() == -1) {
301
+					errorMessage("Please select a Frame.");
302
+				} else {
303
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 5, worker, thisFrame);
304
+				}
270
 			}
305
 			}
271
 		});
306
 		});
272
 
307
 
276
 		cp.add(editG);
311
 		cp.add(editG);
277
 		editG.addActionListener(new ActionListener() {
312
 		editG.addActionListener(new ActionListener() {
278
 			public void actionPerformed(ActionEvent evt) {
313
 			public void actionPerformed(ActionEvent evt) {
279
-				editG_ActionPerformed(evt);
314
+				if (animList.getSelectedIndex() == -1) {
315
+					errorMessage("Please select an animation.");
316
+				} else if (frameList.getSelectedIndex() == -1) {
317
+					errorMessage("Please select a Frame.");
318
+				} else {
319
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 6, worker, thisFrame);
320
+				}
280
 			}
321
 			}
281
 		});
322
 		});
282
 
323
 
286
 		cp.add(editH);
327
 		cp.add(editH);
287
 		editH.addActionListener(new ActionListener() {
328
 		editH.addActionListener(new ActionListener() {
288
 			public void actionPerformed(ActionEvent evt) {
329
 			public void actionPerformed(ActionEvent evt) {
289
-				editH_ActionPerformed(evt);
330
+				if (animList.getSelectedIndex() == -1) {
331
+					errorMessage("Please select an animation.");
332
+				} else if (frameList.getSelectedIndex() == -1) {
333
+					errorMessage("Please select a Frame.");
334
+				} else {
335
+					layerEditFrame layerFrame1 = new layerEditFrame(animList.getSelectedIndex(), frameList.getSelectedIndex(), 7, worker, thisFrame);
336
+				}
290
 			}
337
 			}
291
 		});
338
 		});
292
 
339
 
300
 		cp.add(frameUp);
347
 		cp.add(frameUp);
301
 		frameUp.addActionListener(new ActionListener() {
348
 		frameUp.addActionListener(new ActionListener() {
302
 			public void actionPerformed(ActionEvent evt) {
349
 			public void actionPerformed(ActionEvent evt) {
303
-				frameUp_ActionPerformed(evt);
350
+				int i = frameList.getSelectedIndex();
351
+				if ((i > 0) && (frameListModel.getSize() >= 2)) {
352
+					Object tmp = frameListModel.get(i);
353
+					frameListModel.set(i, frameListModel.get(i - 1));
354
+					frameListModel.set(i - 1, tmp);
355
+					frameList.setSelectedIndex(i - 1);
356
+					worker.getAnimation(animList.getSelectedIndex()).moveFrameUp(frameList.getSelectedIndex());
357
+				}
304
 			}
358
 			}
305
 		});
359
 		});
306
 
360
 
310
 		cp.add(frameAdd);
364
 		cp.add(frameAdd);
311
 		frameAdd.addActionListener(new ActionListener() {
365
 		frameAdd.addActionListener(new ActionListener() {
312
 			public void actionPerformed(ActionEvent evt) {
366
 			public void actionPerformed(ActionEvent evt) {
313
-				frameAdd_ActionPerformed(evt);
367
+				if (animList.getSelectedIndex() == -1) {
368
+					errorMessage("Please select an animation!");
369
+				} else {
370
+					int n = worker.getAnimation(animList.getSelectedIndex()).size();
371
+					worker.getAnimation(animList.getSelectedIndex()).addFrame();
372
+			// Not reaching past this comment if frame list empty
373
+					frameRemaining.setText(Integer.toString(worker.memoryRemaining()));
374
+					frameListModel.add(n, worker.getAnimation(animList.getSelectedIndex()).getFrame(n).getName());
375
+					frameList.setModel(frameListModel);
376
+				}
314
 			}
377
 			}
315
 		});
378
 		});
316
 
379
 
320
 		cp.add(frameRemove);
383
 		cp.add(frameRemove);
321
 		frameRemove.addActionListener(new ActionListener() {
384
 		frameRemove.addActionListener(new ActionListener() {
322
 			public void actionPerformed(ActionEvent evt) {
385
 			public void actionPerformed(ActionEvent evt) {
323
-				frameRemove_ActionPerformed(evt);
386
+				if (animList.getSelectedIndex() == -1) {
387
+					errorMessage("Select an animation.");
388
+				} else if (frameList.getSelectedIndex() == -1) {
389
+					errorMessage("Select a Frame.");
390
+				} else {
391
+					worker.getAnimation(animList.getSelectedIndex()).removeFrame(frameList.getSelectedIndex());
392
+					frameRemaining.setText(Integer.toString(worker.memoryRemaining()));
393
+					frameListModel.removeElementAt(frameList.getSelectedIndex());
394
+					frameList.setModel(frameListModel);
395
+				}
324
 			}
396
 			}
325
 		});
397
 		});
326
 
398
 
340
 					errorMessage("Select a Frame!");
412
 					errorMessage("Select a Frame!");
341
 					return;
413
 					return;
342
 				}
414
 				}
343
-				worker.setFrameName(
344
-						askString("Rename",
345
-								"Rename " + frameList.getSelectedValue() + "?"),
346
-						a, f);
347
-				frameListModel.set(f, worker.getFrameName(a, f));
415
+				worker.getAnimation(a).getFrame(f).setName(askString("Rename", "Rename " + frameList.getSelectedValue() + "?"));
416
+				frameListModel.set(f, worker.getAnimation(a).getFrame(f).getName());
348
 				frameList.setModel(frameListModel);
417
 				frameList.setModel(frameListModel);
349
 			}
418
 			}
350
 		});
419
 		});
355
 		cp.add(frameDown);
424
 		cp.add(frameDown);
356
 		frameDown.addActionListener(new ActionListener() {
425
 		frameDown.addActionListener(new ActionListener() {
357
 			public void actionPerformed(ActionEvent evt) {
426
 			public void actionPerformed(ActionEvent evt) {
358
-				frameDown_ActionPerformed(evt);
427
+				int i = frameList.getSelectedIndex();
428
+				if ((i >= 0) && (frameListModel.getSize() >= 2) && (i < (frameListModel.getSize() - 1))) {
429
+					Object tmp = frameListModel.get(i);
430
+					frameListModel.set(i, frameListModel.get(i + 1));
431
+					frameListModel.set(i + 1, tmp);
432
+					frameList.setSelectedIndex(i + 1);
433
+					worker.getAnimation(animList.getSelectedIndex()).moveFrameDown(frameList.getSelectedIndex());
434
+				}
359
 			}
435
 			}
360
 		});
436
 		});
361
 
437
 
375
 		cp.add(fullScreenButton);
451
 		cp.add(fullScreenButton);
376
 		fullScreenButton.addActionListener(new ActionListener() {
452
 		fullScreenButton.addActionListener(new ActionListener() {
377
 			public void actionPerformed(ActionEvent evt) {
453
 			public void actionPerformed(ActionEvent evt) {
378
-				enterFullscreen(evt);
454
+				ledView.enterFullscreen();
455
+				setLocation(0,0);
456
+				setSize(700, 700);
457
+				int w = Toolkit.getDefaultToolkit().getScreenSize().width;
458
+				int h = Toolkit.getDefaultToolkit().getScreenSize().height;
459
+				setSize(w - 5, h - 30);
460
+				playAnimationFullscreen.setVisible(true);
461
+				cubeCanvas.setBounds(0, 0, w - 5, h - 80);
379
 			}
462
 			}
380
 		});
463
 		});
381
 
464
 
384
 		cp.add(exitButton);
467
 		cp.add(exitButton);
385
 		exitButton.addActionListener(new ActionListener() {
468
 		exitButton.addActionListener(new ActionListener() {
386
 			public void actionPerformed(ActionEvent evt) {
469
 			public void actionPerformed(ActionEvent evt) {
387
-				exitFullscreen();
470
+				playAnimationFullscreen.setVisible(false);
471
+				setLocation(0,0);
472
+				setSize(661, 440);
473
+				ledView.leaveFullscreen();
474
+				cubeCanvas.setBounds(8,8, 250,250);
475
+				Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
476
+				int x = (d.width - getSize().width) / 2;
477
+				int y = (d.height - getSize().height) / 2;
478
+				setLocation(x, y);
388
 			}
479
 			}
389
 		});
480
 		});
390
 
481
 
391
-
392
 		playAnimation.setText("Play");
482
 		playAnimation.setText("Play");
393
 		playAnimation.setBounds(344, 390, 147, 25);
483
 		playAnimation.setBounds(344, 390, 147, 25);
394
 		playAnimation.setFont(new Font("Dialog", Font.PLAIN, 13));
484
 		playAnimation.setFont(new Font("Dialog", Font.PLAIN, 13));
395
 		cp.add(playAnimation);
485
 		cp.add(playAnimation);
396
 		playAnimation.addActionListener(new ActionListener() {
486
 		playAnimation.addActionListener(new ActionListener() {
397
 			public void actionPerformed(ActionEvent evt){
487
 			public void actionPerformed(ActionEvent evt){
398
-				playAnimation(evt);		
488
+				if (animList.getSelectedIndex() == -1) {
489
+					errorMessage("Please select an animation.");
490
+				} else if (frameList.getSelectedIndex() == -1) {
491
+					errorMessage("Please select a Frame.");
492
+				} else {
493
+					for(int i = 0; i < frameList.getModel().getSize(); i++){
494
+						frameList.setSelectedIndex(i);
495
+						short time1 = worker.getAnimation(animList.getSelectedIndex()).getFrame(frameList.getSelectedIndex()).getTime();
496
+						long time = (long) (((time1+1) * 1/24) * 1000);
497
+						try {
498
+							Thread.sleep(time);
499
+						} catch(Exception e) {
500
+							System.out.println(e);
501
+						}
502
+					}	
503
+				}
399
 			}
504
 			}
400
 		});
505
 		});
401
 
506
 
406
 		cp.add(playAnimationFullscreen);
511
 		cp.add(playAnimationFullscreen);
407
 		playAnimationFullscreen.addActionListener(new ActionListener() {
512
 		playAnimationFullscreen.addActionListener(new ActionListener() {
408
 			public void actionPerformed(ActionEvent evt){
513
 			public void actionPerformed(ActionEvent evt){
409
-				playAnimation(evt);		
514
+				if (animList.getSelectedIndex() == -1) {
515
+					errorMessage("Please select an animation.");
516
+				} else if (frameList.getSelectedIndex() == -1) {
517
+					errorMessage("Please select a Frame.");
518
+				} else {
519
+					for(int i = 0; i < frameList.getModel().getSize(); i++){
520
+						frameList.setSelectedIndex(i);
521
+						short time1 = worker.getAnimation(animList.getSelectedIndex()).getFrame(frameList.getSelectedIndex()).getTime();
522
+						long time = (long) (((time1+1) * 1/24) * 1000);
523
+						try {
524
+							Thread.sleep(time);
525
+						} catch(Exception e) {
526
+							System.out.println(e);
527
+						}
528
+					}	
529
+				}
410
 			}
530
 			}
411
 		});
531
 		});
412
 
532
 
413
-
414
 		frameDuration.setBounds(590, 184, 60, 24);
533
 		frameDuration.setBounds(590, 184, 60, 24);
415
 		frameDuration.setText("OK");
534
 		frameDuration.setText("OK");
416
 		frameDuration.setFont(new Font("Dialog", Font.PLAIN, 13));
535
 		frameDuration.setFont(new Font("Dialog", Font.PLAIN, 13));
433
 						errorMessage("Please select a Frame!");
552
 						errorMessage("Please select a Frame!");
434
 						return;
553
 						return;
435
 					}
554
 					}
436
-					worker.setFrameTime(
437
-							(byte) (Integer.parseInt(frameLengthText.getText()) - 1),
438
-							animList.getSelectedIndex(),
439
-							frameList.getSelectedIndex());
555
+					worker.getAnimation(animList.getSelectedIndex()).getFrame(frameList.getSelectedIndex()).setTime((byte)(Integer.parseInt(frameLengthText.getText()) - 1));
440
 				}
556
 				}
441
 			}
557
 			}
442
 		});
558
 		});
452
 		cp.add(animUp);
568
 		cp.add(animUp);
453
 		animUp.addActionListener(new ActionListener() {
569
 		animUp.addActionListener(new ActionListener() {
454
 			public void actionPerformed(ActionEvent evt) {
570
 			public void actionPerformed(ActionEvent evt) {
455
-				animUp_ActionPerformed(evt);
571
+				int i = animList.getSelectedIndex();
572
+				if ((i > 0) && (animModel.getSize() >= 2)) {
573
+					Object tmp = animModel.get(i);
574
+					animModel.set(i, animModel.get(i - 1));
575
+					animModel.set(i - 1, tmp);
576
+					animList.setSelectedIndex(i - 1);
577
+					worker.moveAnimationUp(animList.getSelectedIndex());
578
+				}
456
 			}
579
 			}
457
 		});
580
 		});
458
 
581
 
462
 		cp.add(animDown);
585
 		cp.add(animDown);
463
 		animDown.addActionListener(new ActionListener() {
586
 		animDown.addActionListener(new ActionListener() {
464
 			public void actionPerformed(ActionEvent evt) {
587
 			public void actionPerformed(ActionEvent evt) {
465
-				animDown_ActionPerformed(evt);
588
+				int i = animList.getSelectedIndex();
589
+				if ((i >= 0) && (animModel.getSize() >= 2) && (i < (animModel.getSize() - 1))) {
590
+					Object tmp = animModel.get(i);
591
+					animModel.set(i, animModel.get(i + 1));
592
+					animModel.set(i + 1, tmp);
593
+					animList.setSelectedIndex(i + 1);
594
+					worker.moveAnimationDown(animList.getSelectedIndex());
595
+				}
466
 			}
596
 			}
467
 		});
597
 		});
468
 
598
 
477
 					errorMessage("Select an animation!");
607
 					errorMessage("Select an animation!");
478
 					return;
608
 					return;
479
 				}
609
 				}
480
-				worker.setAnimationName(
481
-						askString("Rename",
482
-								"Rename " + animList.getSelectedValue() + "?"),
483
-						a);
484
-				animModel.set(a, worker.getAnimationName(a));
610
+				worker.getAnimation(a).setName(askString("Rename", "Rename " + animList.getSelectedValue() + "?"));
611
+				animModel.set(a, worker.getAnimation(a).getName());
485
 				animList.setModel(animModel);
612
 				animList.setModel(animModel);
486
 			}
613
 			}
487
 		});
614
 		});
492
 		cp.add(animAdd);
619
 		cp.add(animAdd);
493
 		animAdd.addActionListener(new ActionListener() {
620
 		animAdd.addActionListener(new ActionListener() {
494
 			public void actionPerformed(ActionEvent evt) {
621
 			public void actionPerformed(ActionEvent evt) {
495
-				animAdd_ActionPerformed(evt);
622
+				if (worker.addAnimation() == -1) {
623
+					errorMessage("Could not add animation!");
624
+				} else {
625
+					animModel.clear();
626
+					for (int i = 0; i < worker.size(); i++) {
627
+						animModel.add(i, worker.getAnimation(i).getName());
628
+					}
629
+					animList.setModel(animModel);
630
+				}
496
 			}
631
 			}
497
 		});
632
 		});
498
 
633
 
502
 		cp.add(animRemove);
637
 		cp.add(animRemove);
503
 		animRemove.addActionListener(new ActionListener() {
638
 		animRemove.addActionListener(new ActionListener() {
504
 			public void actionPerformed(ActionEvent evt) {
639
 			public void actionPerformed(ActionEvent evt) {
505
-				animRemove_ActionPerformed(evt);
640
+				if (animList.getSelectedIndex() == -1) {
641
+					errorMessage("Select an animation.");
642
+				} else {
643
+					worker.removeAnimation(animList.getSelectedIndex());
644
+					animModel.removeElementAt(animList.getSelectedIndex());
645
+					animList.setModel(animModel);
646
+				}
506
 			}
647
 			}
507
 		});
648
 		});
508
 
649
 
517
 		cp.add(load);
658
 		cp.add(load);
518
 		load.addActionListener(new ActionListener() {
659
 		load.addActionListener(new ActionListener() {
519
 			public void actionPerformed(ActionEvent evt) {
660
 			public void actionPerformed(ActionEvent evt) {
520
-				load_ActionPerformed(evt);
661
+				JFileChooser fc = new JFileChooser();
662
+				int ret = fc.showOpenDialog(thisFrame);
663
+				if (ret == JFileChooser.APPROVE_OPTION) {
664
+					File file = fc.getSelectedFile();
665
+					if (fileSelected == false) {
666
+						fileSelected = true;
667
+					}
668
+					animPath.setText(file.getPath());
669
+					worker.loadState(animPath.getText());
670
+					animModel.clear();
671
+					for (int i = 0; i < worker.size(); i++) {
672
+						animModel.addElement(worker.getAnimation(i).getName());
673
+					}
674
+					animList.setModel(animModel);
675
+
676
+					frameListModel.clear();
677
+					frameList.setModel(frameListModel);
678
+				}
521
 			}
679
 			}
522
 		});
680
 		});
523
 
681
 
527
 		cp.add(save);
685
 		cp.add(save);
528
 		save.addActionListener(new ActionListener() {
686
 		save.addActionListener(new ActionListener() {
529
 			public void actionPerformed(ActionEvent evt) {
687
 			public void actionPerformed(ActionEvent evt) {
530
-				save_ActionPerformed(evt);
688
+				if (fileSelected == false) {
689
+					JFileChooser fc = new JFileChooser();
690
+					int ret = fc.showSaveDialog(thisFrame);
691
+					if (ret == JFileChooser.APPROVE_OPTION) {
692
+						File file = fc.getSelectedFile();
693
+						fileSelected = true;
694
+						animPath.setText(file.getPath());
695
+						worker.saveState(animPath.getText());
696
+					}
697
+				} else {
698
+					worker.saveState(animPath.getText());
699
+				}
531
 			}
700
 			}
532
 		});
701
 		});
533
 
702
 
537
 		cp.add(saveAs);
706
 		cp.add(saveAs);
538
 		saveAs.addActionListener(new ActionListener() {
707
 		saveAs.addActionListener(new ActionListener() {
539
 			public void actionPerformed(ActionEvent evt) {
708
 			public void actionPerformed(ActionEvent evt) {
540
-				saveAs_ActionPerformed(evt);
709
+				JFileChooser fc;
710
+				if (fileSelected == true) {
711
+					fc = new JFileChooser(new File(animPath.getText()).getParentFile());
712
+				} else {
713
+					fc = new JFileChooser();
714
+				}
715
+				int ret = fc.showSaveDialog(thisFrame);
716
+				if (ret == JFileChooser.APPROVE_OPTION) {
717
+					File file = fc.getSelectedFile();
718
+					if (fileSelected == false) {
719
+						fileSelected = true;
720
+					}
721
+					animPath.setText(file.getPath());
722
+					worker.saveState(animPath.getText());
723
+				}
541
 			}
724
 			}
542
 		});
725
 		});
543
 
726
 
550
 		cp.add(upload);
733
 		cp.add(upload);
551
 		upload.addActionListener(new ActionListener() {
734
 		upload.addActionListener(new ActionListener() {
552
 			public void actionPerformed(ActionEvent evt) {
735
 			public void actionPerformed(ActionEvent evt) {
553
-				upload_ActionPerformed(evt);
736
+				if (jComboBox1.getSelectedItem().equals("Select serial port...")) {
737
+					// errorMessage("No serial port selected...");
738
+				} else {
739
+					if (worker.cubeProbeConnected((String) jComboBox1.getSelectedItem())) {
740
+						if (worker.cubeSendState((String) jComboBox1.getSelectedItem()) != 0) {
741
+							// errorMessage("Could not upload data!");
742
+						}
743
+					} else {
744
+						// errorMessage("Cube does not respond...");
745
+					}
746
+				}
554
 			}
747
 			}
555
 		});
748
 		});
556
 
749
 
560
 		cp.add(download);
753
 		cp.add(download);
561
 		download.addActionListener(new ActionListener() {
754
 		download.addActionListener(new ActionListener() {
562
 			public void actionPerformed(ActionEvent evt) {
755
 			public void actionPerformed(ActionEvent evt) {
563
-				download_ActionPerformed(evt);
756
+				if (jComboBox1.getSelectedItem().equals("Select serial port...")) {
757
+					// errorMessage("No serial port selected...");
758
+				} else {
759
+					if (worker.cubeProbeConnected((String) jComboBox1.getSelectedItem())) {
760
+						if (worker.cubeGetState((String) jComboBox1.getSelectedItem()) != 0) {
761
+							// errorMessage("Could not download data!");
762
+						}
763
+					} else {
764
+						// errorMessage("Cube does not respond...");
765
+					}
766
+				}
564
 			}
767
 			}
565
 		});
768
 		});
566
 
769
 
570
 		cp.add(jLabel4);
773
 		cp.add(jLabel4);
571
 		frameRemaining.setBounds(536, 232, 113, 24);
774
 		frameRemaining.setBounds(536, 232, 113, 24);
572
 		frameRemaining.setEditable(false);
775
 		frameRemaining.setEditable(false);
573
-		frameRemaining.setText(String.valueOf(worker.framesRemaining()));
776
+		frameRemaining.setText(String.valueOf(worker.memoryRemaining()));
574
 		frameRemaining.setFont(new Font("Dialog", Font.PLAIN, 13));
777
 		frameRemaining.setFont(new Font("Dialog", Font.PLAIN, 13));
575
 		cp.add(frameRemaining);
778
 		cp.add(frameRemaining);
576
 		animList.setFont(new Font("Dialog", Font.PLAIN, 13));
779
 		animList.setFont(new Font("Dialog", Font.PLAIN, 13));
582
 		setVisible(true);
785
 		setVisible(true);
583
 	}
786
 	}
584
 
787
 
585
-	// Anfang Methoden
586
-
587
-	// Anfang Ereignisprozeduren
588
-	
589
-	public void playAnimation(ActionEvent evt){
590
-			if (animList.getSelectedIndex() == -1) {
591
-			errorMessage("Please select an animation.");
592
-		} else if (frameList.getSelectedIndex() == -1) {
593
-			errorMessage("Please select a Frame.");
594
-		} else {
595
-			for(int i = 0; i < frameList.getModel().getSize(); i++){
596
-				frameList.setSelectedIndex(i);
597
-				short time1 = worker.getFrameTime(animList.getSelectedIndex(), frameList.getSelectedIndex());
598
-				long time = (long) (((time1+1) * 1/24) * 1000);
599
-				try{
600
-					Thread.sleep(time);
601
-				}catch(Exception e){
602
-					System.out.println(e);
603
-				}
604
-			}	
605
-		}
606
-	
607
-	}
608
-	
609
-	public void enterFullscreen(ActionEvent evt) {
610
-		ledView.enterFullscreen();
611
-		//FullscreenWindow fw = new FullscreenWindow(worker, cubeCanvas, ledView, this);
612
-		setLocation(0,0);
613
-		setSize(700, 700);
614
-		int w = Toolkit.getDefaultToolkit().getScreenSize().width;
615
-		int h = Toolkit.getDefaultToolkit().getScreenSize().height;
616
-		System.out.println(w);
617
-		System.out.println(h);
618
-		setSize(w-5, h-30);
619
-
620
-		playAnimationFullscreen.setVisible(true);
621
-		//setSize(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
622
-		//Y U NO WORK????
623
-		cubeCanvas.setBounds(0,0,Toolkit.getDefaultToolkit().getScreenSize().width-5, Toolkit.getDefaultToolkit().getScreenSize().height-80);
624
-	
625
-	}
626
-	public void exitFullscreen(){
627
-	//661, 440
628
-		playAnimationFullscreen.setVisible(false);
629
-		setLocation(0,0);
630
-		setSize(661, 440);
631
-		ledView.leaveFullscreen();
632
-		cubeCanvas.setBounds(8,8, 250,250);
633
-		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
634
-		int x = (d.width - getSize().width) / 2;
635
-		int y = (d.height - getSize().height) / 2;
636
-		setLocation(x, y);
637
-	}
638
-	
639
-	public void editA_ActionPerformed(ActionEvent evt) {
640
-
641
-		if (animList.getSelectedIndex() == -1) {
642
-			errorMessage("Please select an animation.");
643
-		} else if (frameList.getSelectedIndex() == -1) {
644
-			errorMessage("Please select a Frame.");
645
-		} else {
646
-			@SuppressWarnings("unused")
647
-			layerEditFrame layerFrame1 = new layerEditFrame(
648
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
649
-					0, worker, this);
650
-
651
-		}
652
-	}
653
-
654
-	public void editB_ActionPerformed(ActionEvent evt) {
655
-		if (animList.getSelectedIndex() == -1) {
656
-			errorMessage("Please select an animation.");
657
-		} else if (frameList.getSelectedIndex() == -1) {
658
-			errorMessage("Please select a Frame.");
659
-		} else {
660
-			@SuppressWarnings("unused")
661
-			layerEditFrame layerFrame1 = new layerEditFrame(
662
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
663
-					1, worker, this);
664
-		}
665
-	}
666
-
667
-	public void editC_ActionPerformed(ActionEvent evt) {
668
-		if (animList.getSelectedIndex() == -1) {
669
-			errorMessage("Please select an animation.");
670
-		} else if (frameList.getSelectedIndex() == -1) {
671
-			errorMessage("Please select a Frame.");
672
-		} else {
673
-			@SuppressWarnings("unused")
674
-			layerEditFrame layerFrame1 = new layerEditFrame(
675
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
676
-					2, worker, this);
677
-		}
678
-	}
679
-
680
-	public void editD_ActionPerformed(ActionEvent evt) {
681
-		if (animList.getSelectedIndex() == -1) {
682
-			errorMessage("Please select an animation.");
683
-		} else if (frameList.getSelectedIndex() == -1) {
684
-			errorMessage("Please select a Frame.");
685
-		} else {
686
-			@SuppressWarnings("unused")
687
-			layerEditFrame layerFrame1 = new layerEditFrame(
688
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
689
-					3, worker, this);
690
-		}
691
-	}
692
-
693
-	public void editE_ActionPerformed(ActionEvent evt) {
694
-		if (animList.getSelectedIndex() == -1) {
695
-			errorMessage("Please select an animation.");
696
-		} else if (frameList.getSelectedIndex() == -1) {
697
-			errorMessage("Please select a Frame.");
698
-		} else {
699
-			@SuppressWarnings("unused")
700
-			layerEditFrame layerFrame1 = new layerEditFrame(
701
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
702
-					4, worker, this);
703
-		}
704
-	}
705
-
706
-	public void editF_ActionPerformed(ActionEvent evt) {
707
-		if (animList.getSelectedIndex() == -1) {
708
-			errorMessage("Please select an animation.");
709
-		} else if (frameList.getSelectedIndex() == -1) {
710
-			errorMessage("Please select a Frame.");
711
-		} else {
712
-			@SuppressWarnings("unused")
713
-			layerEditFrame layerFrame1 = new layerEditFrame(
714
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
715
-					5, worker, this);
716
-		}
717
-	}
718
-
719
-	public void editG_ActionPerformed(ActionEvent evt) {
720
-		if (animList.getSelectedIndex() == -1) {
721
-			errorMessage("Please select an animation.");
722
-		} else if (frameList.getSelectedIndex() == -1) {
723
-			errorMessage("Please select a Frame.");
724
-		} else {
725
-			@SuppressWarnings("unused")
726
-			layerEditFrame layerFrame1 = new layerEditFrame(
727
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
728
-					6, worker, this);
729
-		}
730
-	}
731
-
732
-	public void editH_ActionPerformed(ActionEvent evt) {
733
-		if (animList.getSelectedIndex() == -1) {
734
-			errorMessage("Please select an animation.");
735
-		} else if (frameList.getSelectedIndex() == -1) {
736
-			errorMessage("Please select a Frame.");
737
-		} else {
738
-			@SuppressWarnings("unused")
739
-			layerEditFrame layerFrame1 = new layerEditFrame(
740
-					animList.getSelectedIndex(), frameList.getSelectedIndex(),
741
-					7, worker, this);
742
-		}
743
-	}
744
-
745
-	public void frameUp_ActionPerformed(ActionEvent evt) {
746
-		int i = frameList.getSelectedIndex();
747
-		if ((i > 0) && (frameListModel.getSize() >= 2)) {
748
-			Object tmp = frameListModel.get(i);
749
-			frameListModel.set(i, frameListModel.get(i - 1));
750
-			frameListModel.set(i - 1, tmp);
751
-			frameList.setSelectedIndex(i - 1);
752
-			worker.moveFrame(worker.UP, animList.getSelectedIndex(),
753
-					frameList.getSelectedIndex());
754
-		}
755
-	}
756
-
757
-	public void frameDown_ActionPerformed(ActionEvent evt) {
758
-		int i = frameList.getSelectedIndex();
759
-		if ((i >= 0) && (frameListModel.getSize() >= 2)
760
-				&& (i < (frameListModel.getSize() - 1))) {
761
-			Object tmp = frameListModel.get(i);
762
-			frameListModel.set(i, frameListModel.get(i + 1));
763
-			frameListModel.set(i + 1, tmp);
764
-			frameList.setSelectedIndex(i + 1);
765
-			worker.moveFrame(worker.DOWN, animList.getSelectedIndex(),
766
-					frameList.getSelectedIndex());
767
-		}
768
-	}
769
-
770
-	public void frameAdd_ActionPerformed(ActionEvent evt) {
771
-		if (animList.getSelectedIndex() == -1) {
772
-			errorMessage("Please select an animation!");
773
-		} else {
774
-			int n = worker.numOfFrames(animList.getSelectedIndex());
775
-			worker.addFrame(animList.getSelectedIndex());
776
-			// Not reaching past this comment if frame list empty
777
-			frameRemaining.setText(Integer.toString(worker.framesRemaining()));
778
-			frameListModel.add(n,
779
-					worker.getFrameName(animList.getSelectedIndex(), n));
780
-			frameList.setModel(frameListModel);
781
-		}
782
-	}
783
-
784
-	public void frameRemove_ActionPerformed(ActionEvent evt) {
785
-		if (animList.getSelectedIndex() == -1) {
786
-			errorMessage("Select an animation.");
787
-		} else if (frameList.getSelectedIndex() == -1) {
788
-			errorMessage("Select a Frame.");
789
-		} else {
790
-			worker.removeFrame(animList.getSelectedIndex(),
791
-					frameList.getSelectedIndex());
792
-			frameRemaining.setText(Integer.toString(worker.framesRemaining()));
793
-			frameListModel.removeElementAt(frameList.getSelectedIndex());
794
-			frameList.setModel(frameListModel);
795
-		}
796
-	}
797
-
798
-	public void animUp_ActionPerformed(ActionEvent evt) {
799
-		int i = animList.getSelectedIndex();
800
-		if ((i > 0) && (animModel.getSize() >= 2)) {
801
-			Object tmp = animModel.get(i);
802
-			animModel.set(i, animModel.get(i - 1));
803
-			animModel.set(i - 1, tmp);
804
-			animList.setSelectedIndex(i - 1);
805
-			worker.moveAnimation(worker.UP, animList.getSelectedIndex());
806
-		}
807
-	}
808
-
809
-	public void animDown_ActionPerformed(ActionEvent evt) {
810
-		int i = animList.getSelectedIndex();
811
-		if ((i >= 0) && (animModel.getSize() >= 2)
812
-				&& (i < (animModel.getSize() - 1))) {
813
-			Object tmp = animModel.get(i);
814
-			animModel.set(i, animModel.get(i + 1));
815
-			animModel.set(i + 1, tmp);
816
-			animList.setSelectedIndex(i + 1);
817
-			worker.moveAnimation(worker.DOWN, animList.getSelectedIndex());
818
-		}
819
-	}
820
-
821
-	public void animAdd_ActionPerformed(ActionEvent evt) {
822
-		if (worker.addAnimation() == -1) {
823
-			errorMessage("Could not add animation!");
824
-		} else {
825
-			animModel.clear();
826
-			for (int i = 0; i < worker.numOfAnimations(); i++) {
827
-				animModel.add(i, worker.getAnimationName(i));
828
-			}
829
-			animList.setModel(animModel);
830
-		}
831
-
832
-	}
833
-
834
-	public void animRemove_ActionPerformed(ActionEvent evt) {
835
-		if (animList.getSelectedIndex() == -1) {
836
-			errorMessage("Select an animation.");
837
-		} else {
838
-			worker.removeAnimation(animList.getSelectedIndex());
839
-			animModel.removeElementAt(animList.getSelectedIndex());
840
-			animList.setModel(animModel);
841
-		}
842
-	}
843
-
844
-	public void load_ActionPerformed(ActionEvent evt) {
845
-		JFileChooser fc = new JFileChooser();
846
-		int ret = fc.showOpenDialog(this);
847
-		if (ret == JFileChooser.APPROVE_OPTION) {
848
-			File file = fc.getSelectedFile();
849
-			if (fileSelected == false) {
850
-				fileSelected = true;
851
-			}
852
-			animPath.setText(file.getPath());
853
-			worker.loadState(animPath.getText());
854
-			animModel.clear();
855
-			for (int i = 0; i < worker.numOfAnimations(); i++) {
856
-				animModel.addElement(worker.getAnimationName(i));
857
-			}
858
-			animList.setModel(animModel);
859
-
860
-			frameListModel.clear();
861
-			frameList.setModel(frameListModel);
862
-		}
863
-	}
864
-
865
-	public void save_ActionPerformed(ActionEvent evt) {
866
-		if (fileSelected == false) {
867
-			JFileChooser fc = new JFileChooser();
868
-			int ret = fc.showSaveDialog(this);
869
-			if (ret == JFileChooser.APPROVE_OPTION) {
870
-				File file = fc.getSelectedFile();
871
-				fileSelected = true;
872
-				animPath.setText(file.getPath());
873
-				worker.saveState(animPath.getText());
874
-			}
875
-		} else {
876
-			worker.saveState(animPath.getText());
877
-		}
878
-	}
879
-
880
-	public void saveAs_ActionPerformed(ActionEvent evt) {
881
-		JFileChooser fc;
882
-		if (fileSelected == true) {
883
-			fc = new JFileChooser(new File(animPath.getText()).getParentFile());
884
-		} else {
885
-			fc = new JFileChooser();
886
-		}
887
-		int ret = fc.showSaveDialog(this);
888
-		if (ret == JFileChooser.APPROVE_OPTION) {
889
-			File file = fc.getSelectedFile();
890
-			if (fileSelected == false) {
891
-				fileSelected = true;
892
-			}
893
-			animPath.setText(file.getPath());
894
-			worker.saveState(animPath.getText());
895
-		}
896
-	}
897
-
898
-	// We get detailed error messages from the SerialHelper...
899
-	public void upload_ActionPerformed(ActionEvent evt) {
900
-		if (jComboBox1.getSelectedItem().equals("Select serial port...")) {
901
-			// errorMessage("No serial port selected...");
902
-		} else {
903
-			if (worker.probeCubeConnected((String) jComboBox1.getSelectedItem())) {
904
-				if (worker.uploadState((String) jComboBox1.getSelectedItem()) != 0) {
905
-					// errorMessage("Could not upload data!");
906
-				}
907
-			} else {
908
-				// errorMessage("Cube does not respond...");
909
-			}
910
-		}
911
-	}
912
-
913
-	public void download_ActionPerformed(ActionEvent evt) {
914
-		if (jComboBox1.getSelectedItem().equals("Select serial port...")) {
915
-			// errorMessage("No serial port selected...");
916
-		} else {
917
-			if (worker.probeCubeConnected((String) jComboBox1.getSelectedItem())) {
918
-				if (worker.downloadState((String) jComboBox1.getSelectedItem()) != 0) {
919
-					// errorMessage("Could not download data!");
920
-				}
921
-			} else {
922
-				// errorMessage("Cube does not respond...");
923
-			}
924
-		}
925
-	}
926
-
927
 	public Led3D get3D() {
788
 	public Led3D get3D() {
928
 		return ledView;
789
 		return ledView;
929
 	}
790
 	}
1003
 
864
 
1004
 				if (s.startsWith("frames ")) {
865
 				if (s.startsWith("frames ")) {
1005
 					int anim = Integer.parseInt(s.substring(7));
866
 					int anim = Integer.parseInt(s.substring(7));
1006
-					if (anim >= f.worker.numOfAnimations()) {
1007
-						System.out.println("Animation does not exist! Max: " + (f.worker.numOfAnimations() - 1));
867
+					if (anim >= f.worker.size()) {
868
+						System.out.println("Animation does not exist! Max: " + (f.worker.size() - 1));
1008
 					} else {
869
 					} else {
1009
-						System.out.println("Animation: " + f.worker.getAnimationName(anim));
1010
-						for (int i = 0; i < f.worker.numOfFrames(anim); i++) {
1011
-							AFrame frame = f.worker.getAnimationList().get(anim).get(i);
1012
-							System.out.println("\tFrame " + frame.getOrder() + " (" + frame.getTime() + "): " + frame.getName());
870
+						System.out.println("Animation: " + f.worker.getAnimation(anim).getName());
871
+						for (int i = 0; i < f.worker.getAnimation(anim).size(); i++) {
872
+							AFrame frame = f.worker.getAnimation(anim).getFrame(i);
873
+							System.out.println("\tFrame (" + frame.getTime() + "): " + frame.getName());
1013
 						}
874
 						}
1014
 					}
875
 					}
1015
 				}
876
 				}
1016
 
877
 
1017
 				if (s.equals("a") || s.equals("anims")) {
878
 				if (s.equals("a") || s.equals("anims")) {
1018
-					for (int i = 0; i < f.worker.numOfAnimations(); i++) {
1019
-						Animation anim = f.worker.getAnimationList().get(i);
1020
-						System.out.println("\tAnimation " + anim.getOrder() + ": " + anim.getName());
879
+					for (int i = 0; i < f.worker.size(); i++) {
880
+						Animation anim = f.worker.getAnimation(i);
881
+						System.out.println("\tAnimation: " + anim.getName());
1021
 					}
882
 					}
1022
 				}
883
 				}
1023
 
884
 
1024
 				if (s.equals("s") || s.equals("scan")) {
885
 				if (s.equals("s") || s.equals("scan")) {
1025
-					String[] sPorts = f.worker.getSerialPorts();
886
+					String[] sPorts = HelperUtility.getPorts();
1026
 					f.jComboBox1.removeAllItems();
887
 					f.jComboBox1.removeAllItems();
1027
 					for (int i = 0; i < sPorts.length; i++) {
888
 					for (int i = 0; i < sPorts.length; i++) {
1028
 						f.jComboBox1.addItem(sPorts[i]);
889
 						f.jComboBox1.addItem(sPorts[i]);

+ 23
- 1
CubeControl/HelperUtility.java View File

31
 import java.io.*;
31
 import java.io.*;
32
 import java.nio.channels.*;
32
 import java.nio.channels.*;
33
 import java.nio.*;
33
 import java.nio.*;
34
+import java.util.StringTokenizer;
34
 
35
 
35
 public class HelperUtility {
36
 public class HelperUtility {
36
 
37
 
106
 	}
107
 	}
107
 
108
 
108
 	/**
109
 	/**
110
+	 * Get the names of all available serial ports.
111
+	 * 
112
+	 * @return Array of port names. First entry is "No serial ports!" if no
113
+	 *         others
114
+	 */
115
+	public static String[] getPorts() {
116
+		String[] ports = { "No serial ports!" };
117
+		String portLines = getPortsOS();
118
+		if (portLines == null) {
119
+			return ports;
120
+		}
121
+		StringTokenizer sT = new StringTokenizer(portLines, "\n");
122
+		int size = sT.countTokens();
123
+		ports = new String[size];
124
+		for (int i = 0; i < size; i++) {
125
+			ports[i] = sT.nextToken();
126
+		}
127
+		return ports;
128
+	}
129
+
130
+	/**
109
 	 * Get all the existing serial port names
131
 	 * Get all the existing serial port names
110
 	 * 
132
 	 * 
111
 	 * @return List of port names. \n between entries
133
 	 * @return List of port names. \n between entries
112
 	 */
134
 	 */
113
-	public static String getPorts() {
135
+	private static String getPortsOS() {
114
 		String os = System.getProperty("os.name").toLowerCase();
136
 		String os = System.getProperty("os.name").toLowerCase();
115
 		try {
137
 		try {
116
 			if (os.indexOf("windows") > -1) {
138
 			if (os.indexOf("windows") > -1) {

+ 11
- 9
CubeControl/SerialHelper.java View File

78
 	 * @return A cubeWorker populated with the new data or null.
78
 	 * @return A cubeWorker populated with the new data or null.
79
 	 */
79
 	 */
80
 	public cubeWorker getAnimationsFromCube() {
80
 	public cubeWorker getAnimationsFromCube() {
81
-		List<Animation> animations = new ArrayList<Animation>();
81
+		Animation[] animations;
82
 		int animationCount, frameCount;
82
 		int animationCount, frameCount;
83
 		short[] data, tmp = new short[1];
83
 		short[] data, tmp = new short[1];
84
 
84
 
108
 			return null;
108
 			return null;
109
 		}
109
 		}
110
 
110
 
111
+		animations = new Animation[animationCount];
112
+
111
 		// Get animations
113
 		// Get animations
112
 		for (int a = 0; a < animationCount; a++) {
114
 		for (int a = 0; a < animationCount; a++) {
113
 			Animation currentAnim = new Animation();
115
 			Animation currentAnim = new Animation();
159
 				}
161
 				}
160
 
162
 
161
 				// Add frame to animation
163
 				// Add frame to animation
162
-				currentAnim.add(f, currentFrame);
164
+				currentAnim.setFrame(currentFrame, f);
163
 			}
165
 			}
164
 
166
 
165
 			// Add animation to animations list
167
 			// Add animation to animations list
166
-			animations.add(a, currentAnim);
168
+			animations[a] = currentAnim;
167
 		}
169
 		}
168
 
170
 
169
 		return new cubeWorker(animations, frame);
171
 		return new cubeWorker(animations, frame);
190
 		}
192
 		}
191
 
193
 
192
 		// Send animation count
194
 		// Send animation count
193
-		tmp[0] = (short)worker.numOfAnimations();
195
+		tmp[0] = (short)worker.size();
194
 		if (!writeData(tmp)) {
196
 		if (!writeData(tmp)) {
195
 			printErrorMessage("Timeout numOfAnimations");
197
 			printErrorMessage("Timeout numOfAnimations");
196
 			return -1;
198
 			return -1;
202
 		}
204
 		}
203
 
205
 
204
 		// Send animations
206
 		// Send animations
205
-		for (int a = 0; a < worker.numOfAnimations(); a++) {
207
+		for (int a = 0; a < worker.size(); a++) {
206
 			// Send frame count
208
 			// Send frame count
207
-			tmp[0] = (short)worker.numOfFrames(a);
209
+			tmp[0] = (short)worker.getAnimation(a).size();
208
 			if (!writeData(tmp)) {
210
 			if (!writeData(tmp)) {
209
 				printErrorMessage("Timeout numOfFrames");
211
 				printErrorMessage("Timeout numOfFrames");
210
 				return -1;
212
 				return -1;
216
 			}
218
 			}
217
 
219
 
218
 			// Send frames
220
 			// Send frames
219
-			for (int f = 0; f < worker.numOfFrames(a); f++) {
221
+			for (int f = 0; f < worker.getAnimation(a).size(); f++) {
220
 				// Frame duration
222
 				// Frame duration
221
-				tmp[0] = worker.getFrameTime(a, f);
223
+				tmp[0] = worker.getAnimation(a).getFrame(f).getTime();
222
 				if (!writeData(tmp)) {
224
 				if (!writeData(tmp)) {
223
 					printErrorMessage("Timeout Frame duration");
225
 					printErrorMessage("Timeout Frame duration");
224
 					return -1;
226
 					return -1;
230
 				}
232
 				}
231
 
233
 
232
 				// Frame data
234
 				// Frame data
233
-				if (!writeData(worker.getFrame(a, f))) {
235
+				if (!writeData(worker.getAnimation(a).getFrame(f).getData())) {
234
 					printErrorMessage("Timeout Frame");
236
 					printErrorMessage("Timeout Frame");
235
 					return -1;
237
 					return -1;
236
 				}
238
 				}

+ 73
- 308
CubeControl/cubeWorker.java View File

43
 
43
 
44
 public class cubeWorker {
44
 public class cubeWorker {
45
 
45
 
46
-	// --------------------
47
-	// Definitions
48
-	// --------------------
49
-
50
-	final int UP = 0;
51
-	final int DOWN = 1;
52
-
53
-	// --------------------
54
-	// Fields
55
-	// --------------------
56
-
57
-	private List<Animation> animations = new ArrayList<Animation>();
58
 	private final int framesRemaining = 2016; // (128 * 1024) / 65 = 2016,...
46
 	private final int framesRemaining = 2016; // (128 * 1024) / 65 = 2016,...
59
 	private boolean changedState = false;
47
 	private boolean changedState = false;
60
 	private Frame parentFrame;
48
 	private Frame parentFrame;
61
-
62
-	// --------------------
49
+	private Animation[] animations = new Animation[1];
63
 
50
 
64
 	/**
51
 	/**
65
 	 * Creates a worker with one animation, containing an empty frame.
52
 	 * Creates a worker with one animation, containing an empty frame.
66
 	 */
53
 	 */
67
 	public cubeWorker(Frame parent) {
54
 	public cubeWorker(Frame parent) {
68
-		animations.add(new Animation());
69
-		animations.get(0).setName("Animation 1");
70
-		animations.get(0).add(0);
71
-		animations.get(0).get(0).setName("Frame 1");
55
+		animations[0] = new Animation();
56
+		animations[0].setName("Animation 1");
72
 		parentFrame = parent;
57
 		parentFrame = parent;
73
 	}
58
 	}
74
 
59
 
75
-	/**
76
-	 * Creates a worker from the given animation list
77
-	 * 
78
-	 * @param anims List of animations
79
-	 */
80
-	public cubeWorker(List<Animation> anims, Frame parent) {
60
+	public cubeWorker(Animation[] anims, Frame parent) {
81
 		animations = anims;
61
 		animations = anims;
82
 		parentFrame = parent;
62
 		parentFrame = parent;
83
 	}
63
 	}
88
 	 * @return number of frames.
68
 	 * @return number of frames.
89
 	 */
69
 	 */
90
 	public int completeNumOfFrames() {
70
 	public int completeNumOfFrames() {
91
-		int count = 0;
92
-		for (int i = 0; i < numOfAnimations(); i++) {
93
-			count += numOfFrames(i);
71
+		int c = 0;
72
+		for (int i = 0; i < size(); i++) {
73
+			c += getAnimation(i).size();
94
 		}
74
 		}
95
-		return count;
75
+		return c;
96
 	}
76
 	}
97
 
77
 
98
 	// --------------------
78
 	// --------------------
99
 	// Misc. Methods
79
 	// Misc. Methods
100
 	// --------------------
80
 	// --------------------
101
 
81
 
102
-	// Returns a number that is below the size of the animations list and not used as order
103
-	// If a order is higher or equal to the size of the list, it tries to assign a hole found to this
104
-	// Returns -1 if there is no hole
105
-	private int holeInAnimationList() {
106
-		int s = animations.size();
107
-		byte[] result = new byte[s];
108
-		int hole = -1;
109
-		int fix = -1;
110
-		for (int i = 0; i < s; i++) {
111
-			result[i] = 0;
112
-		}
113
-		for (int i = 0; i < s; i++) {
114
-			int order = animations.get(i).getOrder();
115
-			if (order >= s) {
116
-				// Houston, we have a problem...
117
-				fix = i;
118
-			}
119
-			result[order] = 1;
120
-		}
121
-		for (int i = 0; i < s; i++) {
122
-			if (result[i] == 0) {
123
-				hole = i;
124
-				break;
125
-			}
126
-		}
127
-		if ((hole != -1) && (fix != 1)) {
128
-			animations.get(fix).setOrder(hole);
129
-			return holeInAnimationList();
130
-		}
131
-		return hole;
132
-	}
133
-
134
-	// return true if damaged and to be sorted
135
-	private boolean checkAnimationList() {
136
-		for (int i = 0; i < animations.size(); i++) {
137
-			if (animations.get(i).getOrder() != i) {
138
-				int h = holeInAnimationList();
139
-				if (h != -1) {
140
-					animations.get(i).setOrder(h);
141
-				}
142
-				return true;
143
-			}
144
-		}
145
-		return false;
146
-	}
147
-
148
 	/**
82
 	/**
149
 	 * Get the number of animations in this worker.
83
 	 * Get the number of animations in this worker.
150
-	 * Also fixes the order of the animation list, if needed.
151
 	 * 
84
 	 * 
152
 	 * @return number of animations
85
 	 * @return number of animations
153
 	 */
86
 	 */
154
-	public int numOfAnimations() {
155
-		while(checkAnimationList()) {
156
-			Collections.sort(animations);
157
-		}
158
-		return animations.size();
159
-	}
160
-
161
-	/**
162
-	 * Get the number of frames in an animation.
163
-	 * 
164
-	 * @param selectedAnimation the animation you want to check
165
-	 * @return number of frames in this animation
166
-	 */
167
-	public int numOfFrames(int selectedAnimation) {
168
-		return animations.get(selectedAnimation).size();
87
+	public int size() {
88
+		return animations.length;
169
 	}
89
 	}
170
 
90
 
171
 	/**
91
 	/**
173
 	 * 
93
 	 * 
174
 	 * @return number of frames remaining
94
 	 * @return number of frames remaining
175
 	 */
95
 	 */
176
-	public int framesRemaining() {
96
+	public int memoryRemaining() {
177
 		return framesRemaining - completeNumOfFrames();
97
 		return framesRemaining - completeNumOfFrames();
178
 	}
98
 	}
179
 
99
 
180
-	// --------------------
181
-	// Animation Specific
182
-	// --------------------
183
-
184
 	/**
100
 	/**
185
 	 * Add an animation. It has an initial empty frame
101
 	 * Add an animation. It has an initial empty frame
186
 	 * 
102
 	 * 
188
 	 */
104
 	 */
189
 	public int addAnimation() {
105
 	public int addAnimation() {
190
 		changedState = true;
106
 		changedState = true;
191
-		if (framesRemaining() <= 0) {
107
+		if (memoryRemaining() <= 0) {
192
 			return -1;
108
 			return -1;
193
 		} else {
109
 		} else {
194
-			int s = animations.size();
195
-			animations.add(s, new Animation());
196
-			animations.get(s).setName("Animation " + animations.size());
197
-			animations.get(s).add(0, new AFrame());
198
-			animations.get(s).get(0).setName("Frame 1");
199
-			return s;
110
+			extendArray();
111
+			animations[animations.length - 1] = new Animation();
112
+			return animations.length - 1;
200
 		}
113
 		}
201
 	}
114
 	}
202
 
115
 
203
 	/**
116
 	/**
204
 	 * Remove an animation.
117
 	 * Remove an animation.
205
 	 * 
118
 	 * 
206
-	 * @param selectedAnimation the animation you want to delete
207
-	 */
208
-	public void removeAnimation(int selectedAnimation) {
209
-		changedState = true;
210
-		animations.remove(selectedAnimation);
211
-	}
212
-
213
-	/**
214
-	 * Get the name of an animation
215
-	 * 
216
-	 * @return The name
217
-	 * @param selectedAnimation The animation you want to get the name from
119
+	 * @param i the animation you want to delete
218
 	 */
120
 	 */
219
-	public String getAnimationName(int selectedAnimation) {
220
-		return animations.get(selectedAnimation).getName();
221
-	}
222
-
223
-	/**
224
-	 * Set the name of an animation  @param s New name
225
-	 * 
226
-	 * @param selectedAnimation Index of the animation you want to change
227
-	 */
228
-	public void setAnimationName(String s, int selectedAnimation) {
121
+	public void removeAnimation(int i) {
229
 		changedState = true;
122
 		changedState = true;
230
-		animations.get(selectedAnimation).setName(s);
123
+		shiftOver(i);
124
+		shrinkArray();
231
 	}
125
 	}
232
 
126
 
233
 	/**
127
 	/**
234
-	 * Move an animation UP or DOWN.
235
-	 * 
236
-	 * @param dir Direction. Use UP and DOWN defined in cubeWorker
237
-	 * @param selectedAnimation Animation you want to move
128
+	 * Move an animation up.
129
+	 * @param i the animation you want to move
238
 	 */
130
 	 */
239
-	public void moveAnimation(int dir, int selectedAnimation) {
240
-		changedState = true;
241
-		if (dir == UP) {
242
-			// animation moved up
243
-			if (selectedAnimation > 0) {
244
-				Animation tmp = animations.get(selectedAnimation);
245
-				animations.set(selectedAnimation,
246
-						animations.get(selectedAnimation - 1));
247
-				animations.set(selectedAnimation - 1, tmp);
248
-			}
249
-		} else if (dir == DOWN) {
250
-			// animation moved down
251
-			if (selectedAnimation < (animations.size() - 1)) {
252
-				Animation tmp = animations.get(selectedAnimation);
253
-				animations.set(selectedAnimation,
254
-						animations.get(selectedAnimation + 1));
255
-				animations.set(selectedAnimation + 1, tmp);
256
-			}
131
+	public void moveAnimationUp(int i) {
132
+		if (i > 0) {
133
+			Animation tmp = animations[i];
134
+			animations[i] = animations[i - 1];
135
+			animations[i - 1] = tmp;
257
 		}
136
 		}
258
 	}
137
 	}
259
 
138
 
260
-	// --------------------
261
-	// Frame Specific
262
-	// --------------------
263
-
264
 	/**
139
 	/**
265
-	 * Get the name of a frame.
266
-	 * 
267
-	 * @param anim Animation the frame is in
268
-	 * @param frame Index of the frame
140
+	 * Move an animation down.
141
+	 * @param i the animation you want to move
269
 	 */
142
 	 */
270
-	public String getFrameName(int anim, int frame) {
271
-		return animations.get(anim).get(frame).getName();
272
-	}
273
-
274
-	/**
275
-	 * Set the name of a frame.
276
-	 * 
277
-	 * @param s New name
278
-	 * @param anim Animation Index
279
-	 * @param frame Frame Index
280
-	 */
281
-	public void setFrameName(String s, int anim, int frame) {
282
-		changedState = true;
283
-		animations.get(anim).get(frame).setName(s);
284
-	}
285
-
286
-	/**
287
-	 * Add a Frame to an animation.
288
-	 * 
289
-	 * @return Index of new Frame or -1 if not enough space
290
-	 * @param anim Animation Index
291
-	 */
292
-	public int addFrame(int anim) {
293
-		changedState = true;
294
-		if (framesRemaining() <= 0) {
295
-			return -1;
143
+	public void moveAnimationDown(int i) {
144
+		if (i < (animations.length - 1)) {
145
+			Animation tmp = animations[i];
146
+			animations[i] = animations[i + 1];
147
+			animations[i + 1] = tmp;
296
 		}
148
 		}
297
-		int s = animations.get(anim).size();
298
-		animations.get(anim).add(s);
299
-		animations.get(anim).get(s)
300
-				.setName("Frame " + animations.get(anim).size());
301
-		return s;
302
-	}
303
-
304
-	/**
305
-	 * Remove a frame.
306
-	 * 
307
-	 * @param anim Animation Index
308
-	 * @param frame Frame you want to remove
309
-	 */
310
-	public void removeFrame(int anim, int frame) {
311
-		changedState = true;
312
-		animations.get(anim).remove(frame);
313
-	}
314
-
315
-	/**
316
-	 * Get the data of a frame.
317
-	 * 
318
-	 * @param anim Animation Index  @param frame Frame Index
319
-	 * @return 64 byte array with data (8 bits per byte => 512 bits)
320
-	 */
321
-	public short[] getFrame(int anim, int frame) {
322
-		return animations.get(anim).get(frame).getData();
323
 	}
149
 	}
324
 
150
 
325
-	/**
326
-	 * Set the data of a frame
327
-	 * 
328
-	 * @param data 64 byte array with data
329
-	 * @param anim Animation Index
330
-	 * @param frame Frame Index
331
-	 * @see cubeWorker#getFrame(int, int) getFrame()
332
-	 */
333
-	public void setFrame(short[] data, int anim, int frame) {
334
-		changedState = true;
335
-		animations.get(anim).get(frame).setData(data);
336
-	}
337
-
338
-	/**
339
-	 * Get frame duration.
340
-	 * 
341
-	 * @param anim Animation Index
342
-	 * @param frame Frame Index
343
-	 * @return Duration. 0 means 1/24th of a second.
344
-	 */
345
-	public short getFrameTime(int anim, int frame) {
346
-		return animations.get(anim).get(frame).getTime();
151
+	public Animation getAnimation(int i) {
152
+		if (i < animations.length) {
153
+			return animations[i];
154
+		} else {
155
+			return null;
156
+		}
347
 	}
157
 	}
348
 
158
 
349
-	/**
350
-	 * Set the frames duration.
351
-	 * 
352
-	 * @param time New duration
353
-	 * @param anim Animation Index
354
-	 * @param frame Frame Index
355
-	 * @see cubeWorker#getFrameTime(int, int) getFrameTime()
356
-	 */
357
-	public void setFrameTime(short time, int anim, int frame) {
159
+	public void setAnimation(Animation a, int i) {
358
 		changedState = true;
160
 		changedState = true;
359
-		animations.get(anim).get(frame).setTime(time);
360
-	}
361
-
362
-	/**
363
-	 * Move a frame.
364
-	 * 
365
-	 * @param dir Direction to move. Use UP and DOWN from cubeWorker
366
-	 * @param anim Animation Index
367
-	 * @param frame Frame Index
368
-	 * @see cubeWorker#moveAnimation(int, int) moveAnimation()
369
-	 */
370
-	public void moveFrame(int dir, int anim, int frame) {
371
-		changedState = true;
372
-		if (dir == UP) {
373
-			// frame moved up
374
-			if (frame > 0) {
375
-				AFrame tmp = animations.get(anim).frames.get(frame);
376
-				animations.get(anim).frames.set(frame,
377
-						animations.get(anim).frames.get(frame - 1));
378
-				animations.get(anim).frames.set(frame - 1, tmp);
379
-			}
380
-		} else if (dir == DOWN) {
381
-			// frame moved down
382
-			if (frame < (animations.get(anim).size() - 1)) {
383
-				AFrame tmp = animations.get(anim).frames.get(frame);
384
-				animations.get(anim).frames.set(frame,
385
-						animations.get(anim).frames.get(frame + 1));
386
-				animations.get(anim).frames.set(frame + 1, tmp);
387
-			}
161
+		if (i < animations.length) {
162
+			animations[i] = a;
388
 		}
163
 		}
389
 	}
164
 	}
390
 
165
 
391
-	// --------------------
392
-	// File Specific
393
-	// --------------------
394
-
395
 	/**
166
 	/**
396
 	 * Loads an animation file into this worker.
167
 	 * Loads an animation file into this worker.
397
 	 * 
168
 	 * 
408
 			return -1;
179
 			return -1;
409
 		}
180
 		}
410
 		int size = 0;
181
 		int size = 0;
411
-		for (int i = 0; i < animations.size(); i++) {
412
-			size += animations.get(i).size();
182
+		for (int i = 0; i < animations.length; i++) {
183
+			size += animations[i].size();
413
 		}
184
 		}
414
 		if (size > framesRemaining) {
185
 		if (size > framesRemaining) {
415
 			return -1;
186
 			return -1;
442
 		return changedState;
213
 		return changedState;
443
 	}
214
 	}
444
 
215
 
445
-	// --------------------
446
-	// Serial Port Specific
447
-	// --------------------
448
-
449
 	/**
216
 	/**
450
 	 * Send all animations to the cube.
217
 	 * Send all animations to the cube.
451
 	 * 
218
 	 * 
452
 	 * @param port Name of serial port to use
219
 	 * @param port Name of serial port to use
453
 	 * @return 0 on success, -1 on error
220
 	 * @return 0 on success, -1 on error
454
 	 */
221
 	 */
455
-	public int uploadState(String port) {
222
+	public int cubeSendState(String port) {
456
 		try {
223
 		try {
457
 			SerialHelper sh = new SerialHelper(port, parentFrame);
224
 			SerialHelper sh = new SerialHelper(port, parentFrame);
458
 			int ret = sh.sendAnimationsToCube(this);
225
 			int ret = sh.sendAnimationsToCube(this);
464
 	}
231
 	}
465
 
232
 
466
 	/**
233
 	/**
234
+	 * Get the array of animations in this worker.
235
+	 * @return animation array
236
+	 */
237
+	public Animation[] getAnimationArray() {
238
+		return animations;
239
+	}
240
+
241
+	/**
467
 	 * Get all animations from the cube, place it in this object
242
 	 * Get all animations from the cube, place it in this object
468
 	 * 
243
 	 * 
469
 	 * @param port Name of serial port to use
244
 	 * @param port Name of serial port to use
470
 	 * @return 0 on success, -1 on error
245
 	 * @return 0 on success, -1 on error
471
 	 */
246
 	 */
472
-	public int downloadState(String port) {
247
+	public int cubeGetState(String port) {
473
 		try {
248
 		try {
474
 			SerialHelper sh = new SerialHelper(port, parentFrame);
249
 			SerialHelper sh = new SerialHelper(port, parentFrame);
475
 			cubeWorker ret = sh.getAnimationsFromCube();
250
 			cubeWorker ret = sh.getAnimationsFromCube();
478
 				return -1;
253
 				return -1;
479
 			} else {
254
 			} else {
480
 				changedState = true;
255
 				changedState = true;
481
-				animations = ret.getAnimationList();
256
+				animations = ret.getAnimationArray();
482
 				return 0;
257
 				return 0;
483
 			}
258
 			}
484
 		} catch (Exception e) {
259
 		} catch (Exception e) {
487
 	}
262
 	}
488
 
263
 
489
 	/**
264
 	/**
490
-	 * Get the list used internally to store all the animations.
491
-	 * @return The list.
492
-	 */
493
-	public List<Animation> getAnimationList() {
494
-		return animations;
495
-	}
496
-
497
-	/**
498
 	 * Try to speak with the cube.
265
 	 * Try to speak with the cube.
499
 	 * 
266
 	 * 
500
 	 * @return TRUE if cube responds
267
 	 * @return TRUE if cube responds
501
 	 * @param port Name of serial port
268
 	 * @param port Name of serial port
502
 	 */
269
 	 */
503
-	public boolean probeCubeConnected(String port) {
270
+	public boolean cubeProbeConnected(String port) {
504
 		try {
271
 		try {
505
 			SerialHelper sh = new SerialHelper(port, parentFrame);
272
 			SerialHelper sh = new SerialHelper(port, parentFrame);
506
 			boolean response = sh.probeForCube();
273
 			boolean response = sh.probeForCube();
511
 		}
278
 		}
512
 	}
279
 	}
513
 
280
 
514
-	/**
515
-	 * Get the names of all available serial ports.
516
-	 * 
517
-	 * @return Array of port names. First entry is "Select serial port..." if no
518
-	 *         others
519
-	 */
520
-	public String[] getSerialPorts() {
521
-		String[] ports = { "Select serial port..." };
522
-		String portLines = HelperUtility.getPorts();
523
-		if (portLines == null) {
524
-			return ports;
525
-		}
526
-		StringTokenizer sT = new StringTokenizer(portLines, "\n");
527
-		int size = sT.countTokens();
528
-		ports = new String[size];
529
-		for (int i = 0; i < size; i++) {
530
-			ports[i] = sT.nextToken();
281
+	private void extendArray() {
282
+		Animation newArray[] = new Animation[animations.length + 1];
283
+		for (int i = 0; i < animations.length; i++) {
284
+			newArray[i] = animations[i];
531
 		}
285
 		}
532
-		return ports;
286
+		animations = newArray;
533
 	}
287
 	}
534
 
288
 
535
-	// --------------------
289
+	private void shrinkArray() {
290
+		Animation newArray[] = new Animation[animations.length - 1];
291
+		for (int i = 0; i < newArray.length; i++) {
292
+			newArray[i] = animations[i];
293
+		}
294
+		animations = newArray;
295
+	}
536
 
296
 
297
+	private void shiftOver(int toForget) {
298
+		for (int i = (toForget + 1); i < animations.length; i++) {
299
+			animations[i - 1] = animations[i];
300
+		}
301
+	}
537
 }
302
 }

+ 2
- 2
CubeControl/layerEditFrame.java View File

71
 		animI = animIndex;
71
 		animI = animIndex;
72
 		frameI = frameIndex;
72
 		frameI = frameIndex;
73
 		// frame = byteToShortArray(worker.getFrame(animIndex, frameIndex));
73
 		// frame = byteToShortArray(worker.getFrame(animIndex, frameIndex));
74
-		frame = worker.getFrame(animIndex, frameIndex);
74
+		frame = worker.getAnimation(animIndex).getFrame(frameIndex).getData();
75
 		li = layerIndex;
75
 		li = layerIndex;
76
 		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
76
 		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
77
 		int frameWidth = 180;
77
 		int frameWidth = 180;
215
 			reihe = 0;
215
 			reihe = 0;
216
 		}
216
 		}
217
 		frame = tmpFrame;
217
 		frame = tmpFrame;
218
-		worker.setFrame(frame, animI, frameI);
218
+		worker.getAnimation(animI).getFrame(frameI).setData(frame);
219
 		ListSelectionEvent layerChanged = new ListSelectionEvent(
219
 		ListSelectionEvent layerChanged = new ListSelectionEvent(
220
 				LedFrame.frameList, LedFrame.frameList.getSelectedIndex(),
220
 				LedFrame.frameList, LedFrame.frameList.getSelectedIndex(),
221
 				LedFrame.frameList.getSelectedIndex(), false);
221
 				LedFrame.frameList.getSelectedIndex(), false);

Loading…
Cancel
Save