tweak dependency error gui
This commit is contained in:
parent
b82e6bceae
commit
f6f536c182
|
@ -7,6 +7,7 @@ import java.awt.event.ActionEvent;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.net.URL;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -20,6 +21,7 @@ import dev.frogmc.frogloader.impl.mod.ModUtil;
|
||||||
import dev.frogmc.frogloader.impl.util.URLUtil;
|
import dev.frogmc.frogloader.impl.util.URLUtil;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class LoaderGui {
|
public class LoaderGui {
|
||||||
|
@ -87,7 +89,7 @@ public class LoaderGui {
|
||||||
actions.add(new JButton(new AbstractAction("Join Discord") {
|
actions.add(new JButton(new AbstractAction("Join Discord") {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
URLUtil.open(URI.create("https://discord.frogmc.dev"));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@ -122,11 +124,9 @@ public class LoaderGui {
|
||||||
public static final ContentType<ModDependencyResolver.UnfulfilledDependencyException> INFO_UNFULFILLED_DEP = new ContentType<>((frame, ex) -> {
|
public static final ContentType<ModDependencyResolver.UnfulfilledDependencyException> INFO_UNFULFILLED_DEP = new ContentType<>((frame, ex) -> {
|
||||||
JPanel pane = new JPanel(new BorderLayout());
|
JPanel pane = new JPanel(new BorderLayout());
|
||||||
JTextPane title = new JTextPane();
|
JTextPane title = new JTextPane();
|
||||||
//title.setContentType("text/html");
|
|
||||||
title.setBackground(pane.getBackground());
|
title.setBackground(pane.getBackground());
|
||||||
title.setEditable(false);
|
title.setEditable(false);
|
||||||
int size = ex.getDependencies().size();
|
int size = ex.getDependencies().size();
|
||||||
//title.setText("<html><h3>Found "+size+" Error"+(size > 1 ? "s:":":")+"</h3></html>");
|
|
||||||
title.setText("Found "+size+" Error"+(size > 1 ? "s:":":"));
|
title.setText("Found "+size+" Error"+(size > 1 ? "s:":":"));
|
||||||
title.setFont(title.getFont().deriveFont(Font.BOLD, 16f));
|
title.setFont(title.getFont().deriveFont(Font.BOLD, 16f));
|
||||||
title.setBorder(BorderFactory.createEmptyBorder(8, 0, 8, 0));
|
title.setBorder(BorderFactory.createEmptyBorder(8, 0, 8, 0));
|
||||||
|
@ -139,7 +139,7 @@ public class LoaderGui {
|
||||||
if (e.presentVersion() != null){
|
if (e.presentVersion() != null){
|
||||||
description.append("Mod ").append(e.source().id()).append(" (").append(e.source().name()).append(") depends on ");
|
description.append("Mod ").append(e.source().id()).append(" (").append(e.source().name()).append(") depends on ");
|
||||||
if (e.dependencyName() != null){
|
if (e.dependencyName() != null){
|
||||||
description.append(e.dependencyName()).append(" (").append(e.dependency()).append(") ");
|
description.append(e.dependency()).append(" (").append(e.dependencyName()).append(") ");
|
||||||
} else {
|
} else {
|
||||||
description.append("a Mod with id ").append(e.dependency());
|
description.append("a Mod with id ").append(e.dependency());
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ public class LoaderGui {
|
||||||
} else {
|
} else {
|
||||||
description.append("Mod ").append(e.source().id()).append(" (").append(e.source().name()).append(") depends on ");
|
description.append("Mod ").append(e.source().id()).append(" (").append(e.source().name()).append(") depends on ");
|
||||||
if (e.dependencyName() != null){
|
if (e.dependencyName() != null){
|
||||||
description.append(e.dependencyName()).append(" (").append(e.dependency()).append(") ");
|
description.append(e.dependency()).append(" (").append(e.dependencyName()).append(") ");
|
||||||
} else {
|
} else {
|
||||||
description.append("a Mod with id ").append(e.dependency());
|
description.append("a Mod with id ").append(e.dependency());
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@ public class LoaderGui {
|
||||||
.map(s -> "0.0.0".equals(s) ? "any version" : "version " + s).orElse("<unknown>"))
|
.map(s -> "0.0.0".equals(s) ? "any version" : "version " + s).orElse("<unknown>"))
|
||||||
.append(" of ");
|
.append(" of ");
|
||||||
if (e.dependencyName() != null){
|
if (e.dependencyName() != null){
|
||||||
description.append(e.dependencyName()).append(" (").append(e.dependency()).append(") ");
|
description.append(e.dependency()).append(" (").append(e.dependencyName()).append(") ");
|
||||||
} else {
|
} else {
|
||||||
description.append("Mod with id ").append(e.dependency());
|
description.append("Mod with id ").append(e.dependency());
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ public class LoaderGui {
|
||||||
});
|
});
|
||||||
actions.add(urlButton);
|
actions.add(urlButton);
|
||||||
}
|
}
|
||||||
JPanel entry = getEntry(description.toString(), list.getBackground(), actions);
|
JPanel entry = getEntry(description.toString(), e.range(), list.getBackground(), e.source().icon(), actions);
|
||||||
list.add(entry);
|
list.add(entry);
|
||||||
});
|
});
|
||||||
pane.add(new JScrollPane(list));
|
pane.add(new JScrollPane(list));
|
||||||
|
@ -187,11 +187,11 @@ public class LoaderGui {
|
||||||
public static final ContentType<ModDependencyResolver.BreakingModException> INFO_BREAKING_DEP = new ContentType<>((frame, ex) -> {
|
public static final ContentType<ModDependencyResolver.BreakingModException> INFO_BREAKING_DEP = new ContentType<>((frame, ex) -> {
|
||||||
JPanel pane = new JPanel(new BorderLayout());
|
JPanel pane = new JPanel(new BorderLayout());
|
||||||
JTextPane title = new JTextPane();
|
JTextPane title = new JTextPane();
|
||||||
title.setContentType("text/html");
|
|
||||||
title.setBackground(pane.getBackground());
|
title.setBackground(pane.getBackground());
|
||||||
title.setEditable(false);
|
title.setEditable(false);
|
||||||
int size = ex.getBreaks().size();
|
int size = ex.getBreaks().size();
|
||||||
title.setText("<html><h3>Found "+size+" Error"+(size > 1 ? "s:":":")+"</h3></html>");
|
title.setText("Found "+size+" Error"+(size > 1 ? "s:":":"));
|
||||||
|
title.setFont(title.getFont().deriveFont(Font.BOLD, 16f));
|
||||||
pane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
pane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
||||||
pane.add(title, BorderLayout.NORTH);
|
pane.add(title, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ public class LoaderGui {
|
||||||
" of Mod %s (%s) ".formatted(e.broken().id(), e.broken().name());
|
" of Mod %s (%s) ".formatted(e.broken().id(), e.broken().name());
|
||||||
List<JButton> actions = new ArrayList<>();
|
List<JButton> actions = new ArrayList<>();
|
||||||
|
|
||||||
JPanel entry = getEntry(description, list.getBackground(), actions);
|
JPanel entry = getEntry(description, e.range(), list.getBackground(), e.source().icon(), actions);
|
||||||
entry.setSize(list.getWidth(), entry.getHeight());
|
entry.setSize(list.getWidth(), entry.getHeight());
|
||||||
list.add(entry);
|
list.add(entry);
|
||||||
});
|
});
|
||||||
|
@ -215,10 +215,10 @@ public class LoaderGui {
|
||||||
JPanel pane = new JPanel(new BorderLayout());
|
JPanel pane = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
JTextPane title = new JTextPane();
|
JTextPane title = new JTextPane();
|
||||||
title.setContentType("text/html");
|
|
||||||
title.setBackground(pane.getBackground());
|
title.setBackground(pane.getBackground());
|
||||||
title.setEditable(false);
|
title.setEditable(false);
|
||||||
title.setText("<html><h3>Caught Fatal Error during game startup:</h3></html>");
|
title.setText("Caught Fatal Error during game startup:");
|
||||||
|
title.setFont(title.getFont().deriveFont(Font.BOLD, 16f));
|
||||||
pane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
pane.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
||||||
pane.add(title, BorderLayout.NORTH);
|
pane.add(title, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
@ -237,21 +237,45 @@ public class LoaderGui {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String printVersionRange(ModDependencyResolver.VersionRange range){
|
private static String printVersionRange(ModDependencyResolver.VersionRange range){
|
||||||
return "range: \n"+ range.toString().replace("||", "or")+" \n("+range+")";
|
return "range: \n"+ range.toString().replace("||", "or");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JPanel getEntry(String description, Color background, List<JButton> actions){
|
private static JPanel getEntry(String description, ModDependencyResolver.VersionRange range, Color background, @Nullable String icon, List<JButton> actions){
|
||||||
JPanel entry = new JPanel(new BorderLayout());
|
JPanel entry = new JPanel(new BorderLayout());
|
||||||
entry.setBorder(BasicBorders.getInternalFrameBorder());
|
entry.setBorder(BasicBorders.getInternalFrameBorder());
|
||||||
JTextPane text = new JTextPane();
|
Box text = Box.createVerticalBox();
|
||||||
text.setContentType("text/html");
|
text.setBorder(BorderFactory.createEmptyBorder());
|
||||||
text.setEditable(false);
|
JTextPane desc = new JTextPane();
|
||||||
text.setBackground(background);
|
desc.setContentType("text/html");
|
||||||
text.setText("<html>" + description.replace("<", "<").replace("\n", "<br>") + "</html>");
|
desc.setEditable(false);
|
||||||
|
desc.setBackground(background);
|
||||||
|
desc.setText("<html>" + description.replace("<", "<").replace("\n", "<br>") + "</html>");
|
||||||
JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
|
JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
|
||||||
actions.forEach(actionPanel::add);
|
actions.forEach(actionPanel::add);
|
||||||
|
if (icon != null) {
|
||||||
|
URL location = LoaderGui.class.getResource(icon);
|
||||||
|
if (location != null) {
|
||||||
|
entry.add(new JLabel(new ImageIcon(location)), BorderLayout.WEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
text.add(desc);
|
||||||
|
JCheckBox showAdvanced = new JCheckBox("Show raw version range");
|
||||||
|
JTextPane advanced = new JTextPane();
|
||||||
|
advanced.setEditable(false);
|
||||||
|
advanced.setBackground(background);
|
||||||
|
advanced.setText(range.toString());
|
||||||
|
advanced.setVisible(false);
|
||||||
|
text.add(advanced);
|
||||||
|
showAdvanced.addActionListener(new AbstractAction() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
advanced.setVisible(showAdvanced.isSelected());
|
||||||
|
}
|
||||||
|
});
|
||||||
entry.add(text);
|
entry.add(text);
|
||||||
entry.add(actionPanel, BorderLayout.SOUTH);
|
Box bottom = Box.createHorizontalBox();
|
||||||
|
bottom.add(showAdvanced, actionPanel);
|
||||||
|
entry.add(bottom, BorderLayout.SOUTH);
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue