123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- /*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package com.l2jserver.tools.gsregistering;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.sql.SQLException;
- import java.util.ResourceBundle;
- import javax.swing.BoxLayout;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLayeredPane;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JOptionPane;
- import javax.swing.JProgressBar;
- import javax.swing.JScrollPane;
- import javax.swing.JTable;
- import javax.swing.SwingUtilities;
- import javax.swing.table.DefaultTableModel;
- import javax.swing.table.TableCellRenderer;
- import javax.swing.table.TableColumn;
- import javax.swing.table.TableColumnModel;
- import com.l2jserver.loginserver.GameServerTable;
- import com.l2jserver.tools.images.ImagesTable;
- /**
- * @author KenM
- */
- public class GUserInterface extends BaseGameServerRegister implements ActionListener
- {
- private final JFrame _frame;
- private JTableModel _dtm;
- private JProgressBar _progressBar;
-
- public JTable _gsTable;
-
- public GUserInterface(ResourceBundle bundle)
- {
- super(bundle);
-
- _frame = new JFrame();
- getFrame().setTitle(getBundle().getString("toolName"));
- getFrame().setSize(600, 400);
- getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- getFrame().setLayout(new GridBagLayout());
- GridBagConstraints cons = new GridBagConstraints();
-
- JFrame.setDefaultLookAndFeelDecorated(true);
- getFrame().setIconImage(ImagesTable.getImage("l2j.png").getImage());
-
- JMenuBar menubar = new JMenuBar();
- getFrame().setJMenuBar(menubar);
-
- JMenu fileMenu = new JMenu(getBundle().getString("fileMenu"));
-
- JMenuItem exitItem = new JMenuItem(getBundle().getString("exitItem"));
- exitItem.addActionListener(this);
- exitItem.setActionCommand("exit");
-
- fileMenu.add(exitItem);
-
- JMenu helpMenu = new JMenu(getBundle().getString("helpMenu"));
-
- JMenuItem aboutItem = new JMenuItem(getBundle().getString("aboutItem"));
- aboutItem.addActionListener(this);
- aboutItem.setActionCommand("about");
-
- helpMenu.add(aboutItem);
-
- menubar.add(fileMenu);
- menubar.add(helpMenu);
-
- JButton btnRegister = new JButton(getBundle().getString("btnRegister"), ImagesTable.getImage("add.png"));
- btnRegister.addActionListener(this);
- btnRegister.setActionCommand("register");
- getFrame().add(btnRegister, cons);
-
- cons.gridx = 1;
- cons.anchor = GridBagConstraints.LINE_END;
- JButton btnRemoveAll = new JButton(getBundle().getString("btnRemoveAll"), ImagesTable.getImage("cross.png"));
- btnRemoveAll.addActionListener(this);
- btnRemoveAll.setActionCommand("removeAll");
- getFrame().add(btnRemoveAll, cons);
-
- String name = getBundle().getString("gsName");
- String action = getBundle().getString("gsAction");
-
- _dtm = new JTableModel(new Object[] { "ID", name, action });
- _gsTable = new JTable(_dtm);
- _gsTable.addMouseListener(new JTableButtonMouseListener(_gsTable));
-
- _gsTable.getColumnModel().getColumn(0).setMaxWidth(30);
-
- TableColumn actionCollumn = _gsTable.getColumnModel().getColumn(2);
- actionCollumn.setCellRenderer(new ButtonCellRenderer());
-
- cons.fill = GridBagConstraints.BOTH;
- cons.gridx = 0;
- cons.gridy = 1;
- cons.weighty = 1.0;
- cons.weightx = 1.0;
- cons.gridwidth = 2;
- JLayeredPane layer = new JLayeredPane();
- layer.setLayout(new BoxLayout(layer, BoxLayout.PAGE_AXIS));
- layer.add(new JScrollPane(_gsTable), 0);
- _progressBar = new JProgressBar();
- _progressBar.setIndeterminate(true);
- _progressBar.setVisible(false);
- layer.add(_progressBar, BorderLayout.CENTER, 1);
- //layer.setV
- getFrame().add(layer, cons);
-
-
- // maximize, doesn't seem really needed
- //getFrame().setExtendedState(JFrame.MAXIMIZED_BOTH);
- /*
- // Work-around JVM maximize issue on linux
- String osName = System.getProperty("os.name");
- if (osName.equals("Linux"))
- {
- Toolkit toolkit = Toolkit.getDefaultToolkit();
- Dimension screenSize = toolkit.getScreenSize();
- getFrame().setSize(screenSize);
- }
- */
- this.refreshAsync();
- }
-
- public void refreshAsync()
- {
- Runnable r = new Runnable()
- {
- @Override
- public void run()
- {
- GUserInterface.this.refreshServers();
- }
- };
- Thread t = new Thread(r, "LoaderThread");
- t.start();
- }
-
- @Override
- public void load()
- {
- SwingUtilities.invokeLater
- (
- new Runnable()
- {
- @Override
- public void run()
- {
- _progressBar.setVisible(true);
- }
- }
- );
-
- super.load();
-
- SwingUtilities.invokeLater
- (
- new Runnable()
- {
- @Override
- public void run()
- {
- _progressBar.setVisible(false);
- }
- }
- );
- }
-
- /**
- * @see com.l2jserver.tools.gsregistering.BaseGameServerRegister#showError(String, Throwable)
- */
- @Override
- public void showError(String msg, Throwable t)
- {
- String title;
- if (this.getBundle() != null)
- {
- title = this.getBundle().getString("error");
- msg += '\n'+this.getBundle().getString("reason")+' '+t.getLocalizedMessage();
- }
- else
- {
- title = "Error";
- msg += "\nCause: "+t.getLocalizedMessage();
- }
- JOptionPane.showMessageDialog(this.getFrame(), msg, title, JOptionPane.ERROR_MESSAGE);
- }
-
- protected void refreshServers()
- {
- if (!this.isLoaded())
- {
- this.load();
- }
-
- // load succeeded?
- if (this.isLoaded())
- {
- SwingUtilities.invokeLater
- (
- new Runnable()
- {
- @Override
- public void run()
- {
- int size = GameServerTable.getInstance().getServerNames().size();
- if (size == 0)
- {
- String title = getBundle().getString("error");
- String msg = getBundle().getString("noServerNames");
- JOptionPane.showMessageDialog(getFrame(), msg, title, JOptionPane.ERROR_MESSAGE);
- System.exit(1);
- }
- // reset
- _dtm.setRowCount(0);
-
- for (final int id : GameServerTable.getInstance().getRegisteredGameServers().keySet())
- {
- String name = GameServerTable.getInstance().getServerNameById(id);
- JButton button = new JButton(getBundle().getString("btnRemove"), ImagesTable.getImage("cross.png"));
- button.addActionListener
- (
- new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- String sid = String.valueOf(id);
- String sname = GameServerTable.getInstance().getServerNameById(id);
-
- int choice = JOptionPane.showConfirmDialog(getFrame(), getBundle().getString("confirmRemoveText").replace("%d", sid).replace("%s",sname), getBundle().getString("confirmRemoveTitle"), JOptionPane.YES_NO_OPTION);
- if (choice == JOptionPane.YES_OPTION)
- {
- try
- {
- BaseGameServerRegister.unregisterGameServer(id);
- GUserInterface.this.refreshAsync();
- }
- catch (SQLException e1)
- {
- GUserInterface.this.showError(getBundle().getString("errorUnregister"), e1);
- }
- }
- }
- }
- );
- _dtm.addRow(new Object[] { id, name, button });
- }
- }
- }
- );
- }
- }
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- String cmd = e.getActionCommand();
-
- if (cmd.equals("register"))
- {
- RegisterDialog rd = new RegisterDialog(this);
- rd.setVisible(true);
- }
- else if (cmd.equals("exit"))
- {
- System.exit(0);
- }
- else if (cmd.equals("about"))
- {
- JOptionPane.showMessageDialog(getFrame(), getBundle().getString("credits") + "\nhttp://www.l2jserver.com\n\n"+getBundle().getString("icons")+"\n\n"+getBundle().getString("language")+'\n'+getBundle().getString("translation"), getBundle().getString("aboutItem"), JOptionPane.INFORMATION_MESSAGE, ImagesTable.getImage("l2jserverlogo.png"));
- }
- else if (cmd.equals("removeAll"))
- {
- int choice = JOptionPane.showConfirmDialog(getFrame(), getBundle().getString("confirmRemoveAllText"), getBundle().getString("confirmRemoveTitle"), JOptionPane.YES_NO_OPTION);
- if (choice == JOptionPane.YES_OPTION)
- {
- try
- {
- BaseGameServerRegister.unregisterAllGameServers();
- this.refreshAsync();
- }
- catch (SQLException e1)
- {
- GUserInterface.this.showError(getBundle().getString("errorUnregister"), e1);
- }
- }
- }
- }
-
- /**
- * @return Returns the frame.
- */
- public JFrame getFrame()
- {
- return _frame;
- }
-
- private class ButtonCellRenderer implements TableCellRenderer
- {
- @Override
- public Component getTableCellRendererComponent(JTable table,
- Object value, boolean isSelected, boolean hasFocus, int row,
- int column)
- {
- return (Component) value;
- }
- }
-
- /**
- * Forward mouse-events from table to buttons inside.
- * Buttons animate properly.
- *
- * @author KenM
- */
- private class JTableButtonMouseListener implements MouseListener
- {
- private final JTable _table;
-
- public JTableButtonMouseListener(JTable table)
- {
- _table = table;
- }
-
- private void forwardEvent(MouseEvent e)
- {
- TableColumnModel columnModel = _table.getColumnModel();
- int column = columnModel.getColumnIndexAtX(e.getX());
- int row = e.getY() / _table.getRowHeight();
- Object value;
-
- if (row >= _table.getRowCount() || row < 0 || column >= _table.getColumnCount() || column < 0)
- {
- return;
- }
-
- value = _table.getValueAt(row, column);
-
- if (value instanceof JButton)
- {
- final JButton b = (JButton) value;
- if (e.getID() == MouseEvent.MOUSE_PRESSED)
- {
- b.getModel().setPressed(true);
- b.getModel().setArmed(true);
- _table.repaint();
- }
- else if (e.getID() == MouseEvent.MOUSE_RELEASED)
- {
- b.doClick();
- }
- }
- }
-
- @Override
- public void mouseEntered(MouseEvent e)
- {
- forwardEvent(e);
- }
-
- @Override
- public void mouseExited(MouseEvent e)
- {
- forwardEvent(e);
- }
-
- @Override
- public void mousePressed(MouseEvent e)
- {
- forwardEvent(e);
- }
-
- @Override
- public void mouseClicked(MouseEvent e)
- {
- forwardEvent(e);
- }
-
- @Override
- public void mouseReleased(MouseEvent e)
- {
- forwardEvent(e);
- }
- }
-
- @SuppressWarnings("serial")
- private class JTableModel extends DefaultTableModel
- {
- public JTableModel(Object[] columnNames)
- {
- super(columnNames, 0);
- }
-
- @Override
- public boolean isCellEditable(int row, int column)
- {
- return false;
- }
-
- @Override
- public Class<?> getColumnClass(int column)
- {
- return getValueAt(0, column).getClass();
- }
- }
- }
|