diff --git a/src/main/java/forge/control/match/ControlField.java b/src/main/java/forge/control/match/ControlField.java
index 22117e88fc6..eca0ad8d0d9 100644
--- a/src/main/java/forge/control/match/ControlField.java
+++ b/src/main/java/forge/control/match/ControlField.java
@@ -57,6 +57,7 @@ import forge.properties.NewConstants.Lang.GuiDisplay.HumanLibrary;
import forge.view.GuiTopLevel;
import forge.view.match.ViewField;
import forge.view.match.MatchTopLevel;
+import forge.view.toolbox.FLabel;
/**
* Child controller, applied to single field in battlefield. Manages player view
@@ -153,11 +154,11 @@ public class ControlField {
*/
private void addZoneListeners() {
// Graveyard card list button
- this.view.getLblGraveyard().setHoverable(true);
+ ((FLabel) this.view.getLblGraveyard()).setHoverable(true);
this.view.getLblGraveyard().removeMouseListener(maGraveyard);
this.view.getLblGraveyard().addMouseListener(maGraveyard);
// Exile card list button
- this.view.getLblExile().setHoverable(true);
+ ((FLabel) this.view.getLblExile()).setHoverable(true);
this.view.getLblExile().removeMouseListener(maExiled);
this.view.getLblExile().addMouseListener(maExiled);
@@ -167,17 +168,17 @@ public class ControlField {
this.view.getLblLibrary().addMouseListener(maLibrary);
// Hand button
- this.view.getLblHand().setHoverable(true);
+ ((FLabel) this.view.getLblHand()).setHoverable(true);
}
else {
- this.view.getLblLibrary().setHoverable(false);
+ ((FLabel) this.view.getLblLibrary()).setHoverable(false);
}
this.view.getLblHand().removeMouseListener(maHand);
this.view.getLblHand().addMouseListener(maHand);
// Flashback card list button
- this.view.getLblFlashback().setHoverable(true);
+ ((FLabel) this.view.getLblFlashback()).setHoverable(true);
this.view.getLblFlashback().removeMouseListener(maFlashback);
this.view.getLblFlashback().addMouseListener(maFlashback);
}
@@ -186,22 +187,22 @@ public class ControlField {
* Adds listeners to mana "pool" labels, for paying mana.
*/
private void addPoolListeners() {
- this.view.getLblBlack().setHoverable(true);
+ ((FLabel) this.view.getLblBlack()).setHoverable(true);
this.view.getLblBlack().removeMouseListener(maBlack);
this.view.getLblBlack().addMouseListener(maBlack);
- this.view.getLblBlue().setHoverable(true);
+ ((FLabel) this.view.getLblBlue()).setHoverable(true);
this.view.getLblBlue().removeMouseListener(maBlue);
this.view.getLblBlue().addMouseListener(maBlue);
- this.view.getLblGreen().setHoverable(true);
+ ((FLabel) this.view.getLblGreen()).setHoverable(true);
this.view.getLblGreen().removeMouseListener(maGreen);
this.view.getLblGreen().addMouseListener(maGreen);
- this.view.getLblRed().setHoverable(true);
+ ((FLabel) this.view.getLblRed()).setHoverable(true);
this.view.getLblRed().removeMouseListener(maRed);
this.view.getLblRed().addMouseListener(maRed);
- this.view.getLblWhite().setHoverable(true);
+ ((FLabel) this.view.getLblWhite()).setHoverable(true);
this.view.getLblWhite().removeMouseListener(maWhite);
this.view.getLblWhite().addMouseListener(maWhite);
- this.view.getLblColorless().setHoverable(true);
+ ((FLabel) this.view.getLblColorless()).setHoverable(true);
this.view.getLblColorless().removeMouseListener(maColorless);
this.view.getLblColorless().addMouseListener(maColorless);
}
diff --git a/src/main/java/forge/view/bazaar/BazaarTopLevel.java b/src/main/java/forge/view/bazaar/BazaarTopLevel.java
index 222bbeb1ddf..e3c98bffc1e 100644
--- a/src/main/java/forge/view/bazaar/BazaarTopLevel.java
+++ b/src/main/java/forge/view/bazaar/BazaarTopLevel.java
@@ -51,7 +51,7 @@ public class BazaarTopLevel extends FPanel {
private void populateStalls() {
for (final String s : QuestStallManager.getStallNames()) {
- final FLabel lbl = new FLabel(s + " ", SwingConstants.RIGHT);
+ final FLabel lbl = new FLabel.Builder().text(s + " ").fontAlign(SwingConstants.RIGHT).build();
lbl.setIcon(QuestStallManager.getStall(s).getIcon());
lbl.setIconInBackground(true);
diff --git a/src/main/java/forge/view/bazaar/ViewItem.java b/src/main/java/forge/view/bazaar/ViewItem.java
index 6c9bca64916..391bbe58b51 100644
--- a/src/main/java/forge/view/bazaar/ViewItem.java
+++ b/src/main/java/forge/view/bazaar/ViewItem.java
@@ -28,9 +28,9 @@ public class ViewItem extends FRoundedPanel {
/** An update-able panel instance representing a single item. */
public ViewItem() {
// Final inits
- lblIcon = new FLabel();
- lblName = new FLabel();
- lblPrice = new FLabel();
+ lblIcon = new FLabel.Builder().build();
+ lblName = new FLabel.Builder().build();
+ lblPrice = new FLabel.Builder().build();
tarDesc = new FTextArea();
btnPurchase = new SubButton("Buy");
diff --git a/src/main/java/forge/view/bazaar/ViewStall.java b/src/main/java/forge/view/bazaar/ViewStall.java
index 470f8fc8d41..8b5ee10879f 100644
--- a/src/main/java/forge/view/bazaar/ViewStall.java
+++ b/src/main/java/forge/view/bazaar/ViewStall.java
@@ -64,9 +64,11 @@ public class ViewStall extends JPanel {
protected ViewStall(final BazaarTopLevel v0) {
// Final/component inits
this.skin = Singletons.getView().getSkin();
- this.lblStallName = new FLabel("", SwingConstants.CENTER);
- this.lblEmpty = new FLabel("The merchant does not have anything useful for sale.", SwingConstants.CENTER);
- this.lblStats = new FLabel();
+ this.lblStallName = new FLabel.Builder().text("").fontAlign(SwingConstants.CENTER).build();
+ this.lblEmpty = new FLabel.Builder()
+ .text("The merchant does not have anything useful for sale.")
+ .fontAlign(SwingConstants.CENTER).build();
+ this.lblStats = new FLabel.Builder().build();
this.tpnFluff = new JTextPane();
this.pnlInventory = new JPanel();
this.scrInventory = new FScrollPane(pnlInventory);
diff --git a/src/main/java/forge/view/home/QuestFileLister.java b/src/main/java/forge/view/home/QuestFileLister.java
index e4def7cc822..9eddfee379e 100644
--- a/src/main/java/forge/view/home/QuestFileLister.java
+++ b/src/main/java/forge/view/home/QuestFileLister.java
@@ -88,11 +88,11 @@ public class QuestFileLister extends JPanel {
final JPanel rowTitle = new JPanel();
rowTitle.setBackground(skin.getColor(FSkin.Colors.CLR_ZEBRA));
rowTitle.setLayout(new MigLayout("insets 0, gap 0"));
- rowTitle.add(new FLabel("Delete", SwingConstants.CENTER), "w 15%!, h 20px!, gap 0 0 5px 0");
- rowTitle.add(new FLabel("Rename", SwingConstants.CENTER), "w 15%!, h 20px!, gap 0 0 5px 0");
- rowTitle.add(new FLabel("Name", SwingConstants.CENTER), "w 40%!, h 20px!, gap 0 0 5px 0");
- rowTitle.add(new FLabel("Mode", SwingConstants.CENTER), "w 15%!, h 20px!, gap 0 0 5px 0");
- rowTitle.add(new FLabel("Record", SwingConstants.CENTER), "w 15%!, h 20px!, gap 0 0 5px 0");
+ rowTitle.add(new FLabel.Builder().text("Delete").fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0");
+ rowTitle.add(new FLabel.Builder().text("Rename").fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0");
+ rowTitle.add(new FLabel.Builder().text("Name").fontAlign(SwingConstants.CENTER).build(), "w 40%!, h 20px!, gap 0 0 5px 0");
+ rowTitle.add(new FLabel.Builder().text("Mode").fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0");
+ rowTitle.add(new FLabel.Builder().text("Record").fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0");
this.add(rowTitle, "w 98%!, h 30px!, gapleft 1%");
RowPanel row;
@@ -102,9 +102,10 @@ public class QuestFileLister extends JPanel {
row = new RowPanel(qd);
row.add(new DeleteButton(row), "w 15%!, h 20px!, gap 0 0 5px 0");
row.add(new EditButton(row), "w 15%!, h 20px!, gaptop 5px");
- row.add(new FLabel(qd.getName()), "w 40%!, h 20px!, gap 0 0 5px 0");
- row.add(new FLabel(mode, SwingConstants.CENTER), "w 15%!, h 20px!, gap 0 0 5px 0");
- row.add(new FLabel(qd.getWin() + "/" + qd.getLost(), SwingConstants.CENTER), "w 15%!, h 20px!, gap 0 0 5px 0");
+ row.add(new FLabel.Builder().text(qd.getName()).build(), "w 40%!, h 20px!, gap 0 0 5px 0");
+ row.add(new FLabel.Builder().text(mode).fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0");
+ row.add(new FLabel.Builder().text(qd.getWin() + "/" + qd.getLost())
+ .fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0");
this.add(row, "w 98%!, h 30px!, gap 1% 0 0 0");
tempRows.add(row);
}
diff --git a/src/main/java/forge/view/home/QuestPreferencesHandler.java b/src/main/java/forge/view/home/QuestPreferencesHandler.java
index 1ed9e60e3d5..eeaa0775d78 100644
--- a/src/main/java/forge/view/home/QuestPreferencesHandler.java
+++ b/src/main/java/forge/view/home/QuestPreferencesHandler.java
@@ -50,17 +50,14 @@ public class QuestPreferencesHandler extends JPanel {
pnlBooster = new JPanel();
pnlShop = new JPanel();
- lblErrRewards = new FLabel("Rewards Error");
- lblErrDifficulty = new FLabel("Difficulty Error");
- lblErrBooster = new FLabel("Booster Error");
- lblErrShop = new FLabel("Shop Error");
+ lblErrRewards = new FLabel.Builder().text("Rewards Error").fontStyle(Font.BOLD).build();
+ lblErrDifficulty = new FLabel.Builder().text("Difficulty Error").fontStyle(Font.BOLD).build();
+ lblErrBooster = new FLabel.Builder().text("Booster Error").fontStyle(Font.BOLD).build();
+ lblErrShop = new FLabel.Builder().text("Shop Error").fontStyle(Font.BOLD).build();
lblErrRewards.setForeground(Color.red);
- lblErrRewards.setFontStyle(Font.BOLD);
lblErrDifficulty.setForeground(Color.red);
- lblErrDifficulty.setFontStyle(Font.BOLD);
lblErrBooster.setForeground(Color.red);
- lblErrBooster.setFontStyle(Font.BOLD);
lblErrShop.setForeground(Color.red);
lblErrShop.setFontStyle(Font.BOLD);
@@ -68,168 +65,172 @@ public class QuestPreferencesHandler extends JPanel {
pnlRewards.setOpaque(false);
pnlRewards.setLayout(new MigLayout("insets 0, gap 0, wrap 2"));
- pnlRewards.add(new FLabel("Rewards", new ImageIcon("res/images/icons/CoinIcon.png")), "w 100%!, h 30px!, span 2 1");
+ pnlRewards.add(new FLabel.Builder().text("Rewards")
+ .icon(new ImageIcon("res/images/icons/CoinIcon.png")).build(),
+ "w 100%!, h 30px!, span 2 1");
pnlRewards.add(lblErrRewards, "w 100%!, h 30px!, span 2 1");
constraints1 = "w 60px, h 26px!";
constraints2 = "w 150px!, h 26px!";
- pnlRewards.add(new FLabel("Base winnings"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Base winnings").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_BASE, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("No losses"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("No losses").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_UNDEFEATED, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Poison win"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Poison win").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_POISON, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Milling win"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Milling win").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_MILLED, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Mulligan 0 win"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Mulligan 0 win").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_MULLIGAN0, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Alternative win"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Alternative win").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_ALTERNATIVE, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Win by turn 15"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Win by turn 15").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_TURN15, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Win by turn 10"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Win by turn 10").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_TURN10, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("Win by turn 5"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("Win by turn 5").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_TURN5, ErrType.REWARDS), constraints1);
- pnlRewards.add(new FLabel("First turn win"), constraints2);
+ pnlRewards.add(new FLabel.Builder().text("First turn win").build(), constraints2);
pnlRewards.add(new PrefInput(QPref.REWARDS_TURN1, ErrType.REWARDS), constraints1);
// Difficulty table panel
pnlDifficulty.setOpaque(false);
pnlDifficulty.setLayout(new MigLayout("insets 0, gap 0, wrap 5"));
- pnlDifficulty.add(new FLabel("Difficulty Adjustments", new ImageIcon("res/images/icons/NotesIcon.png")), "w 100%!, h 30px!, span 5 1");
+ pnlDifficulty.add(new FLabel.Builder().text("Difficulty Adjustments").icon(new ImageIcon("res/images/icons/NotesIcon.png")), "w 100%!, h 30px!, span 5 1");
pnlDifficulty.add(lblErrDifficulty, "w 100%!, h 30px!, span 5 1");
constraints1 = "w 60px!, h 26px!";
constraints2 = "w 150px!, h 26px!";
- pnlDifficulty.add(new FLabel(""), constraints2);
- pnlDifficulty.add(new FLabel("Easy"), constraints1);
- pnlDifficulty.add(new FLabel("Medium"), constraints1);
- pnlDifficulty.add(new FLabel("Hard"), constraints1);
- pnlDifficulty.add(new FLabel("Expert"), constraints1);
+ pnlDifficulty.add(new FLabel.Builder().text("").build(), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Easy").build(), constraints1);
+ pnlDifficulty.add(new FLabel.Builder().text("Medium").build(), constraints1);
+ pnlDifficulty.add(new FLabel.Builder().text("Hard").build(), constraints1);
+ pnlDifficulty.add(new FLabel.Builder().text("Expert").build(), constraints1);
- pnlDifficulty.add(new FLabel("Wins For Booster"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Wins For Booster").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.WINS_BOOSTER_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_BOOSTER_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_BOOSTER_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_BOOSTER_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Wins For Rank Increase"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Wins For Rank Increase").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.WINS_RANKUP_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_RANKUP_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_RANKUP_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_RANKUP_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Wins For Medium AI"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Wins For Medium AI").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.WINS_MEDIUMAI_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_MEDIUMAI_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_MEDIUMAI_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_MEDIUMAI_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Wins For Hard AI"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Wins For Hard AI").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.WINS_HARDAI_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_HARDAI_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_HARDAI_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_HARDAI_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Wins For Expert AI"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Wins For Expert AI").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.WINS_EXPERTAI_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_EXPERTAI_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_EXPERTAI_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.WINS_EXPERTAI_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Starting commons"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Starting commons").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.STARTING_COMMONS_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_COMMONS_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_COMMONS_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_COMMONS_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Starting uncommons"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Starting uncommons").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.STARTING_UNCOMMONS_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_UNCOMMONS_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_UNCOMMONS_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_UNCOMMONS_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Starting rares"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Starting rares").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.STARTING_RARES_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_RARES_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_RARES_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_RARES_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Starting credits"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Starting credits").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.STARTING_CREDITS_EASY, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_CREDITS_MEDIUM, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_CREDITS_HARD, ErrType.DIFFICULTY), constraints1);
pnlDifficulty.add(new PrefInput(QPref.STARTING_CREDITS_EXPERT, ErrType.DIFFICULTY), constraints1);
- pnlDifficulty.add(new FLabel("Starting basic lands"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Starting basic lands").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.STARTING_BASIC_LANDS, ErrType.DIFFICULTY), constraints1 + ", wrap");
- pnlDifficulty.add(new FLabel("Starting snow lands"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Starting snow lands").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.STARTING_SNOW_LANDS, ErrType.DIFFICULTY), constraints1 + ", wrap");
- pnlDifficulty.add(new FLabel("Penalty for loss"), constraints2);
+ pnlDifficulty.add(new FLabel.Builder().text("Penalty for loss").build(), constraints2);
pnlDifficulty.add(new PrefInput(QPref.PENALTY_LOSS, ErrType.DIFFICULTY), constraints1 + ", wrap");
// Booster breakdown panel
pnlBooster.setOpaque(false);
pnlBooster.setLayout(new MigLayout("insets 0, gap 0, wrap 2"));
- pnlBooster.add(new FLabel("Booster Pack Ratios", new ImageIcon("res/images/icons/BookIcon.png")), "w 100%!, h 30px!, span 2 1");
+ pnlBooster.add(new FLabel.Builder().text("Booster Pack Ratios")
+ .icon(new ImageIcon("res/images/icons/BookIcon.png")).build(),
+ "w 100%!, h 30px!, span 2 1");
pnlBooster.add(lblErrBooster, "w 100%!, h 30px!, span 2 1");
constraints1 = "w 60px!, h 26px!";
constraints2 = "w 150px!, h 26px!";
- pnlBooster.add(new FLabel("Common"), constraints2);
+ pnlBooster.add(new FLabel.Builder().text("Common").build(), constraints2);
pnlBooster.add(new PrefInput(QPref.BOOSTER_COMMONS, ErrType.BOOSTER), constraints1);
- pnlBooster.add(new FLabel("Uncommon"), constraints2);
+ pnlBooster.add(new FLabel.Builder().text("Uncommon").build(), constraints2);
pnlBooster.add(new PrefInput(QPref.BOOSTER_UNCOMMONS, ErrType.BOOSTER), constraints1);
- pnlBooster.add(new FLabel("Rare"), constraints2);
+ pnlBooster.add(new FLabel.Builder().text("Rare").build(), constraints2);
pnlBooster.add(new PrefInput(QPref.BOOSTER_RARES, ErrType.BOOSTER), constraints1);
// Shop panel
pnlShop.setOpaque(false);
pnlShop.setLayout(new MigLayout("insets 0, gap 0, wrap 2"));
- pnlShop.add(new FLabel("Shop Preferences", new ImageIcon("res/images/icons/CoinIcon.png")), "w 100%!, h 30px!, span 2 1");
+ pnlShop.add(new FLabel.Builder().text("Shop Preferences")
+ .icon(new ImageIcon("res/images/icons/CoinIcon.png")).build(), "w 100%!, h 30px!, span 2 1");
pnlShop.add(lblErrShop, "w 100%!, h 30px!, span 2 1");
constraints1 = "w 60px, h 26px!";
constraints2 = "w 150px!, h 26px!";
- pnlShop.add(new FLabel("Maximum Packs"), constraints2);
+ pnlShop.add(new FLabel.Builder().text("Maximum Packs").build(), constraints2);
pnlShop.add(new PrefInput(QPref.SHOP_MAX_PACKS, ErrType.SHOP), constraints1);
- pnlShop.add(new FLabel("Starting Packs"), constraints2);
+ pnlShop.add(new FLabel.Builder().text("Starting Packs").build(), constraints2);
pnlShop.add(new PrefInput(QPref.SHOP_STARTING_PACKS, ErrType.SHOP), constraints1);
- pnlShop.add(new FLabel("Wins for Pack"), constraints2);
+ pnlShop.add(new FLabel.Builder().text("Wins for Pack").build(), constraints2);
pnlShop.add(new PrefInput(QPref.SHOP_WINS_FOR_ADDITIONAL_PACK, ErrType.SHOP), constraints1);
- pnlShop.add(new FLabel("Common Singles"), constraints2);
+ pnlShop.add(new FLabel.Builder().text("Common Singles").build(), constraints2);
pnlShop.add(new PrefInput(QPref.SHOP_SINGLES_COMMON, ErrType.SHOP), constraints1);
- pnlShop.add(new FLabel("Uncommon Singles"), constraints2);
+ pnlShop.add(new FLabel.Builder().text("Uncommon Singles").build(), constraints2);
pnlShop.add(new PrefInput(QPref.SHOP_SINGLES_UNCOMMON, ErrType.SHOP), constraints1);
- pnlShop.add(new FLabel("Rare Singles"), constraints2);
+ pnlShop.add(new FLabel.Builder().text("Rare Singles").build(), constraints2);
pnlShop.add(new PrefInput(QPref.SHOP_SINGLES_RARE, ErrType.SHOP), constraints1);
-
constraints1 = "w 100%!, gap 0 0 20px 0";
this.add(pnlRewards, constraints1);
this.add(pnlDifficulty, constraints1);
diff --git a/src/main/java/forge/view/home/ViewQuest.java b/src/main/java/forge/view/home/ViewQuest.java
index 1af08607a49..a829e9e5824 100644
--- a/src/main/java/forge/view/home/ViewQuest.java
+++ b/src/main/java/forge/view/home/ViewQuest.java
@@ -11,7 +11,6 @@ import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
-import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
@@ -56,7 +55,7 @@ public class ViewQuest extends JScrollPane {
pnlDuels, pnlChallenges, pnlStart, pnlTitle, pnlNewQuest,
pnlDecks, pnlLoadQuest, pnlPrefs,
tabDuels, tabChallenges, tabDecks, tabQuests, tabPreferences;
- private final JLabel lblTitle, lblLife, lblCredits,
+ private final FLabel lblTitle, lblLife, lblCredits,
lblWins, lblLosses, lblNextChallengeInWins, lblWinStreak;
private final JButton btnBazaar, btnSpellShop, btnStart, btnEmbark,
@@ -108,13 +107,13 @@ public class ViewQuest extends JScrollPane {
pnlLoadQuest = new JPanel();
pnlPrefs = new JPanel();
- lblTitle = new FLabel("New Quest", SwingConstants.CENTER);
- lblLife = new FLabel();
- lblCredits = new FLabel();
- lblWins = new FLabel();
- lblLosses = new FLabel();
- lblNextChallengeInWins = new FLabel();
- lblWinStreak = new FLabel();
+ lblTitle = new FLabel.Builder().text("New Quest").fontAlign(SwingConstants.CENTER).build();
+ lblLife = new FLabel.Builder().build();
+ lblCredits = new FLabel.Builder().build();
+ lblWins = new FLabel.Builder().build();
+ lblLosses = new FLabel.Builder().build();
+ lblNextChallengeInWins = new FLabel.Builder().build();
+ lblWinStreak = new FLabel.Builder().build();
radEasy = new FRadioButton("Easy");
radMedium = new FRadioButton("Medium");
@@ -269,12 +268,12 @@ public class ViewQuest extends JScrollPane {
pnl.setLayout(new MigLayout("insets 0, align center"));
pnl.setBorderColor(clrBorders);
pnl.setBackground(skin.getColor(FSkin.Colors.CLR_THEME2));
- pnl.add(new FLabel("Load a previous Quest"), "h 95%!, gap 0 0 2.5% 0");
+ pnl.add(new FLabel.Builder().text("Load a previous Quest").build(), "h 95%!, gap 0 0 2.5% 0");
- final FLabel lbl = new FLabel("To use quest files "
+ final FLabel lbl = new FLabel.Builder().text("To use quest files "
+ "from previous versions, put them into "
- + "the res/quest/data directory, and restart Forge.", SwingConstants.CENTER);
- lbl.setFontScaleFactor(0.8);
+ + "the res/quest/data directory, and restart Forge.")
+ .fontAlign(SwingConstants.CENTER).fontScaleFactor(0.8).build();
final FScrollPane scr = new FScrollPane(lstQuests);
scr.setBorder(null);
@@ -294,7 +293,7 @@ public class ViewQuest extends JScrollPane {
pnl1.setLayout(new MigLayout("insets 0, align center"));
pnl1.setBorderColor(clrBorders);
pnl1.setBackground(skin.getColor(FSkin.Colors.CLR_THEME2));
- pnl1.add(new FLabel("Start a new quest"), "h 95%!, gap 0 0 2.5% 0");
+ pnl1.add(new FLabel.Builder().text("Start a new quest").build(), "h 95%!, gap 0 0 2.5% 0");
final ButtonGroup group1 = new ButtonGroup();
group1.add(radEasy);
@@ -550,8 +549,7 @@ public class ViewQuest extends JScrollPane {
final File base = ForgeProps.getFile(NewConstants.IMAGE_ICON);
File file = new File(base, event.getIconFilename());
- FLabel lblIcon = new FLabel();
- lblIcon.setIconScaleFactor(1);
+ final FLabel lblIcon = new FLabel.Builder().iconScaleFactor(1).build();
if (!file.exists()) {
lblIcon.setIcon(skin.getIcon(FSkin.ForgeIcons.ICO_UNKNOWN));
}
@@ -589,9 +587,8 @@ public class ViewQuest extends JScrollPane {
});
// Name
- final FLabel lblName = new FLabel(event.getTitle() + ": " + event.getDifficulty());
- lblName.setFontScaleFactor(0.6);
- lblName.setHoverable(false);
+ final FLabel lblName = new FLabel.Builder()
+ .text(event.getTitle() + ": " + event.getDifficulty()).hoverable(false).build();
this.add(lblName, "h 31px!, gap 0 0 10px 5px, wrap");
// Description
@@ -673,38 +670,38 @@ public class ViewQuest extends JScrollPane {
return control;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblTitle() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblTitle() {
return lblTitle;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblLife() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblLife() {
return lblLife;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblCredits() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblCredits() {
return lblCredits;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblWins() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblWins() {
return lblWins;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblLosses() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblLosses() {
return lblLosses;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblNextChallengeInWins() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblNextChallengeInWins() {
return lblNextChallengeInWins;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblWinStreak() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblWinStreak() {
return lblWinStreak;
}
diff --git a/src/main/java/forge/view/home/ViewSettings.java b/src/main/java/forge/view/home/ViewSettings.java
index e5b25dec7a0..b2947b380f2 100644
--- a/src/main/java/forge/view/home/ViewSettings.java
+++ b/src/main/java/forge/view/home/ViewSettings.java
@@ -65,7 +65,7 @@ public class ViewSettings extends JScrollPane {
private JRadioButton radCardTiny, radCardSmaller, radCardSmall,
radCardMedium, radCardLarge, radCardHuge;
- private final JLabel lblTitleSkin;
+ private final FLabel lblTitleSkin;
/**
*
* Assembles swing components for "Settings" mode menu.
@@ -144,7 +144,7 @@ public class ViewSettings extends JScrollPane {
final JLabel lblTitleGraphics = new SectionLabel("Graphic Options");
viewport.add(lblTitleGraphics, sectionConstraints);
- lblTitleSkin = new JLabel("Choose Skin");
+ lblTitleSkin = new FLabel.Builder().text("Choose Skin").build();
lblTitleSkin.setFont(skin.getBoldFont(14));
lblTitleSkin.setForeground(skin.getColor(FSkin.Colors.CLR_TEXT));
final JLabel lblNoteSkin = new NoteLabel("Various user-created themes for Forge backgrounds, fonts, and colors.");
@@ -157,8 +157,7 @@ public class ViewSettings extends JScrollPane {
lstChooseSkin.ensureIndexIsVisible(lstChooseSkin.getSelectedIndex());
viewport.add(new FScrollPane(lstChooseSkin), "h 60px!, w 150px!, gap 10% 0 0 2%, wrap");
- final FLabel lblTitleCardSize = new FLabel("Card Size");
- lblTitleCardSize.setFontStyle(Font.BOLD);
+ final FLabel lblTitleCardSize = new FLabel.Builder().text("Card Size").fontStyle(Font.BOLD).build();
final JLabel lblCardSize = new NoteLabel("Size of cards in hand and playing field, when possible");
viewport.add(lblTitleCardSize, regularConstraints);
viewport.add(lblCardSize, regularConstraints);
@@ -191,7 +190,7 @@ public class ViewSettings extends JScrollPane {
FLabel lblTemp;
for (Shortcut s : shortcuts) {
- lblTemp = new FLabel(s.getDescription());
+ lblTemp = new FLabel.Builder().text(s.getDescription()).build();
KeyboardShortcutField ksf = new KeyboardShortcutField(s);
viewport.add(lblTemp, "w 40%!, h 22px!, gap 10%! 0 0 1%");
viewport.add(ksf, "w 25%!");
@@ -453,8 +452,8 @@ public class ViewSettings extends JScrollPane {
return cbDevMode;
}
- /** @return {@link javax.swing.JLabel} */
- public JLabel getLblTitleSkin() {
+ /** @return {@link javax.swing.FLabel} */
+ public FLabel getLblTitleSkin() {
return lblTitleSkin;
}
diff --git a/src/main/java/forge/view/home/ViewUtilities.java b/src/main/java/forge/view/home/ViewUtilities.java
index 29fb73fcead..480e003462a 100644
--- a/src/main/java/forge/view/home/ViewUtilities.java
+++ b/src/main/java/forge/view/home/ViewUtilities.java
@@ -68,56 +68,53 @@ public class ViewUtilities extends JPanel {
final String constraintsBTN = "h 30px!, w 50%!, gap 25% 0 0 0";
btnDownloadPics = new SubButton("Download LQ Card Pictures");
- final FLabel lblPics = new FLabel("", SwingConstants.CENTER);
- lblPics.setText("Download default card picture for each card.");
- lblPics.setFontStyle(Font.ITALIC);
+ final FLabel lblPics = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Download default card picture for each card.").fontStyle(Font.ITALIC).build();
this.add(btnDownloadPics, constraintsBTN);
this.add(lblPics, constraintsLBL);
btnDownloadSetPics = new SubButton("Download LQ Set Pictures");
- final FLabel lblSets = new FLabel("", SwingConstants.CENTER);
- lblSets.setText("Download full card picture sets for all cards from legacy releases of MTG.");
- lblSets.setFontStyle(Font.ITALIC);
+ final FLabel lblSets = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Download full card picture sets for all cards from legacy releases of MTG.")
+ .fontStyle(Font.ITALIC).build();
this.add(btnDownloadSetPics, constraintsBTN);
this.add(lblSets, constraintsLBL);
btnDownloadQuestImages = new SubButton("Download Quest Images");
- final FLabel lblQuest = new FLabel("", SwingConstants.CENTER);
- lblQuest.setText("Download tokens and icons used in Quest mode.");
- lblQuest.setFontStyle(Font.ITALIC);
+ final FLabel lblQuest = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Download tokens and icons used in Quest mode.").fontStyle(Font.ITALIC).build();
this.add(btnDownloadQuestImages, constraintsBTN);
this.add(lblQuest, constraintsLBL);
btnDownloadPrices = new SubButton("Download Card Prices");
- final FLabel lblPrices = new FLabel("", SwingConstants.CENTER);
- lblPrices.setText("Download up-to-date price list for in-game card shops.");
- lblPrices.setFontStyle(Font.ITALIC);
+ final FLabel lblPrices = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Download up-to-date price list for in-game card shops.")
+ .fontStyle(Font.ITALIC).build();
this.add(btnDownloadPrices, constraintsBTN);
this.add(lblPrices, constraintsLBL);
btnImportPictures = new SubButton("Import Pictures");
- final FLabel lblImport = new FLabel("", SwingConstants.CENTER);
- lblImport.setText("Import card pictures from a local version of Forge.");
- lblImport.setFontStyle(Font.ITALIC);
+ final FLabel lblImport = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Import card pictures from a local version of Forge.")
+ .fontStyle(Font.ITALIC).build();
this.add(btnImportPictures, constraintsBTN);
this.add(lblImport, constraintsLBL);
btnReportBug = new SubButton("Report a Bug");
- final FLabel lblReport = new FLabel("", SwingConstants.CENTER);
- lblReport.setText("Something broken?");
- lblReport.setFontStyle(Font.ITALIC);
+ final FLabel lblReport = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Something broken?").fontStyle(Font.ITALIC).build();
this.add(btnReportBug, constraintsBTN);
this.add(lblReport, constraintsLBL);
btnDeckEditor = new SubButton("Deck Editor");
- final FLabel lblEditor = new FLabel("", SwingConstants.CENTER);
- lblEditor.setText("Build or edit a deck using all cards available in Forge.");
- lblEditor.setFontStyle(Font.ITALIC);
+ final FLabel lblEditor = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
+ .text("Build or edit a deck using all cards available in Forge.")
+ .fontStyle(Font.ITALIC).build();
this.add(btnDeckEditor, constraintsBTN);
this.add(lblEditor, constraintsLBL);
diff --git a/src/main/java/forge/view/match/ViewField.java b/src/main/java/forge/view/match/ViewField.java
index 6e591af4880..264e80adaa6 100644
--- a/src/main/java/forge/view/match/ViewField.java
+++ b/src/main/java/forge/view/match/ViewField.java
@@ -67,7 +67,7 @@ public class ViewField extends FRoundedPanel {
private final Border hoverBorder, inactiveBorder;
- private DetailLabel lblHand, lblGraveyard, lblLibrary, lblExile,
+ private FLabel lblHand, lblGraveyard, lblLibrary, lblExile,
lblFlashback, lblPoison, lblBlack, lblBlue,
lblGreen, lblRed, lblWhite, lblColorless;
@@ -288,57 +288,39 @@ public class ViewField extends FRoundedPanel {
// Hand, library, graveyard, exile, flashback, poison labels
final String constraintsCell = "w 45%!, h 100%!, gap 0 5% 2px 2px";
- lblHand = new DetailLabel(FSkin.ZoneImages.ICO_HAND, "99");
- lblHand.setToolTipText("Cards in hand");
-
- lblLibrary = new DetailLabel(FSkin.ZoneImages.ICO_LIBRARY, "99");
- lblLibrary.setToolTipText("Cards in library");
+ lblHand = getBuiltFLabel(FSkin.ZoneImages.ICO_HAND, "99", "Cards in hand");
+ lblLibrary = getBuiltFLabel(FSkin.ZoneImages.ICO_LIBRARY, "99", "Cards in library");
row1.add(lblHand, constraintsCell);
row1.add(lblLibrary, constraintsCell);
- lblGraveyard = new DetailLabel(FSkin.ZoneImages.ICO_GRAVEYARD, "99");
- lblGraveyard.setToolTipText("Cards in graveyard");
-
- lblExile = new DetailLabel(FSkin.ZoneImages.ICO_EXILE, "99");
- lblExile.setToolTipText("Exiled cards");
+ lblGraveyard = getBuiltFLabel(FSkin.ZoneImages.ICO_GRAVEYARD, "99", "Cards in graveyard");
+ lblExile = getBuiltFLabel(FSkin.ZoneImages.ICO_EXILE, "99", "Exiled cards");
row2.add(lblGraveyard, constraintsCell);
row2.add(lblExile, constraintsCell);
- lblFlashback = new DetailLabel(FSkin.ZoneImages.ICO_FLASHBACK, "99");
- lblFlashback.setToolTipText("Flashback cards");
-
- lblPoison = new DetailLabel(FSkin.ZoneImages.ICO_POISON, "99");
- lblPoison.setToolTipText("Poison counters");
+ lblFlashback = getBuiltFLabel(FSkin.ZoneImages.ICO_FLASHBACK, "99", "Flashback cards");
+ lblPoison = getBuiltFLabel(FSkin.ZoneImages.ICO_POISON, "99", "Poison counters");
row3.add(lblFlashback, constraintsCell);
row3.add(lblPoison, constraintsCell);
// Black, Blue, Colorless, Green, Red, White mana labels
- lblBlack = new DetailLabel(FSkin.ManaImages.IMG_BLACK, "99");
- lblBlack.setToolTipText("Black mana");
-
- lblBlue = new DetailLabel(FSkin.ManaImages.IMG_BLUE, "99");
- lblBlue.setToolTipText("Blue mana");
+ lblBlack = getBuiltFLabel(FSkin.ManaImages.IMG_BLACK, "99", "Black mana");
+ lblBlue = getBuiltFLabel(FSkin.ManaImages.IMG_BLUE, "99", "Blue mana");
row4.add(lblBlack, constraintsCell);
row4.add(lblBlue, constraintsCell);
- lblGreen = new DetailLabel(FSkin.ManaImages.IMG_GREEN, "99");
- lblGreen.setToolTipText("Green mana");
-
- lblRed = new DetailLabel(FSkin.ManaImages.IMG_RED, "99");
- lblRed.setToolTipText("Red mana");
+ lblGreen = getBuiltFLabel(FSkin.ManaImages.IMG_GREEN, "99", "Green mana");
+ lblRed = getBuiltFLabel(FSkin.ManaImages.IMG_RED, "99", "Red mana");
row5.add(lblGreen, constraintsCell);
row5.add(lblRed, constraintsCell);
- lblWhite = new DetailLabel(FSkin.ManaImages.IMG_WHITE, "99");
- lblWhite.setToolTipText("White mana");
-
- lblColorless = new DetailLabel(FSkin.ManaImages.IMG_COLORLESS, "99");
- lblColorless.setToolTipText("Colorless mana");
+ lblWhite = getBuiltFLabel(FSkin.ManaImages.IMG_WHITE, "99", "White mana");
+ lblColorless = getBuiltFLabel(FSkin.ManaImages.IMG_COLORLESS, "99", "Colorless mana");
row6.add(lblWhite, constraintsCell);
row6.add(lblColorless, constraintsCell);
@@ -436,262 +418,138 @@ public class ViewField extends FRoundedPanel {
return this.avatarArea;
}
- /**
- * Gets the lbl life.
- *
- * @return DetailLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public JLabel getLblLife() {
return this.lblLife;
}
- /**
- * Gets the lbl hand.
- *
- * @return DetailLabel for hand cards
- */
- public DetailLabel getLblHand() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblHand() {
return this.lblHand;
}
- /**
- * Gets the lbl library.
- *
- * @return DetailLabel for library cards
- */
- public DetailLabel getLblLibrary() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblLibrary() {
return this.lblLibrary;
}
- /**
- * Gets the lbl graveyard.
- *
- * @return DetailLabel for graveyard cards
- */
- public DetailLabel getLblGraveyard() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblGraveyard() {
return this.lblGraveyard;
}
- /**
- * Gets the lbl exile.
- *
- * @return DetailLabel for exiled cards
- */
- public DetailLabel getLblExile() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblExile() {
return this.lblExile;
}
- /**
- * Gets the lbl flashback.
- *
- * @return DetailLabel for flashback cards
- */
- public DetailLabel getLblFlashback() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblFlashback() {
return this.lblFlashback;
}
- /**
- * Gets the lbl poison.
- *
- * @return DetailLabel for poison counters
- */
- public DetailLabel getLblPoison() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblPoison() {
return this.lblPoison;
}
- /**
- * Gets the lbl colorless.
- *
- * @return DetailLabel for colorless mana count
- */
- public DetailLabel getLblColorless() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblColorless() {
return this.lblColorless;
}
- /**
- * Gets the lbl black.
- *
- * @return DetailLabel for black mana count
- */
- public DetailLabel getLblBlack() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblBlack() {
return this.lblBlack;
}
- /**
- * Gets the lbl blue.
- *
- * @return DetailLabel for blue mana count
- */
- public DetailLabel getLblBlue() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblBlue() {
return this.lblBlue;
}
- /**
- * Gets the lbl green.
- *
- * @return DetailLabel for green mana count
- */
- public DetailLabel getLblGreen() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblGreen() {
return this.lblGreen;
}
- /**
- * Gets the lbl red.
- *
- * @return DetailLabel for red mana count
- */
- public DetailLabel getLblRed() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblRed() {
return this.lblRed;
}
- /**
- * Gets the lbl white.
- *
- * @return DetailLabel for white mana count
- */
- public DetailLabel getLblWhite() {
+ /** @return {@link javax.swing.JLabel} */
+ public JLabel getLblWhite() {
return this.lblWhite;
}
// Phases
- /**
- * Gets the lbl upkeep.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblUpkeep() {
return this.lblUpkeep;
}
- /**
- * Gets the lbl draw.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblDraw() {
return this.lblDraw;
}
- /**
- * Gets the lbl main1.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblMain1() {
return this.lblMain1;
}
- /**
- * Gets the lbl begin combat.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblBeginCombat() {
return this.lblBeginCombat;
}
- /**
- * Gets the lbl declare attackers.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblDeclareAttackers() {
return this.lblDeclareAttackers;
}
- /**
- * Gets the lbl declare blockers.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblDeclareBlockers() {
return this.lblDeclareBlockers;
}
- /**
- * Gets the lbl combat damage.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblCombatDamage() {
return this.lblCombatDamage;
}
- /**
- * Gets the lbl first strike.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblFirstStrike() {
return this.lblFirstStrike;
}
- /**
- * Gets the lbl end combat.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblEndCombat() {
return this.lblEndCombat;
}
- /**
- * Gets the lbl main2.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblMain2() {
return this.lblMain2;
}
- /**
- * Gets the lbl end turn.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblEndTurn() {
return this.lblEndTurn;
}
- /**
- * Gets the lbl cleanup.
- *
- * @return PhaseLabel
- */
+ /** @return {@link javax.swing.JLabel} */
public PhaseLabel getLblCleanup() {
return this.lblCleanup;
}
- // ========== Custom classes
+ // ========== Custom class handling
- /**
- * Used to show various values in "details" panel.
- */
- // Design note: Labels are used here since buttons have various
- // difficulties in displaying the desired "flat" background and
- // also strange icon/action behavior.
- public class DetailLabel extends FLabel {
- /**
- * Instance of JLabel detailing info about field: has icon and optional
- * hover effect.
- *
- * @param s0
- * Label's icon address
- * @param txt0
- * Label's text
- */
- public DetailLabel(final SkinProp s0, final String txt0) {
- super(txt0, SwingConstants.RIGHT);
-
- this.setOpaque(false);
- this.setFontScaleFactor(0.5);
- this.setIconScaleFactor(0.8);
- this.setIconBackgroundAlpha(0.6f);
- this.setIconInBackground(true);
- this.setIcon(new ImageIcon(skin.getImage(s0)));
-
- this.setHoverable(true);
- }
+ private FLabel getBuiltFLabel(SkinProp p0, String s0, String s1) {
+ return new FLabel.Builder().icon(new ImageIcon(skin.getImage(p0)))
+ .opaque(false).fontScaleFactor(0.5).iconAlpha(0.6f).iconInBackground(true)
+ .text(s0).tooltip(s1).fontAlign(SwingConstants.RIGHT).build();
}
/**
diff --git a/src/main/java/forge/view/match/ViewWinLose.java b/src/main/java/forge/view/match/ViewWinLose.java
index 55eaf8309b4..7be0fe726f7 100644
--- a/src/main/java/forge/view/match/ViewWinLose.java
+++ b/src/main/java/forge/view/match/ViewWinLose.java
@@ -150,10 +150,11 @@ public class ViewWinLose {
final FScrollPane scrLog = new FScrollPane(txtLog);
scrLog.setBorder(null);
pnlLog.setOpaque(false);
- final FLabel lblLog = new FLabel("Game Log", SwingConstants.CENTER);
- lblLog.setFontScaleFactor(0.8);
- lblLog.setFontStyle(Font.BOLD);
- pnlLog.add(lblLog, "w 300px!, h 28px!, gap 0 0 20px 0");
+
+ pnlLog.add(new FLabel.Builder().text("Game Log").fontAlign(SwingConstants.CENTER)
+ .fontScaleFactor(0.8).fontStyle(Font.BOLD).build(),
+ "w 300px!, h 28px!, gap 0 0 20px 0");
+
pnlLog.add(scrLog, "w 300px!, h 100px!, gap 0 0 10px 0");
pnlLeft.add(pnlLog, "w 100%!");
diff --git a/src/main/java/forge/view/toolbox/DeckLister.java b/src/main/java/forge/view/toolbox/DeckLister.java
index f6341452a50..7c9c0d49120 100644
--- a/src/main/java/forge/view/toolbox/DeckLister.java
+++ b/src/main/java/forge/view/toolbox/DeckLister.java
@@ -94,11 +94,12 @@ public class DeckLister extends JPanel {
JPanel rowTitle = new TitlePanel();
rowTitle.setBackground(skin.getColor(FSkin.Colors.CLR_ZEBRA));
rowTitle.setLayout(new MigLayout("insets 0, gap 0"));
- rowTitle.add(new FLabel("Delete", SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
- rowTitle.add(new FLabel("Edit", SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
- rowTitle.add(new FLabel("Deck Name", SwingConstants.CENTER), "w 60%!, h 20px!, gaptop 5px");
- rowTitle.add(new FLabel("Main", SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
- rowTitle.add(new FLabel("Side", SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
+
+ rowTitle.add(new FLabel.Builder().text("Delete").fontAlign(SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
+ rowTitle.add(new FLabel.Builder().text("Edit").fontAlign(SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
+ rowTitle.add(new FLabel.Builder().text("Deck Name").fontAlign(SwingConstants.CENTER), "w 60%!, h 20px!, gaptop 5px");
+ rowTitle.add(new FLabel.Builder().text("Main").fontAlign(SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
+ rowTitle.add(new FLabel.Builder().text("Side").fontAlign(SwingConstants.CENTER), "w 10%!, h 20px!, gaptop 5px");
this.add(rowTitle, "w 98%!, h 30px!, gapleft 1%");
RowPanel row;
diff --git a/src/main/java/forge/view/toolbox/FLabel.java b/src/main/java/forge/view/toolbox/FLabel.java
index 8c8303efc00..8bda7a21f04 100644
--- a/src/main/java/forge/view/toolbox/FLabel.java
+++ b/src/main/java/forge/view/toolbox/FLabel.java
@@ -20,150 +20,225 @@ import forge.Command;
import forge.Singletons;
/**
- * A custom instance of JLabel using Forge skin properties.
- *
- * Font size can be scaled to a percentage of label height (60% by default).
- *
- * Font scaling can be toggled.
+* Uses the Builder pattern to facilitate/encourage inline styling.
+ * Credit to Effective Java 2 (Joshua Bloch).
+ * Methods in builder can be chained. To declare:
+ * new FLabel.Builder().method1(foo).method2(bar).method3(baz)...
+ *
and then call build() to make the label.
+ *
+ * Adjustable features of FLabel:
+ * - Automatic font scaling (60% size by default, can toggle on/off)
+ * - Automatic icon scaling (80% size by default, can toggle on/off)
+ * - Scale font according to height or width
+ * - Hoverable
+ * - Selectable
+ * - Can execute command when clicked
*/
@SuppressWarnings("serial")
public class FLabel extends JLabel {
- private final FSkin skin;
- private final ComponentAdapter cadResize;
- private final MouseAdapter madEvents;
- private final Color clrText, clrBorders, clrHover, clrInactive, clrActive;
+ /**
+ * Uses the amazing Builder pattern to facilitate/encourage inline styling.
+ * Credit to Effective Java 2 (Joshua Bloch), a fantastic book.
+ * Methods in builder can be chained. To declare:
+ * new FLabel.Builder().method1(foo).method2(bar).method3(baz)...
+ *
and then call build() to make the label.
+ */
+ public static class Builder extends FLabel {
+ //========== Default values for FLabel are set here.
+ private double bldFontScaleFactor = 0.6;
+ private double bldIconScaleFactor = 0.8;
+ private int bldFontScaleBy = SwingConstants.VERTICAL;
+ private int bldFontStyle = Font.PLAIN;
+ private float bldIconAlpha = 1.0f;
- private boolean fontScaleAuto;
- private boolean iconScaleAuto;
+ private boolean bldSelectable = false;
+ private boolean bldHoverable = false;
+ private boolean bldOpaque = false;
+ private boolean bldIconInBackground = false;
+ private boolean bldFontScaleAuto = true;
+ private boolean bldIconScaleAuto = true;
- private int fontScaleBy;
+ private String bldText, bldToolTip;
+ private ImageIcon bldIcon;
+ private int bldFontAlign;
+ private Command bldCmd;
- private boolean iconInBackground;
- private boolean opaque;
+ // Build!
+ /** @return {@link forge.view.toolbox.FLabel} */
+ public FLabel build() { return new FLabel(this); }
- private boolean selectable;
- private boolean selected;
- private boolean hoverable;
- private boolean hovered;
+ // Begin builder methods.
+ /**@param s0 {@link java.lang.String}
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder text(String s0) { this.bldText = s0; return this; }
- private double fontScaleFactor;
- private double iconScaleFactor;
+ /**@param s0 {@link java.lang.String}
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder tooltip(String s0) { this.bldToolTip = s0; return this; }
+ /**@param i0 {@link javax.swing.ImageIcon}
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder icon(ImageIcon i0) { this.bldIcon = i0; return this; }
+
+ /**@param i0 SwingConstants.CENTER, .LEFT, or .RIGHT
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder fontAlign(int i0) { this.bldFontAlign = i0; return this; }
+
+ /**@param b0 boolean
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder opaque(boolean b0) { this.bldOpaque = b0; return this; }
+
+ /**@param b0 boolean
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder hoverable(boolean b0) { this.bldHoverable = b0; return this; }
+
+ /**@param b0 boolean
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder selectable(boolean b0) { this.bldSelectable = b0; return this; }
+
+ /**@param c0 {@link forge.Command} to execute if clicked
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder cmdClick(Command c0) { this.bldCmd = c0; return this; }
+
+ /**@param i0 Font.PLAIN, Font.BOLD, or Font.ITALIC
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder fontStyle(int i0) { this.bldFontStyle = i0; return this; }
+
+ /**@param b0 boolean
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder fontScaleAuto(boolean b0) { this.bldFontScaleAuto = b0; return this; }
+
+ /**@param d0 double between 0 and 1, 0.6 by default
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder fontScaleFactor(double d0) { this.bldFontScaleFactor = d0; return this; }
+
+ /**@param i0 SwingConstants.HORIZONTAL or .VERTICAL
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder fontScaleBy(int i0) { this.bldFontScaleBy = i0; return this; }
+
+ /**@param b0 boolean
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder iconScaleAuto(boolean b0) { this.bldIconScaleAuto = b0; return this; }
+
+ /**@param d0 double between 0 and 1, 0.8 by default
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder iconScaleFactor(double d0) { this.bldIconScaleFactor = d0; return this; }
+
+ /**@param b0 boolean, icon will be drawn independent of text
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder iconInBackground(boolean b0) { this.bldIconInBackground = b0; return this; }
+
+ /**@param f0 0.0f - 1.0f. If icon is in background, this alpha is applied.
+ * @return {@link forge.view.toolbox.Builder} */
+ public Builder iconAlpha(float f0) { this.bldIconAlpha = f0; return this; }
+ }
+
+ //========== Constructors
+ /** Must have protected constructor to allow subclassing. */
+ protected FLabel() { }
+
+ // Call this using FLabel.Builder()...
+ private FLabel(Builder b0) {
+ super(b0.bldText);
+
+ // Init fields from builder
+ this.fontScaleFactor = b0.bldFontScaleFactor;
+ this.iconScaleFactor = b0.bldIconScaleFactor;
+ this.fontScaleBy = b0.bldFontScaleBy;
+ this.fontStyle = b0.bldFontStyle;
+
+ this.selectable = b0.bldSelectable;
+ this.hoverable = b0.bldHoverable;
+ this.opaque = b0.bldOpaque;
+ this.iconInBackground = b0.bldIconInBackground;
+ this.fontScaleAuto = b0.bldFontScaleAuto;
+ this.iconScaleAuto = b0.bldIconScaleAuto;
+
+ this.setIcon(b0.bldIcon);
+ this.setIconAlpha(b0.bldIconAlpha);
+ this.setCommand(b0.bldCmd);
+ this.setFontAlign(b0.bldFontAlign);
+ this.setText(b0.bldText);
+ this.setToolTipText(b0.bldToolTip);
+
+ // Non-custom display properties
+ this.setForeground(clrText);
+ this.setBackground(clrInactive);
+ this.setVerticalTextPosition(SwingConstants.CENTER);
+ this.setVerticalAlignment(SwingConstants.CENTER);
+
+ // Resize adapter
+ this.removeComponentListener(cadResize);
+ this.addComponentListener(cadResize);
+ }
+
+ // Final inits
+ private final Color clrText = Singletons.getView().getSkin().getColor(FSkin.Colors.CLR_TEXT);
+ private final Color clrBorders = Singletons.getView().getSkin().getColor(FSkin.Colors.CLR_BORDERS);
+ private final Color clrHover = Singletons.getView().getSkin().getColor(FSkin.Colors.CLR_HOVER);
+ private final Color clrInactive = Singletons.getView().getSkin().getColor(FSkin.Colors.CLR_ACTIVE);
+ private final Color clrActive = Singletons.getView().getSkin().getColor(FSkin.Colors.CLR_INACTIVE);
+
+ // Custom properties, assigned either at realization (using builder)
+ // or dynamically (using methods below).
+ private double fontScaleFactor, iconScaleFactor;
+ private int fontScaleBy, fontStyle;
+ private boolean selectable, selected, hoverable, hovered, opaque,
+ iconInBackground, fontScaleAuto, iconScaleAuto;
+
+ // Various variables used in image rendering.
private Image img;
private Graphics2D g2d;
private Command cmdClick;
private int x, y, w, h, iw, ih, sw, sh, ref;
private double iar;
+
private AlphaComposite alphaDim, alphaStrong;
- private int fontStyle;
-
- /** */
- public FLabel() {
- this("");
- }
-
- /** @param i0 {@link javax.swing.ImageIcon} */
- public FLabel(final Icon i0) {
- this("");
- this.setIcon(i0);
- }
-
- /**
- * @param s0 {@link java.lang.String}
- * @param i0 {@link javax.swing.ImageIcon}
- */
- public FLabel(final String s0, final Icon i0) {
- this(s0);
- this.setIcon(i0);
- }
-
- /**
- * @param s0 {@link java.lang.String} text
- * @param align0 Text alignment
- */
- public FLabel(final String s0, final int align0) {
- this(s0);
- this.setHorizontalAlignment(align0);
- }
-
- /** @param s0 {@link java.lang.String} */
- public FLabel(final String s0) {
- super(s0);
- this.skin = Singletons.getView().getSkin();
- // Final inits
- this.clrText = skin.getColor(FSkin.Colors.CLR_TEXT);
- this.clrBorders = skin.getColor(FSkin.Colors.CLR_BORDERS);
- this.clrHover = skin.getColor(FSkin.Colors.CLR_HOVER);
- this.clrActive = skin.getColor(FSkin.Colors.CLR_ACTIVE);
- this.clrInactive = skin.getColor(FSkin.Colors.CLR_INACTIVE);
-
- // Custom properties
- this.fontScaleAuto = true;
- this.fontScaleFactor = 0.6;
- this.iconScaleAuto = true;
- this.iconScaleFactor = 0.8;
- this.selectable = false;
- this.selected = false;
- this.hoverable = false;
- this.hovered = false;
- this.fontScaleBy = SwingConstants.VERTICAL;
- this.fontStyle = Font.PLAIN;
- this.iconInBackground = false;
-
- // Default properties
- this.setForeground(clrText);
- this.setBackground(clrInactive);
- this.setVerticalTextPosition(SwingConstants.CENTER);
- this.setVerticalAlignment(SwingConstants.CENTER);
- this.setIconBackgroundAlpha(1.0f);
-
- // Resize adapter
- this.cadResize = new ComponentAdapter() {
- @Override
- public void componentResized(ComponentEvent e) {
- if (fontScaleAuto) {
- ref = (fontScaleBy == SwingConstants.VERTICAL ? getHeight() : getWidth());
- switch (fontStyle) {
- case Font.BOLD:
- setFont(skin.getBoldFont((int) (ref * fontScaleFactor)));
- repaint();
- break;
- case Font.ITALIC:
- setFont(skin.getItalicFont((int) (ref * fontScaleFactor)));
- break;
- default:
- setFont(skin.getFont((int) (ref * fontScaleFactor)));
- }
- }
-
- // Non-background icon
- if (img != null && iconScaleAuto && !iconInBackground) {
- h = (int) (getHeight() * iconScaleFactor);
- w = (int) (h * iar * iconScaleFactor);
- if (w == 0 || h == 0) { return; }
-
- FLabel.super.setIcon(new ImageIcon(img.getScaledInstance(w, h, Image.SCALE_SMOOTH)));
+ // Resize adapter
+ private final ComponentAdapter cadResize = new ComponentAdapter() {
+ @Override
+ public void componentResized(ComponentEvent e) {
+ if (fontScaleAuto) {
+ ref = (fontScaleBy == SwingConstants.VERTICAL ? getHeight() : getWidth());
+ switch (fontStyle) {
+ case Font.BOLD:
+ setFont(Singletons.getView().getSkin().getBoldFont((int) (ref * fontScaleFactor)));
+ repaint();
+ break;
+ case Font.ITALIC:
+ setFont(Singletons.getView().getSkin().getItalicFont((int) (ref * fontScaleFactor)));
+ break;
+ default:
+ setFont(Singletons.getView().getSkin().getFont((int) (ref * fontScaleFactor)));
}
}
- };
- this.removeComponentListener(cadResize);
- this.addComponentListener(cadResize);
- this.madEvents = new MouseAdapter() {
- @Override
- public void mouseEntered(MouseEvent e) { hovered = true; repaint(); }
- @Override
- public void mouseExited(MouseEvent e) { hovered = false; repaint(); }
- @Override
- public void mouseClicked(MouseEvent e) {
- if (!selectable) { return; }
- if (selected) { setSelected(false); }
- else { setSelected(true); }
- cmdClick.execute();
+ // Non-background icon
+ if (img != null && iconScaleAuto && !iconInBackground) {
+ h = (int) (getHeight() * iconScaleFactor);
+ w = (int) (h * iar * iconScaleFactor);
+ if (w == 0 || h == 0) { return; }
+
+ FLabel.super.setIcon(new ImageIcon(img.getScaledInstance(w, h, Image.SCALE_SMOOTH)));
}
- };
- }
+ }
+ };
+
+ // Mouse event handler
+ private final MouseAdapter madEvents = new MouseAdapter() {
+ @Override
+ public void mouseEntered(MouseEvent e) { hovered = true; repaint(); }
+ @Override
+ public void mouseExited(MouseEvent e) { hovered = false; repaint(); }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (!selectable) { return; }
+ if (selected) { setSelected(false); }
+ else { setSelected(true); }
+ cmdClick.execute();
+ }
+ };
/** @param b0 boolean */
public void setHoverable(boolean b0) {
@@ -215,7 +290,7 @@ public class FLabel extends JLabel {
/** Sets alpha if icon is in background.
* @param f0 float */
- public void setIconBackgroundAlpha(float f0) {
+ public void setIconAlpha(float f0) {
this.alphaDim = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, f0);
this.alphaStrong = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
}
@@ -231,7 +306,7 @@ public class FLabel extends JLabel {
this.fontScaleBy = i0;
}
- /** @param i0 must be Font.PLAIN, Font.BOLD, Font.ITALIC */
+ /** @param i0 Font.PLAIN, .BOLD, or .ITALIC */
public void setFontStyle(int i0) {
if (i0 != Font.PLAIN && i0 != Font.BOLD && i0 != Font.ITALIC) {
throw new IllegalArgumentException("FLabel$setFontStyle "
@@ -240,6 +315,16 @@ public class FLabel extends JLabel {
this.fontStyle = i0;
}
+ /** @param i0 SwingConstants.CENTER, .LEFT or .RIGHT */
+ public void setFontAlign(int i0) {
+ if (i0 != SwingConstants.CENTER && i0 != SwingConstants.LEFT && i0 != SwingConstants.RIGHT) {
+ throw new IllegalArgumentException("FLabel$setFontStyle "
+ + "must be passed either SwingConstants.CENTER, "
+ + "SwingConstants.LEFT, or SwingConstants.RIGHT");
+ }
+ this.setHorizontalAlignment(i0);
+ }
+
@Override
public void setIcon(final Icon i0) {
if (i0 == null) { this.img = null; return; }