diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index 2209200e18..cbddf9a970 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -291,6 +291,9 @@ public class ConnectDialog extends MageDialog { } } + // Avatar + int avatarId = PreferencesDialog.getSelectedAvatar(); + connection.setAvatarId(avatarId); logger.debug("connecting: " + connection.getProxyType() + " " + connection.getProxyHost() + " " + connection.getProxyPort()); task = new ConnectTask(); diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index dd01bb1314..64fef74a86 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -741,6 +741,434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index 3d3fb6cc56..db534b5e51 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -35,12 +35,22 @@ package mage.client.dialog; import mage.client.MageFrame; import mage.client.util.Config; +import mage.client.util.ImageHelper; +import mage.client.util.gui.BufferedImageBuilder; import mage.remote.Connection; +import org.apache.log4j.Logger; import javax.swing.*; +import javax.swing.border.Border; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.io.File; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; @@ -67,11 +77,36 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_PROXY_TYPE = "proxyType"; public static final String KEY_PROXY_PSWD = "proxyPassword"; + public static final String KEY_AVATAR = "selectedId"; + private static Map cache = new HashMap(); private static final Boolean UPDATE_CACHE_POLICY = Boolean.TRUE; public static final String OPEN_CONNECTION_TAB = "Open-Connection-Tab"; + private static final transient Logger log = Logger.getLogger(PreferencesDialog.class); + + public static final int DEFAULT_AVATAR_ID = 51; + private static int selectedId = DEFAULT_AVATAR_ID; + private static Set availableAvatars = new HashSet(); + private static Map panels = new HashMap(); + + private static final Border GREEN_BORDER = BorderFactory.createLineBorder(Color.GREEN, 3); + private static final Border BLACK_BORDER = BorderFactory.createLineBorder(Color.BLACK, 3); + + static { + availableAvatars.add(51); + availableAvatars.add(13); + availableAvatars.add(9); + availableAvatars.add(53); + availableAvatars.add(10); + availableAvatars.add(39); + availableAvatars.add(19); + availableAvatars.add(30); + availableAvatars.add(25); + + } + private final JFileChooser fc = new JFileChooser(); { @@ -84,6 +119,7 @@ public class PreferencesDialog extends javax.swing.JDialog { initComponents(); imageFolderPath.setEditable(false); cbProxyType.setModel(new DefaultComboBoxModel(Connection.ProxyType.values())); + addAvatars(); } /** This method is called from within the constructor to @@ -148,6 +184,23 @@ public class PreferencesDialog extends javax.swing.JDialog { txtPasswordField = new javax.swing.JPasswordField(); rememberPswd = new javax.swing.JCheckBox(); jLabel11 = new javax.swing.JLabel(); + jPanel8 = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + jPanel9 = new javax.swing.JPanel(); + jPanel10 = new javax.swing.JPanel(); + jPanel13 = new javax.swing.JPanel(); + jPanel11 = new javax.swing.JPanel(); + jLabel12 = new javax.swing.JLabel(); + jPanel12 = new javax.swing.JPanel(); + jPanel14 = new javax.swing.JPanel(); + jPanel15 = new javax.swing.JPanel(); + jLabel13 = new javax.swing.JLabel(); + jPanel16 = new javax.swing.JPanel(); + jPanel17 = new javax.swing.JPanel(); + jPanel18 = new javax.swing.JPanel(); + jPanel19 = new javax.swing.JPanel(); + jPanel20 = new javax.swing.JPanel(); + jPanel21 = new javax.swing.JPanel(); saveButton = new javax.swing.JButton(); exitButton = new javax.swing.JButton(); @@ -240,8 +293,6 @@ public class PreferencesDialog extends javax.swing.JDialog { .addContainerGap(84, Short.MAX_VALUE)) ); - jPanel7.getAccessibleContext().setAccessibleName("Battlefield"); - jTabbedPane1.addTab("Main", jPanel1); jLabel1.setText("Choose phases MAGE will stop on:"); @@ -271,47 +322,47 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() - .addGap(20, 20, 20) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel2Layout.createSequentialGroup() - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel2) - .addComponent(jLabel5) - .addComponent(jLabel6) - .addComponent(jLabel7) - .addComponent(jLabel8)) - .addGap(77, 77, 77) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel2Layout.createSequentialGroup() - .addGap(2, 2, 2) - .addComponent(jLabel9) - .addGap(32, 32, 32) - .addComponent(jLabel10)) - .addGroup(jPanel2Layout.createSequentialGroup() - .addGap(13, 13, 13) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(checkBoxDrawYou) - .addComponent(checkBoxUpkeepYou) - .addComponent(checkBoxMainYou) - .addComponent(checkBoxBeforeCYou) - .addComponent(checkBoxEndOfCYou) - .addComponent(checkBoxMain2You) - .addComponent(checkBoxEndTurnYou)) - .addGap(78, 78, 78) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(checkBoxUpkeepOthers) - .addComponent(checkBoxBeforeCOthers) - .addComponent(checkBoxMainOthers) - .addComponent(checkBoxEndOfCOthers) - .addComponent(checkBoxDrawOthers) - .addComponent(checkBoxMain2Others) - .addComponent(checkBoxEndTurnOthers))))) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addGap(20, 20, 20) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(jLabel5) + .addComponent(jLabel6) + .addComponent(jLabel7) + .addComponent(jLabel8)) + .addGap(77, 77, 77) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGap(2, 2, 2) + .addComponent(jLabel9) + .addGap(32, 32, 32) + .addComponent(jLabel10)) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGap(13, 13, 13) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(checkBoxDrawYou) + .addComponent(checkBoxUpkeepYou) + .addComponent(checkBoxMainYou) + .addComponent(checkBoxBeforeCYou) + .addComponent(checkBoxEndOfCYou) + .addComponent(checkBoxMain2You) + .addComponent(checkBoxEndTurnYou)) + .addGap(78, 78, 78) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(checkBoxUpkeepOthers) + .addComponent(checkBoxBeforeCOthers) + .addComponent(checkBoxMainOthers) + .addComponent(checkBoxEndOfCOthers) + .addComponent(checkBoxDrawOthers) + .addComponent(checkBoxMain2Others) + .addComponent(checkBoxEndTurnOthers))))) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addGroup(jPanel2Layout.createSequentialGroup() - .addContainerGap() - .addComponent(jLabel1))) + .addContainerGap() + .addComponent(jLabel1))) .addContainerGap(100, Short.MAX_VALUE)) ); jPanel2Layout.setVerticalGroup( @@ -320,19 +371,19 @@ public class PreferencesDialog extends javax.swing.JDialog { .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel2Layout.createSequentialGroup() - .addComponent(jLabel10) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(checkBoxUpkeepOthers)) + .addComponent(jLabel10) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(checkBoxUpkeepOthers)) .addGroup(jPanel2Layout.createSequentialGroup() - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(jPanel2Layout.createSequentialGroup() - .addComponent(jLabel1) - .addGap(20, 20, 20)) - .addComponent(jLabel9)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(checkBoxUpkeepYou) - .addComponent(jLabel2)))) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addComponent(jLabel1) + .addGap(20, 20, 20)) + .addComponent(jLabel9)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(checkBoxUpkeepYou) + .addComponent(jLabel2)))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel3) @@ -345,13 +396,13 @@ public class PreferencesDialog extends javax.swing.JDialog { .addComponent(checkBoxMainOthers)) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(checkBoxBeforeCYou, javax.swing.GroupLayout.Alignment.TRAILING))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(checkBoxBeforeCYou, javax.swing.GroupLayout.Alignment.TRAILING))) .addGroup(jPanel2Layout.createSequentialGroup() - .addGap(6, 6, 6) - .addComponent(checkBoxBeforeCOthers))) + .addGap(6, 6, 6) + .addComponent(checkBoxBeforeCOthers))) .addGap(7, 7, 7) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel6) @@ -397,16 +448,16 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() - .addContainerGap() - .addComponent(useDefaultImageFolder)) + .addContainerGap() + .addComponent(useDefaultImageFolder)) .addGroup(jPanel5Layout.createSequentialGroup() - .addGap(19, 19, 19) - .addComponent(imageFolderPath, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(browseButton)) + .addGap(19, 19, 19) + .addComponent(imageFolderPath, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(browseButton)) .addGroup(jPanel5Layout.createSequentialGroup() - .addContainerGap() - .addComponent(checkForNewImages))) + .addContainerGap() + .addComponent(checkForNewImages))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel5Layout.setVerticalGroup( @@ -503,8 +554,8 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(txtPasswordField, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(txtProxyUserName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(txtPasswordField, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(txtProxyUserName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(txtProxyServer, javax.swing.GroupLayout.DEFAULT_SIZE, 295, Short.MAX_VALUE)) .addContainerGap()) ); @@ -582,6 +633,253 @@ public class PreferencesDialog extends javax.swing.JDialog { jTabbedPane1.addTab("Connection", jPanel6); + jPanel10.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10); + jPanel10.setLayout(jPanel10Layout); + jPanel10Layout.setHorizontalGroup( + jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel10Layout.setVerticalGroup( + jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel13.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel13Layout = new javax.swing.GroupLayout(jPanel13); + jPanel13.setLayout(jPanel13Layout); + jPanel13Layout.setHorizontalGroup( + jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel13Layout.setVerticalGroup( + jPanel13Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel11.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel11Layout = new javax.swing.GroupLayout(jPanel11); + jPanel11.setLayout(jPanel11Layout); + jPanel11Layout.setHorizontalGroup( + jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel11Layout.setVerticalGroup( + jPanel11Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); + jLabel12.setText("Choose your avatar:"); + + jPanel12.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12); + jPanel12.setLayout(jPanel12Layout); + jPanel12Layout.setHorizontalGroup( + jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel12Layout.setVerticalGroup( + jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel14.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel14Layout = new javax.swing.GroupLayout(jPanel14); + jPanel14.setLayout(jPanel14Layout); + jPanel14Layout.setHorizontalGroup( + jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel14Layout.setVerticalGroup( + jPanel14Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel15.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel15Layout = new javax.swing.GroupLayout(jPanel15); + jPanel15.setLayout(jPanel15Layout); + jPanel15Layout.setHorizontalGroup( + jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel15Layout.setVerticalGroup( + jPanel15Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jLabel13.setFont(new java.awt.Font("Tahoma", 1, 11)); + jLabel13.setText("Locked avatars:"); + + jPanel16.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel16Layout = new javax.swing.GroupLayout(jPanel16); + jPanel16.setLayout(jPanel16Layout); + jPanel16Layout.setHorizontalGroup( + jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel16Layout.setVerticalGroup( + jPanel16Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel17.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel17Layout = new javax.swing.GroupLayout(jPanel17); + jPanel17.setLayout(jPanel17Layout); + jPanel17Layout.setHorizontalGroup( + jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel17Layout.setVerticalGroup( + jPanel17Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel18.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel18Layout = new javax.swing.GroupLayout(jPanel18); + jPanel18.setLayout(jPanel18Layout); + jPanel18Layout.setHorizontalGroup( + jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel18Layout.setVerticalGroup( + jPanel18Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel19.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel19Layout = new javax.swing.GroupLayout(jPanel19); + jPanel19.setLayout(jPanel19Layout); + jPanel19Layout.setHorizontalGroup( + jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel19Layout.setVerticalGroup( + jPanel19Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel20.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel20Layout = new javax.swing.GroupLayout(jPanel20); + jPanel20.setLayout(jPanel20Layout); + jPanel20Layout.setHorizontalGroup( + jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel20Layout.setVerticalGroup( + jPanel20Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + jPanel21.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); + + javax.swing.GroupLayout jPanel21Layout = new javax.swing.GroupLayout(jPanel21); + jPanel21.setLayout(jPanel21Layout); + jPanel21Layout.setHorizontalGroup( + jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + jPanel21Layout.setVerticalGroup( + jPanel21Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 100, Short.MAX_VALUE) + ); + + javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9); + jPanel9.setLayout(jPanel9Layout); + jPanel9Layout.setHorizontalGroup( + jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel12)) + .addGroup(jPanel9Layout.createSequentialGroup() + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addGap(30, 30, 30) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel19, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(33, 33, 33) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel20, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(jPanel9Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addGap(20, 20, 20) + .addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(33, 33, 33) + .addComponent(jPanel17, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jLabel13)))) + .addGap(32, 32, 32) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel18, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel21, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap(29, Short.MAX_VALUE)) + ); + jPanel9Layout.setVerticalGroup( + jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel12) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(26, 26, 26) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel15, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(23, 23, 23) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanel19, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel20, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel21, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel9Layout.createSequentialGroup() + .addComponent(jLabel13) + .addGap(18, 18, 18) + .addComponent(jPanel16, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jPanel17, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel18, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(25, 25, 25)) + ); + + jScrollPane1.setViewportView(jPanel9); + + javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); + jPanel8.setLayout(jPanel8Layout); + jPanel8Layout.setHorizontalGroup( + jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE) + ); + jPanel8Layout.setVerticalGroup( + jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 264, Short.MAX_VALUE) + ); + + jTabbedPane1.addTab("Avatars", jPanel8); + saveButton.setLabel("Save"); saveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -654,6 +952,11 @@ public class PreferencesDialog extends javax.swing.JDialog { prefs.put(KEY_PROXY_PSWD, new String(input)); } + if (availableAvatars.contains(selectedId)) { + prefs.put(KEY_AVATAR, String.valueOf(selectedId)); + updateCache(KEY_AVATAR, String.valueOf(selectedId)); + } + // images saveImagesPath(prefs); @@ -756,50 +1059,25 @@ public class PreferencesDialog extends javax.swing.JDialog { public void run() { if (!dialog.isVisible()) { Preferences prefs = MageFrame.getPreferences(); - load(prefs, dialog.checkBoxUpkeepYou, UPKEEP_YOU); - load(prefs, dialog.checkBoxDrawYou, DRAW_YOU); - load(prefs, dialog.checkBoxMainYou, MAIN_YOU); - load(prefs, dialog.checkBoxBeforeCYou, BEFORE_COMBAT_YOU); - load(prefs, dialog.checkBoxEndOfCYou, END_OF_COMBAT_YOU); - load(prefs, dialog.checkBoxMain2You, MAIN_2_YOU); - load(prefs, dialog.checkBoxEndTurnYou, END_OF_TURN_YOU); - load(prefs, dialog.checkBoxUpkeepOthers, UPKEEP_OTHERS); - load(prefs, dialog.checkBoxDrawOthers, DRAW_OTHERS); - load(prefs, dialog.checkBoxMainOthers, MAIN_OTHERS); - load(prefs, dialog.checkBoxBeforeCOthers, BEFORE_COMBAT_OTHERS); - load(prefs, dialog.checkBoxEndOfCOthers, END_OF_COMBAT_OTHERS); - load(prefs, dialog.checkBoxMain2Others, MAIN_2_OTHERS); - load(prefs, dialog.checkBoxEndTurnOthers, END_OF_TURN_OTHERS); - load(prefs, dialog.displayBigCardsInHand, KEY_HAND_USE_BIG_CARDS, "true"); - load(prefs, dialog.showToolTipsInHand, KEY_HAND_SHOW_TOOLTIPS, "true"); - load(prefs, dialog.nonLandPermanentsInOnePile, KEY_PERMANENTS_IN_ONE_PILE, "true"); + // Phases + loadPhases(prefs); - // connection - dialog.cbProxyType.setSelectedItem(Connection.ProxyType.valueOf(MageFrame.getPreferences().get(KEY_PROXY_TYPE, "NONE").toUpperCase())); - - load(prefs, dialog.txtProxyServer, KEY_PROXY_ADDRESS, Config.serverName); - load(prefs, dialog.txtProxyPort, KEY_PROXY_PORT, Integer.toString(Config.port)); - load(prefs, dialog.txtProxyUserName, KEY_PROXY_USERNAME, ""); - load(prefs, dialog.rememberPswd, KEY_PROXY_REMEMBER, "true", "false"); - if (dialog.rememberPswd.isSelected()) { - load(prefs, dialog.txtPasswordField, KEY_PROXY_PSWD, ""); - } + // Connection + loadProxySettings(prefs); - // images + // Selected avatar + loadSelectedAvatar(prefs); + + // Images loadImagesPath(prefs); + // open specified tab before displaying + openTab(openedTab); + dialog.setLocation(300, 200); dialog.reset(); - try { - if (openedTab > 0) { - dialog.jTabbedPane1.setSelectedIndex(3); - } - } catch (Exception e) { - e.printStackTrace(); - } - dialog.setVisible(true); } else { dialog.requestFocus(); @@ -808,6 +1086,67 @@ public class PreferencesDialog extends javax.swing.JDialog { }); } + private static void loadPhases(Preferences prefs) { + load(prefs, dialog.checkBoxUpkeepYou, UPKEEP_YOU); + load(prefs, dialog.checkBoxDrawYou, DRAW_YOU); + load(prefs, dialog.checkBoxMainYou, MAIN_YOU); + load(prefs, dialog.checkBoxBeforeCYou, BEFORE_COMBAT_YOU); + load(prefs, dialog.checkBoxEndOfCYou, END_OF_COMBAT_YOU); + load(prefs, dialog.checkBoxMain2You, MAIN_2_YOU); + load(prefs, dialog.checkBoxEndTurnYou, END_OF_TURN_YOU); + + load(prefs, dialog.checkBoxUpkeepOthers, UPKEEP_OTHERS); + load(prefs, dialog.checkBoxDrawOthers, DRAW_OTHERS); + load(prefs, dialog.checkBoxMainOthers, MAIN_OTHERS); + load(prefs, dialog.checkBoxBeforeCOthers, BEFORE_COMBAT_OTHERS); + load(prefs, dialog.checkBoxEndOfCOthers, END_OF_COMBAT_OTHERS); + load(prefs, dialog.checkBoxMain2Others, MAIN_2_OTHERS); + load(prefs, dialog.checkBoxEndTurnOthers, END_OF_TURN_OTHERS); + load(prefs, dialog.displayBigCardsInHand, KEY_HAND_USE_BIG_CARDS, "true"); + load(prefs, dialog.showToolTipsInHand, KEY_HAND_SHOW_TOOLTIPS, "true"); + load(prefs, dialog.nonLandPermanentsInOnePile, KEY_PERMANENTS_IN_ONE_PILE, "true"); + } + + private static void loadProxySettings(Preferences prefs) { + dialog.cbProxyType.setSelectedItem(Connection.ProxyType.valueOf(MageFrame.getPreferences().get(KEY_PROXY_TYPE, "NONE").toUpperCase())); + + load(prefs, dialog.txtProxyServer, KEY_PROXY_ADDRESS, Config.serverName); + load(prefs, dialog.txtProxyPort, KEY_PROXY_PORT, Integer.toString(Config.port)); + load(prefs, dialog.txtProxyUserName, KEY_PROXY_USERNAME, ""); + load(prefs, dialog.rememberPswd, KEY_PROXY_REMEMBER, "true", "false"); + if (dialog.rememberPswd.isSelected()) { + load(prefs, dialog.txtPasswordField, KEY_PROXY_PSWD, ""); + } + } + + private static void loadSelectedAvatar(Preferences prefs) { + getSelectedAvatar(); + dialog.setSelectedId(selectedId); + } + + public static int getSelectedAvatar() { + try { + selectedId = Integer.valueOf(MageFrame.getPreferences().get(KEY_AVATAR, String.valueOf(DEFAULT_AVATAR_ID))); + } catch (NumberFormatException n) { + selectedId = DEFAULT_AVATAR_ID; + } finally { + if (!availableAvatars.contains(selectedId)) { + selectedId = DEFAULT_AVATAR_ID; + } + } + return selectedId; + } + + private static void openTab(int index) { + try { + if (index > 0) { + dialog.jTabbedPane1.setSelectedIndex(3); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + private static void loadImagesPath(Preferences prefs) { String prop = prefs.get(KEY_CARD_IMAGES_USE_DEFAULT, "true"); if (prop.equals("true")) { @@ -904,6 +1243,70 @@ public class PreferencesDialog extends javax.swing.JDialog { cache.put(key, value); } + private void addAvatars() { + try { + addAvatar(jPanel10, 51, true, false); + addAvatar(jPanel13, 13, false, false); + addAvatar(jPanel11, 9, false, false); + addAvatar(jPanel12, 53, false, false); + addAvatar(jPanel14, 10, false, false); + addAvatar(jPanel15, 39, false, false); + addAvatar(jPanel19, 19, false, false); + addAvatar(jPanel20, 30, false, false); + addAvatar(jPanel21, 25, false, false); + + addAvatar(jPanel16, 22, false, true); + addAvatar(jPanel17, 77, false, true); + addAvatar(jPanel18, 62, false, true); + } catch (Exception e) { + log.error(e, e); + } + } + + public void setSelectedId(int id) { + if (availableAvatars.contains(id)) { + for (JPanel panel : panels.values()) { + panel.setBorder(BLACK_BORDER); + } + this.selectedId = id; + panels.get(this.selectedId).setBorder(GREEN_BORDER); + } + } + + private void addAvatar(JPanel jPanel, final int id, boolean selected, boolean locked) { + String path = "/avatars/" + String.valueOf(id) + ".jpg"; + panels.put(id, jPanel); + Image image = ImageHelper.getImageFromResources(path); + Rectangle r = new Rectangle(90, 90); + BufferedImage bufferedImage; + if (!locked) { + bufferedImage = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB); + } else { + bufferedImage = BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB, new Color(150, 150, 150, 170)); + } + BufferedImage resized = ImageHelper.getResizedImage(bufferedImage, r); + final JLabel jLabel = new JLabel(); + jLabel.setIcon(new ImageIcon(resized)); + if (selected) { + jPanel.setBorder(GREEN_BORDER); + } else { + jPanel.setBorder(BLACK_BORDER); + } + jPanel.setLayout(new BorderLayout()); + jPanel.add(jLabel); + if (!locked) { + jLabel.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + if (selectedId != id) { + setSelectedId(id); + MageFrame.getSession().updateAvatar(id); + } + } + }); + } + } + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton browseButton; private javax.swing.JComboBox cbProxyType; @@ -928,6 +1331,8 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; + private javax.swing.JLabel jLabel12; + private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; @@ -937,12 +1342,27 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel10; + private javax.swing.JPanel jPanel11; + private javax.swing.JPanel jPanel12; + private javax.swing.JPanel jPanel13; + private javax.swing.JPanel jPanel14; + private javax.swing.JPanel jPanel15; + private javax.swing.JPanel jPanel16; + private javax.swing.JPanel jPanel17; + private javax.swing.JPanel jPanel18; + private javax.swing.JPanel jPanel19; private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel20; + private javax.swing.JPanel jPanel21; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; + private javax.swing.JPanel jPanel8; + private javax.swing.JPanel jPanel9; + private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel lblProxyPassword; private javax.swing.JLabel lblProxyPort; diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index a040036883..03d28b4c20 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -43,12 +43,12 @@ import mage.client.components.MageRoundPane; import mage.client.dialog.ShowCardsDialog; import mage.client.plugins.adapters.MageActionCallback; import mage.client.plugins.impl.Plugins; -import mage.remote.Session; import mage.client.util.Command; import mage.client.util.Config; import mage.client.util.ImageHelper; import mage.client.util.gui.BufferedImageBuilder; import mage.components.ImagePanel; +import mage.remote.Session; import mage.sets.Sets; import mage.view.CardView; import mage.view.ManaPoolView; @@ -66,7 +66,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.Random; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,7 +87,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { private static final int AVATAR_COUNT = 77; - private static final Border greenBorder = new LineBorder(Color.green, 4); + private static final Border greenBorder = new LineBorder(Color.red, 3); private static final Border redBorder = new LineBorder(Color.red, 2); private static final Border emptyBorder = BorderFactory.createEmptyBorder(0,0,0,0); @@ -117,21 +116,20 @@ public class PlayerPanelExt extends javax.swing.JPanel { libraryLabel.setText(Integer.toString(player.getLibraryCount())); graveLabel.setText(Integer.toString(player.getGraveyard().size())); - if (avatarId == -1) { - avatarId = player.getUserData().getAvatarId(); - if (avatarId > 0) { - String path = "/avatars/" + String.valueOf(avatarId) + ".jpg"; - if (avatarId == 64) { - path = "/avatars/i64.jpg"; - } else if (avatarId >= 1000) { - avatarId = avatarId-1000; - path = "/avatars/special/" + String.valueOf(avatarId) + ".gif"; - } - Image image = ImageHelper.getImageFromResources(path); - Rectangle r = new Rectangle(80, 80); - BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); - this.avatar.update("player", resized, resized, resized, resized, r); + int id = player.getUserData().getAvatarId(); + if (id > 0 && id != avatarId) { + avatarId = id; + String path = "/avatars/" + String.valueOf(avatarId) + ".jpg"; + if (avatarId == 64) { + path = "/avatars/i64.jpg"; + } else if (avatarId >= 1000) { + avatarId = avatarId - 1000; + path = "/avatars/special/" + String.valueOf(avatarId) + ".gif"; } + Image image = ImageHelper.getImageFromResources(path); + Rectangle r = new Rectangle(80, 80); + BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); + this.avatar.update("player", resized, resized, resized, resized, r); } this.avatar.setText(player.getName()); @@ -194,7 +192,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { add(panelBackground); Rectangle r = new Rectangle(80, 80); - Image image = ImageHelper.getImageFromResources("/avatars/51.jpg"); + Image image = ImageHelper.getImageFromResources("/avatars/unknown.jpg"); topCardPanel = Plugins.getInstance().getMageCard(new CardView(Sets.findCard("Forest")), bigCard, topCardDimension, gameId, true); topCardPanel.setVisible(false); diff --git a/Mage.Client/src/main/java/mage/client/util/gui/BufferedImageBuilder.java b/Mage.Client/src/main/java/mage/client/util/gui/BufferedImageBuilder.java index 0f5ed239b8..1416cb3d14 100644 --- a/Mage.Client/src/main/java/mage/client/util/gui/BufferedImageBuilder.java +++ b/Mage.Client/src/main/java/mage/client/util/gui/BufferedImageBuilder.java @@ -1,7 +1,6 @@ package mage.client.util.gui; -import java.awt.Graphics2D; -import java.awt.Image; +import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; @@ -36,6 +35,18 @@ public class BufferedImageBuilder { return bufferedImage; } + public static BufferedImage bufferImage(Image image, int type, Color color) { + if (image == null) { + return null; + } + BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), type); + Graphics2D g = bufferedImage.createGraphics(); + g.drawImage(image, null, null); + g.setColor(color); + g.fillRect(0, 0, image.getWidth(null), image.getHeight(null)); + return bufferedImage; + } + private void waitForImage(BufferedImage bufferedImage) { final ImageLoadStatus imageLoadStatus = new ImageLoadStatus(); bufferedImage.getHeight(new ImageObserver() { diff --git a/Mage.Client/src/main/resources/avatars/unknown.jpg b/Mage.Client/src/main/resources/avatars/unknown.jpg new file mode 100644 index 0000000000..b2b004957e Binary files /dev/null and b/Mage.Client/src/main/resources/avatars/unknown.jpg differ diff --git a/Mage.Common/src/mage/remote/Connection.java b/Mage.Common/src/mage/remote/Connection.java index 2506cd3dca..8d5b63bbb4 100644 --- a/Mage.Common/src/mage/remote/Connection.java +++ b/Mage.Common/src/mage/remote/Connection.java @@ -47,6 +47,8 @@ public class Connection { private int proxyPort; private String proxyUsername; private String proxyPassword; + + private int avatarId; private static final String serialization = "?serializationtype=jboss"; private static final String transport = "bisocket"; @@ -195,4 +197,12 @@ public class Connection { return null; } + public int getAvatarId() { + return avatarId; + } + + public void setAvatarId(int avatarId) { + this.avatarId = avatarId; + } + } diff --git a/Mage.Common/src/mage/remote/Session.java b/Mage.Common/src/mage/remote/Session.java index 987fc3e46f..20b6ed3f9d 100644 --- a/Mage.Common/src/mage/remote/Session.java +++ b/Mage.Common/src/mage/remote/Session.java @@ -151,7 +151,7 @@ public class Session { this.sessionId = callbackClient.getSessionId(); boolean registerResult = false; if (connection.getPassword() == null) { - UserDataView userDataView = new UserDataView(0); + UserDataView userDataView = new UserDataView(connection.getAvatarId()); // for backward compatibility. don't remove twice call - first one does nothing but for version checking registerResult = server.registerClient(connection.getUsername(), sessionId, client.getVersion()); server.setUserData(connection.getUsername(), sessionId, userDataView); @@ -931,6 +931,21 @@ public class Session { return connection.getUsername(); } + public boolean updateAvatar(int avatarId) { + try { + if (isConnected()) { + UserDataView userDataView = new UserDataView(avatarId); + server.setUserData(connection.getUsername(), sessionId, userDataView); + } + return true; + } catch (MageException ex) { + handleMageException(ex); + } catch (Throwable t) { + handleThrowable(t); + } + return false; + } + } class MageAuthenticator extends Authenticator {