/*
* #######################################################
*
* Copyright (c) 2013, A. Weinberger. All rights reserved.
* --------------------------------------------------------
*/
package ale.view.gui.editor;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.nio.file.Path;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import ale.controller.Main;
import ale.controller.Settings;
import ale.model.skin.Skin;
import ale.view.gui.GUIConstants;
import ale.view.gui.GUIConstants.RightMenu;
import ale.view.gui.editor.previewPanel.PreviewPanel;
import ale.view.gui.util.GUIStrings;
/**
* ------------------------------------------------- <br/>
* Package: ale.view.gui.editor <br/>
* Class : Editor <br/>
* --------------------------- <br/>
* <br/>
* The <code>Editor</code> is the dialog which shows option to manipulate a skin object. TODO: The preview is not finished. <br/>
* <br/>
* <br/>
* Last edited: 24.04.2013 <br/>
* ------------------------------------------------- <br/>
*/
public class Editor extends JFrame implements WindowListener {
private static final long serialVersionUID = 1L;
private String[] strArGenChangeOptions = new String[RightMenu.GEN_CHANGES_MENU.getMenuCount() + 1];
private String[] strArBtnChangeOptions = new String[RightMenu.BTN_CHANGES_MENU.getMenuCount() + 1];
private String[] strArUserlistOptions = new String[RightMenu.USERLIST_CHANGES_MENU.getMenuCount() + 1];
private String[] strArUsertileOptions = new String[RightMenu.USERTILE_CHANGES_MENU.getMenuCount() + 1];
private String[] strArFontOptions = new String[RightMenu.FONT_MENU.getMenuCount() + 1];
private PreviewPanel previewPanel;
private EditorLeftMenu leftMenu;
private EditorRightMenu rightMenu;
private EditorBottomMenu btmMenu;
private RightMenu shown;
private Skin skin;
/**
* @param skin skinobject
*/
public Editor(final Skin skin) {
if (skin == null) {
throw new IllegalArgumentException();
}
this.skin = skin;
setUpStringArrays();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Editor.this.setTitle(GUIConstants.PROGRAM_TITLE + " - " + skin.getName());
Editor.this.setIconImage(GUIConstants.PROGRAM_ICON);
Editor.this.setJMenuBar(new EditorMenuBar(skin));
Editor.this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Editor.this.addWindowListener(Editor.this);
Editor.this.setBackground(GUIConstants.DEFAULT_BACKGROUND);
Editor.this.setMinimumSize(GUIConstants.MIN_EDITOR_DIM);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int width = (int) ((screenSize.getWidth() * (100 - GUIConstants.EDITOR_SIDEGAP_PERCENT)) / 100f);
int height = (int) ((screenSize.getHeight() * (100 - GUIConstants.EDITOR_SIDEGAP_PERCENT)) / 100f);
Editor.this.setSize(width, height);
Editor.this.setLocationRelativeTo(null);
create();
setFocusToLeftMenu();
Editor.this.setVisible(true);
}
});
}
private void setUpStringArrays() {
this.strArGenChangeOptions[0] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_DEFAULTCBOPTION);
this.strArGenChangeOptions[1] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_1);
this.strArGenChangeOptions[2] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_2);
this.strArGenChangeOptions[3] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_3);
this.strArGenChangeOptions[4] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_4);
this.strArGenChangeOptions[5] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_5);
this.strArGenChangeOptions[6] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_6);
this.strArGenChangeOptions[7] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESOPT_7);
this.strArBtnChangeOptions[0] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_DEFAULTCBOPTION);
this.strArBtnChangeOptions[1] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_1);
this.strArBtnChangeOptions[2] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_2);
this.strArBtnChangeOptions[3] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_3);
this.strArBtnChangeOptions[4] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_4);
this.strArBtnChangeOptions[5] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_5);
this.strArBtnChangeOptions[6] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_6);
this.strArBtnChangeOptions[7] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_7);
this.strArBtnChangeOptions[8] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_8);
this.strArBtnChangeOptions[9] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESOPT_9);
this.strArUserlistOptions[0] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_DEFAULTCBOPTION);
this.strArUserlistOptions[1] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERLISTCHANGESOPT_1);
this.strArUserlistOptions[2] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERLISTCHANGESOPT_2);
this.strArUserlistOptions[3] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERLISTCHANGESOPT_3);
this.strArUsertileOptions[0] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_DEFAULTCBOPTION);
this.strArUsertileOptions[1] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERTILECHANGESOPT_1);
this.strArUsertileOptions[2] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERTILECHANGESOPT_2);
this.strArUsertileOptions[3] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERTILECHANGESOPT_3);
this.strArUsertileOptions[4] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERTILECHANGESOPT_4);
this.strArFontOptions[0] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_DEFAULTCBOPTION);
this.strArFontOptions[1] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_1);
this.strArFontOptions[2] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_2);
this.strArFontOptions[3] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_3);
this.strArFontOptions[4] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_4);
this.strArFontOptions[5] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_5);
this.strArFontOptions[6] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_6);
this.strArFontOptions[7] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_7);
this.strArFontOptions[8] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_8);
this.strArFontOptions[9] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_9);
this.strArFontOptions[10] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_10);
this.strArFontOptions[11] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_11);
this.strArFontOptions[12] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_12);
this.strArFontOptions[13] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_13);
this.strArFontOptions[14] = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESOPT_14);
}
private void create() {
Runnable _runOne = new Runnable() {
@Override
public void run() {
Editor.this.previewPanel = new PreviewPanel(Editor.this.skin.getProperties());
}
};
Runnable _runTwo = new Runnable() {
@Override
public void run() {
Editor.this.leftMenu = new EditorLeftMenu(Editor.this.skin, Editor.this, GUIConstants.DEFAULT_BACKGROUND);
}
};
Runnable _runThree = new Runnable() {
@Override
public void run() {
Editor.this.rightMenu = new EditorRightMenu(Editor.this, Editor.this.skin.getProperties(), GUIConstants.DEFAULT_BACKGROUND);
}
};
Runnable _runFour = new Runnable() {
@Override
public void run() {
Editor.this.btmMenu = new EditorBottomMenu(Editor.this, GUIConstants.DEFAULT_BACKGROUND);
}
};
Main.executeThreads(_runOne, _runTwo, _runThree, _runFour);
while ((this.previewPanel == null) || (this.leftMenu == null) || (this.rightMenu == null) || (this.btmMenu == null)) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
;
}
}
this.previewPanel.setBackground(GUIConstants.DEFAULT_BACKGROUND);
this.add(this.previewPanel, BorderLayout.CENTER);
this.add(this.leftMenu, BorderLayout.WEST);
this.add(this.rightMenu, BorderLayout.EAST);
this.add(this.btmMenu, BorderLayout.SOUTH);
this.previewPanel.scaleBackgroundImage(Settings.getEditorBgScaled());
this.previewPanel.startRepaintTimer();
}
/**
* Shows a messagebox and asks to restart. It would be complicated to update all menus.
*
*/
public void updateLocale() {
JOptionPane.showMessageDialog(this, GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_UDATELOCALE));
}
/**
* Sets the author name.
*
* @param author String
*/
public void setSkinAuthor(String author) {
this.skin.setAuthor(author);
}
/**
* Returns the author name.
*
* @return String
*/
public String getSkinAuthor() {
return this.skin.getAuthor();
}
/**
* Sets the website adress.
*
* @param website String
*/
public void setSkinWebsite(String website) {
this.skin.setWebsite(website);
}
/**
* Returns the webadress.
*
* @return String
*/
public String getSkinWebsite() {
return this.skin.getWebsite();
}
/**
* Sets the previewimage.
*
* @param image Path to the image.
*/
public void setPreviewimage(Path image) {
try {
this.skin.setImage(image);
this.skin.setSkinChanged(true);
} catch (IOException e) {
Main.showProblemMessage(e.getMessage());
}
}
/**
* Returns the path to the preview image.
*
* @return Path
*/
public Path getPreviewimage() {
return this.skin.getImage();
}
protected void setFocusToLeftMenu() {
this.leftMenu.setFocusToButton(0);
}
protected void setFocusToRightMenu() {
this.rightMenu.setFocusToCombobox();
}
protected void showUserlistPreview() {
this.previewPanel.showUserlist();
}
protected void showUsertilePreview() {
this.previewPanel.showUsertile();
}
protected void showSecurityMenuPreview() {
this.previewPanel.showSecurityMenu();
}
protected void setPreviewBackgroundScaling(boolean scale) {
this.previewPanel.scaleBackgroundImage(scale);
}
/*
*
*/
protected void showMenu(final RightMenu menu) {
if (this.rightMenu.isHidden()) {
this.rightMenu.clickHideButton();
}
if (this.shown != menu) {
this.rightMenu.clearContent();
String[] menustringArray = null;
String info;
switch (menu) {
case GEN_CHANGES_MENU:
menustringArray = this.strArGenChangeOptions;
info = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESINFO);
this.rightMenu.setInfotext(info);
break;
case BTN_CHANGES_MENU:
menustringArray = this.strArBtnChangeOptions;
info = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESINFO);
this.rightMenu.setInfotext(info);
break;
case USERLIST_CHANGES_MENU:
menustringArray = this.strArUserlistOptions;
info = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERLISTCHANGESINFO);
this.rightMenu.setInfotext(info);
break;
case USERTILE_CHANGES_MENU:
menustringArray = this.strArUsertileOptions;
info = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERTILECHANGESINFO);
this.rightMenu.setInfotext(info);
break;
case FONT_MENU:
menustringArray = this.strArFontOptions;
info = GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESINFO);
this.rightMenu.setInfotext(info);
break;
default:
throw new IllegalArgumentException();
}
this.rightMenu.updateMenu(menustringArray, menu);
this.shown = menu;
}
}
@Override
public void dispose() {
this.btmMenu = null;
this.leftMenu = null;
this.rightMenu.shutdown();
this.rightMenu = null;
this.skin.shutdown();
this.skin = null;
this.previewPanel.shutdown();
super.dispose();
}
@Override
public void windowActivated(WindowEvent e) {
;
}
@Override
public void windowClosed(WindowEvent e) {
;
}
@Override
public void windowClosing(WindowEvent e) {
Main.showQuitConfirmationDialog(this.skin, false, true);
}
@Override
public void windowDeactivated(WindowEvent e) {
;
}
@Override
public void windowDeiconified(WindowEvent e) {
;
}
@Override
public void windowIconified(WindowEvent e) {
;
}
@Override
public void windowOpened(WindowEvent e) {
;
}
}