Support selecting teams

This commit is contained in:
drdev
2014-04-06 16:38:29 +00:00
parent e1d7dae168
commit 2df3525918
4 changed files with 71 additions and 11 deletions

View File

@@ -125,13 +125,18 @@ public abstract class FDropDown extends FScrollPane {
g.drawRect(2, BORDER_COLOR, 0, 0, w, h); //ensure border shows up on all sides g.drawRect(2, BORDER_COLOR, 0, 0, w, h); //ensure border shows up on all sides
} }
protected FDisplayObject getDropDownOwner() {
return menuTab;
}
private class Backdrop extends FDisplayObject { private class Backdrop extends FDisplayObject {
private Backdrop() { private Backdrop() {
} }
@Override @Override
public boolean press(float x, float y) { public boolean press(float x, float y) {
if (menuTab == null || !menuTab.contains(menuTab.screenToLocalX(x), menuTab.screenToLocalY(y))) { FDisplayObject owner = getDropDownOwner();
if (owner == null || !owner.contains(owner.getLeft() + owner.screenToLocalX(x), owner.getTop() + owner.screenToLocalY(y))) {
hide(); //auto-hide when backdrop pressed unless over menu tab hide(); //auto-hide when backdrop pressed unless over menu tab
} }
return false; //allow press to pass through to object behind backdrop return false; //allow press to pass through to object behind backdrop

View File

@@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public abstract class FDropDownMenu extends FDropDown { public abstract class FDropDownMenu extends FDropDown {
private final List<FMenuItem> items = new ArrayList<FMenuItem>(); protected final List<FMenuItem> items = new ArrayList<FMenuItem>();
public FDropDownMenu() { public FDropDownMenu() {
} }
@@ -17,7 +17,7 @@ public abstract class FDropDownMenu extends FDropDown {
protected abstract void buildMenu(); protected abstract void buildMenu();
@Override @Override
protected final ScrollBounds updateAndGetPaneSize(float maxWidth, float maxVisibleHeight) { protected ScrollBounds updateAndGetPaneSize(float maxWidth, float maxVisibleHeight) {
clear(); clear();
items.clear(); items.clear();

View File

@@ -53,7 +53,6 @@ import forge.util.NameGenerator;
import forge.util.storage.IStorage; import forge.util.storage.IStorage;
import forge.utils.ForgePreferences; import forge.utils.ForgePreferences;
import forge.utils.ForgePreferences.FPref; import forge.utils.ForgePreferences.FPref;
import forge.utils.Utils;
public class ConstructedScreen extends LaunchScreen { public class ConstructedScreen extends LaunchScreen {
private static final FSkinColor PLAYER_BORDER_COLOR = FSkinColor.get(Colors.CLR_THEME).alphaColor(0.8f); private static final FSkinColor PLAYER_BORDER_COLOR = FSkinColor.get(Colors.CLR_THEME).alphaColor(0.8f);
@@ -663,14 +662,13 @@ public class ConstructedScreen extends LaunchScreen {
private FEventHandler teamChangedHandler = new FEventHandler() { private FEventHandler teamChangedHandler = new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
@SuppressWarnings("unchecked")
FComboBox<Object> cb = (FComboBox<Object>)e.getSource(); FComboBox<Object> cb = (FComboBox<Object>)e.getSource();
Object selection = cb.getSelectedItem(); if (cb.getSelectedIndex() == -1) {
if (null == selection) {
return; return;
} }
if (appliedVariants.contains(GameType.Archenemy)) { if (appliedVariants.contains(GameType.Archenemy)) {
String sel = (String) selection; String sel = (String) cb.getSelectedItem();
if (sel.contains("Archenemy")) { if (sel.contains("Archenemy")) {
lastArchenemy = index; lastArchenemy = index;
for (PlayerPanel pp : playerPanels) { for (PlayerPanel pp : playerPanels) {
@@ -682,8 +680,7 @@ public class ConstructedScreen extends LaunchScreen {
} }
} }
else { else {
Integer sel = (Integer) selection; teams.set(index, cb.getSelectedIndex() + 1);
teams.set(index, sel);
} }
} }
}; };

View File

@@ -3,12 +3,17 @@ package forge.toolbox;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import forge.Forge;
import forge.Forge.Graphics; import forge.Forge.Graphics;
import forge.toolbox.FEvent.FEventType; import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem;
import forge.screens.FScreen;
import forge.toolbox.FEvent.*;
public class FComboBox<E> extends FTextField { public class FComboBox<E> extends FTextField {
private final List<E> items = new ArrayList<E>(); private final List<E> items = new ArrayList<E>();
private E selectedItem; private E selectedItem;
private final DropDown dropDown = new DropDown();
public FComboBox() { public FComboBox() {
initialize(); initialize();
@@ -107,6 +112,7 @@ public class FComboBox<E> extends FTextField {
@Override @Override
public boolean tap(float x, float y, int count) { public boolean tap(float x, float y, int count) {
dropDown.setVisible(!dropDown.isVisible());
return true; return true;
} }
@@ -133,4 +139,56 @@ public class FComboBox<E> extends FTextField {
protected float getRightPadding() { protected float getRightPadding() {
return getDivotWidth() + 2 * PADDING; return getDivotWidth() + 2 * PADDING;
} }
private class DropDown extends FDropDownMenu {
@Override
protected void buildMenu() {
for (final E item : FComboBox.this.items) {
addItem(new FMenuItem(item.toString(), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
setSelectedItem(item);
}
}));
}
}
@Override
protected ScrollBounds updateAndGetPaneSize(float maxWidth, float maxVisibleHeight) {
clear();
items.clear();
buildMenu();
//determine needed width of menu
float width = FComboBox.this.getWidth();
//set bounds for each item
float y = 0;
for (FMenuItem item : items) {
item.setBounds(0, y, width, FMenuItem.HEIGHT);
y += FMenuItem.HEIGHT;
}
return new ScrollBounds(width, y);
}
@Override
protected void updateSizeAndPosition() {
FScreen screen = Forge.getCurrentScreen();
float screenHeight = screen.getHeight();
float x = FComboBox.this.localToScreenX(0);
float y = FComboBox.this.localToScreenY(FComboBox.this.getHeight());
paneSize = updateAndGetPaneSize(FComboBox.this.getWidth(), screenHeight - y);
setBounds(Math.round(x), Math.round(y), Math.round(FComboBox.this.getWidth()), Math.round(paneSize.getHeight()));
}
@Override
protected FDisplayObject getDropDownOwner() {
return FComboBox.this;
}
}
} }