Fix so editing deck is faster by delaying the loading of the catalog

This commit is contained in:
drdev
2014-06-21 02:35:24 +00:00
parent ddb0eed610
commit 62cf2fc06e
5 changed files with 63 additions and 48 deletions

View File

@@ -74,7 +74,7 @@ public class FDeckChooser extends FScreen {
if (generatedDeck == null) { return; }
generatedDeck = (Deck)generatedDeck.copyTo(""); //prevent deck having a name by default
editor = new FDeckEditor(EditorType.Constructed, generatedDeck);
editor = new FDeckEditor(EditorType.Constructed, generatedDeck, true);
}
else {
FOptionPane.showErrorDialog("You must select something before you can generate a new deck.");
@@ -82,7 +82,7 @@ public class FDeckChooser extends FScreen {
}
break;
default:
editor = new FDeckEditor(EditorType.Constructed, "");
editor = new FDeckEditor(EditorType.Constructed, "", false);
break;
}
editor.setSaveHandler(new FEventHandler() {
@@ -167,7 +167,7 @@ public class FDeckChooser extends FScreen {
private void editDeck(DeckProxy deck) {
needRefreshOnActivate = true;
DeckPreferences.setCurrentDeck(deck.getName());
Forge.openScreen(new FDeckEditor(EditorType.Constructed, deck));
Forge.openScreen(new FDeckEditor(EditorType.Constructed, deck, true));
}
public void initialize(FPref savedStateSetting, DeckType defaultDeckType) {

View File

@@ -164,21 +164,54 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
private final FLabel btnSave = deckHeader.add(new FLabel.Builder().icon(FSkinImage.SAVE).align(HAlignment.CENTER).pressedColor(Header.BTN_PRESSED_COLOR).build());
private final FLabel btnMoreOptions = deckHeader.add(new FLabel.Builder().text("...").font(FSkinFont.get(20)).align(HAlignment.CENTER).pressedColor(Header.BTN_PRESSED_COLOR).build());
public FDeckEditor(EditorType editorType0, DeckProxy editDeck) {
this(editorType0, editDeck.getName(), editDeck.getPath(), null);
public FDeckEditor(EditorType editorType0, DeckProxy editDeck, boolean showMainDeck) {
this(editorType0, editDeck.getName(), editDeck.getPath(), null, showMainDeck);
}
public FDeckEditor(EditorType editorType0, String editDeckName) {
this(editorType0, editDeckName, "", null);
public FDeckEditor(EditorType editorType0, String editDeckName, boolean showMainDeck) {
this(editorType0, editDeckName, "", null, showMainDeck);
}
public FDeckEditor(EditorType editorType0, Deck newDeck) {
this(editorType0, "", "", newDeck);
public FDeckEditor(EditorType editorType0, Deck newDeck, boolean showMainDeck) {
this(editorType0, "", "", newDeck, showMainDeck);
}
private FDeckEditor(EditorType editorType0, String editDeckName, String editDeckPath, Deck newDeck) {
private FDeckEditor(EditorType editorType0, String editDeckName, String editDeckPath, Deck newDeck, boolean showMainDeck) {
super(getPages(editorType0));
editorType = editorType0;
editorType.getController().editor = this;
//cache specific pages
for (TabPage<FDeckEditor> tabPage : tabPages) {
if (tabPage instanceof CatalogPage) {
catalogPage = (CatalogPage) tabPage;
}
else if (tabPage instanceof DeckSectionPage) {
DeckSectionPage deckSectionPage = (DeckSectionPage) tabPage;
if (deckSectionPage.deckSection == DeckSection.Main) {
mainDeckPage = deckSectionPage;
}
else if (deckSectionPage.deckSection == DeckSection.Sideboard) {
sideboardPage = deckSectionPage;
}
}
}
switch (editorType) {
case Sealed:
//if opening brand new sealed deck, show sideboard (card pool) by default
if (!showMainDeck) {
setSelectedPage(sideboardPage);
}
break;
case Draft:
break;
default:
//if editing existing non-limited deck, show main deck by default
if (showMainDeck) {
setSelectedPage(mainDeckPage);
}
break;
}
if (StringUtils.isEmpty(editDeckName)) {
if (editorType == EditorType.Draft) {
//hide deck header on while drafting
@@ -270,39 +303,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
menu.show(btnMoreOptions, 0, btnMoreOptions.getHeight());
}
});
//cache specific pages
for (TabPage<FDeckEditor> tabPage : tabPages) {
if (tabPage instanceof CatalogPage) {
catalogPage = (CatalogPage) tabPage;
}
else if (tabPage instanceof DeckSectionPage) {
DeckSectionPage deckSectionPage = (DeckSectionPage) tabPage;
if (deckSectionPage.deckSection == DeckSection.Main) {
mainDeckPage = deckSectionPage;
}
else if (deckSectionPage.deckSection == DeckSection.Sideboard) {
sideboardPage = deckSectionPage;
}
}
}
switch (editorType) {
case Sealed:
//if opening brand new sealed deck, show sideboard (card pool) by default
if (deck.getMain().isEmpty()) {
setSelectedPage(sideboardPage);
}
break;
case Draft:
break;
default:
//if editing existing non-limited deck, show main deck by default
if (!deck.getMain().isEmpty()) {
setSelectedPage(mainDeckPage);
}
break;
}
}
@Override
@@ -477,7 +477,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
}
protected static class CatalogPage extends CardManagerPage {
private boolean initialized;
private boolean initialized, needRefreshWhenShown;
protected CatalogPage() {
this(ItemManagerConfig.CARD_CATALOG, "Catalog", FSkinImage.FOLDER);
@@ -499,7 +499,22 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
return "Catalog";
}
@Override
public void setVisible(boolean visible0) {
if (isVisible() == visible0) { return; }
super.setVisible(visible0);
if (visible0 && needRefreshWhenShown) {
needRefreshWhenShown = false;
refresh();
}
}
public void refresh() {
if (!isVisible()) {
needRefreshWhenShown = true;
return; //delay refreshing while hidden
}
cardManager.setPool(ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class));
}

View File

@@ -93,7 +93,7 @@ public class DraftScreen extends LaunchScreen {
if (deck == null) { return; }
DeckPreferences.setDraftDeck(deck.getName());
Forge.openScreen(new FDeckEditor(EditorType.Draft, deck));
Forge.openScreen(new FDeckEditor(EditorType.Draft, deck, true));
}
@Override

View File

@@ -16,7 +16,7 @@ public class DraftingProcessScreen extends FDeckEditor {
private final BoosterDraft draft;
public DraftingProcessScreen(BoosterDraft draft0) {
super(EditorType.Draft, "");
super(EditorType.Draft, "", false);
draft = draft0;
getCatalogPage().refresh(); //must refresh after draft set
}

View File

@@ -53,7 +53,7 @@ public class SealedScreen extends LaunchScreen {
@Override
public void run() {
DeckPreferences.setSealedDeck(sealed.getName());
Forge.openScreen(new FDeckEditor(EditorType.Sealed, sealed.getName()));
Forge.openScreen(new FDeckEditor(EditorType.Sealed, sealed.getName(), false));
}
});
}
@@ -80,7 +80,7 @@ public class SealedScreen extends LaunchScreen {
if (deck == null) { return; }
DeckPreferences.setSealedDeck(deck.getName());
Forge.openScreen(new FDeckEditor(EditorType.Sealed, deck));
Forge.openScreen(new FDeckEditor(EditorType.Sealed, deck, true));
}
@Override