Support saving many item manager options between sessions

This commit is contained in:
drdev
2014-02-17 07:02:21 +00:00
parent 447f07ef7f
commit 77f7031f44
3 changed files with 149 additions and 29 deletions

View File

@@ -11,12 +11,14 @@ import forge.gui.toolbox.itemmanager.views.ColumnDef;
import forge.gui.toolbox.itemmanager.views.GroupDef; import forge.gui.toolbox.itemmanager.views.GroupDef;
import forge.gui.toolbox.itemmanager.views.ItemColumn; import forge.gui.toolbox.itemmanager.views.ItemColumn;
import forge.gui.toolbox.itemmanager.views.ItemColumnConfig; import forge.gui.toolbox.itemmanager.views.ItemColumnConfig;
import forge.gui.toolbox.itemmanager.views.ItemColumnConfig.SortState;
import forge.gui.toolbox.itemmanager.views.SColumnUtil; import forge.gui.toolbox.itemmanager.views.SColumnUtil;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@@ -82,6 +84,9 @@ public enum ItemManagerConfig {
private ItemManagerConfig(final Map<ColumnDef, ItemColumnConfig> cols0, boolean showUniqueCardsOption0, boolean uniqueCardsOnly0, GroupDef groupBy0, ColumnDef pileBy0, int imageColumnCount0, int viewIndex0) { private ItemManagerConfig(final Map<ColumnDef, ItemColumnConfig> cols0, boolean showUniqueCardsOption0, boolean uniqueCardsOnly0, GroupDef groupBy0, ColumnDef pileBy0, int imageColumnCount0, int viewIndex0) {
cols = cols0; cols = cols0;
for (ItemColumnConfig colConfig : cols.values()) {
colConfig.establishDefaults();
}
showUniqueCardsOption = showUniqueCardsOption0; showUniqueCardsOption = showUniqueCardsOption0;
uniqueCardsOnly = new Prop<Boolean>(uniqueCardsOnly0); uniqueCardsOnly = new Prop<Boolean>(uniqueCardsOnly0);
@@ -109,6 +114,23 @@ public enum ItemManagerConfig {
value = value0; value = value0;
save(); save();
} }
@SuppressWarnings("rawtypes")
private void writeValue(final XMLEventWriter writer, String localName) throws XMLStreamException {
if (value == null) {
if (defaultValue != null) {
writer.add(EVENT_FACTORY.createAttribute(localName, ""));
}
}
else if (!value.equals(defaultValue)) {
if (value instanceof Enum) { //use Enum.name to prevent issues with toString() overrides
writer.add(EVENT_FACTORY.createAttribute(localName, ((Enum)value).name()));
}
else {
writer.add(EVENT_FACTORY.createAttribute(localName, String.valueOf(value)));
}
}
}
} }
public Map<ColumnDef, ItemColumnConfig> getCols() { public Map<ColumnDef, ItemColumnConfig> getCols() {
@@ -172,66 +194,148 @@ public enum ItemManagerConfig {
public static void load(String filename0) { public static void load(String filename0) {
filename = filename0; filename = filename0;
/*try { try {
final XMLInputFactory in = XMLInputFactory.newInstance(); final XMLInputFactory in = XMLInputFactory.newInstance();
final XMLEventReader reader = in.createXMLEventReader(new FileInputStream(filename)); final XMLEventReader reader = in.createXMLEventReader(new FileInputStream(filename));
XMLEvent event; XMLEvent event;
StartElement element; StartElement element;
Iterator<?> attributes; Iterator<?> attributes;
Attribute attribute; Attribute attr;
ItemManagerConfig config; ItemManagerConfig config = null;
Map<String, String> attrMap = new HashMap<String, String>();
while (reader.hasNext()) { while (reader.hasNext()) {
event = reader.nextEvent(); event = reader.nextEvent();
if (event.isStartElement()) { if (event.isStartElement()) {
element = event.asStartElement(); element = event.asStartElement();
try { attrMap.clear();
config = Enum.valueOf(ItemManagerConfig.class, element.getName().getLocalPart());
attributes = element.getAttributes(); attributes = element.getAttributes();
while (attributes.hasNext()) { while (attributes.hasNext()) {
attribute = (Attribute) attributes.next(); attr = (Attribute) attributes.next();
switch (attribute.getName().toString()) { attrMap.put(attr.getName().toString(), attr.getValue());
case "name": }
switch (element.getName().getLocalPart()) {
case "config":
try {
config = Enum.valueOf(ItemManagerConfig.class, attrMap.get("name"));
if (attrMap.containsKey("uniqueCardsOnly")) {
config.uniqueCardsOnly.value = Boolean.parseBoolean(attrMap.get("uniqueCardsOnly"));
}
if (attrMap.containsKey("groupBy")) {
String value = attrMap.get("groupBy");
if (value.isEmpty()) {
config.groupBy.value = null;
}
else {
config.groupBy.value = Enum.valueOf(GroupDef.class, value);
}
}
if (attrMap.containsKey("pileBy")) {
String value = attrMap.get("pileBy");
if (value.isEmpty()) {
config.pileBy.value = null;
}
else {
config.pileBy.value = Enum.valueOf(ColumnDef.class, value);
}
}
if (attrMap.containsKey("imageColumnCount")) {
config.imageColumnCount.value = Integer.parseInt(attrMap.get("imageColumnCount"));
}
if (attrMap.containsKey("viewIndex")) {
config.viewIndex.value = Integer.parseInt(attrMap.get("viewIndex"));
}
}
catch (final Exception e) {
e.printStackTrace();
}
break; break;
case "stars": case "col":
if (config == null) { break; }
try {
ItemColumnConfig colConfig = config.cols.get(Enum.valueOf(ColumnDef.class, attrMap.get("name")));
if (attrMap.containsKey("width")) {
colConfig.setPreferredWidth(Integer.parseInt(attrMap.get("width")));
}
if (attrMap.containsKey("sortPriority")) {
colConfig.setSortPriority(Integer.parseInt(attrMap.get("sortPriority")));
}
if (attrMap.containsKey("sortState")) {
colConfig.setSortState(Enum.valueOf(SortState.class, attrMap.get("sortPriority")));
}
if (attrMap.containsKey("index")) {
colConfig.setIndex(Integer.parseInt(attrMap.get("index")));
}
if (attrMap.containsKey("visible")) {
colConfig.setVisible(Boolean.parseBoolean(attrMap.get("visible")));
}
}
catch (final Exception e) {
e.printStackTrace();
}
break; break;
} }
} }
} }
catch (Exception ex) {
config = null;
}
}
}
} }
catch (final FileNotFoundException e) { catch (final FileNotFoundException e) {
ignore; it's ok if this file doesn't exist //ignore; it's ok if this file doesn't exist
} }
catch (final Exception e) { catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
}*/ }
} }
public static void save() { public static void save() {
/*try { try {
final XMLOutputFactory out = XMLOutputFactory.newInstance(); final XMLOutputFactory out = XMLOutputFactory.newInstance();
final XMLEventWriter writer = out.createXMLEventWriter(new FileOutputStream(filename)); final XMLEventWriter writer = out.createXMLEventWriter(new FileOutputStream(filename));
writer.add(EVENT_FACTORY.createStartDocument()); writer.add(EVENT_FACTORY.createStartDocument());
writer.add(NEWLINE); writer.add(NEWLINE);
writer.add(EVENT_FACTORY.createStartElement("", "", "preferences")); writer.add(EVENT_FACTORY.createStartElement("", "", "preferences"));
writer.add(EVENT_FACTORY.createAttribute("type", "cards")); writer.add(EVENT_FACTORY.createAttribute("type", "item_view"));
writer.add(NEWLINE); writer.add(NEWLINE);
for (ItemManagerConfig config : ItemManagerConfig.values()) { for (ItemManagerConfig config : ItemManagerConfig.values()) {
writer.add(TAB); writer.add(TAB);
writer.add(EVENT_FACTORY.createStartElement("", "", config.name())); writer.add(EVENT_FACTORY.createStartElement("", "", "config"));
writer.add(EVENT_FACTORY.createAttribute("name", "TODO")); writer.add(EVENT_FACTORY.createAttribute("name", config.name()));
writer.add(EVENT_FACTORY.createEndElement("", "", "card")); config.uniqueCardsOnly.writeValue(writer, "uniqueCardsOnly");
config.groupBy.writeValue(writer, "groupBy");
config.pileBy.writeValue(writer, "pileBy");
config.imageColumnCount.writeValue(writer, "imageColumnCount");
config.viewIndex.writeValue(writer, "viewIndex");
writer.add(NEWLINE);
for (ItemColumnConfig colConfig : config.cols.values()) {
writer.add(TAB);
writer.add(TAB);
writer.add(EVENT_FACTORY.createStartElement("", "", "col"));
writer.add(EVENT_FACTORY.createAttribute("name", colConfig.getDef().name()));
if (colConfig.getPreferredWidth() != colConfig.getDefaults().getPreferredWidth()) {
writer.add(EVENT_FACTORY.createAttribute("width", String.valueOf(colConfig.getPreferredWidth())));
}
if (colConfig.getSortPriority() != colConfig.getDefaults().getSortPriority()) {
writer.add(EVENT_FACTORY.createAttribute("sortPriority", String.valueOf(colConfig.getSortPriority())));
}
if (colConfig.getSortState() != colConfig.getDefaults().getSortState()) {
writer.add(EVENT_FACTORY.createAttribute("sortState", String.valueOf(colConfig.getSortState())));
}
if (colConfig.getIndex() != colConfig.getDefaults().getIndex()) {
writer.add(EVENT_FACTORY.createAttribute("index", String.valueOf(colConfig.getIndex())));
}
if (colConfig.isVisible() != colConfig.getDefaults().isVisible()) {
writer.add(EVENT_FACTORY.createAttribute("visible", String.valueOf(colConfig.isVisible())));
}
writer.add(EVENT_FACTORY.createEndElement("", "", "col"));
writer.add(NEWLINE);
}
writer.add(TAB);
writer.add(EVENT_FACTORY.createEndElement("", "", "config"));
writer.add(NEWLINE); writer.add(NEWLINE);
} }
@@ -241,6 +345,6 @@ public enum ItemManagerConfig {
} }
catch (final Exception e) { catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
}*/ }
} }
} }

View File

@@ -19,13 +19,20 @@ public class ItemColumnConfig {
private int sortPriority = 0; private int sortPriority = 0;
private boolean visible = true; private boolean visible = true;
private int index = 0; private int index = 0;
private ItemColumnConfig defaults;
public ItemColumnConfig(ColumnDef def0) { public ItemColumnConfig(ColumnDef def0) {
super();
this.def = def0; this.def = def0;
this.preferredWidth = def0.preferredWidth; this.preferredWidth = def0.preferredWidth;
} }
private ItemColumnConfig(ItemColumnConfig from) {
this.def = from.def;
this.sortState = from.sortState;
this.preferredWidth = from.preferredWidth;
this.sortPriority = from.sortPriority;
this.visible = from.visible;
this.index = from.index;
}
public ColumnDef getDef() { public ColumnDef getDef() {
return this.def; return this.def;
@@ -102,4 +109,12 @@ public class ItemColumnConfig {
public String toString() { public String toString() {
return this.getLongName(); return this.getLongName();
} }
public void establishDefaults() {
this.defaults = new ItemColumnConfig(this);
}
public ItemColumnConfig getDefaults() {
return this.defaults;
}
} }

View File

@@ -185,6 +185,7 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
else { else {
colmodel.removeColumn(col); colmodel.removeColumn(col);
} }
ItemManagerConfig.save();
} }
}); });
getPnlOptions().add(chkBox); getPnlOptions().add(chkBox);