This commit is contained in:
387
trunk/java/com/l2jserver/tools/gsregistering/GUserInterface.java
Normal file
387
trunk/java/com/l2jserver/tools/gsregistering/GUserInterface.java
Normal file
@@ -0,0 +1,387 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
* L2J Server 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.
|
||||
*
|
||||
* L2J Server 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.Config;
|
||||
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 final JTableModel _dtm;
|
||||
protected final 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);
|
||||
|
||||
refreshAsync();
|
||||
}
|
||||
|
||||
public void refreshAsync()
|
||||
{
|
||||
Thread t = new Thread(() -> GUserInterface.this.refreshServers(), "LoaderThread");
|
||||
t.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
SwingUtilities.invokeLater(() -> _progressBar.setVisible(true));
|
||||
|
||||
super.load();
|
||||
|
||||
SwingUtilities.invokeLater(() -> _progressBar.setVisible(false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showError(String msg, Throwable t)
|
||||
{
|
||||
String title;
|
||||
if (getBundle() != null)
|
||||
{
|
||||
title = getBundle().getString("error");
|
||||
msg += Config.EOL + getBundle().getString("reason") + ' ' + t.getLocalizedMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
title = "Error";
|
||||
msg += Config.EOL + "Cause: " + t.getLocalizedMessage();
|
||||
}
|
||||
JOptionPane.showMessageDialog(getFrame(), msg, title, JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
|
||||
protected void refreshServers()
|
||||
{
|
||||
if (!isLoaded())
|
||||
{
|
||||
load();
|
||||
}
|
||||
|
||||
// load succeeded?
|
||||
if (isLoaded())
|
||||
{
|
||||
SwingUtilities.invokeLater(() ->
|
||||
{
|
||||
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(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") + Config.EOL + "http://www.l2jserver.com" + Config.EOL + Config.EOL + getBundle().getString("icons") + Config.EOL + Config.EOL + getBundle().getString("langText") + Config.EOL + 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();
|
||||
refreshAsync();
|
||||
}
|
||||
catch (SQLException e1)
|
||||
{
|
||||
GUserInterface.this.showError(getBundle().getString("errorUnregister"), e1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the frame.
|
||||
*/
|
||||
public JFrame getFrame()
|
||||
{
|
||||
return _frame;
|
||||
}
|
||||
|
||||
protected 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.<br>
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
||||
private class JTableModel extends DefaultTableModel
|
||||
{
|
||||
private static final long serialVersionUID = -5907903982876753479L;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user