From a7296a35c61e08d8d4f08243d62e536367051566 Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 5 Mar 2014 00:21:20 +0000 Subject: [PATCH] Flesh out Setting screen structure --- .gitattributes | 1 + .../screens/settings/SettingsScreen.java | 74 +++++++++++++++++-- forge-m-base/src/forge/toolbox/FComboBox.java | 16 ++-- forge-m-base/src/forge/toolbox/FLabel.java | 2 +- .../src/forge/toolbox/FScrollPane.java | 8 ++ 5 files changed, 85 insertions(+), 16 deletions(-) create mode 100644 forge-m-base/src/forge/toolbox/FScrollPane.java diff --git a/.gitattributes b/.gitattributes index faf06a51086..bc0cf3495b0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -16037,6 +16037,7 @@ forge-m-base/src/forge/toolbox/FContainer.java -text forge-m-base/src/forge/toolbox/FDisplayObject.java -text forge-m-base/src/forge/toolbox/FLabel.java -text forge-m-base/src/forge/toolbox/FProgressBar.java -text +forge-m-base/src/forge/toolbox/FScrollPane.java -text forge-m-base/src/forge/utils/Constants.java -text forge-m-base/src/forge/utils/FileLocation.java -text forge-m-base/src/forge/utils/Utils.java -text diff --git a/forge-m-base/src/forge/screens/settings/SettingsScreen.java b/forge-m-base/src/forge/screens/settings/SettingsScreen.java index 29ec8efabd2..1b9a8a910eb 100644 --- a/forge-m-base/src/forge/screens/settings/SettingsScreen.java +++ b/forge-m-base/src/forge/screens/settings/SettingsScreen.java @@ -1,20 +1,84 @@ package forge.screens.settings; +import java.util.ArrayList; +import java.util.List; + import forge.assets.FSkin; import forge.screens.FScreen; import forge.toolbox.FComboBox; +import forge.toolbox.FContainer; +import forge.toolbox.FLabel; +import forge.toolbox.FScrollPane; public class SettingsScreen extends FScreen { - private FComboBox cmbTheme; + private static final float INSETS_FACTOR = 0.025f; + private static final float GAP_Y_FACTOR = 0.01f; + + private final FScrollPane scroller = add(new FScrollPane()); + private final List settingPanels = new ArrayList(); public SettingsScreen() { - super(true, "Settings", true); - - cmbTheme = add(new FComboBox<>(FSkin.getAllSkins())); + super(true, "Settings", false); + + addPanel(new ComboBoxPanel("Theme", FSkin.getAllSkins())); + } + + private void addPanel(SettingPanel panel) { + scroller.add(panel); + settingPanels.add(panel); } @Override protected void doLayout(float startY, float width, float height) { - cmbTheme.setBounds(20, startY + 20, width - 40, 25); + float dy = height * GAP_Y_FACTOR; + scroller.setBounds(0, startY + dy, width, height - startY - dy); + + float x = width * INSETS_FACTOR; + float y = 0; + float panelWidth = width - 2 * x; + float panelHeight; + + for (SettingPanel panel : settingPanels) { + panelHeight = panel.getPreferredHeight(); + panel.setBounds(x, y, panelWidth, panelHeight); + y += panelHeight + dy; + } + } + + private abstract class SettingPanel extends FContainer { + public abstract float getPreferredHeight(); + } + + public class ComboBoxPanel extends SettingPanel { + private final FLabel label; + private final FComboBox comboBox; + + public ComboBoxPanel(String labelText) { + this(labelText, new FComboBox()); + } + public ComboBoxPanel(String labelText, E[] items) { + this(labelText, new FComboBox(items)); + } + public ComboBoxPanel(String labelText, Iterable items) { + this(labelText, new FComboBox(items)); + } + + private ComboBoxPanel(String labelText, FComboBox comboBox0) { + label = add(new FLabel.Builder().text(labelText).build()); + comboBox = add(comboBox0); + label.setHeight(FComboBox.PREFERRED_HEIGHT - 6); + comboBox.setHeight(FComboBox.PREFERRED_HEIGHT); + } + + @Override + protected void doLayout(float width, float height) { + label.setBounds(0, 0, width, label.getHeight()); + comboBox.setBounds(0, label.getHeight(), width, comboBox.getHeight()); + } + + @Override + public float getPreferredHeight() { + return label.getHeight() + comboBox.getHeight(); + } } } diff --git a/forge-m-base/src/forge/toolbox/FComboBox.java b/forge-m-base/src/forge/toolbox/FComboBox.java index f036c82d37b..1510193c782 100644 --- a/forge-m-base/src/forge/toolbox/FComboBox.java +++ b/forge-m-base/src/forge/toolbox/FComboBox.java @@ -4,13 +4,15 @@ import java.util.ArrayList; import java.util.List; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; - import forge.Forge.Graphics; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinColor.Colors; +import forge.utils.Utils; public class FComboBox extends FDisplayObject { + public static final float PREFERRED_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.7f; + private static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT); private static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_THEME2); private static final FSkinColor BORDER_COLOR = BACK_COLOR.getContrastColor(10); @@ -84,16 +86,10 @@ public class FComboBox extends FDisplayObject { g.fillRect(BACK_COLOR, 0, 0, w, h); g.drawRect(BORDER_COLOR, 0, 0, w, h); - float shapeWidth = 8; - float shapeHeight = 8; - float x = w - shapeWidth - 6; + float shapeWidth = PREFERRED_HEIGHT / 3; + float shapeHeight = shapeWidth; + float x = w - 2 * (shapeWidth - 1); float y = h / 2 - 1; - if (getHeight() > 26) { //increase arrow size if taller combo box - shapeWidth += 2; - shapeHeight += 2; - x -= 4; - y--; - } g.fillTriangle(FORE_COLOR, x, y, x + shapeWidth, y, x + (shapeWidth / 2), y + (shapeHeight / 2)); E selectedItem = getSelectedItem(); diff --git a/forge-m-base/src/forge/toolbox/FLabel.java b/forge-m-base/src/forge/toolbox/FLabel.java index 543c76a5235..969a362f37d 100644 --- a/forge-m-base/src/forge/toolbox/FLabel.java +++ b/forge-m-base/src/forge/toolbox/FLabel.java @@ -13,7 +13,7 @@ public class FLabel extends FDisplayObject { public static class Builder { //========== Default values for FLabel are set here. private float bldIconScaleFactor = 0.8f; - private int bldFontSize = 14; + private int bldFontSize = 12; private HAlignment bldAlignment = HAlignment.LEFT; private Vector2 bldInsets = new Vector2(0, 0); diff --git a/forge-m-base/src/forge/toolbox/FScrollPane.java b/forge-m-base/src/forge/toolbox/FScrollPane.java new file mode 100644 index 00000000000..9aafbab9d20 --- /dev/null +++ b/forge-m-base/src/forge/toolbox/FScrollPane.java @@ -0,0 +1,8 @@ +package forge.toolbox; + +public class FScrollPane extends FContainer { + @Override + protected void doLayout(float width, float height) { + + } +}