Skip to content
This repository was archived by the owner on Feb 9, 2022. It is now read-only.

Commit a41db30

Browse files
ExplvExplv
authored andcommitted
- Adding delete button, move up button, move down button to task panels
- GUI refactoring - Draw item icon over slot background in loadout panel
1 parent 3b448c7 commit a41db30

17 files changed

+460
-312
lines changed
7.82 KB
Loading

AIO/resources/moveDownIcon.png

3.4 KB
Loading
3.4 KB
Loading

AIO/resources/moveUpIcon.png

3.4 KB
Loading

AIO/resources/moveUpIconHover.png

3.4 KB
Loading

AIO/src/org/aio/gui/Gui.java

Lines changed: 16 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
package org.aio.gui;
22

33
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;
65
import org.aio.tasks.Task;
76
import org.aio.tasks.TaskType;
8-
import org.aio.tasks.TutorialIslandTask;
9-
import org.json.simple.JSONArray;
107
import org.json.simple.JSONObject;
118

129
import javax.swing.*;
1310
import javax.swing.border.TitledBorder;
1411
import java.awt.*;
1512
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;
2013
import java.util.List;
2114
import java.util.Optional;
2215

@@ -25,11 +18,9 @@ public class Gui {
2518
public static final Color DARK_GREY = Color.decode("#181818");
2619

2720
private JDialog gui;
21+
private TaskList taskList;
2822

2923
private boolean started;
30-
private JPanel taskList = new JPanel();
31-
32-
private ArrayList<TaskPanelContent> taskPanels = new ArrayList<>();
3324

3425
public Gui() {
3526
gui = new JDialog();
@@ -84,6 +75,8 @@ public Gui() {
8475

8576
controlsPanel.add(createSpacerPanel());
8677

78+
taskList = new TaskList();
79+
8780
final JPanel addTaskPanel = new JPanel();
8881
addTaskPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
8982
addTaskPanel.setBackground(DARK_GREY);
@@ -95,55 +88,55 @@ public Gui() {
9588
"Level Task",
9689
"levelIcon.png",
9790
"levelIconHover.png",
98-
e -> addTask(TaskType.LEVEL)
91+
e -> taskList.addTask(TaskType.LEVEL)
9992
));
10093

10194
addTaskPanel.add(createButtonPanel(
10295
"Resource",
10396
"Resource Task",
10497
"resourceIcon.png",
10598
"resourceIconHover.png",
106-
e -> addTask(TaskType.RESOURCE)
99+
e -> taskList.addTask(TaskType.RESOURCE)
107100
));
108101

109102
addTaskPanel.add(createButtonPanel(
110103
"Timed",
111104
"Timed Task",
112105
"timedIcon.png",
113106
"timedIconHover.png",
114-
e -> addTask(TaskType.TIMED)
107+
e -> taskList.addTask(TaskType.TIMED)
115108
));
116109

117110
addTaskPanel.add(createButtonPanel(
118111
"Loop",
119112
"Loop Previous Tasks",
120113
"loopIcon.png",
121114
"loopIconHover.png",
122-
e -> addTask(TaskType.LOOP)
115+
e -> taskList.addTask(TaskType.LOOP)
123116
));
124117

125118
addTaskPanel.add(createButtonPanel(
126119
"Quest",
127120
"Quest Task",
128121
"questIcon.png",
129122
"questIconHover.png",
130-
e -> addTask(TaskType.QUEST)
123+
e -> taskList.addTask(TaskType.QUEST)
131124
));
132125

133126
addTaskPanel.add(createButtonPanel(
134127
"Grand Exchange",
135128
"GE Task",
136129
"geIcon.png",
137130
"geIconHover.png",
138-
e -> addTask(TaskType.GRAND_EXCHANGE)
131+
e -> taskList.addTask(TaskType.GRAND_EXCHANGE)
139132
));
140133

141134
addTaskPanel.add(createButtonPanel(
142135
"Break",
143136
"Break Task",
144137
"breakIcon.png",
145138
"breakIconHover.png",
146-
e -> addTask(TaskType.BREAK)
139+
e -> taskList.addTask(TaskType.BREAK)
147140
));
148141
controlsPanel.add(createSpacerPanel());
149142

@@ -170,16 +163,7 @@ public Gui() {
170163

171164
controlsPanel.add(startPanel);
172165

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);
183167

184168
gui.setMinimumSize(new Dimension(700, 300));
185169
gui.setMaximumSize(new Dimension(2000, 2000));
@@ -241,29 +225,8 @@ private JPanel createButtonPanel(final String label, final String toolTip, final
241225
return buttonPanel;
242226
}
243227

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();
267230
}
268231

269232
public boolean isStarted() {
@@ -283,115 +246,13 @@ public void close() {
283246
gui.dispose();
284247
}
285248

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-
377249
private void saveConfig() {
378250
new SwingWorker<Void, Void>() {
379251

380252
@Override
381253
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-
393254
ConfigManager configManager = new ConfigManager();
394-
configManager.saveConfig(jsonObject);
255+
configManager.saveConfig(taskList.toJSON());
395256
return null;
396257
}
397258
}.execute();
@@ -406,51 +267,13 @@ protected Void doInBackground() {
406267

407268
Optional<JSONObject> jsonObjectOpt = configManager.readConfig();
408269

409-
if (!jsonObjectOpt.isPresent()) {
410-
return null;
411-
}
270+
jsonObjectOpt.ifPresent(jsonObject -> taskList.fromJSON(jsonObject));
412271

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();
435272
return null;
436273
}
437274
}.execute();
438275
}
439276

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-
454277
public static void main(String[] args) {
455278
Gui gui = new Gui();
456279
gui.open();

0 commit comments

Comments
 (0)