From 828c1cdcbbe635c70fa29d1360a77fc8c6606671 Mon Sep 17 00:00:00 2001 From: REME-easy <1445424285@qq.com> Date: Fri, 17 Feb 2023 12:23:00 +0800 Subject: [PATCH] add split line and alias editing --- .../modthespire/ui/JModPanelCheckBoxList.java | 6 +++ .../cardcrawl/modthespire/ui/ModPanel.java | 31 +++++++++++++- .../modthespire/ui/ModSelectWindow.java | 40 +++++++++++++++++-- 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/evacipated/cardcrawl/modthespire/ui/JModPanelCheckBoxList.java b/src/main/java/com/evacipated/cardcrawl/modthespire/ui/JModPanelCheckBoxList.java index 1577ab6d..c2c89d1b 100644 --- a/src/main/java/com/evacipated/cardcrawl/modthespire/ui/JModPanelCheckBoxList.java +++ b/src/main/java/com/evacipated/cardcrawl/modthespire/ui/JModPanelCheckBoxList.java @@ -44,8 +44,14 @@ public void mouseClicked(MouseEvent e) { if (modPanel.checkBox.isEnabled()) { modPanel.checkBox.setSelected(!modPanel.checkBox.isSelected()); repaint(); + return; } } + + if (e.getClickCount() == 2) { + String alias = JOptionPane.showInputDialog("Please enter an alias:"); + modPanel.setAlias(alias); + } } } }); diff --git a/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModPanel.java b/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModPanel.java index 28dc67c7..c1917980 100644 --- a/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModPanel.java +++ b/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModPanel.java @@ -9,6 +9,7 @@ import javax.swing.border.MatteBorder; import java.awt.*; import java.io.File; +import java.io.IOException; import java.util.ArrayList; @SuppressWarnings("serial") @@ -96,6 +97,8 @@ public ModPanel(ModInfo info, File modFile, JModPanelCheckBoxList parent) { parent.publishBoxChecked(); }); parent.publishBoxChecked(); + + setToolTipText("Double click to add an alias for this mod"); } public void recalcModWarnings(JModPanelCheckBoxList parent) @@ -196,7 +199,7 @@ public void filter(String[] filterKeys) { System.out.println("ModPanel.filter failed to get workshop info of " + info.ID + ": " + ex); } - String modInfoKey = String.format("%s %s %s %s", info.ID, info.Name, String.join(" ", info.Authors), workshopInfoKey).toLowerCase(); + String modInfoKey = String.format("%s %s %s %s %s", info.ID, info.Name, infoPanel.alias, String.join(" ", info.Authors), workshopInfoKey).toLowerCase(); boolean isFilteredOut = false; for (String filterKey : filterKeys) { if (!modInfoKey.contains(filterKey)) { @@ -211,8 +214,21 @@ public boolean isFilteredOut() { return isFilteredOut; } + // set the alias for this mod and save + public void setAlias(String alias) { + if (alias == null || alias.isEmpty()) return; + infoPanel.setNameText(alias); + Loader.MTS_CONFIG.setString(info.ID, alias); + try { + Loader.MTS_CONFIG.save(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + public class InfoPanel extends JPanel { + String alias = ""; JLabel name = new JLabel(); JLabel version = new JLabel(); @@ -234,10 +250,23 @@ public InfoPanel() } add(version, BorderLayout.SOUTH); + String alias = Loader.MTS_CONFIG.getString(info.ID); + setNameText(alias); + checkBox.setBackground(Color.WHITE); setBackground(Color.WHITE); } + public void setNameText(String alias) { + if (alias == null) return; + this.alias = alias; + if (alias.isEmpty()) { + name.setText(info.Name); + } else { + name.setText(String.format("[%s] %s", alias, info.Name)); + } + } + @Override public void setBackground(Color c) { diff --git a/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModSelectWindow.java b/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModSelectWindow.java index e47fd887..a91a9c56 100644 --- a/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModSelectWindow.java +++ b/src/main/java/com/evacipated/cardcrawl/modthespire/ui/ModSelectWindow.java @@ -9,6 +9,7 @@ import javax.swing.border.TitledBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.plaf.basic.BasicSplitPaneUI; import java.awt.*; import java.awt.event.*; import java.io.File; @@ -81,6 +82,7 @@ public static Properties getDefaults() properties.setProperty("y", "center"); properties.setProperty("width", Integer.toString(DEFAULT_WIDTH)); properties.setProperty("height", Integer.toString(DEFAULT_HEIGHT)); + properties.setProperty("split_location", Float.toString(0.275f)); properties.setProperty("maximize", Boolean.toString(false)); return properties; } @@ -203,11 +205,17 @@ private void initUI(boolean skipLauncher) setLayout(new BorderLayout()); getContentPane().setPreferredSize(new Dimension(location.width, location.height)); - getContentPane().add(makeModListPanel(), BorderLayout.WEST); - getContentPane().add(makeInfoPanel(), BorderLayout.CENTER); + JSplitPane splitPane = makeMainPanel(); + getContentPane().add(splitPane, BorderLayout.CENTER); getContentPane().add(makeTopPanel(), BorderLayout.NORTH); pack(); + + float loc = Loader.MTS_CONFIG.getFloat("split_location"); + if (loc > 0.05f && loc < 0.95f) { + splitPane.setDividerLocation(loc); + } + if (isCentered) { setLocationRelativeTo(null); } else { @@ -224,11 +232,34 @@ private void initUI(boolean skipLauncher) } } - private JPanel makeModListPanel() - { + private JSplitPane makeMainPanel() { + JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); + splitPane.setLeftComponent(makeModListPanel()); + splitPane.setRightComponent(makeInfoPanel()); + + BasicSplitPaneUI spui = (BasicSplitPaneUI)splitPane.getUI(); + spui.getDivider().addMouseListener(new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent e) { + float percent = splitPane.getDividerLocation() / (float)(splitPane.getWidth() - splitPane.getDividerSize()); + Loader.MTS_CONFIG.setFloat("split_location", percent); + try { + Loader.MTS_CONFIG.save(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + }); + + + return splitPane; + } + + private JPanel makeModListPanel() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.setPreferredSize(new Dimension(220, 300)); + panel.setMinimumSize(new Dimension(50, 300)); // Mod List DefaultListModel model = new DefaultListModel<>(); @@ -442,6 +473,7 @@ private JPanel makeInfoPanel() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); + panel.setMinimumSize(new Dimension(400, 300)); // Top mod banner panel panel.add(makeModBannerPanel(), BorderLayout.NORTH);