Fix so restored deck in view when application first opened

Prevent selection going out of view when table height changes
This commit is contained in:
drdev
2014-01-18 20:04:23 +00:00
parent f87b262194
commit 1acb9f8ab1
3 changed files with 29 additions and 27 deletions

View File

@@ -29,10 +29,9 @@ import forge.quest.QuestUtil;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class FDeckChooser extends JPanel implements IDecksComboBoxListener { public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
private boolean isUISetup = false; private DecksComboBox decksComboBox;
private DeckType selectedDeckType;
private DecksComboBox decksComboBox = new DecksComboBox(); private ItemManagerContainer lstDecksContainer;
private DeckType selectedDeckType = DeckType.COLOR_DECK;
private final DeckManager lstDecks = new DeckManager(GameType.Constructed); private final DeckManager lstDecks = new DeckManager(GameType.Constructed);
private final FLabel btnViewDeck = new FLabel.ButtonBuilder().text("View Deck").fontSize(14).build(); private final FLabel btnViewDeck = new FLabel.ButtonBuilder().text("View Deck").fontSize(14).build();
@@ -267,17 +266,24 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
} }
public void populate() { public void populate() {
removeAll(); if (decksComboBox == null) { //initialize components with delayed initialization the first time this is populated
decksComboBox = new DecksComboBox();
lstDecksContainer = new ItemManagerContainer(lstDecks);
restoreSavedState();
decksComboBox.addListener(this);
}
else {
removeAll();
}
this.setLayout(new MigLayout("insets 0, gap 0")); this.setLayout(new MigLayout("insets 0, gap 0"));
decksComboBox.addTo(this, "w 100%, h 30px!, gapbottom 5px, spanx 2, wrap"); decksComboBox.addTo(this, "w 100%, h 30px!, gapbottom 5px, spanx 2, wrap");
this.add(new ItemManagerContainer(lstDecks), "w 100%, growy, pushy, spanx 2, wrap"); this.add(lstDecksContainer, "w 100%, growy, pushy, spanx 2, wrap");
this.add(btnViewDeck, "w 50%-3px, h 30px!, gaptop 5px, gapright 6px"); this.add(btnViewDeck, "w 50%-3px, h 30px!, gaptop 5px, gapright 6px");
this.add(btnRandom, "w 50%-3px, h 30px!, gaptop 5px"); this.add(btnRandom, "w 50%-3px, h 30px!, gaptop 5px");
if (isShowing()) { if (isShowing()) {
validate(); revalidate();
repaint(); repaint();
} }
setupUI();
} }
public final boolean isAi() { public final boolean isAi() {
@@ -296,23 +302,6 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
refreshDecksList(ev.getDeckType(), false, ev); refreshDecksList(ev.getDeckType(), false, ev);
} }
/**
* Creates the various UI components that make up the Deck Chooser.
* <p>
* Only needs to be called once from populate() method so that
* components are "lazy-loaded" when Deck Chooser is first displayed.
*/
private void setupUI() {
if (!isUISetup) {
// Only do this once.
isUISetup = true;
// monitor events generated by these components.
decksComboBox.addListener(this);
// now everything is in place, fire initial populate event.
restoreSavedState();
}
}
private void refreshDecksList(DeckType deckType, boolean forceRefresh, DecksComboBoxEvent ev) { private void refreshDecksList(DeckType deckType, boolean forceRefresh, DecksComboBoxEvent ev) {
if (selectedDeckType == deckType && !forceRefresh) { return; } if (selectedDeckType == deckType && !forceRefresh) { return; }
selectedDeckType = deckType; selectedDeckType = deckType;

View File

@@ -483,14 +483,13 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
*/ */
@Override @Override
public void populate() { public void populate() {
JPanel container = VHomeUI.SINGLETON_INSTANCE.getPnlDisplay(); JPanel container = VHomeUI.SINGLETON_INSTANCE.getPnlDisplay();
container.removeAll(); container.removeAll();
container.setLayout(new MigLayout("insets 0, gap 0, wrap 1, ax right")); container.setLayout(new MigLayout("insets 0, gap 0, wrap 1, ax right"));
container.add(lblTitle, "w 80%, h 40px!, gap 0 0 15px 15px, span 2, al right, pushx"); container.add(lblTitle, "w 80%, h 40px!, gap 0 0 15px 15px, span 2, al right, pushx");
for(FDeckChooser fdc : deckChoosers) { for (FDeckChooser fdc : deckChoosers) {
fdc.populate(); fdc.populate();
} }
updateDeckSelectorLabels(); updateDeckSelectorLabels();

View File

@@ -19,6 +19,8 @@ package forge.gui.toolbox.itemmanager;
import java.awt.Component; import java.awt.Component;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
@@ -86,6 +88,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
private boolean alwaysNonUnique = false; private boolean alwaysNonUnique = false;
private boolean allowMultipleSelections = false; private boolean allowMultipleSelections = false;
private boolean hideFilters = false; private boolean hideFilters = false;
private int viewHeightBackup;
private Command itemActivateCommand; private Command itemActivateCommand;
private ContextMenuBuilder contextMenuBuilder; private ContextMenuBuilder contextMenuBuilder;
private final Class<T> genericType; private final Class<T> genericType;
@@ -154,6 +157,17 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.viewScroller.setBorder(null); this.viewScroller.setBorder(null);
this.viewScroller.getViewport().setBorder(null); this.viewScroller.getViewport().setBorder(null);
this.viewScroller.getVerticalScrollBar().addAdjustmentListener(new ToolTipListener()); this.viewScroller.getVerticalScrollBar().addAdjustmentListener(new ToolTipListener());
this.viewScroller.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
//scroll selection into view whenever view height changes
int height = e.getComponent().getHeight();
if (height != viewHeightBackup) {
viewHeightBackup = height;
scrollSelectionIntoView();
}
}
});
//build enable filters checkbox //build enable filters checkbox
ItemFilter.layoutCheckbox(this.chkEnableFilters); ItemFilter.layoutCheckbox(this.chkEnableFilters);