Fixed compatibility with Java 7.

Problem was due to inability to deserialize display_new_layout.xml. I changed that file's default serializer to XStream. This fix maintains compatibility with existing display_new_layout.xml when possible, and uses an XStream-generated display_layout.xml when it cannot parse the former.

Note this updates the default display_layout.xml, which looks OK under Windows XP with resolution 1024x768.

Bug: 144
This commit is contained in:
Braids
2011-08-22 01:54:21 +00:00
parent 36e71434c2
commit 1df5c1aa55
2 changed files with 538 additions and 578 deletions

View File

@@ -1,519 +1,288 @@
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_26" class="java.beans.XMLDecoder">
<object id="MultiSplitLayout$Split0" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>0</int>
<int>1024</int>
<int>687</int>
</object>
</void>
<void id="ArrayList0" property="children">
<void method="add">
<object id="MultiSplitLayout$Split1" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>0</int>
<int>197</int>
<int>687</int>
</object>
</void>
<void id="ArrayList1" property="children">
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>0</int>
<int>197</int>
<int>130</int>
</object>
</void>
<void property="name">
<string>info</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>130</int>
<int>197</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>135</int>
<int>197</int>
<int>146</int>
</object>
</void>
<void property="name">
<string>compy</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>281</int>
<int>197</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>286</int>
<int>197</int>
<int>104</int>
</object>
</void>
<void property="name">
<string>stack</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>390</int>
<int>197</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>395</int>
<int>197</int>
<int>136</int>
</object>
</void>
<void property="name">
<string>combat</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>531</int>
<int>197</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>536</int>
<int>197</int>
<int>151</int>
</object>
</void>
<void property="name">
<string>human</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split1"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
</void>
<void property="children">
<object idref="ArrayList1"/>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split0"/>
</void>
<void property="rowLayout">
<boolean>false</boolean>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>197</int>
<int>0</int>
<int>5</int>
<int>687</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split0"/>
</void>
</object>
</void>
<void method="add">
<object id="MultiSplitLayout$Split2" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>0</int>
<int>566</int>
<int>687</int>
</object>
</void>
<void id="ArrayList2" property="children">
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>0</int>
<int>566</int>
<int>1</int>
</object>
</void>
<void property="name">
<string>compyLand</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>1</int>
<int>566</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>6</int>
<int>566</int>
<int>282</int>
</object>
</void>
<void property="name">
<string>compyPlay</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>288</int>
<int>566</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>293</int>
<int>566</int>
<int>277</int>
</object>
</void>
<void property="name">
<string>humanPlay</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>570</int>
<int>566</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>575</int>
<int>566</int>
<int>1</int>
</object>
</void>
<void property="name">
<string>humanLand</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>576</int>
<int>566</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>202</int>
<int>581</int>
<int>566</int>
<int>106</int>
</object>
</void>
<void property="name">
<string>humanHand</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split2"/>
</void>
<void property="weight">
<double>0.2</double>
</void>
</object>
</void>
</void>
<void property="children">
<object idref="ArrayList2"/>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split0"/>
</void>
<void property="rowLayout">
<boolean>false</boolean>
</void>
<void property="weight">
<double>1.0</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>768</int>
<int>0</int>
<int>5</int>
<int>687</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split0"/>
</void>
</object>
</void>
<void method="add">
<object id="MultiSplitLayout$Split3" class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>773</int>
<int>0</int>
<int>251</int>
<int>687</int>
</object>
</void>
<void id="ArrayList3" property="children">
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>773</int>
<int>0</int>
<int>251</int>
<int>339</int>
</object>
</void>
<void property="name">
<string>detail</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split3"/>
</void>
<void property="weight">
<double>0.5</double>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Divider">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>773</int>
<int>339</int>
<int>251</int>
<int>5</int>
</object>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split3"/>
</void>
</object>
</void>
<void method="add">
<object class="org.jdesktop.swingx.MultiSplitLayout$Leaf">
<void property="bounds">
<object class="java.awt.Rectangle">
<int>773</int>
<int>344</int>
<int>251</int>
<int>343</int>
</object>
</void>
<void property="name">
<string>picture</string>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split3"/>
</void>
<void property="weight">
<double>0.5</double>
</void>
</object>
</void>
</void>
<void property="children">
<object idref="ArrayList3"/>
</void>
<void property="parent">
<object idref="MultiSplitLayout$Split0"/>
</void>
<void property="rowLayout">
<boolean>false</boolean>
</void>
</object>
</void>
</void>
<void property="children">
<object idref="ArrayList0"/>
</void>
<void property="parent">
<object class="org.jdesktop.swingx.MultiSplitLayout$Split">
<void id="ArrayList4" property="children">
<void method="add">
<object idref="MultiSplitLayout$Split0"/>
</void>
</void>
<void property="children">
<object idref="ArrayList4"/>
</void>
</object>
</void>
</object>
</java>
<org.jdesktop.swingx.MultiSplitLayout_-Split>
<parent>
<bounds>
<x>0</x>
<y>0</y>
<width>0</width>
<height>0</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
<children>
<org.jdesktop.swingx.MultiSplitLayout_-Split reference="../../.."/>
</children>
<rowLayout>true</rowLayout>
</parent>
<bounds>
<x>0</x>
<y>0</y>
<width>1024</width>
<height>687</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
<children>
<org.jdesktop.swingx.MultiSplitLayout_-Split>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>0</y>
<width>197</width>
<height>687</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
<children>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>0</y>
<width>197</width>
<height>126</height>
</bounds>
<weight>0.2</weight>
<isVisible>true</isVisible>
<name>info</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>126</y>
<width>197</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>131</y>
<width>197</width>
<height>142</height>
</bounds>
<weight>0.2</weight>
<isVisible>true</isVisible>
<name>compy</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>273</y>
<width>197</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>278</y>
<width>197</width>
<height>115</height>
</bounds>
<weight>0.2</weight>
<isVisible>true</isVisible>
<name>stack</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>393</y>
<width>197</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>398</y>
<width>197</width>
<height>137</height>
</bounds>
<weight>0.2</weight>
<isVisible>true</isVisible>
<name>combat</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>535</y>
<width>197</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>0</x>
<y>540</y>
<width>197</width>
<height>147</height>
</bounds>
<weight>0.2</weight>
<isVisible>true</isVisible>
<name>human</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
</children>
<rowLayout>false</rowLayout>
</org.jdesktop.swingx.MultiSplitLayout_-Split>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>197</x>
<y>0</y>
<width>5</width>
<height>687</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Split>
<parent reference="../../.."/>
<bounds>
<x>202</x>
<y>0</y>
<width>678</width>
<height>687</height>
</bounds>
<weight>1.0</weight>
<isVisible>true</isVisible>
<children>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>202</x>
<y>0</y>
<width>678</width>
<height>281</height>
</bounds>
<weight>0.4</weight>
<isVisible>true</isVisible>
<name>compyPlay</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>202</x>
<y>281</y>
<width>678</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>202</x>
<y>286</y>
<width>678</width>
<height>313</height>
</bounds>
<weight>0.4</weight>
<isVisible>true</isVisible>
<name>humanPlay</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>202</x>
<y>599</y>
<width>678</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>202</x>
<y>604</y>
<width>678</width>
<height>83</height>
</bounds>
<weight>0.2</weight>
<isVisible>true</isVisible>
<name>humanHand</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
</children>
<rowLayout>false</rowLayout>
</org.jdesktop.swingx.MultiSplitLayout_-Split>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>880</x>
<y>0</y>
<width>5</width>
<height>687</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Split>
<parent reference="../../.."/>
<bounds>
<x>885</x>
<y>0</y>
<width>139</width>
<height>687</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
<children>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>885</x>
<y>0</y>
<width>139</width>
<height>496</height>
</bounds>
<weight>0.5</weight>
<isVisible>true</isVisible>
<name>detail</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<org.jdesktop.swingx.MultiSplitLayout_-Divider>
<parent reference="../../.."/>
<bounds>
<x>885</x>
<y>496</y>
<width>139</width>
<height>5</height>
</bounds>
<weight>0.0</weight>
<isVisible>true</isVisible>
</org.jdesktop.swingx.MultiSplitLayout_-Divider>
<org.jdesktop.swingx.MultiSplitLayout_-Leaf>
<parent reference="../../.."/>
<bounds>
<x>885</x>
<y>501</y>
<width>139</width>
<height>186</height>
</bounds>
<weight>0.5</weight>
<isVisible>true</isVisible>
<name>picture</name>
</org.jdesktop.swingx.MultiSplitLayout_-Leaf>
</children>
<rowLayout>false</rowLayout>
</org.jdesktop.swingx.MultiSplitLayout_-Split>
</children>
<rowLayout>true</rowLayout>
</org.jdesktop.swingx.MultiSplitLayout_-Split>

View File

@@ -1,10 +1,78 @@
package forge;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import net.slightlymagic.braids.util.ImmutableIterableFrom;
import org.jdesktop.swingx.JXMultiSplitPane;
import org.jdesktop.swingx.MultiSplitLayout.Node;
import arcane.ui.HandArea;
import arcane.ui.PlayArea;
import arcane.ui.ViewPanel;
import arcane.ui.util.Animation;
import com.google.code.jyield.Generator;
import com.google.code.jyield.YieldUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.XStreamException;
import forge.card.cardFactory.CardFactoryUtil;
import forge.error.ErrorViewer;
import forge.game.GameLossReason;
@@ -20,28 +88,6 @@ import forge.properties.ForgePreferences;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.view.swing.OldGuiNewGame;
import net.slightlymagic.braids.util.ImmutableIterableFrom;
import org.jdesktop.swingx.JXMultiSplitPane;
import org.jdesktop.swingx.MultiSplitLayout.Node;
import com.google.code.jyield.Generator;
import com.google.code.jyield.YieldUtils;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.*;
import java.util.*;
import java.util.List;
import static org.jdesktop.swingx.MultiSplitLayout.parseModel;
/**
@@ -752,28 +798,52 @@ public class GuiDisplay4 extends JFrame implements CardContainer, Display, NewCo
private void initComponents() {
//Preparing the Frame
setTitle(ForgeProps.getLocalized(LANG.PROGRAM_NAME));
if (!OldGuiNewGame.useLAFFonts.isSelected()) setFont(new Font("Times New Roman", 0, 16));
if (!OldGuiNewGame.useLAFFonts.isSelected()) {
setFont(new Font("Times New Roman", 0, 16));
}
getContentPane().setLayout(new BorderLayout());
// I tried using the JavaBeanConverter with this, but I got a
// StackOverflowError due to an infinite loop. The default
// XStream format seems just fine, anyway.
final XStream xstream = new XStream();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent evt) {
public void windowClosing(final WindowEvent evt) {
concede();
}
@Override
public void windowClosed(WindowEvent e) {
public void windowClosed(final WindowEvent evt) {
// Write the layout to the new file, usually
// res/gui/display_new_layout.xml
File f = ForgeProps.getFile(LAYOUT_NEW);
Node layout = pane.getMultiSplitLayout().getModel();
BufferedOutputStream out = null;
try {
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(f)));
encoder.writeObject(layout);
encoder.close();
} catch (IOException ex) {
ex.printStackTrace();
out = new BufferedOutputStream(new FileOutputStream(f));
xstream.toXML(layout, out);
}
catch (IOException ex) {
assert System.err != null;
System.err.println("Ignoring exception:");
ex.printStackTrace(); // NOPMD by Braids on 8/21/11 9:20 PM
System.err.println("-------------------");
}
finally {
if (out != null) {
try {
out.close();
} catch (Throwable ignored) { // NOPMD by Braids on 8/21/11 9:20 PM
// Ignore failure to close.
}
}
}
}
});
@@ -783,43 +853,95 @@ public class GuiDisplay4 extends JFrame implements CardContainer, Display, NewCo
// Try to load the latest saved layout, usually
// res/gui/display_new_layout.xml
File f = ForgeProps.getFile(LAYOUT_NEW);
final File file = ForgeProps.getFile(LAYOUT_NEW);
// If the new file does not exist, read the configuration from the
// default layout, usually res/gui/display_layout.xml
if (!f.exists()) {
f = ForgeProps.getFile(LAYOUT);
}
try {
XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream(f)));
model = (Node) decoder.readObject();
decoder.close();
pane.getMultiSplitLayout().setModel(model);
//pane.getMultiSplitLayout().setFloatingDividers(false);
} catch (Exception ex) {
model = parseModel(""//
+ "(ROW "//
+ "(COLUMN"//
+ " (LEAF weight=0.2 name=info)"//
+ " (LEAF weight=0.2 name=compy)"//
+ " (LEAF weight=0.2 name=stack)"//
+ " (LEAF weight=0.2 name=combat)"//
+ " (LEAF weight=0.2 name=human)) "//
+ "(COLUMN weight=1"//
+ " (LEAF weight=0.4 name=compyPlay)"//
+ " (LEAF weight=0.4 name=humanPlay)"//
+ " (LEAF weight=0.2 name=humanHand)) "//
+ "(COLUMN"//
+ " (LEAF weight=0.5 name=detail)"//
+ " (LEAF weight=0.5 name=picture)))");
pane.setModel(model);
model = loadModel(xstream, file);
}
catch (XStreamException xse) {
assert System.err != null;
System.err.println("Error loading '" + file.getAbsolutePath() + "' using XStream: "
+ xse.getLocalizedMessage());
model = null;
}
catch (FileNotFoundException e1) {
model = null;
}
if (model == null) {
assert System.err != null;
System.err.println("Unable to parse file '" + file.getAbsolutePath()
+ "' with XStream; trying XMLDecoder.");
try {
model = loadModelUsingXMLDecoder(file);
}
catch (FileNotFoundException e1) {
model = null;
}
catch (Throwable exn) { // NOPMD by Braids on 8/21/11 9:20 PM
System.err.println("Ignoring exception:");
exn.printStackTrace(); // NOPMD by Braids on 8/21/11 9:20 PM
System.err.println("-------------------");
model = null;
}
}
if (model == null) {
System.err.println("XMLDecoder failed; using default layout.");
final File defaultFile = ForgeProps.getFile(LAYOUT);
try {
model = loadModel(xstream, defaultFile);
}
catch (Exception exn) {
// Should never happen.
throw new RuntimeException(exn); // NOPMD by Braids on 8/21/11 9:18 PM
/*
* This code is useful for bootstrapping a display_new_layout.xml file.
*
System.err.println("Unable to parse file '" + defaultFile.getAbsolutePath()
+ "' with XStream; using hard coded defaults.");
model = parseModel(""//
+ "(ROW "//
+ "(COLUMN"//
+ " (LEAF weight=0.2 name=info)"//
+ " (LEAF weight=0.2 name=compy)"//
+ " (LEAF weight=0.2 name=stack)"//
+ " (LEAF weight=0.2 name=combat)"//
+ " (LEAF weight=0.2 name=human)) "//
+ "(COLUMN weight=1"//
+ " (LEAF weight=0.4 name=compyPlay)"//
+ " (LEAF weight=0.4 name=humanPlay)"//
+ " (LEAF weight=0.2 name=humanHand)) "//
+ "(COLUMN"//
+ " (LEAF weight=0.5 name=detail)"//
+ " (LEAF weight=0.5 name=picture)))");
pane.setModel(model);
*
*/
}
}
if (model != null) {
pane.getMultiSplitLayout().setModel(model);
}
pane.getMultiSplitLayout().setFloatingDividers(false);
getContentPane().add(pane);
//adding the individual parts
if (!OldGuiNewGame.useLAFFonts.isSelected()) initFonts(pane);
if (!OldGuiNewGame.useLAFFonts.isSelected()) {
initFonts(pane);
}
initMsgYesNo(pane);
initOpp(pane);
@@ -829,6 +951,75 @@ public class GuiDisplay4 extends JFrame implements CardContainer, Display, NewCo
initCardPicture(pane);
}
/**
* Load the panel size preferences from a the given file using XStream.
*
* <p>
* throws XStreamException if there was a parsing error
* </p>
*
* @param xstream the XStream parser to use; do not use JavaBeanConverter!
* @param file the XML file containing the preferences
* @return the preferences model as a Node instance
* @throws FileNotFoundException if file does not exist
*/
public static Node loadModel(final XStream xstream, final File file) throws FileNotFoundException
{
BufferedInputStream bufferedIn = null;
Node model = null;
try {
bufferedIn = new BufferedInputStream(new FileInputStream(file));
model = (Node) xstream.fromXML(bufferedIn);
}
finally {
try {
if (bufferedIn != null) {
bufferedIn.close();
}
} catch (Throwable ignored) { // NOPMD by Braids on 8/21/11 9:20 PM
// Ignore exceptions on close.
}
}
return model;
}
/**
* Load the panel size preferences from a the given file using the old
* XMLDecoder format. XStream is preferred.
*
* @param file the XML file containing the preferences
* @return the preferences model as a Node instance
* @throws FileNotFoundException if file does not exist
*/
public static Node loadModelUsingXMLDecoder(final File file) throws FileNotFoundException {
BufferedInputStream bufferedIn = null;
Node model = null;
XMLDecoder decoder = null;
try {
bufferedIn = new BufferedInputStream(new FileInputStream(file));
decoder = new XMLDecoder(bufferedIn);
model = (Node) decoder.readObject();
}
finally {
try {
if (decoder != null) {
decoder.close();
}
} catch (Throwable ignored) { // NOPMD by Braids on 8/21/11 9:20 PM
// Ignore exceptions on close.
}
try {
if (bufferedIn != null) {
bufferedIn.close();
}
} catch (Throwable ignored) { // NOPMD by Braids on 8/21/11 9:20 PM
// Ignore exceptions on close.
}
}
return model;
}
/**
* <p>initFonts.</p>
*