/* * ####################################################### * * Copyright (c) 2013, A. Weinberger. All rights reserved. * -------------------------------------------------------- */ package ale.view.gui.editor; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; 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.io.File; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import ale.Constants; import ale.controller.Main; import ale.model.skin.Skin; import ale.view.gui.GUIConstants; import ale.view.gui.GUIConstants.RightMenu; import ale.view.gui.dialogs.FileChooserDialog; import ale.view.gui.util.GUIStrings; import ale.view.gui.util.ImageFileFilter; import ale.view.gui.util.VerticalLayout; final class EditorLeftMenu extends JPanel { private static final long serialVersionUID = 1L; private String filechooserTitle; private JButton[] buttons = new JButton[RightMenu.values().length]; private Skin skin; private Editor editor; private JButton leftHideBtn; public EditorLeftMenu(Skin skin, Editor editor, Color background) { this.skin = skin; this.editor = editor; setBackground(background); setLayout(new BorderLayout()); setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.GRAY), BorderFactory.createEmptyBorder(5, 5, 5, 5))); create(background); } protected void setFocusToButton(int i) { if (i > this.buttons.length) { throw new IllegalArgumentException(); } this.buttons[i].grabFocus(); } private void create(Color background) { final JPanel top = new JPanel(); top.setLayout(new BorderLayout()); top.setBorder(BorderFactory.createEmptyBorder(5, 5, 15, 5)); top.setBackground(background); this.add(top, BorderLayout.NORTH); JLabel info = new JLabel(); info.setFont(GUIConstants.DEFAULT_HEADING_FONT); info.setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_LEFTINFO)); top.add(info); final JPanel buttonPanel = new JPanel(); buttonPanel.setBackground(background); buttonPanel.setLayout(new VerticalLayout(5, VerticalLayout.LEFT)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 10)); this.add(buttonPanel, BorderLayout.CENTER); addButtons(buttonPanel); JPanel baseSkinDataPanel = new JPanel(); baseSkinDataPanel.setBackground(background); baseSkinDataPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(50, 0, 0, 0), BorderFactory.createMatteBorder(1, 0, 0, 0, Color.LIGHT_GRAY))); baseSkinDataPanel.setLayout(new VerticalLayout(5, VerticalLayout.LEFT)); buttonPanel.add(baseSkinDataPanel); { JLabel lblAuthorLabel = new JLabel(GUIStrings.keyToLocatedString(GUIStrings.KEY_NEWSKINDIALOG_AUTHOR)); lblAuthorLabel.setFont(UIManager.getFont("MenuItem.font")); lblAuthorLabel.setBackground(background); lblAuthorLabel.setBorder(new EmptyBorder(15, 10, 0, 5)); baseSkinDataPanel.add(lblAuthorLabel); final JTextField textFieldAuthor = new JTextField(); textFieldAuthor.setColumns(25); textFieldAuthor.setText(this.editor.getSkinAuthor()); textFieldAuthor.setCaretPosition(0); textFieldAuthor.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { while (textFieldAuthor.getText().length() > 50) { textFieldAuthor.setText(textFieldAuthor.getText().substring(0, textFieldAuthor.getText().length() - 1)); } EditorLeftMenu.this.editor.setSkinAuthor(textFieldAuthor.getText()); } }); baseSkinDataPanel.add(textFieldAuthor); JLabel lblWebsiteLabel = new JLabel(GUIStrings.keyToLocatedString(GUIStrings.KEY_NEWSKINDIALOG_WEB)); lblWebsiteLabel.setFont(UIManager.getFont("MenuItem.font")); lblWebsiteLabel.setBackground(background); lblWebsiteLabel.setBorder(new EmptyBorder(8, 10, 0, 5)); baseSkinDataPanel.add(lblWebsiteLabel); final JTextField textFieldWebsite = new JTextField(); textFieldWebsite.setColumns(25); textFieldWebsite.setText(this.editor.getSkinWebsite()); textFieldWebsite.setToolTipText(this.editor.getSkinWebsite()); textFieldWebsite.setCaretPosition(0); textFieldWebsite.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { while (textFieldWebsite.getText().length() > 50) { textFieldWebsite.setText(textFieldWebsite.getText().substring(0, textFieldWebsite.getText().length() - 1)); } EditorLeftMenu.this.editor.setSkinWebsite(textFieldWebsite.getText()); textFieldWebsite.setToolTipText(textFieldWebsite.getText()); } }); baseSkinDataPanel.add(textFieldWebsite); JLabel lblImageLabel = new JLabel(GUIStrings.keyToLocatedString(GUIStrings.KEY_NEWSKINDIALOG_IMAGE)); lblImageLabel.setFont(UIManager.getFont("MenuItem.font")); lblImageLabel.setBackground(background); lblImageLabel.setBorder(new EmptyBorder(8, 10, 0, 5)); baseSkinDataPanel.add(lblImageLabel); final JTextField textFieldImage = new JTextField(); textFieldImage.setEditable(false); textFieldImage.setColumns(25); textFieldImage.setCursor(new Cursor(Cursor.HAND_CURSOR)); textFieldImage.setText(this.editor.getPreviewimage() != null ? this.editor.getPreviewimage().toString() : ""); textFieldImage.setToolTipText(textFieldImage.getText()); textFieldImage.setCaretPosition(0); textFieldImage.addMouseListener(new MouseAdapter() { @SuppressWarnings("unused") @Override public void mouseReleased(MouseEvent e) { new FileChooserDialog(EditorLeftMenu.this.filechooserTitle, new ImageFileFilter(Constants.DEFAULT_INPUTIMAGE_TYPE), false) { private static final long serialVersionUID = 1L; @Override public void onApprove(File file) { textFieldImage.setText(file.toString()); textFieldImage.setToolTipText(textFieldImage.getText()); EditorLeftMenu.this.editor.setPreviewimage(file.toPath()); } @Override public void onCancel() { ; } }; } }); baseSkinDataPanel.add(textFieldImage); } final JPanel btm = new JPanel(); btm.setLayout(new BorderLayout()); btm.setBackground(background); this.add(btm, BorderLayout.SOUTH); final JPanel applyBtnPanel = new JPanel(); applyBtnPanel.setBackground(background); applyBtnPanel.setLayout(new VerticalLayout(5, VerticalLayout.CENTER)); applyBtnPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 50, 0)); btm.add(applyBtnPanel, BorderLayout.NORTH); JButton applyBtn = new JButton(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_MENUBAR_APPLY)); applyBtn.setBackground(background); applyBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Main.save(EditorLeftMenu.this.skin); Main.showApplySkinDialog(EditorLeftMenu.this.skin.getFilename()); } }); applyBtnPanel.add(applyBtn); JButton backupBtn = new JButton(GUIStrings.keyToLocatedString(GUIStrings.KEY_MENUBAR_BACKUP)); backupBtn.setBackground(background); backupBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Main.applyBackup(); } }); applyBtnPanel.add(backupBtn); this.leftHideBtn = new JButton(); this.leftHideBtn.setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_SHOWHIDEMENU)); this.leftHideBtn.setOpaque(false); this.leftHideBtn.addActionListener(new ActionListener() { private boolean hidden; @Override public void actionPerformed(ActionEvent e) { if (!this.hidden) { this.hidden = true; top.setVisible(false); buttonPanel.setVisible(false); btm.remove(EditorLeftMenu.this.leftHideBtn); btm.add(EditorLeftMenu.this.leftHideBtn, BorderLayout.WEST); btm.setOpaque(false); applyBtnPanel.setVisible(false); EditorLeftMenu.this.leftHideBtn.grabFocus(); } else { this.hidden = false; top.setVisible(true); buttonPanel.setVisible(true); btm.remove(EditorLeftMenu.this.leftHideBtn); btm.add(EditorLeftMenu.this.leftHideBtn, BorderLayout.EAST); btm.setOpaque(true); applyBtnPanel.setVisible(true); EditorLeftMenu.this.leftHideBtn.grabFocus(); } } }); this.leftHideBtn.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.leftHideBtn.grabFocus(); break; case KeyEvent.VK_RIGHT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.buttons[0].grabFocus(); break; default: break; } } }); btm.add(this.leftHideBtn, BorderLayout.EAST); } private void addButtons(JPanel buttonPanel) { for (int i = 0; i < this.buttons.length; i++) { this.buttons[i] = new JButton(); this.buttons[i].setFont(GUIConstants.DEFAULT_BUTTON_FONT); this.buttons[i].setPreferredSize(GUIConstants.DEFAULT_BUTTON_DIM); this.buttons[i].setOpaque(false); } this.buttons[0].setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_GENCHANGESBTN)); this.buttons[0].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { EditorLeftMenu.this.editor.showMenu(RightMenu.GEN_CHANGES_MENU); EditorLeftMenu.this.editor.setFocusToRightMenu(); } }); buttonPanel.add(this.buttons[0]); this.buttons[1].setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_BTNCHANGESBTN)); this.buttons[1].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { EditorLeftMenu.this.editor.showMenu(RightMenu.BTN_CHANGES_MENU); EditorLeftMenu.this.editor.setFocusToRightMenu(); } }); buttonPanel.add(this.buttons[1]); this.buttons[2].setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERLISTCHANGESBTN)); this.buttons[2].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { EditorLeftMenu.this.editor.showMenu(RightMenu.USERLIST_CHANGES_MENU); EditorLeftMenu.this.editor.setFocusToRightMenu(); } }); buttonPanel.add(this.buttons[2]); this.buttons[3].setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_USERTILECHANGESBTN)); this.buttons[3].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { EditorLeftMenu.this.editor.showMenu(RightMenu.USERTILE_CHANGES_MENU); EditorLeftMenu.this.editor.setFocusToRightMenu(); } }); buttonPanel.add(this.buttons[3]); this.buttons[4].setText(GUIStrings.keyToLocatedString(GUIStrings.KEY_EDITOR_FONTCHANGESBTN)); this.buttons[4].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { EditorLeftMenu.this.editor.showMenu(RightMenu.FONT_MENU); EditorLeftMenu.this.editor.setFocusToRightMenu(); } }); buttonPanel.add(this.buttons[4]); { /* * Focus management */ this.buttons[0].addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: EditorLeftMenu.this.buttons[3].grabFocus(); break; case KeyEvent.VK_DOWN: EditorLeftMenu.this.buttons[1].grabFocus(); break; case KeyEvent.VK_LEFT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.leftHideBtn.grabFocus(); break; default: break; } } }); this.buttons[1].addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: EditorLeftMenu.this.buttons[0].grabFocus(); break; case KeyEvent.VK_DOWN: EditorLeftMenu.this.buttons[2].grabFocus(); break; case KeyEvent.VK_LEFT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.leftHideBtn.grabFocus(); break; default: break; } } }); this.buttons[2].addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: EditorLeftMenu.this.buttons[1].grabFocus(); break; case KeyEvent.VK_DOWN: EditorLeftMenu.this.buttons[3].grabFocus(); break; case KeyEvent.VK_LEFT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.leftHideBtn.grabFocus(); break; default: break; } } }); this.buttons[3].addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: EditorLeftMenu.this.buttons[2].grabFocus(); break; case KeyEvent.VK_DOWN: EditorLeftMenu.this.buttons[4].grabFocus(); break; case KeyEvent.VK_LEFT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.leftHideBtn.grabFocus(); break; default: break; } } }); this.buttons[4].addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: EditorLeftMenu.this.buttons[3].grabFocus(); break; case KeyEvent.VK_DOWN: EditorLeftMenu.this.buttons[0].grabFocus(); break; case KeyEvent.VK_LEFT: EditorLeftMenu.this.leftHideBtn.doClick(); EditorLeftMenu.this.leftHideBtn.grabFocus(); break; default: break; } } }); } } }