mirror of
https://github.com/OMGeeky/ATCS.git
synced 2025-12-26 23:57:25 +01:00
extract collapsibleItemList with buttons into method
this is currently done for - items in a droplist - replies - rewards others should follow
This commit is contained in:
@@ -23,13 +23,9 @@ import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSpinner;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.ListSelectionModel;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
import com.gpl.rpg.atcontentstudio.ATContentStudio;
|
||||
import com.gpl.rpg.atcontentstudio.model.GameDataElement;
|
||||
@@ -51,6 +47,7 @@ import com.gpl.rpg.atcontentstudio.ui.FieldUpdateListener;
|
||||
import com.gpl.rpg.atcontentstudio.ui.CustomListModel;
|
||||
import com.gpl.rpg.atcontentstudio.ui.OverlayIcon;
|
||||
import com.gpl.rpg.atcontentstudio.ui.gamedataeditors.dialoguetree.DialogueGraphView;
|
||||
import com.gpl.rpg.atcontentstudio.utils.UiUtils;
|
||||
import com.jidesoft.swing.JideBoxLayout;
|
||||
|
||||
public class DialogueEditor extends JSONElementEditor {
|
||||
@@ -174,12 +171,12 @@ public class DialogueEditor extends JSONElementEditor {
|
||||
idField = addTextField(pane, "Internal ID: ", dialogue.id, dialogue.writable, listener);
|
||||
messageField = addTranslatableTextArea(pane, "Message: ", dialogue.message, dialogue.writable, listener);
|
||||
switchToNpcBox = addNPCBox(pane, dialogue.getProject(), "Switch active NPC to: ", dialogue.switch_to_npc, dialogue.writable, listener);
|
||||
|
||||
CollapsiblePanel rewards = new CollapsiblePanel("Reaching this phrase gives the following rewards: ");
|
||||
|
||||
/*
|
||||
CollapsiblePanel rewards = new CollapsiblePanel(titleRewards);
|
||||
rewards.setLayout(new JideBoxLayout(rewards, JideBoxLayout.PAGE_AXIS));
|
||||
rewardsListModel = new RewardsListModel(dialogue);
|
||||
rewardsList = new JList(rewardsListModel);
|
||||
rewardsList.setCellRenderer(new RewardsCellRenderer());
|
||||
rewardsList.setCellRenderer(cellRendererRewards);
|
||||
rewardsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
rewards.add(new JScrollPane(rewardsList), JideBoxLayout.FIX);
|
||||
final JPanel rewardsEditorPane = new JPanel();
|
||||
@@ -227,38 +224,51 @@ public class DialogueEditor extends JSONElementEditor {
|
||||
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||
rewards.add(listButtonsPane, JideBoxLayout.FIX);
|
||||
}
|
||||
rewardsEditorPane.setLayout(new JideBoxLayout(rewardsEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||
rewards.add(rewardsEditorPane, JideBoxLayout.FIX);
|
||||
*/
|
||||
RewardsCellRenderer cellRendererRewards = new RewardsCellRenderer();
|
||||
String titleRewards = "Reaching this phrase gives the following rewards: ";
|
||||
rewardsListModel = new RewardsListModel(dialogue);
|
||||
|
||||
CollapsiblePanel rewards = UiUtils.getCollapsibleItemList(
|
||||
listener,
|
||||
rewardsListModel,
|
||||
() -> selectedReward = null,
|
||||
( selectedItem) -> this.selectedReward = selectedItem,
|
||||
() -> this.selectedReward,
|
||||
(reward)->{},
|
||||
(editorPane) -> updateRewardsEditorPane(editorPane, this.selectedReward, listener),
|
||||
dialogue.writable,
|
||||
Dialogue.Reward::new,
|
||||
cellRendererRewards,
|
||||
titleRewards,
|
||||
false
|
||||
).collapsiblePanel;
|
||||
if (dialogue.rewards == null || dialogue.rewards.isEmpty()) {
|
||||
rewards.collapse();
|
||||
}
|
||||
rewardsEditorPane.setLayout(new JideBoxLayout(rewardsEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||
rewards.add(rewardsEditorPane, JideBoxLayout.FIX);
|
||||
|
||||
pane.add(rewards, JideBoxLayout.FIX);
|
||||
|
||||
CollapsiblePanel replies = new CollapsiblePanel("Replies / Next Phrase: ");
|
||||
replies.setLayout(new JideBoxLayout(replies, JideBoxLayout.PAGE_AXIS));
|
||||
repliesListModel = new RepliesListModel(dialogue);
|
||||
repliesList = new JList(repliesListModel);
|
||||
repliesList.setCellRenderer(new RepliesCellRenderer());
|
||||
repliesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
replies.add(new JScrollPane(repliesList), JideBoxLayout.FIX);
|
||||
final JPanel repliesEditorPane = new JPanel();
|
||||
final JButton createReply = new JButton(new ImageIcon(DefaultIcons.getCreateIcon()));
|
||||
final JButton deleteReply = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
|
||||
final JButton moveReplyUp = new JButton(new ImageIcon(DefaultIcons.getArrowUpIcon()));
|
||||
final JButton moveReplyDown = new JButton(new ImageIcon(DefaultIcons.getArrowDownIcon()));
|
||||
deleteReply.setEnabled(false);
|
||||
moveReplyUp.setEnabled(false);
|
||||
moveReplyDown.setEnabled(false);
|
||||
repliesList.addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
|
||||
/*{
|
||||
CollapsiblePanel replies = new CollapsiblePanel(title);
|
||||
replies.setLayout(new JideBoxLayout(replies, JideBoxLayout.PAGE_AXIS));
|
||||
repliesListModel = new RepliesListModel(dialogue);
|
||||
repliesList = new JList(repliesListModel);
|
||||
repliesList.setCellRenderer(cellRenderer);
|
||||
repliesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
replies.add(new JScrollPane(repliesList), JideBoxLayout.FIX);
|
||||
final JPanel repliesEditorPane = new JPanel();
|
||||
final JButton createReply = new JButton(new ImageIcon(DefaultIcons.getCreateIcon()));
|
||||
final JButton deleteReply = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
|
||||
final JButton moveReplyUp = new JButton(new ImageIcon(DefaultIcons.getArrowUpIcon()));
|
||||
final JButton moveReplyDown = new JButton(new ImageIcon(DefaultIcons.getArrowDownIcon()));
|
||||
deleteReply.setEnabled(false);
|
||||
moveReplyUp.setEnabled(false);
|
||||
moveReplyDown.setEnabled(false);
|
||||
repliesList.addListSelectionListener(e -> {
|
||||
selectedReply = (Dialogue.Reply) repliesList.getSelectedValue();
|
||||
if (selectedReply != null && !Dialogue.Reply.GO_NEXT_TEXT.equals(selectedReply.text)) {
|
||||
replyTextCache = selectedReply.text;
|
||||
} else {
|
||||
replyTextCache = null;
|
||||
}
|
||||
replyValueChanged(selectedReply);
|
||||
if (selectedReply != null) {
|
||||
deleteReply.setEnabled(true);
|
||||
moveReplyUp.setEnabled(repliesList.getSelectedIndex() > 0);
|
||||
@@ -269,65 +279,88 @@ public class DialogueEditor extends JSONElementEditor {
|
||||
moveReplyDown.setEnabled(false);
|
||||
}
|
||||
updateRepliesEditorPane(repliesEditorPane, selectedReply, listener);
|
||||
});
|
||||
if (dialogue.writable) {
|
||||
JPanel listButtonsPane = new JPanel();
|
||||
listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6));
|
||||
createReply.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Dialogue.Reply reply = new Dialogue.Reply();
|
||||
repliesListModel.addItem(reply);
|
||||
repliesList.setSelectedValue(reply, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
deleteReply.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedReply != null) {
|
||||
repliesListModel.removeItem(selectedReply);
|
||||
selectedReply = null;
|
||||
repliesList.clearSelection();
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
}
|
||||
});
|
||||
moveReplyUp.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedReply != null) {
|
||||
repliesListModel.moveUp(selectedReply);
|
||||
repliesList.setSelectedValue(selectedReply, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
}
|
||||
});
|
||||
moveReplyDown.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedReply != null) {
|
||||
repliesListModel.moveDown(selectedReply);
|
||||
repliesList.setSelectedValue(selectedReply, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
}
|
||||
});
|
||||
listButtonsPane.add(createReply, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(deleteReply, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(moveReplyUp, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(moveReplyDown, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||
replies.add(listButtonsPane, JideBoxLayout.FIX);
|
||||
}
|
||||
});
|
||||
if (dialogue.writable) {
|
||||
JPanel listButtonsPane = new JPanel();
|
||||
listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6));
|
||||
createReply.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Dialogue.Reply reply = new Dialogue.Reply();
|
||||
repliesListModel.addItem(reply);
|
||||
repliesList.setSelectedValue(reply, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
deleteReply.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedReply != null) {
|
||||
repliesListModel.removeItem(selectedReply);
|
||||
selectedReply = null;
|
||||
repliesList.clearSelection();
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
repliesEditorPane.setLayout(new JideBoxLayout(repliesEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||
replies.add(repliesEditorPane, JideBoxLayout.FIX);
|
||||
}*/
|
||||
RepliesCellRenderer cellRendererReplies = new RepliesCellRenderer();
|
||||
String titleReplies = "Replies / Next Phrase: ";
|
||||
repliesListModel = new RepliesListModel(dialogue);
|
||||
CollapsiblePanel replies = UiUtils.getCollapsibleItemList(
|
||||
listener,
|
||||
repliesListModel,
|
||||
() -> selectedReply = null,
|
||||
( selectedItem) -> this.selectedReply = selectedItem,
|
||||
() -> this.selectedReply,
|
||||
(selectedReply)-> {
|
||||
if (selectedReply != null && !Dialogue.Reply.GO_NEXT_TEXT.equals(selectedReply.text)) {
|
||||
replyTextCache = selectedReply.text;
|
||||
} else {
|
||||
replyTextCache = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
moveReplyUp.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedReply != null) {
|
||||
repliesListModel.moveUp(selectedReply);
|
||||
repliesList.setSelectedValue(selectedReply, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
}
|
||||
});
|
||||
moveReplyDown.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedReply != null) {
|
||||
repliesListModel.moveDown(selectedReply);
|
||||
repliesList.setSelectedValue(selectedReply, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
}
|
||||
});
|
||||
listButtonsPane.add(createReply, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(deleteReply, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(moveReplyUp, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(moveReplyDown, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||
replies.add(listButtonsPane, JideBoxLayout.FIX);
|
||||
}
|
||||
},
|
||||
(editorPane) -> updateRepliesEditorPane(editorPane, this.selectedReply, listener),
|
||||
dialogue.writable,
|
||||
Dialogue.Reply::new,
|
||||
cellRendererReplies,
|
||||
titleReplies
|
||||
, true
|
||||
).collapsiblePanel;
|
||||
if (dialogue.replies == null || dialogue.replies.isEmpty()) {
|
||||
replies.collapse();
|
||||
}
|
||||
repliesEditorPane.setLayout(new JideBoxLayout(repliesEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||
replies.add(repliesEditorPane, JideBoxLayout.FIX);
|
||||
|
||||
pane.add(replies, JideBoxLayout.FIX);
|
||||
|
||||
@@ -582,12 +615,15 @@ public class DialogueEditor extends JSONElementEditor {
|
||||
pane.add(comboPane, JideBoxLayout.FIX);
|
||||
updateRepliesParamsEditorPane(repliesParamsPane, reply, listener);
|
||||
pane.add(repliesParamsPane, JideBoxLayout.FIX);
|
||||
|
||||
CollapsiblePanel requirementsPane = new CollapsiblePanel("Requirements the player must fulfill to select this reply: ");
|
||||
requirementsPane.setLayout(new JideBoxLayout(requirementsPane, JideBoxLayout.PAGE_AXIS));
|
||||
|
||||
String titleRequirements = "Requirements the player must fulfill to select this reply: ";
|
||||
requirementsListModel = new ReplyRequirementsListModel(reply);
|
||||
ReplyRequirementsCellRenderer cellRendererRequirements = new ReplyRequirementsCellRenderer();
|
||||
/*
|
||||
CollapsiblePanel requirementsPane = new CollapsiblePanel(titleRequirements);
|
||||
requirementsPane.setLayout(new JideBoxLayout(requirementsPane, JideBoxLayout.PAGE_AXIS));
|
||||
requirementsList = new JList(requirementsListModel);
|
||||
requirementsList.setCellRenderer(new ReplyRequirementsCellRenderer());
|
||||
requirementsList.setCellRenderer(cellRendererRequirements);
|
||||
requirementsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
requirementsPane.add(new JScrollPane(requirementsList), JideBoxLayout.FIX);
|
||||
final JPanel requirementsEditorPane = new JPanel();
|
||||
@@ -656,12 +692,31 @@ public class DialogueEditor extends JSONElementEditor {
|
||||
requirementsPane.add(listButtonsPane, JideBoxLayout.FIX);
|
||||
}
|
||||
requirementsEditorPane.setLayout(new JideBoxLayout(requirementsEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||
requirementsPane.add(requirementsEditorPane, JideBoxLayout.FIX);
|
||||
requirementsPane.add(requirementsEditorPane, JideBoxLayout.FIX);*/
|
||||
|
||||
UiUtils.CollapsibleItemListCreation itemsPane = UiUtils.getCollapsibleItemList(
|
||||
listener,
|
||||
requirementsListModel,
|
||||
() -> selectedRequirement = null,
|
||||
(selectedItem) -> this.selectedRequirement = selectedItem,
|
||||
() -> this.selectedRequirement,
|
||||
(selectedItem)->{},
|
||||
(droppedItemsEditorPane) -> updateRequirementsEditorPane(droppedItemsEditorPane, this.selectedRequirement, listener),
|
||||
target.writable,
|
||||
Requirement::new,
|
||||
cellRendererRequirements,
|
||||
titleRequirements,
|
||||
false
|
||||
);
|
||||
CollapsiblePanel requirementsPane = itemsPane.collapsiblePanel;
|
||||
requirementsList = itemsPane.list;
|
||||
|
||||
if (reply.requirements == null || reply.requirements.isEmpty()) {
|
||||
requirementsPane.collapse();
|
||||
}
|
||||
|
||||
pane.add(requirementsPane, JideBoxLayout.FIX);
|
||||
|
||||
|
||||
pane.revalidate();
|
||||
pane.repaint();
|
||||
}
|
||||
|
||||
@@ -1,24 +1,17 @@
|
||||
package com.gpl.rpg.atcontentstudio.ui.gamedataeditors;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.DefaultListCellRenderer;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSpinner;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.ListSelectionModel;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
import com.gpl.rpg.atcontentstudio.ATContentStudio;
|
||||
import com.gpl.rpg.atcontentstudio.model.GameDataElement;
|
||||
@@ -28,9 +21,9 @@ import com.gpl.rpg.atcontentstudio.model.gamedata.Droplist;
|
||||
import com.gpl.rpg.atcontentstudio.model.gamedata.Droplist.DroppedItem;
|
||||
import com.gpl.rpg.atcontentstudio.model.gamedata.Item;
|
||||
import com.gpl.rpg.atcontentstudio.ui.CollapsiblePanel;
|
||||
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
|
||||
import com.gpl.rpg.atcontentstudio.ui.FieldUpdateListener;
|
||||
import com.gpl.rpg.atcontentstudio.ui.CustomListModel;
|
||||
import com.gpl.rpg.atcontentstudio.utils.UiUtils;
|
||||
import com.jidesoft.swing.JideBoxLayout;
|
||||
|
||||
public class DroplistEditor extends JSONElementEditor {
|
||||
@@ -65,61 +58,23 @@ public class DroplistEditor extends JSONElementEditor {
|
||||
createButtonPane(pane, droplist.getProject(), droplist, Droplist.class, Droplist.getImage(), null, listener);
|
||||
|
||||
idField = addTextField(pane, "Droplist ID: ", droplist.id, droplist.writable, listener);
|
||||
|
||||
CollapsiblePanel itemsPane = new CollapsiblePanel("Items in this droplist: ");
|
||||
itemsPane.setLayout(new JideBoxLayout(itemsPane, JideBoxLayout.PAGE_AXIS));
|
||||
droppedItemsListModel = new DroppedItemsListModel(droplist);
|
||||
final JList itemsList = new JList(droppedItemsListModel);
|
||||
itemsList.setCellRenderer(new DroppedItemsCellRenderer());
|
||||
itemsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
itemsPane.add(new JScrollPane(itemsList), JideBoxLayout.FIX);
|
||||
final JPanel droppedItemsEditorPane = new JPanel();
|
||||
final JButton createDroppedItem = new JButton(new ImageIcon(DefaultIcons.getCreateIcon()));
|
||||
final JButton deleteDroppedItem = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
|
||||
deleteDroppedItem.setEnabled(false);
|
||||
itemsList.addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
selectedItem = (Droplist.DroppedItem) itemsList.getSelectedValue();
|
||||
if (selectedItem == null) {
|
||||
deleteDroppedItem.setEnabled(false);
|
||||
} else {
|
||||
deleteDroppedItem.setEnabled(true);
|
||||
}
|
||||
updateDroppedItemsEditorPane(droppedItemsEditorPane, selectedItem, listener);
|
||||
}
|
||||
});
|
||||
if (droplist.writable) {
|
||||
JPanel listButtonsPane = new JPanel();
|
||||
listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6));
|
||||
createDroppedItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Droplist.DroppedItem tempItem = new Droplist.DroppedItem();
|
||||
droppedItemsListModel.addItem(tempItem);
|
||||
itemsList.setSelectedValue(tempItem, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
deleteDroppedItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (selectedItem != null) {
|
||||
droppedItemsListModel.removeItem(selectedItem);
|
||||
selectedItem = null;
|
||||
itemsList.clearSelection();
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
listButtonsPane.add(createDroppedItem, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(deleteDroppedItem, JideBoxLayout.FIX);
|
||||
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||
itemsPane.add(listButtonsPane, JideBoxLayout.FIX);
|
||||
}
|
||||
droppedItemsEditorPane.setLayout(new JideBoxLayout(droppedItemsEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||
itemsPane.add(droppedItemsEditorPane, JideBoxLayout.FIX);
|
||||
|
||||
|
||||
droppedItemsListModel = new DroplistEditor.DroppedItemsListModel(droplist);
|
||||
CollapsiblePanel itemsPane = UiUtils.getCollapsibleItemList(
|
||||
listener,
|
||||
droppedItemsListModel,
|
||||
() -> selectedItem = null,
|
||||
(selectedItem) -> this.selectedItem = selectedItem,
|
||||
() -> this.selectedItem,
|
||||
(selectedItem)->{},
|
||||
(droppedItemsEditorPane) -> updateDroppedItemsEditorPane(droppedItemsEditorPane, this.selectedItem, listener),
|
||||
droplist.writable,
|
||||
DroppedItem::new,
|
||||
new DroppedItemsCellRenderer(),
|
||||
"Items in this droplist: ",
|
||||
false
|
||||
).collapsiblePanel;
|
||||
if (droplist.dropped_items == null || droplist.dropped_items.isEmpty()) {
|
||||
itemsPane.collapse();
|
||||
}
|
||||
@@ -127,7 +82,7 @@ public class DroplistEditor extends JSONElementEditor {
|
||||
pane.add(itemsPane, JideBoxLayout.FIX);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void updateDroppedItemsEditorPane(JPanel pane, DroppedItem di, FieldUpdateListener listener) {
|
||||
boolean writable = ((Droplist)target).writable;
|
||||
Project proj = ((Droplist)target).getProject();
|
||||
|
||||
6
src/com/gpl/rpg/atcontentstudio/utils/BasicLambda.java
Normal file
6
src/com/gpl/rpg/atcontentstudio/utils/BasicLambda.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package com.gpl.rpg.atcontentstudio.utils;
|
||||
|
||||
public interface BasicLambda {
|
||||
public void doIt();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.gpl.rpg.atcontentstudio.utils;
|
||||
|
||||
public interface BasicLambdaWithArg<T> {
|
||||
public void doIt(T arg);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.gpl.rpg.atcontentstudio.utils;
|
||||
|
||||
public interface BasicLambdaWithReturn<R> {
|
||||
public R doIt();
|
||||
}
|
||||
145
src/com/gpl/rpg/atcontentstudio/utils/UiUtils.java
Normal file
145
src/com/gpl/rpg/atcontentstudio/utils/UiUtils.java
Normal file
@@ -0,0 +1,145 @@
|
||||
package com.gpl.rpg.atcontentstudio.utils;
|
||||
|
||||
import com.gpl.rpg.atcontentstudio.ATContentStudio;
|
||||
import com.gpl.rpg.atcontentstudio.model.gamedata.Requirement;
|
||||
import com.gpl.rpg.atcontentstudio.ui.CollapsiblePanel;
|
||||
import com.gpl.rpg.atcontentstudio.ui.CustomListModel;
|
||||
import com.gpl.rpg.atcontentstudio.ui.DefaultIcons;
|
||||
import com.gpl.rpg.atcontentstudio.ui.FieldUpdateListener;
|
||||
import com.jidesoft.swing.JideBoxLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.*;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class UiUtils {
|
||||
public static class CollapsibleItemListCreation<E> {
|
||||
public CollapsiblePanel collapsiblePanel;
|
||||
public JList<E> list;
|
||||
}
|
||||
|
||||
public static <S, E, M extends CustomListModel<S, E>> CollapsibleItemListCreation<E> getCollapsibleItemList(FieldUpdateListener listener,
|
||||
M itemsListModel,
|
||||
BasicLambda selectedItemReset,
|
||||
BasicLambdaWithArg<E> setSelectedItem,
|
||||
BasicLambdaWithReturn<E> selectedItem,
|
||||
BasicLambdaWithArg<E> valueChanged,
|
||||
BasicLambdaWithArg<JPanel> updateEditorPane,
|
||||
boolean writable,
|
||||
Supplier<E> tempSupplier,
|
||||
DefaultListCellRenderer cellRenderer,
|
||||
String title,
|
||||
boolean withMoveButtons) {
|
||||
CollapsiblePanel itemsPane = new CollapsiblePanel(title);
|
||||
itemsPane.setLayout(new JideBoxLayout(itemsPane, JideBoxLayout.PAGE_AXIS));
|
||||
final JList<E> itemsList = new JList<>(itemsListModel);
|
||||
itemsList.setCellRenderer(cellRenderer);
|
||||
itemsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
itemsPane.add(new JScrollPane(itemsList), JideBoxLayout.FIX);
|
||||
final JPanel editorPane = new JPanel();
|
||||
final JButton createBtn = new JButton(new ImageIcon(DefaultIcons.getCreateIcon()));
|
||||
final JButton deleteBtn = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
|
||||
final JButton moveUpBtn = new JButton(new ImageIcon(DefaultIcons.getArrowUpIcon()));
|
||||
final JButton moveDownBtn = new JButton(new ImageIcon(DefaultIcons.getArrowDownIcon()));
|
||||
deleteBtn.setEnabled(false);
|
||||
moveUpBtn.setEnabled(false);
|
||||
moveDownBtn.setEnabled(false);
|
||||
itemsList.addListSelectionListener(e -> {
|
||||
E selectedValue = itemsList.getSelectedValue();
|
||||
valueChanged.doIt(selectedValue);
|
||||
setSelectedItem.doIt(selectedValue);
|
||||
if (selectedValue == null) {
|
||||
deleteBtn.setEnabled(false);
|
||||
if (withMoveButtons) {
|
||||
moveUpBtn.setEnabled(false);
|
||||
moveDownBtn.setEnabled(false);
|
||||
}
|
||||
} else {
|
||||
deleteBtn.setEnabled(true);
|
||||
if (withMoveButtons) {
|
||||
moveUpBtn.setEnabled(itemsList.getSelectedIndex() > 0);
|
||||
moveDownBtn.setEnabled(itemsList.getSelectedIndex() < (itemsListModel.getSize() - 1));
|
||||
}
|
||||
}
|
||||
updateEditorPane.doIt(editorPane);
|
||||
});
|
||||
if (writable) {
|
||||
JPanel listButtonsPane = new JPanel();
|
||||
listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6));
|
||||
|
||||
createBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
E tempItem = tempSupplier.get();
|
||||
itemsListModel.addItem(tempItem);
|
||||
itemsList.setSelectedValue(tempItem, true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
listButtonsPane.add(createBtn, JideBoxLayout.FIX);
|
||||
|
||||
deleteBtn.addActionListener(e -> {
|
||||
if (selectedItem.doIt() != null) {
|
||||
itemsListModel.removeItem(selectedItem.doIt());
|
||||
selectedItemReset.doIt();
|
||||
itemsList.clearSelection();
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
listButtonsPane.add(deleteBtn, JideBoxLayout.FIX);
|
||||
if(withMoveButtons) {
|
||||
moveUpBtn.addActionListener(e -> {
|
||||
if (selectedItem.doIt() != null) {
|
||||
itemsListModel.moveUp(selectedItem.doIt());
|
||||
itemsList.setSelectedValue(selectedItem.doIt(), true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
listButtonsPane.add(moveUpBtn, JideBoxLayout.FIX);
|
||||
|
||||
moveDownBtn.addActionListener(e -> {
|
||||
if (selectedItem.doIt() != null) {
|
||||
itemsListModel.moveDown(selectedItem.doIt());
|
||||
itemsList.setSelectedValue(selectedItem.doIt(), true);
|
||||
listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||
}
|
||||
});
|
||||
listButtonsPane.add(moveDownBtn, JideBoxLayout.FIX);
|
||||
}
|
||||
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||
itemsPane.add(listButtonsPane, JideBoxLayout.FIX);
|
||||
}
|
||||
//TODO: add double click to navigate to the item in the editor pane.
|
||||
// TODO: figure out what ID is needed here
|
||||
// itemsList.addMouseListener(new MouseAdapter() {
|
||||
// @Override
|
||||
// public void mouseClicked(MouseEvent e) {
|
||||
// if (e.getClickCount() == 2) {
|
||||
// if (itemsList.getSelectedValue() != null && ((E)itemsList.getSelectedValue()).required_obj != null) {
|
||||
// ATContentStudio.frame.openEditor(((E)itemsList.getSelectedValue()).required_obj);
|
||||
// ATContentStudio.frame.selectInTree(((E)itemsList.getSelectedValue()).required_obj);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// itemsList.addKeyListener(new KeyAdapter() {
|
||||
// @Override
|
||||
// public void keyReleased(KeyEvent e) {
|
||||
// if (e.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||
// ATContentStudio.frame.openEditor(((E)itemsList.getSelectedValue()).required_obj);
|
||||
// ATContentStudio.frame.selectInTree(((E)itemsList.getSelectedValue()).required_obj);
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
|
||||
editorPane.setLayout(new JideBoxLayout(editorPane, JideBoxLayout.PAGE_AXIS));
|
||||
itemsPane.add(editorPane, JideBoxLayout.FIX);
|
||||
|
||||
return new CollapsibleItemListCreation<E>() {
|
||||
{
|
||||
collapsiblePanel = itemsPane;
|
||||
list = itemsList;}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user