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")
public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
private boolean isUISetup = false;
private DecksComboBox decksComboBox = new DecksComboBox();
private DeckType selectedDeckType = DeckType.COLOR_DECK;
private DecksComboBox decksComboBox;
private DeckType selectedDeckType;
private ItemManagerContainer lstDecksContainer;
private final DeckManager lstDecks = new DeckManager(GameType.Constructed);
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() {
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"));
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(btnRandom, "w 50%-3px, h 30px!, gaptop 5px");
if (isShowing()) {
validate();
revalidate();
repaint();
}
setupUI();
}
public final boolean isAi() {
@@ -296,23 +302,6 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
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) {
if (selectedDeckType == deckType && !forceRefresh) { return; }
selectedDeckType = deckType;

View File

@@ -483,14 +483,13 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
*/
@Override
public void populate() {
JPanel container = VHomeUI.SINGLETON_INSTANCE.getPnlDisplay();
container.removeAll();
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");
for(FDeckChooser fdc : deckChoosers) {
for (FDeckChooser fdc : deckChoosers) {
fdc.populate();
}
updateDeckSelectorLabels();

View File

@@ -19,6 +19,8 @@ package forge.gui.toolbox.itemmanager;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
@@ -86,6 +88,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
private boolean alwaysNonUnique = false;
private boolean allowMultipleSelections = false;
private boolean hideFilters = false;
private int viewHeightBackup;
private Command itemActivateCommand;
private ContextMenuBuilder contextMenuBuilder;
private final Class<T> genericType;
@@ -154,6 +157,17 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.viewScroller.setBorder(null);
this.viewScroller.getViewport().setBorder(null);
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
ItemFilter.layoutCheckbox(this.chkEnableFilters);