mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
- Fix : Selected human & AI avatars now remain in fixed position when scrolling list of available avatar images.
This commit is contained in:
@@ -1,212 +1,208 @@
|
|||||||
package forge.gui.home.settings;
|
package forge.gui.home.settings;
|
||||||
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.ScrollPaneConstants;
|
import javax.swing.ScrollPaneConstants;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.gui.WrapLayout;
|
import forge.gui.WrapLayout;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.framework.DragTab;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.home.EMenuGroup;
|
import forge.gui.home.EMenuGroup;
|
||||||
import forge.gui.home.IVSubmenu;
|
import forge.gui.home.IVSubmenu;
|
||||||
import forge.gui.home.VHomeUI;
|
import forge.gui.home.VHomeUI;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FLabel;
|
||||||
import forge.gui.toolbox.FScrollPane;
|
import forge.gui.toolbox.FScrollPane;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assembles Swing components of avatars submenu singleton.
|
* Assembles Swing components of avatars submenu singleton.
|
||||||
*/
|
*/
|
||||||
public enum VSubmenuAvatars implements IVSubmenu<CSubmenuAvatars> {
|
public enum VSubmenuAvatars implements IVSubmenu<CSubmenuAvatars> {
|
||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
// Fields used with interface IVDoc
|
// Fields used with interface IVDoc
|
||||||
private DragCell parentCell;
|
private DragCell parentCell;
|
||||||
private final DragTab tab = new DragTab("Avatars");
|
private final DragTab tab = new DragTab("Avatars");
|
||||||
|
|
||||||
private final JPanel pnlAvatars = new JPanel();
|
private final JPanel pnlAvatars = new JPanel();
|
||||||
private final FScrollPane scrContent = new FScrollPane(pnlAvatars,
|
|
||||||
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
|
private final FLabel lblAvatarHuman = new FLabel.Builder().hoverable(true).selectable(true)
|
||||||
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
.iconScaleFactor(0.99f).iconInBackground(true).build();
|
||||||
|
private final FLabel lblAvatarAI = new FLabel.Builder().hoverable(true).selectable(true)
|
||||||
private final FLabel lblAvatarHuman = new FLabel.Builder().hoverable(true).selectable(true)
|
.iconScaleFactor(0.99f).iconInBackground(true).build();
|
||||||
.iconScaleFactor(0.99f).iconInBackground(true).build();
|
|
||||||
private final FLabel lblAvatarAI = new FLabel.Builder().hoverable(true).selectable(true)
|
private VSubmenuAvatars() {
|
||||||
.iconScaleFactor(0.99f).iconInBackground(true).build();
|
populateAvatars();
|
||||||
|
}
|
||||||
private VSubmenuAvatars() {
|
|
||||||
populateAvatars();
|
public void focusHuman() {
|
||||||
scrContent.setBorder(null);
|
lblAvatarHuman.requestFocusInWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void focusHuman() {
|
@Override
|
||||||
lblAvatarHuman.requestFocusInWindow();
|
public void populate() {
|
||||||
}
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
||||||
|
|
||||||
@Override
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0"));
|
||||||
public void populate() {
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlAvatars, "w 98%!, h 98%!, gap 1% 0 1% 0");
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
|
||||||
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0"));
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrContent, "w 98%!, h 98%!, gap 1% 0 1% 0");
|
}
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
@Override
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
public EMenuGroup getGroupEnum() {
|
||||||
}
|
return EMenuGroup.SETTINGS;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public EMenuGroup getGroupEnum() {
|
@Override
|
||||||
return EMenuGroup.SETTINGS;
|
public String getMenuTitle() {
|
||||||
}
|
return "Avatars";
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public String getMenuTitle() {
|
@Override
|
||||||
return "Avatars";
|
public EDocID getItemEnum() {
|
||||||
}
|
return EDocID.HOME_AVATARS;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public EDocID getItemEnum() {
|
@SuppressWarnings("serial")
|
||||||
return EDocID.HOME_AVATARS;
|
private void populateAvatars() {
|
||||||
}
|
final Map<Integer, Image> avatarMap = FSkin.getAvatars();
|
||||||
|
final JPanel pnlAvatarPics = new JPanel(new WrapLayout());
|
||||||
@SuppressWarnings("serial")
|
final JPanel pnlAvatarUsers = new JPanel(new MigLayout("insets 0, gap 0, align center"));
|
||||||
private void populateAvatars() {
|
|
||||||
final Map<Integer, Image> avatarMap = FSkin.getAvatars();
|
pnlAvatars.setOpaque(false);
|
||||||
final JPanel pnlAvatarPics = new JPanel(new WrapLayout());
|
pnlAvatarUsers.setOpaque(false);
|
||||||
final JPanel pnlAvatarUsers = new JPanel(new MigLayout("insets 0, gap 0, align center"));
|
pnlAvatarPics.setOpaque(false);
|
||||||
|
|
||||||
pnlAvatars.setOpaque(false);
|
pnlAvatarUsers.add(new FLabel.Builder().fontSize(12).text("Human").build(),
|
||||||
pnlAvatarUsers.setOpaque(false);
|
"w 100px!, h 20px!, gap 0 20px 0 0");
|
||||||
pnlAvatarPics.setOpaque(false);
|
pnlAvatarUsers.add(new FLabel.Builder().fontSize(12).text("AI").build(),
|
||||||
|
"w 100px!, h 20px!, wrap");
|
||||||
pnlAvatarUsers.add(new FLabel.Builder().fontSize(12).text("Human").build(),
|
|
||||||
"w 100px!, h 20px!, gap 0 20px 0 0");
|
pnlAvatarUsers.add(lblAvatarHuman, "w 100px!, h 100px!, gap 0 20px 0 0");
|
||||||
pnlAvatarUsers.add(new FLabel.Builder().fontSize(12).text("AI").build(),
|
pnlAvatarUsers.add(lblAvatarAI, "w 100px!, h 100px!");
|
||||||
"w 100px!, h 20px!, wrap");
|
|
||||||
|
for (final Integer i : avatarMap.keySet()) {
|
||||||
pnlAvatarUsers.add(lblAvatarHuman, "w 100px!, h 100px!, gap 0 20px 0 0");
|
pnlAvatarPics.add(makeAvatarLabel(avatarMap.get(i), i));
|
||||||
pnlAvatarUsers.add(lblAvatarAI, "w 100px!, h 100px!");
|
}
|
||||||
|
|
||||||
for (final Integer i : avatarMap.keySet()) {
|
pnlAvatars.removeAll();
|
||||||
pnlAvatarPics.add(makeAvatarLabel(avatarMap.get(i), i));
|
pnlAvatars.setLayout(new MigLayout("insets 0, gap 0"));
|
||||||
}
|
pnlAvatars.add(pnlAvatarUsers, "w 90%!, h 150px!, wrap");
|
||||||
|
FScrollPane scroller = new FScrollPane(pnlAvatarPics);
|
||||||
pnlAvatars.removeAll();
|
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
||||||
pnlAvatars.setLayout(new MigLayout("insets 0, gap 0"));
|
pnlAvatars.add(scroller, "w 90%!, pushy, growy, gap 5% 0 0 0");
|
||||||
pnlAvatars.add(pnlAvatarUsers, "w 90%!, h 150px!, wrap");
|
|
||||||
pnlAvatars.add(new FScrollPane(pnlAvatarPics,
|
final Command cmdHuman = new Command() { @Override
|
||||||
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER),
|
public void run() { lblAvatarAI.setSelected(false); lblAvatarHuman.requestFocusInWindow(); } };
|
||||||
"w 90%!, pushy, growy, gap 5% 0 0 0");
|
|
||||||
|
final Command cmdAI = new Command() { @Override
|
||||||
final Command cmdHuman = new Command() { @Override
|
public void run() { lblAvatarHuman.setSelected(false); lblAvatarAI.requestFocusInWindow(); } };
|
||||||
public void run() { lblAvatarAI.setSelected(false); lblAvatarHuman.requestFocusInWindow(); } };
|
|
||||||
|
lblAvatarHuman.setCommand(cmdHuman);
|
||||||
final Command cmdAI = new Command() { @Override
|
lblAvatarAI.setCommand(cmdAI);
|
||||||
public void run() { lblAvatarHuman.setSelected(false); lblAvatarAI.requestFocusInWindow(); } };
|
|
||||||
|
lblAvatarHuman.setSelected(true);
|
||||||
lblAvatarHuman.setCommand(cmdHuman);
|
|
||||||
lblAvatarAI.setCommand(cmdAI);
|
final String[] indexes = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
||||||
|
int humanIndex = Integer.parseInt(indexes[0]);
|
||||||
lblAvatarHuman.setSelected(true);
|
int aiIndex = Integer.parseInt(indexes[1]);
|
||||||
|
|
||||||
final String[] indexes = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
if (humanIndex >= FSkin.getAvatars().size()) { humanIndex = 0; }
|
||||||
int humanIndex = Integer.parseInt(indexes[0]);
|
if (aiIndex >= FSkin.getAvatars().size()) { aiIndex = 0; }
|
||||||
int aiIndex = Integer.parseInt(indexes[1]);
|
|
||||||
|
lblAvatarAI.setIcon(new ImageIcon(FSkin.getAvatars().get(aiIndex)));
|
||||||
if (humanIndex >= FSkin.getAvatars().size()) { humanIndex = 0; }
|
lblAvatarHuman.setIcon(new ImageIcon(FSkin.getAvatars().get(humanIndex)));
|
||||||
if (aiIndex >= FSkin.getAvatars().size()) { aiIndex = 0; }
|
|
||||||
|
Singletons.getModel().getPreferences().setPref(FPref.UI_AVATARS, humanIndex + "," + aiIndex);
|
||||||
lblAvatarAI.setIcon(new ImageIcon(FSkin.getAvatars().get(aiIndex)));
|
Singletons.getModel().getPreferences().save();
|
||||||
lblAvatarHuman.setIcon(new ImageIcon(FSkin.getAvatars().get(humanIndex)));
|
}
|
||||||
|
|
||||||
Singletons.getModel().getPreferences().setPref(FPref.UI_AVATARS, humanIndex + "," + aiIndex);
|
@SuppressWarnings("serial")
|
||||||
Singletons.getModel().getPreferences().save();
|
private FLabel makeAvatarLabel(final Image img0, final int index0) {
|
||||||
}
|
final FLabel lbl = new FLabel.Builder().icon(new ImageIcon(img0)).iconScaleFactor(1.0)
|
||||||
|
.iconInBackground(true).hoverable(true).build();
|
||||||
@SuppressWarnings("serial")
|
|
||||||
private FLabel makeAvatarLabel(final Image img0, final int index0) {
|
final Dimension size = new Dimension(100, 100);
|
||||||
final FLabel lbl = new FLabel.Builder().icon(new ImageIcon(img0)).iconScaleFactor(1.0)
|
lbl.setPreferredSize(size);
|
||||||
.iconInBackground(true).hoverable(true).build();
|
lbl.setMaximumSize(size);
|
||||||
|
lbl.setMinimumSize(size);
|
||||||
final Dimension size = new Dimension(100, 100);
|
|
||||||
lbl.setPreferredSize(size);
|
final Command cmd = new Command() {
|
||||||
lbl.setMaximumSize(size);
|
@Override
|
||||||
lbl.setMinimumSize(size);
|
public void run() {
|
||||||
|
String[] indices = Singletons.getModel().getPreferences()
|
||||||
final Command cmd = new Command() {
|
.getPref(FPref.UI_AVATARS).split(",");
|
||||||
@Override
|
|
||||||
public void run() {
|
if (lblAvatarAI.getSelected()) {
|
||||||
String[] indices = Singletons.getModel().getPreferences()
|
lblAvatarAI.setIcon(new ImageIcon(FSkin.getAvatars().get(index0)));
|
||||||
.getPref(FPref.UI_AVATARS).split(",");
|
lblAvatarAI.repaintSelf();
|
||||||
|
indices[1] = String.valueOf(index0);
|
||||||
if (lblAvatarAI.getSelected()) {
|
}
|
||||||
lblAvatarAI.setIcon(new ImageIcon(FSkin.getAvatars().get(index0)));
|
else {
|
||||||
lblAvatarAI.repaintSelf();
|
lblAvatarHuman.setIcon(new ImageIcon(FSkin.getAvatars().get(index0)));
|
||||||
indices[1] = String.valueOf(index0);
|
lblAvatarHuman.repaintSelf();
|
||||||
}
|
indices[0] = String.valueOf(index0);
|
||||||
else {
|
}
|
||||||
lblAvatarHuman.setIcon(new ImageIcon(FSkin.getAvatars().get(index0)));
|
|
||||||
lblAvatarHuman.repaintSelf();
|
Singletons.getModel().getPreferences().setPref(FPref.UI_AVATARS, indices[0] + "," + indices[1]);
|
||||||
indices[0] = String.valueOf(index0);
|
Singletons.getModel().getPreferences().save();
|
||||||
}
|
}
|
||||||
|
};
|
||||||
Singletons.getModel().getPreferences().setPref(FPref.UI_AVATARS, indices[0] + "," + indices[1]);
|
|
||||||
Singletons.getModel().getPreferences().save();
|
lbl.setCommand(cmd);
|
||||||
}
|
return lbl;
|
||||||
};
|
}
|
||||||
|
|
||||||
lbl.setCommand(cmd);
|
//========== Overridden from IVDoc
|
||||||
return lbl;
|
|
||||||
}
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||||
//========== Overridden from IVDoc
|
*/
|
||||||
|
@Override
|
||||||
/* (non-Javadoc)
|
public EDocID getDocumentID() {
|
||||||
* @see forge.gui.framework.IVDoc#getDocumentID()
|
return EDocID.HOME_AVATARS;
|
||||||
*/
|
}
|
||||||
@Override
|
|
||||||
public EDocID getDocumentID() {
|
/* (non-Javadoc)
|
||||||
return EDocID.HOME_AVATARS;
|
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||||
}
|
*/
|
||||||
|
@Override
|
||||||
/* (non-Javadoc)
|
public DragTab getTabLabel() {
|
||||||
* @see forge.gui.framework.IVDoc#getTabLabel()
|
return tab;
|
||||||
*/
|
}
|
||||||
@Override
|
|
||||||
public DragTab getTabLabel() {
|
/* (non-Javadoc)
|
||||||
return tab;
|
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
||||||
}
|
*/
|
||||||
|
@Override
|
||||||
/* (non-Javadoc)
|
public CSubmenuAvatars getLayoutControl() {
|
||||||
* @see forge.gui.framework.IVDoc#getLayoutControl()
|
return CSubmenuAvatars.SINGLETON_INSTANCE;
|
||||||
*/
|
}
|
||||||
@Override
|
|
||||||
public CSubmenuAvatars getLayoutControl() {
|
/* (non-Javadoc)
|
||||||
return CSubmenuAvatars.SINGLETON_INSTANCE;
|
* @see forge.gui.framework.IVDoc#setParentCell(forge.gui.framework.DragCell)
|
||||||
}
|
*/
|
||||||
|
@Override
|
||||||
/* (non-Javadoc)
|
public void setParentCell(DragCell cell0) {
|
||||||
* @see forge.gui.framework.IVDoc#setParentCell(forge.gui.framework.DragCell)
|
this.parentCell = cell0;
|
||||||
*/
|
}
|
||||||
@Override
|
|
||||||
public void setParentCell(DragCell cell0) {
|
/* (non-Javadoc)
|
||||||
this.parentCell = cell0;
|
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||||
}
|
*/
|
||||||
|
@Override
|
||||||
/* (non-Javadoc)
|
public DragCell getParentCell() {
|
||||||
* @see forge.gui.framework.IVDoc#getParentCell()
|
return parentCell;
|
||||||
*/
|
}
|
||||||
@Override
|
}
|
||||||
public DragCell getParentCell() {
|
|
||||||
return parentCell;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user