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