diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java index d16730a..caf265c 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java @@ -28,6 +28,7 @@ import javax.swing.event.ListSelectionListener; import com.gpl.rpg.atcontentstudio.ATContentStudio; import com.gpl.rpg.atcontentstudio.model.GameDataElement; import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode; +import com.gpl.rpg.atcontentstudio.model.gamedata.Dialogue; import com.gpl.rpg.atcontentstudio.model.gamedata.Quest; import com.gpl.rpg.atcontentstudio.model.gamedata.QuestStage; import com.gpl.rpg.atcontentstudio.ui.CollapsiblePanel; @@ -78,94 +79,26 @@ public class QuestEditor extends JSONElementEditor { nameField = addTranslatableTextField(pane, "Quest Name: ", quest.name, quest.writable, listener); visibleBox = addIntegerBasedCheckBox(pane, "Visible in quest log", quest.visible_in_log, quest.writable, listener); - CollapsiblePanel stagesPane = new CollapsiblePanel("Quest stages: "); - stagesPane.setLayout(new JideBoxLayout(stagesPane, JideBoxLayout.PAGE_AXIS)); + String title = "Quest stages: "; + StagesCellRenderer cellRenderer = new StagesCellRenderer(); stagesListModel = new StagesListModel(quest); - stagesList = new JList(stagesListModel); - stagesList.setCellRenderer(new StagesCellRenderer()); - stagesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - stagesPane.add(new JScrollPane(stagesList), JideBoxLayout.FIX); - final JPanel stagesEditorPane = new JPanel(); - final JButton createStage = new JButton(new ImageIcon(DefaultIcons.getCreateIcon())); - final JButton deleteStage = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon())); - final JButton moveStageUp = new JButton(new ImageIcon(DefaultIcons.getArrowUpIcon())); - final JButton moveStageDown = new JButton(new ImageIcon(DefaultIcons.getArrowDownIcon())); - deleteStage.setEnabled(false); - moveStageUp.setEnabled(false); - moveStageDown.setEnabled(false); - stagesList.addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent e) { - selectedStage = (QuestStage) stagesList.getSelectedValue(); - if (selectedStage != null) { - deleteStage.setEnabled(true); - moveStageUp.setEnabled(stagesList.getSelectedIndex() > 0); - moveStageDown.setEnabled(stagesList.getSelectedIndex() < (stagesListModel.getSize() - 1)); - } else { - deleteStage.setEnabled(false); - moveStageUp.setEnabled(false); - moveStageDown.setEnabled(false); - } - updateStageEditorPane(stagesEditorPane, selectedStage, listener); - } - }); - if (quest.writable) { - JPanel listButtonsPane = new JPanel(); - listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6)); - createStage.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - QuestStage stage = new QuestStage(quest); - stagesListModel.addItem(stage); - stagesList.setSelectedValue(stage, true); - listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff. - } - }); - deleteStage.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (selectedStage != null) { - stagesListModel.removeItem(selectedStage); - selectedStage = null; - stagesList.clearSelection(); - listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff. - } - } - }); - moveStageUp.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (selectedStage != null) { - stagesListModel.moveUp(selectedStage); - stagesList.setSelectedValue(selectedStage, true); - listener.valueChanged(new JLabel(), null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff. - } - } - }); - moveStageDown.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (selectedStage != null) { - stagesListModel.moveDown(selectedStage); - stagesList.setSelectedValue(selectedStage, 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(createStage, JideBoxLayout.FIX); - listButtonsPane.add(deleteStage, JideBoxLayout.FIX); - listButtonsPane.add(moveStageUp, JideBoxLayout.FIX); - listButtonsPane.add(moveStageDown, JideBoxLayout.FIX); - listButtonsPane.add(new JPanel(), JideBoxLayout.VARY); - stagesPane.add(listButtonsPane, JideBoxLayout.FIX); - } + final boolean moveUpDownEnabled = true; + + CollapsiblePanel stagesPane = CommonEditor.createListPanel( + title, + cellRenderer, + stagesListModel, + quest.writable, + moveUpDownEnabled, + (e)->selectedStage=e, + ()->selectedStage, + this::updateStageEditorPane, + listener, + ()->new QuestStage(quest)); + if (quest.stages == null || quest.stages.isEmpty()) { stagesPane.collapse(); } - stagesEditorPane.setLayout(new JideBoxLayout(stagesEditorPane, JideBoxLayout.PAGE_AXIS)); - stagesPane.add(stagesEditorPane, JideBoxLayout.FIX); pane.add(stagesPane, JideBoxLayout.FIX); }