1
1
package org .aio .gui ;
2
2
3
3
import org .aio .gui .conf_man .ConfigManager ;
4
- import org .aio .gui .task_panels .TaskPanel ;
5
- import org .aio .gui .task_panels .TaskPanelFactory ;
4
+ import org .aio .gui .task_list .TaskList ;
6
5
import org .aio .tasks .Task ;
7
6
import org .aio .tasks .TaskType ;
8
- import org .aio .tasks .TutorialIslandTask ;
9
- import org .json .simple .JSONArray ;
10
7
import org .json .simple .JSONObject ;
11
8
12
9
import javax .swing .*;
13
10
import javax .swing .border .TitledBorder ;
14
11
import java .awt .*;
15
12
import java .awt .event .ActionListener ;
16
- import java .awt .event .MouseAdapter ;
17
- import java .awt .event .MouseEvent ;
18
- import java .util .ArrayList ;
19
- import java .util .Collections ;
20
13
import java .util .List ;
21
14
import java .util .Optional ;
22
15
@@ -25,11 +18,9 @@ public class Gui {
25
18
public static final Color DARK_GREY = Color .decode ("#181818" );
26
19
27
20
private JDialog gui ;
21
+ private TaskList taskList ;
28
22
29
23
private boolean started ;
30
- private JPanel taskList = new JPanel ();
31
-
32
- private ArrayList <TaskPanelContent > taskPanels = new ArrayList <>();
33
24
34
25
public Gui () {
35
26
gui = new JDialog ();
@@ -84,6 +75,8 @@ public Gui() {
84
75
85
76
controlsPanel .add (createSpacerPanel ());
86
77
78
+ taskList = new TaskList ();
79
+
87
80
final JPanel addTaskPanel = new JPanel ();
88
81
addTaskPanel .setLayout (new FlowLayout (FlowLayout .CENTER , 5 , 5 ));
89
82
addTaskPanel .setBackground (DARK_GREY );
@@ -95,55 +88,55 @@ public Gui() {
95
88
"Level Task" ,
96
89
"levelIcon.png" ,
97
90
"levelIconHover.png" ,
98
- e -> addTask (TaskType .LEVEL )
91
+ e -> taskList . addTask (TaskType .LEVEL )
99
92
));
100
93
101
94
addTaskPanel .add (createButtonPanel (
102
95
"Resource" ,
103
96
"Resource Task" ,
104
97
"resourceIcon.png" ,
105
98
"resourceIconHover.png" ,
106
- e -> addTask (TaskType .RESOURCE )
99
+ e -> taskList . addTask (TaskType .RESOURCE )
107
100
));
108
101
109
102
addTaskPanel .add (createButtonPanel (
110
103
"Timed" ,
111
104
"Timed Task" ,
112
105
"timedIcon.png" ,
113
106
"timedIconHover.png" ,
114
- e -> addTask (TaskType .TIMED )
107
+ e -> taskList . addTask (TaskType .TIMED )
115
108
));
116
109
117
110
addTaskPanel .add (createButtonPanel (
118
111
"Loop" ,
119
112
"Loop Previous Tasks" ,
120
113
"loopIcon.png" ,
121
114
"loopIconHover.png" ,
122
- e -> addTask (TaskType .LOOP )
115
+ e -> taskList . addTask (TaskType .LOOP )
123
116
));
124
117
125
118
addTaskPanel .add (createButtonPanel (
126
119
"Quest" ,
127
120
"Quest Task" ,
128
121
"questIcon.png" ,
129
122
"questIconHover.png" ,
130
- e -> addTask (TaskType .QUEST )
123
+ e -> taskList . addTask (TaskType .QUEST )
131
124
));
132
125
133
126
addTaskPanel .add (createButtonPanel (
134
127
"Grand Exchange" ,
135
128
"GE Task" ,
136
129
"geIcon.png" ,
137
130
"geIconHover.png" ,
138
- e -> addTask (TaskType .GRAND_EXCHANGE )
131
+ e -> taskList . addTask (TaskType .GRAND_EXCHANGE )
139
132
));
140
133
141
134
addTaskPanel .add (createButtonPanel (
142
135
"Break" ,
143
136
"Break Task" ,
144
137
"breakIcon.png" ,
145
138
"breakIconHover.png" ,
146
- e -> addTask (TaskType .BREAK )
139
+ e -> taskList . addTask (TaskType .BREAK )
147
140
));
148
141
controlsPanel .add (createSpacerPanel ());
149
142
@@ -170,16 +163,7 @@ public Gui() {
170
163
171
164
controlsPanel .add (startPanel );
172
165
173
- taskList .setLayout (new BoxLayout (taskList , BoxLayout .Y_AXIS ));
174
- taskList .setBackground (DARK_GREY );
175
-
176
- JScrollPane scrollPane = new JScrollPane ();
177
- scrollPane .getVerticalScrollBar ().setUnitIncrement (16 );
178
- scrollPane .setBackground (DARK_GREY );
179
- scrollPane .setBorder (BorderFactory .createTitledBorder (BorderFactory .createEmptyBorder (10 , 0 , 10 , 0 ), null ));
180
- scrollPane .setViewportView (taskList );
181
- scrollPane .setPreferredSize (new Dimension (700 , 500 ));
182
- mainPanel .add (scrollPane , BorderLayout .CENTER );
166
+ mainPanel .add (taskList .getContainer (), BorderLayout .CENTER );
183
167
184
168
gui .setMinimumSize (new Dimension (700 , 300 ));
185
169
gui .setMaximumSize (new Dimension (2000 , 2000 ));
@@ -241,29 +225,8 @@ private JPanel createButtonPanel(final String label, final String toolTip, final
241
225
return buttonPanel ;
242
226
}
243
227
244
- /**
245
- * Public getter for the entire ordered task list
246
- * <p>
247
- * Note: Intentionally rebuilds the tasks, so each call returns a fresh list of task instances
248
- */
249
- public final ArrayList <Task > getTasksAsList () {
250
- ArrayList <Task > tasks = new ArrayList <>();
251
-
252
- int taskIndex = 0 ;
253
-
254
- Task tutorialIslandTask = new TutorialIslandTask ();
255
- tutorialIslandTask .setExecutionOrder (taskIndex );
256
- tasks .add (tutorialIslandTask );
257
- taskIndex ++;
258
-
259
- for (TaskPanelContent taskPanel : taskPanels ) {
260
- Task task = taskPanel .panel .toTask ();
261
- task .setExecutionOrder (taskIndex );
262
- tasks .add (task );
263
- taskIndex ++;
264
- }
265
-
266
- return tasks ;
228
+ public List <Task > getTasksAsList () {
229
+ return taskList .getTasksAsList ();
267
230
}
268
231
269
232
public boolean isStarted () {
@@ -283,115 +246,13 @@ public void close() {
283
246
gui .dispose ();
284
247
}
285
248
286
- private TaskPanel addTask (final TaskType taskType ) {
287
- TaskPanel taskPanel = TaskPanelFactory .createTaskPanel (taskType );
288
-
289
- if (taskPanel == null ) {
290
- throw new IllegalArgumentException (String .format ("Task type %s not supported." , taskType .toString ()));
291
- }
292
- JPopupMenu contextMenu = new JPopupMenu ();
293
- JMenuItem menuItemDelete = new JMenuItem ("Delete" );
294
- JMenuItem menuItemUp = new JMenuItem ("Move up" );
295
- JMenuItem menuItemDown = new JMenuItem ("Move down" );
296
-
297
- contextMenu .add (menuItemDelete );
298
- contextMenu .add (new JSeparator ());
299
- contextMenu .add (menuItemUp );
300
- contextMenu .add (menuItemDown );
301
-
302
- ArrayList <Component > components = new ArrayList <>();
303
- components .add (taskPanel .getPanel ());
304
- components .add (Box .createRigidArea (new Dimension (5 , 10 )));
305
- TaskPanelContent taskPanelContent = new TaskPanelContent (taskPanel , components );
306
- taskPanels .add (taskPanelContent );
307
-
308
- for (Component component : components ) {
309
- taskList .add (component );
310
- }
311
-
312
- taskPanel .getPanel ().setMaximumSize (new Dimension (taskPanel .getPanel ().getMaximumSize ().width , taskPanel .getPanel ().getPreferredSize ().height ));
313
-
314
- /*
315
- UI Actions
316
- */
317
- menuItemDelete .addActionListener (e -> {
318
- SwingUtilities .invokeLater (() -> {
319
- taskPanels .remove (taskPanelContent );
320
-
321
- for (Component component : taskPanelContent .components ) {
322
- taskList .remove (component );
323
- }
324
-
325
- taskList .revalidate ();
326
- taskList .repaint ();
327
- gui .pack ();
328
- });
329
- });
330
-
331
- menuItemUp .addActionListener (e -> {
332
- int from = taskPanels .indexOf (taskPanelContent );
333
- swapTasks (from , from - 1 );
334
- });
335
-
336
- menuItemDown .addActionListener (e -> {
337
- int from = taskPanels .indexOf (taskPanelContent );
338
- swapTasks (from , from + 1 );
339
- });
340
-
341
- taskPanel .getPanel ().addMouseListener (new MouseAdapter () {
342
- @ Override
343
- public void mouseClicked (final MouseEvent e ) {
344
- super .mouseClicked (e );
345
- if (e .getButton () == MouseEvent .BUTTON3 ) {
346
- contextMenu .show (taskPanel .getPanel (), e .getX (), e .getY ());
347
- }
348
- }
349
- });
350
-
351
- gui .pack ();
352
-
353
- return taskPanel ;
354
- }
355
-
356
- private void swapTasks (int from , int to ) {
357
- SwingUtilities .invokeLater (() -> {
358
- if (from < 0 || from >= taskPanels .size () || to < 0 || to >= taskPanels .size ()) {
359
- return ;
360
- }
361
-
362
- Collections .swap (taskPanels , from , to );
363
-
364
- taskList .removeAll ();
365
- for (TaskPanelContent redrawTaskPanelContent : taskPanels ) {
366
- for (Component component : redrawTaskPanelContent .components ) {
367
- taskList .add (component );
368
- }
369
- }
370
-
371
- taskList .revalidate ();
372
- taskList .repaint ();
373
- gui .pack ();
374
- });
375
- }
376
-
377
249
private void saveConfig () {
378
250
new SwingWorker <Void , Void >() {
379
251
380
252
@ Override
381
253
protected Void doInBackground () {
382
-
383
- JSONObject jsonObject = new JSONObject ();
384
-
385
- JSONArray taskJSONArray = new JSONArray ();
386
-
387
- for (TaskPanelContent taskPanel : taskPanels ) {
388
- taskJSONArray .add (taskPanel .panel .toJSON ());
389
- }
390
-
391
- jsonObject .put ("tasks" , taskJSONArray );
392
-
393
254
ConfigManager configManager = new ConfigManager ();
394
- configManager .saveConfig (jsonObject );
255
+ configManager .saveConfig (taskList . toJSON () );
395
256
return null ;
396
257
}
397
258
}.execute ();
@@ -406,51 +267,13 @@ protected Void doInBackground() {
406
267
407
268
Optional <JSONObject > jsonObjectOpt = configManager .readConfig ();
408
269
409
- if (!jsonObjectOpt .isPresent ()) {
410
- return null ;
411
- }
270
+ jsonObjectOpt .ifPresent (jsonObject -> taskList .fromJSON (jsonObject ));
412
271
413
- taskList .removeAll ();
414
- taskPanels .clear ();
415
-
416
- JSONObject jsonObject = jsonObjectOpt .get ();
417
-
418
- JSONArray tasks ;
419
-
420
- if (jsonObject .containsKey ("org/aio/tasks" )) {
421
- tasks = (JSONArray ) jsonObject .get ("org/aio/tasks" );
422
- } else {
423
- tasks = (JSONArray ) jsonObject .get ("tasks" );
424
- }
425
-
426
- for (Object task : tasks ) {
427
- JSONObject taskJSON = (JSONObject ) task ;
428
- addTask (TaskType .valueOf ((String ) taskJSON .get ("type" ))).fromJSON (taskJSON );
429
- }
430
-
431
- taskList .validate ();
432
- taskList .repaint ();
433
- gui .validate ();
434
- gui .repaint ();
435
272
return null ;
436
273
}
437
274
}.execute ();
438
275
}
439
276
440
- /**
441
- * Task panel content for use with tracking rendered/interactive content for each task panel instance
442
- */
443
- class TaskPanelContent {
444
- TaskPanel panel ;
445
- List <Component > components ;
446
-
447
- TaskPanelContent (TaskPanel panel , List <Component > components ) {
448
- this .panel = panel ;
449
- this .components = components ;
450
- }
451
-
452
- }
453
-
454
277
public static void main (String [] args ) {
455
278
Gui gui = new Gui ();
456
279
gui .open ();
0 commit comments