mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
GUI: added gui size support in pick choice dialogs (dialogs with searchable list, related to #12420)
This commit is contained in:
parent
f3db9cb8af
commit
c1244a71ef
3 changed files with 61 additions and 27 deletions
|
|
@ -46,11 +46,11 @@ public class ErrorDialog extends MageDialog {
|
||||||
public void changeGUISize() {
|
public void changeGUISize() {
|
||||||
super.changeGUISize();
|
super.changeGUISize();
|
||||||
|
|
||||||
this.textError.setFont(GUISizeHelper.menuFont);
|
this.textError.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
this.textInfo.setFont(GUISizeHelper.menuFont);
|
this.textInfo.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
this.btnCopyToClipboard.setFont(GUISizeHelper.menuFont);
|
this.btnCopyToClipboard.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
this.btnOpenGithub.setFont(GUISizeHelper.menuFont);
|
this.btnOpenGithub.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
this.btnOK.setFont(GUISizeHelper.menuFont);
|
this.btnOK.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openGithub() {
|
private void openGithub() {
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,12 @@ import mage.client.MageFrame;
|
||||||
import mage.client.cards.BigCard;
|
import mage.client.cards.BigCard;
|
||||||
import mage.client.cards.VirtualCardInfo;
|
import mage.client.cards.VirtualCardInfo;
|
||||||
import mage.client.components.MageEditorPane;
|
import mage.client.components.MageEditorPane;
|
||||||
|
import mage.client.util.GUISizeHelper;
|
||||||
import mage.client.util.gui.MageDialogState;
|
import mage.client.util.gui.MageDialogState;
|
||||||
import mage.game.command.Dungeon;
|
import mage.game.command.Dungeon;
|
||||||
import mage.view.CardView;
|
import mage.view.CardView;
|
||||||
import mage.view.DungeonView;
|
import mage.view.DungeonView;
|
||||||
|
import org.mage.card.arcane.ManaSymbols;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GUI: choosing one of the list's item. Uses in game's and non game's GUI like fast search
|
* GUI: choosing one of the list's item. Uses in game's and non game's GUI like fast search
|
||||||
|
|
@ -39,6 +41,25 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
|
|
||||||
final private static String HTML_HEADERS_TEMPLATE = "<html><div style='text-align: center;'>%s</div></html>";
|
final private static String HTML_HEADERS_TEMPLATE = "<html><div style='text-align: center;'>%s</div></html>";
|
||||||
|
|
||||||
|
public PickChoiceDialog() {
|
||||||
|
initComponents();
|
||||||
|
|
||||||
|
this.textMessage.enableHyperlinksAndCardPopups();
|
||||||
|
this.textMessage.enableTextLabelMode();
|
||||||
|
this.textSubMessage.enableHyperlinksAndCardPopups();
|
||||||
|
this.textSubMessage.enableTextLabelMode();
|
||||||
|
|
||||||
|
// pick choice shared in multiple dialogs, so modify window size only one time
|
||||||
|
// TODO: implement global window size settings and runtime theme support by gui scale logic (interface like MageThemeSupported:onSizeChanged,onThemeChanged,etc)
|
||||||
|
float guiScale = GUISizeHelper.gameDialogAreaFont.getSize2D() / GUISizeHelper.gameDialogAreaDefaultFontSize;
|
||||||
|
int newWidth = GUISizeHelper.guiSizeScale(this.getSize().width, guiScale);
|
||||||
|
int newHeight = GUISizeHelper.guiSizeScale(this.getSize().height, guiScale);
|
||||||
|
this.setSize(newWidth, newHeight);
|
||||||
|
|
||||||
|
this.listChoices.setModel(dataModel);
|
||||||
|
this.setModal(true);
|
||||||
|
}
|
||||||
|
|
||||||
public void showDialog(Choice choice, String startSelectionValue) {
|
public void showDialog(Choice choice, String startSelectionValue) {
|
||||||
showDialog(choice, startSelectionValue, null, null, null);
|
showDialog(choice, startSelectionValue, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
@ -48,8 +69,10 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
this.bigCard = bigCard;
|
this.bigCard = bigCard;
|
||||||
this.gameId = objectId;
|
this.gameId = objectId;
|
||||||
|
|
||||||
setMessageText(this.textMessage, choice.getMessage(), false);
|
changeGUISize();
|
||||||
setMessageText(this.textSubMessage, choice.getSubMessage(), true);
|
|
||||||
|
setMessageText(this.textMessage, choice.getMessage());
|
||||||
|
setMessageText(this.textSubMessage, choice.getSubMessage());
|
||||||
|
|
||||||
btCancel.setEnabled(!choice.isRequired());
|
btCancel.setEnabled(!choice.isRequired());
|
||||||
|
|
||||||
|
|
@ -92,7 +115,7 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
this.editSearch.setText("");
|
this.editSearch.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
// listeners for inremental filtering
|
// listeners for incremental filtering
|
||||||
editSearch.getDocument().addDocumentListener(new DocumentListener() {
|
editSearch.getDocument().addDocumentListener(new DocumentListener() {
|
||||||
@Override
|
@Override
|
||||||
public void insertUpdate(DocumentEvent e) {
|
public void insertUpdate(DocumentEvent e) {
|
||||||
|
|
@ -226,6 +249,20 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
this.setVisible(true);
|
this.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changeGUISize() {
|
||||||
|
super.changeGUISize();
|
||||||
|
|
||||||
|
this.textMessage.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
this.textSubMessage.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
this.labelSearch.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
this.editSearch.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
this.cbSpecial.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
this.listChoices.setFont(GUISizeHelper.tableFont);
|
||||||
|
this.btOK.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
this.btCancel.setFont(GUISizeHelper.gameDialogAreaFont);
|
||||||
|
}
|
||||||
|
|
||||||
private void choiceHintShow(int modelIndex) {
|
private void choiceHintShow(int modelIndex) {
|
||||||
|
|
||||||
switch (choice.getHintType()) {
|
switch (choice.getHintType()) {
|
||||||
|
|
@ -258,10 +295,13 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
case TEXT: {
|
case TEXT: {
|
||||||
// as popup text
|
// as popup text
|
||||||
if (lastModelIndex != modelIndex) {
|
if (lastModelIndex != modelIndex) {
|
||||||
// new hint
|
// new hint with GUI size and mana symbols support
|
||||||
listChoices.setToolTipText(null);
|
listChoices.setToolTipText(null);
|
||||||
KeyValueItem item = (KeyValueItem) listChoices.getModel().getElementAt(modelIndex);
|
KeyValueItem item = (KeyValueItem) listChoices.getModel().getElementAt(modelIndex);
|
||||||
listChoices.setToolTipText(item.getValue());
|
String hint = item.getValue();
|
||||||
|
hint = ManaSymbols.replaceSymbolsWithHTML(hint, ManaSymbols.Type.DIALOG);
|
||||||
|
hint = GUISizeHelper.textToHtmlWithSize(hint, listChoices.getFont());
|
||||||
|
listChoices.setToolTipText(hint);
|
||||||
}
|
}
|
||||||
lastModelIndex = modelIndex;
|
lastModelIndex = modelIndex;
|
||||||
break;
|
break;
|
||||||
|
|
@ -315,11 +355,11 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setMessageText(MageEditorPane editor, String text, boolean useBoldFont) {
|
private void setMessageText(MageEditorPane editor, String text) {
|
||||||
editor.setGameData(this.gameId, this.bigCard);
|
editor.setGameData(this.gameId, this.bigCard);
|
||||||
|
|
||||||
if ((text != null) && !text.equals("")) {
|
if ((text != null) && !text.equals("")) {
|
||||||
String realText = useBoldFont ? "<b>" + text + "<b>" : text;
|
String realText = ManaSymbols.replaceSymbolsWithHTML(text, ManaSymbols.Type.DIALOG);
|
||||||
editor.setText(String.format(HTML_HEADERS_TEMPLATE, realText));
|
editor.setText(String.format(HTML_HEADERS_TEMPLATE, realText));
|
||||||
editor.setVisible(true);
|
editor.setVisible(true);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -357,21 +397,6 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
hideDialog();
|
hideDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates new form PickChoiceDialog
|
|
||||||
*/
|
|
||||||
public PickChoiceDialog() {
|
|
||||||
initComponents();
|
|
||||||
|
|
||||||
this.textMessage.enableHyperlinksAndCardPopups();
|
|
||||||
this.textMessage.enableTextLabelMode();
|
|
||||||
this.textSubMessage.enableHyperlinksAndCardPopups();
|
|
||||||
this.textSubMessage.enableTextLabelMode();
|
|
||||||
|
|
||||||
this.listChoices.setModel(dataModel);
|
|
||||||
this.setModal(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setChoice() {
|
public boolean setChoice() {
|
||||||
KeyValueItem item = (KeyValueItem) this.listChoices.getSelectedValue();
|
KeyValueItem item = (KeyValueItem) this.listChoices.getSelectedValue();
|
||||||
boolean isSpecial = choice.isSpecialEnabled() && cbSpecial.isSelected();
|
boolean isSpecial = choice.isSpecialEnabled() && cbSpecial.isSelected();
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import org.mage.card.arcane.CardRenderer;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper class for GUI
|
* Helper class for GUI
|
||||||
|
|
@ -54,6 +55,7 @@ public final class GUISizeHelper {
|
||||||
public static int gameDialogAreaButtonHigh = 16;
|
public static int gameDialogAreaButtonHigh = 16;
|
||||||
|
|
||||||
public static Font gameDialogAreaFont = new java.awt.Font("Arial", 0, 12);
|
public static Font gameDialogAreaFont = new java.awt.Font("Arial", 0, 12);
|
||||||
|
public static float gameDialogAreaDefaultFontSize = gameDialogAreaFont.getSize2D();
|
||||||
public static int gameDialogButtonHeight;
|
public static int gameDialogButtonHeight;
|
||||||
public static int gameDialogButtonWidth;
|
public static int gameDialogButtonWidth;
|
||||||
|
|
||||||
|
|
@ -225,4 +227,11 @@ public final class GUISizeHelper {
|
||||||
public static float guiSizeScale(float value, float scaleMod) {
|
public static float guiSizeScale(float value, float scaleMod) {
|
||||||
return value * scaleMod;
|
return value * scaleMod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String textToHtmlWithSize(String text, Font font) {
|
||||||
|
if (text != null && !text.toLowerCase(Locale.ENGLISH).startsWith("<html>")) {
|
||||||
|
return "<html><p style=\"font-size: " + font.getSize() + "pt;\">" + text + "</p>";
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue