/*
* #######################################################
*
* Copyright (c) 2013, A. Weinberger. All rights reserved.
* --------------------------------------------------------
*/
package ale.view.gui.editor.menus;
import java.awt.Color;
import java.io.File;
import java.nio.file.Path;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import ale.controller.Main;
import ale.model.skin.SkinConstants.Imagetype;
import ale.model.skin.SkinConstants.Position;
import ale.model.skin.SkinPropertiesVO;
import ale.view.gui.editor.fields.BorderField;
import ale.view.gui.editor.fields.CheckField;
import ale.view.gui.editor.fields.ImageField;
import ale.view.gui.editor.fields.MarginField;
import ale.view.gui.editor.fields.Numberfield;
import ale.view.gui.editor.fields.PaddingField;
import ale.view.gui.editor.fields.PositionField;
import ale.view.gui.editor.fields.SizeField;
import ale.view.gui.util.VerticalLayout;
public final class UsertileChangesMenu extends ChangesMenus {
private boolean init_1;
private boolean init_2;
private JPanel usermenuImageMenu;
private JPanel usermenuImageframeMenu;
private JPanel usermenuLayoutMenu;
private JPanel usermenuPWFieldMenu;
private SkinPropertiesVO skin;
public UsertileChangesMenu(Color bg, SkinPropertiesVO skin) {
this.skin = skin;
initialize(bg);
}
private void initialize(final Color bg) {
Runnable _runOne = new Runnable() {
@Override
public void run() {
initUsermenuImageMenu(bg);
initUsermenuImageframeMenu(bg);
UsertileChangesMenu.this.init_1 = true;
}
};
Runnable _runTwo = new Runnable() {
@Override
public void run() {
initUsermenuLayoutMenu(bg);
initUsermenuPWFieldMenu(bg);
UsertileChangesMenu.this.init_2 = true;
}
};
Main.executeThreads(_runOne, _runTwo);
}
public boolean isInitialized() {
return this.init_1 & this.init_2;
}
public void shutdown() {
this.usermenuImageMenu = null;
this.usermenuImageframeMenu = null;
this.usermenuLayoutMenu = null;
this.usermenuPWFieldMenu = null;
}
public JPanel getUsertileImageMenu() {
if (!isInitialized()) {
IllegalStateException e = new IllegalStateException("Call init first!");
throw e;
}
return this.usermenuImageMenu;
}
public JPanel getUsertileImageframeMenu() {
if (!isInitialized()) {
IllegalStateException e = new IllegalStateException("Call init first!");
throw e;
}
return this.usermenuImageframeMenu;
}
public JPanel getUsertileLayoutMenu() {
if (!isInitialized()) {
IllegalStateException e = new IllegalStateException("Call init first!");
throw e;
}
return this.usermenuLayoutMenu;
}
public JPanel getUsertilePWFieldMenu() {
if (!isInitialized()) {
IllegalStateException e = new IllegalStateException("Call init first!");
throw e;
}
return this.usermenuPWFieldMenu;
}
/*
* ########################################################################## ##
*/
/*
*
*/
private void initUsermenuImageMenu(Color bg) {
this.usermenuImageMenu = new JPanel();
this.usermenuImageMenu.setBackground(bg);
this.usermenuImageMenu.setLayout(new VerticalLayout(5, VerticalLayout.LEFT));
// size
int[] size = new int[] { this.skin.getUsertileImageWidth(), this.skin.getUsertileImageHeight() };
this.usermenuImageMenu.add(new SizeField(size, 4, bg, strSizeFieldTitle, true) {
private final long serialVersionUID = 1L;
@Override
public void widthOnKeyReleased(String input) {
if (!UsertileChangesMenu.this.skin.setUsertileImageWidth(parseInt(input))) {
updateWidthfieldColor(Color.RED);
}
}
@Override
public void heightOnKeyReleased(String input) {
if (!UsertileChangesMenu.this.skin.setUsertileImageHeight(parseInt(input))) {
updateHeightfieldColor(Color.RED);
}
}
@Override
public void resetOnClick() {
UsertileChangesMenu.this.skin.setUsertileImageWidth(-1);
UsertileChangesMenu.this.skin.setUsertileImageHeight(-1);
update(UsertileChangesMenu.this.skin.getUsertileImageWidth(), UsertileChangesMenu.this.skin.getUsertileImageHeight());
}
});
// padding
final int[] padding = this.skin.getUsertileImagePadding();
this.usermenuImageMenu.add(new PaddingField(padding, bg, strPaddingFieldTitle) {
private final long serialVersionUID = 1L;
private int[] tmp = (padding == null) ? new int[] { 0, 0, 0, 0 } : padding;
@Override
public void topFieldOnKeyReleased(String input) {
controlAndSet(input, 1);
}
@Override
public void rightFieldOnKeyReleased(String input) {
controlAndSet(input, 2);
}
@Override
public void leftFieldOnKeyReleased(String input) {
controlAndSet(input, 0);
}
@Override
public void bottomFieldOnKeyReleased(String input) {
controlAndSet(input, 3);
}
private void controlAndSet(String s, int index) {
int i = FAILURE;
if (s != null) {
try {
i = Integer.parseInt(s);
} catch (NumberFormatException e) {
i = FAILURE;
}
}
if (i == FAILURE) {
UsertileChangesMenu.this.skin.setUsertileImagePadding(null);
} else {
this.tmp[index] = i;
UsertileChangesMenu.this.skin.setUsertileImagePadding(this.tmp);
}
}
@Override
public int[] reset() {
UsertileChangesMenu.this.skin.setUsertileImagePadding(null);
this.tmp = UsertileChangesMenu.this.skin.getUsertileImagePadding();
return this.tmp;
}
});
// position
Position pos = this.skin.getUsertileImagePosition();
boolean[] active = { false, false, false, true, true, true, false, false, false };
this.usermenuImageMenu.add(new PositionField(pos, active, bg, strPosFieldTitle) {
private final long serialVersionUID = 1L;
@Override
public void toprightOnPressed() {
}
@Override
public void topleftOnPressed() {
}
@Override
public void topOnPressed() {
}
@Override
public void centerrightOnPressed() {
UsertileChangesMenu.this.skin.setUsertileImagePosition(Position.RIGHT);
}
@Override
public void centerleftOnPressed() {
UsertileChangesMenu.this.skin.setUsertileImagePosition(Position.LEFT);
}
@Override
public void centerOnPressed() {
UsertileChangesMenu.this.skin.setUsertileImagePosition(Position.CENTER);
}
@Override
public void bottomrightOnPressed() {
}
@Override
public void bottomleftOnPressed() {
}
@Override
public void bottomOnPressed() {
}
});
}
private void initUsermenuImageframeMenu(Color bg) {
this.usermenuImageframeMenu = new JPanel();
this.usermenuImageframeMenu.setBackground(bg);
this.usermenuImageframeMenu.setLayout(new VerticalLayout(5, VerticalLayout.LEFT));
// imagePath
Path initialValue = this.skin.getImgPath_UsertileImage();
this.usermenuImageframeMenu.add(new ImageField(initialValue, bg, strImgFieldTitle + "(" + strUserimageOverlay + ")",
true) {
private final long serialVersionUID = 1L;
@Override
public void onFileChosen(File file) {
if (file != null) {
UsertileChangesMenu.this.skin.setImgPath_UsertileImage(file.toPath());
updatePathField(UsertileChangesMenu.this.skin.getImgPath_UsertileImage(), false);
} else {
UsertileChangesMenu.this.skin.setImgPath_UsertileImage(null);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_UsertileImage(), true);
}
}
});
// size
int[] size = new int[] { this.skin.getUsertileImageFrameWidth(), this.skin.getUsertileImageFrameHeight() };
this.usermenuImageframeMenu.add(new SizeField(size, 3, bg, strSizeFieldTitle, true) {
private final long serialVersionUID = 1L;
@Override
public void widthOnKeyReleased(String input) {
if (!UsertileChangesMenu.this.skin.setUsertileImageFrameWidth(parseInt(input))) {
updateWidthfieldColor(Color.RED);
}
}
@Override
public void heightOnKeyReleased(String input) {
if (!UsertileChangesMenu.this.skin.setUsertileImageFrameHeight(parseInt(input))) {
updateHeightfieldColor(Color.RED);
}
}
@Override
public void resetOnClick() {
UsertileChangesMenu.this.skin.setUsertileImageFrameWidth(-1);
UsertileChangesMenu.this.skin.setUsertileImageFrameHeight(-1);
update(UsertileChangesMenu.this.skin.getUsertileImageFrameWidth(),
UsertileChangesMenu.this.skin.getUsertileImageFrameHeight());
}
});
}
/*
*
*/
private void initUsermenuLayoutMenu(Color bg) {
this.usermenuLayoutMenu = new JPanel();
this.usermenuLayoutMenu.setBackground(bg);
this.usermenuLayoutMenu.setLayout(new VerticalLayout(5, VerticalLayout.LEFT));
// checkbox
boolean b = this.skin.getUsertileLayoutIsHorizontal();
this.usermenuLayoutMenu.add(new CheckField(b, bg, strUsertileHorizontalFieldTitle, strUsertileHorizontalLabel) {
private final long serialVersionUID = 1L;
@Override
public void btnPressed(boolean selected) {
UsertileChangesMenu.this.skin.setUsertileLayout(selected);
}
});
// checkbox
b = this.skin.getPWAreaPositionOnRightOfTexts();
this.usermenuLayoutMenu
.add(new CheckField(b, bg, strUsertilePWRightOfTextsFieldTitle, strUsertilePWRightOfTextLabel) {
private final long serialVersionUID = 1L;
@Override
public void btnPressed(boolean selected) {
UsertileChangesMenu.this.skin.setPWAreaPositionOnRightOfTexts(selected);
}
});
// checkbox
b = this.skin.getStatusOnRightSide();
this.usermenuLayoutMenu
.add(new CheckField(b, bg, strUsertileStatusOnRightFieldTitle, strUsertileStatusOnRightLabel) {
private final long serialVersionUID = 1L;
@Override
public void btnPressed(boolean selected) {
UsertileChangesMenu.this.skin.setStatusPositionOnRight(selected);
}
});
// position
Position pos = this.skin.getUsertilePosition();
boolean[] active = { true, true, true, true, true, true, true, true, true };
this.usermenuLayoutMenu.add(new PositionField(pos, active, bg, strPosFieldTitle) {
private final long serialVersionUID = 1L;
@Override
public void toprightOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.TOPRIGHT);
}
@Override
public void topleftOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.TOPLEFT);
}
@Override
public void topOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.TOP);
}
@Override
public void centerrightOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.RIGHT);
}
@Override
public void centerleftOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.LEFT);
}
@Override
public void centerOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.CENTER);
}
@Override
public void bottomrightOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.BOTTOMRIGHT);
}
@Override
public void bottomleftOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.BOTTOMLEFT);
}
@Override
public void bottomOnPressed() {
UsertileChangesMenu.this.skin.setUsertilePosition(Position.BOTTOM);
}
});
}
private void initUsermenuPWFieldMenu(Color bg) {
this.usermenuPWFieldMenu = new JPanel();
this.usermenuPWFieldMenu.setBackground(bg);
this.usermenuPWFieldMenu.setLayout(new VerticalLayout(5, VerticalLayout.LEFT));
// image
{
Path initialValue = this.skin.getImgPath_PWField(Imagetype.DEFAULT);
ImageField defaultImage = new ImageField(initialValue, bg, false) {
private final long serialVersionUID = 1L;
@Override
public void onFileChosen(File file) {
if (file != null) {
UsertileChangesMenu.this.skin.setImgPath_PWField(file.toPath(), Imagetype.DEFAULT);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_PWField(Imagetype.DEFAULT), false);
} else {
UsertileChangesMenu.this.skin.setImgPath_PWField(null, Imagetype.DEFAULT);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_PWField(Imagetype.DEFAULT), true);
}
}
};
initialValue = this.skin.getImgPath_PWField(Imagetype.MOUSEFOCUS);
ImageField focusImage = new ImageField(initialValue, bg, false) {
private final long serialVersionUID = 1L;
@Override
public void onFileChosen(File file) {
if (file != null) {
UsertileChangesMenu.this.skin.setImgPath_PWField(file.toPath(), Imagetype.MOUSEFOCUS);
UsertileChangesMenu.this.skin.setImgPath_PWField(file.toPath(), Imagetype.KEYFOCUS);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_PWField(Imagetype.MOUSEFOCUS), false);
} else {
UsertileChangesMenu.this.skin.setImgPath_PWField(null, Imagetype.MOUSEFOCUS);
UsertileChangesMenu.this.skin.setImgPath_PWField(null, Imagetype.KEYFOCUS);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_PWField(Imagetype.MOUSEFOCUS), true);
}
}
};
initialValue = this.skin.getImgPath_PWField(Imagetype.DISABLED);
ImageField pressedImage = new ImageField(initialValue, bg, false) {
private final long serialVersionUID = 1L;
@Override
public void onFileChosen(File file) {
if (file != null) {
UsertileChangesMenu.this.skin.setImgPath_PWField(file.toPath(), Imagetype.DISABLED);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_PWField(Imagetype.DISABLED), false);
} else {
UsertileChangesMenu.this.skin.setImgPath_PWField(null, Imagetype.DISABLED);
updatePathField(UsertileChangesMenu.this.skin.getImgPath_PWField(Imagetype.DISABLED), true);
}
}
};
JTabbedPane pane = createTabbedPane(bg, strImgFieldTitle, defaultImage, focusImage, pressedImage);
pane.setTitleAt(0, strImageDefault);
pane.setTitleAt(1, strImageFocus);
pane.setTitleAt(2, strImageSelected);
this.usermenuPWFieldMenu.add(pane);
}
// border
final int[] borderthickness = this.skin.getPWfieldBorderthickness();
this.usermenuPWFieldMenu.add(new BorderField(borderthickness, bg, strBorderFieldTitle) {
private final long serialVersionUID = 1L;
private int[] tmp = (borderthickness == null) ? new int[] { 0, 0, 0, 0 } : borderthickness;
@Override
public void topFieldOnKeyReleased(String input) {
controlAndSet(input, 1);
}
@Override
public void rightFieldOnKeyReleased(String input) {
controlAndSet(input, 2);
}
@Override
public void leftFieldOnKeyReleased(String input) {
controlAndSet(input, 0);
}
@Override
public void bottomFieldOnKeyReleased(String input) {
controlAndSet(input, 3);
}
private void controlAndSet(String s, int index) {
int i = FAILURE;
if (s != null) {
try {
i = Integer.parseInt(s);
} catch (NumberFormatException e) {
i = FAILURE;
}
}
if (i == FAILURE) {
UsertileChangesMenu.this.skin.setPWfieldBorderthickness(null);
} else {
this.tmp[index] = i;
UsertileChangesMenu.this.skin.setPWfieldBorderthickness(this.tmp);
}
}
@Override
public int[] reset() {
UsertileChangesMenu.this.skin.setPWfieldBorderthickness(null);
this.tmp = UsertileChangesMenu.this.skin.getPWfieldBorderthickness();
return this.tmp;
}
});
// size
int[] size = new int[] { this.skin.getPWfieldWidth(), this.skin.getPWfieldHeight() };
this.usermenuPWFieldMenu.add(new SizeField(size, 4, bg, strSizeFieldTitle, true) {
private final long serialVersionUID = 1L;
@Override
public void widthOnKeyReleased(String input) {
if (!UsertileChangesMenu.this.skin.setPWfieldWidth(parseInt(input))) {
updateWidthfieldColor(Color.RED);
}
}
@Override
public void heightOnKeyReleased(String input) {
if (!UsertileChangesMenu.this.skin.setPWfieldHeight(parseInt(input))) {
updateWidthfieldColor(Color.RED);
}
}
@Override
public void resetOnClick() {
UsertileChangesMenu.this.skin.setPWfieldWidth(-1);
UsertileChangesMenu.this.skin.setPWfieldHeight(-1);
update(UsertileChangesMenu.this.skin.getPWfieldWidth(), UsertileChangesMenu.this.skin.getPWfieldHeight());
}
});
// padding
final int[] margin = this.skin.getPWfieldMargin();
this.usermenuPWFieldMenu.add(new MarginField(margin, bg, strMarginFieldTitle) {
private final long serialVersionUID = 1L;
private int[] tmp = (margin == null) ? new int[] { 0, 0, 0, 0 } : margin;
@Override
public void topFieldOnKeyReleased(String input) {
controlAndSet(input, 1);
}
@Override
public void rightFieldOnKeyReleased(String input) {
controlAndSet(input, 2);
}
@Override
public void leftFieldOnKeyReleased(String input) {
controlAndSet(input, 0);
}
@Override
public void bottomFieldOnKeyReleased(String input) {
controlAndSet(input, 3);
}
private void controlAndSet(String s, int index) {
int i = FAILURE;
if (s != null) {
try {
i = Integer.parseInt(s);
} catch (NumberFormatException e) {
i = FAILURE;
}
}
if (i == FAILURE) {
UsertileChangesMenu.this.skin.setPWfieldMargin(null);
} else {
this.tmp[index] = i;
UsertileChangesMenu.this.skin.setPWfieldMargin(this.tmp);
}
}
@Override
public int[] reset() {
UsertileChangesMenu.this.skin.setPWfieldMargin(null);
this.tmp = UsertileChangesMenu.this.skin.getPWfieldMargin();
return this.tmp;
}
});
int tmp = this.skin.getPasswordfieldUpshift();
this.usermenuPWFieldMenu.add(new Numberfield(tmp, 3, bg, strPWAreaUpShift, strPWAreaShiftamount, false) {
private final long serialVersionUID = 1L;
@Override
public void onKeyReleased(String input) {
UsertileChangesMenu.this.skin.setPasswordfieldUpshift(parseInt(input));
}
@Override
public void resetOnClick() {
//
}
});
tmp = this.skin.getPasswordfieldDownshift();
this.usermenuPWFieldMenu.add(new Numberfield(tmp, 3, bg, strPWAreaDownShift, strPWAreaShiftamount, false) {
private final long serialVersionUID = 1L;
@Override
public void onKeyReleased(String input) {
UsertileChangesMenu.this.skin.setPasswordfieldDownshift(parseInt(input));
}
@Override
public void resetOnClick() {
//
}
});
tmp = this.skin.getPasswordfieldRightshift();
this.usermenuPWFieldMenu.add(new Numberfield(tmp, 3, bg, strPWAreaRightShift, strPWAreaShiftamount, false) {
private final long serialVersionUID = 1L;
@Override
public void onKeyReleased(String input) {
UsertileChangesMenu.this.skin.setPasswordfieldRightshift(parseInt(input));
}
@Override
public void resetOnClick() {
//
}
});
}
}