/*
* MainUI.java
*
* Created on November 16, 2004, 4:09 PM
*/
package pt.jkaiui.ui;
import java.io.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.util.*;
import java.util.logging.*;
import java.awt.*;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.TitledBorder;
import javax.swing.ImageIcon;
import pt.jkaiui.core.Diags;
import pt.jkaiui.ui.modes.*;
import pt.jkaiui.ui.tools.XLinkNetworkRawStatsParser;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.JList;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkEvent.EventType;
import java.util.Vector;
import java.util.HashMap;
import java.net.URL;
import java.io.File;
import java.awt.Toolkit;
import java.awt.CardLayout;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import pt.jkaiui.JKaiUI;
import pt.jkaiui.core.ChatMessage;
import pt.jkaiui.core.OutMessage;
import pt.jkaiui.core.User;
import pt.jkaiui.core.messages.*;
import pt.jkaiui.core.KaiString;
import pt.jkaiui.core.Arena;
import pt.jkaiui.ui.modes.MessengerModeListModel;
import static pt.jkaiui.core.KaiConfig.ConfigTag.*;
/**
*
* @author pedro
*/
public class MainUI extends javax.swing.JFrame implements WindowListener {
private static final long serialVersionUID = 123413;
private final String ARENA_URL_PREFIX = "http://www.teamxlink.co.uk/media/avatars/";
private final ImageIcon ARENA_IMAGE_ICON = new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/agame.png"));
private final ImageIcon CONNECT_ICON = new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/connect.png"));
private final ImageIcon DISCONNECT_ICON = new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/disconnect.png"));
private final ImageIcon PRIVATE_OVERLAY = new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/private_overlay.png"));
private final ImageIcon LOCKED_OVERLAY = new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/locked_overlay.png"));
private static Logger _logger;
private static PreviewMode previewMode;
private static ResourceBundle resourceBundle;
private static RawStatsSetter statsSetter;
private static Hashtable avatars;
private static Hashtable loading = new Hashtable();
private String fixedphrasefile = JKaiUI.getConfig().getConfigSettingFolder() + "/setting/fixedphrese.txt";
/** Creates new form MainUI */
public MainUI() {
// Check to see if JKaiUI is running on OSX or Windows. If so, use their
// appropriate System Look&Feel. The default Look&Feel for Linux is the
// GTK Theme which looks like absolute garbage and is often unstable.
if((System.getProperty("mrj.version") != null) || System.getProperty("os.name").startsWith("Windows")) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.out.println("MainUI:"+e);
}
}
resourceBundle = ResourceBundle.getBundle("pt/jkaiui/ui/Bundle");
initComponents();
// Init preview mode
previewMode = new PreviewMode();
jMenuItemSettings.setText(resourceBundle.getString("PROP_MenuConfig"));
jMenuItemExit.setText(resourceBundle.getString("PROP_MenuExit"));
jMenuItemLog.setText(resourceBundle.getString("LBL_LogWindow"));
InfoPanel.setVisible(false);
TitledBorder logBorder = (TitledBorder) logScrollPane.getBorder();
logBorder.setTitle(resourceBundle.getString("LBL_LogWindow"));
logBorder.setTitleFont(new java.awt.Font("Dialog", 0, 10));
logScrollPane.setVisible(false);
jButtonMessengerMode.setToolTipText(resourceBundle.getString("MSG_MessengerButtonTooltip"));
jButtonArenaMode.setToolTipText(resourceBundle.getString("MSG_ArenaButtonTooltip"));
jButtonMessengerMode.setToolTipText(resourceBundle.getString("MSG_MessengerButtonTooltip"));
jButtonArenaMode.setToolTipText(resourceBundle.getString("MSG_ArenaButtonTooltip"));
jButtonDiagMode.setToolTipText(resourceBundle.getString("MSG_DiagButtonTooltip"));
addWindowListener(this);
// Get Bookmarks
String BookmarksAtStart = JKaiUI.getConfig().getConfigString(BOOKMARKS);
if(!BookmarksAtStart.equals("") && BookmarksAtStart != null) {
String[] sTemp = BookmarksAtStart.substring(0,BookmarksAtStart.length()).split(";");
for (int i=0; i<sTemp.length; i++) {
Arena tmpArena = new Arena();
tmpArena.setUser(false);
tmpArena.setVector(sTemp[i]);
addBookmark(tmpArena, false);
}
}
// Start the timer to keep the UT in the toolbar. It refreshes every 10 seconds.
// Before start JKaiUI.getConfig() has to be called (is done at 'Get Bookmarks')
new UniversalTimeSetter(toolbarTimeLabel).start();
// Start the timer to scroll the stats at the bottom.
if (JKaiUI.getConfig().getConfigBoolean(SHOWSERVERSTATS)) {
statsSetter = new RawStatsSetter(toolbarRawStatsLabel);
statsSetter.start();
}
if (JKaiUI.getConfig().getConfigBoolean(STOREWINDOWSIZEPOSITION)) {
this.setSize(JKaiUI.getConfig().getConfigInt(WINDOWWIDTH), JKaiUI.getConfig().getConfigInt(WINDOWHEIGTH));
this.setLocation(JKaiUI.getConfig().getConfigInt(WINDOWX), JKaiUI.getConfig().getConfigInt(WINDOWY));
}
buttonCopyInfo.setVisible(false);
jTabbedPane.setComponentPopupMenu(jPopupMenuTabs);
jPanel2.setVisible(false);
buttonSavePhrase.setVisible(false);
fixedphraseinit();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
//private void initComponents() {
// java.awt.GridBagConstraints gridBagConstraints;
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPopupMenuChatUsers = new javax.swing.JPopupMenu();
jMenuItemUserProfile = new javax.swing.JMenuItem();
jMenuItemAddBuddy = new javax.swing.JMenuItem();
jMenuItemChatUser = new javax.swing.JMenuItem();
jPopupMenuTabs = new javax.swing.JPopupMenu();
menuClosePM = new javax.swing.JMenuItem();
northPanel = new javax.swing.JPanel();
modeButtonPanel = new javax.swing.JPanel();
jButtonMessengerMode = new javax.swing.JButton();
jButtonArenaMode = new javax.swing.JButton();
jButtonDiagMode = new javax.swing.JButton();
specialCommandsPanel = new javax.swing.JPanel();
ConnectButtonPanel = new javax.swing.JPanel();
jButtonConnectDisconnect = new javax.swing.JButton();
westPanel = new javax.swing.JPanel();
jPanelModes = new javax.swing.JPanel();
InfoPanel = new pt.jkaiui.ui.InfoPanel();
buttonCopyInfo = new javax.swing.JButton();
southPanel = new javax.swing.JPanel();
footerToolbar = new javax.swing.JToolBar();
footerToolbarContainer = new javax.swing.JPanel();
toolbarTimeLabel = new javax.swing.JLabel();
toolbarRawStatsLabel = new javax.swing.JLabel();
logScrollPane = new javax.swing.JScrollPane();
jLogPane = new javax.swing.JEditorPane();
eastPanel = new javax.swing.JPanel();
jPanelMessengerMode = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
JListChatUsers = new javax.swing.JList();
jPanelArenaMode = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
jListArenaUsers = new javax.swing.JList();
jLabel2 = new javax.swing.JLabel();
centerPanel = new javax.swing.JPanel();
jTabbedPane = new javax.swing.JTabbedPane();
jPanel2 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
buttonSavePhrase = new javax.swing.JButton();
buttonChangePhraseEditor = new javax.swing.JToggleButton();
jPanel5 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
PhraseList = new javax.swing.JList();
jScrollPane4 = new javax.swing.JScrollPane();
PhraseEditorPane = new javax.swing.JTextArea();
jPanel6 = new javax.swing.JPanel();
jScrollPane5 = new javax.swing.JScrollPane();
EmotIconPane = new javax.swing.JTextPane();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItemLog = new javax.swing.JCheckBoxMenuItem();
jMenuItemSettings = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JSeparator();
jMenuItemExit = new javax.swing.JMenuItem();
bookmarkMenu = new javax.swing.JMenu();
versionMenu = new javax.swing.JMenu();
menuitemVersion = new javax.swing.JMenuItem();
jMenuItemUserProfile.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
jMenuItemUserProfile.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/user_profile.png"))); // NOI18N
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pt/jkaiui/ui/Bundle"); // NOI18N
jMenuItemUserProfile.setText(bundle.getString("LBL_UserProfile")); // NOI18N
jMenuItemUserProfile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuChatUsersActionPerformed(evt);
}
});
jPopupMenuChatUsers.add(jMenuItemUserProfile);
jMenuItemAddBuddy.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
jMenuItemAddBuddy.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/add_buddy.png"))); // NOI18N
jMenuItemAddBuddy.setText(bundle.getString("LBL_AddBuddy")); // NOI18N
jMenuItemAddBuddy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuChatUsersActionPerformed(evt);
}
});
jPopupMenuChatUsers.add(jMenuItemAddBuddy);
jMenuItemChatUser.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
jMenuItemChatUser.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/chat.png"))); // NOI18N
jMenuItemChatUser.setText(bundle.getString("LBL_OpenChat")); // NOI18N
jMenuItemChatUser.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuChatUsersActionPerformed(evt);
}
});
jPopupMenuChatUsers.add(jMenuItemChatUser);
menuClosePM.setText("Close PM Panel");
menuClosePM.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuClosePMActionPerformed(evt);
}
});
jPopupMenuTabs.add(menuClosePM);
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle(JKaiUI.getUIName());
setIconImage(this.getToolkit().createImage(getClass().getResource("/pt/jkaiui/ui/resources/mainui-icon.gif")));
setName("mainFrame"); // NOI18N
northPanel.setMinimumSize(new java.awt.Dimension(230, 41));
northPanel.setPreferredSize(new java.awt.Dimension(230, 41));
northPanel.setLayout(new java.awt.BorderLayout());
modeButtonPanel.setLayout(new javax.swing.BoxLayout(modeButtonPanel, javax.swing.BoxLayout.LINE_AXIS));
jButtonMessengerMode.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/mess.png"))); // NOI18N
jButtonMessengerMode.setBorderPainted(false);
jButtonMessengerMode.setContentAreaFilled(false);
jButtonMessengerMode.setEnabled(false);
jButtonMessengerMode.setFocusable(false);
jButtonMessengerMode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonMessengerModeActionPerformed(evt);
}
});
jButtonMessengerMode.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
messengerModeMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
messengerModeMouseExited(evt);
}
});
modeButtonPanel.add(jButtonMessengerMode);
jButtonArenaMode.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/arena.png"))); // NOI18N
jButtonArenaMode.setBorderPainted(false);
jButtonArenaMode.setContentAreaFilled(false);
jButtonArenaMode.setEnabled(false);
jButtonArenaMode.setFocusable(false);
jButtonArenaMode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonArenaModeActionPerformed(evt);
}
});
jButtonArenaMode.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
arenaModeMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
arenaModeMouseExited(evt);
}
});
modeButtonPanel.add(jButtonArenaMode);
jButtonDiagMode.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/diag.png"))); // NOI18N
jButtonDiagMode.setBorderPainted(false);
jButtonDiagMode.setContentAreaFilled(false);
jButtonDiagMode.setEnabled(false);
jButtonDiagMode.setFocusPainted(false);
jButtonDiagMode.setFocusable(false);
jButtonDiagMode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonDiagModeActionPerformed(evt);
}
});
jButtonDiagMode.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
diagModeMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
diagModeMouseExited(evt);
}
});
modeButtonPanel.add(jButtonDiagMode);
specialCommandsPanel.setLayout(new javax.swing.BoxLayout(specialCommandsPanel, javax.swing.BoxLayout.LINE_AXIS));
modeButtonPanel.add(specialCommandsPanel);
northPanel.add(modeButtonPanel, java.awt.BorderLayout.WEST);
ConnectButtonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
jButtonConnectDisconnect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/connect.png"))); // NOI18N
jButtonConnectDisconnect.setBorderPainted(false);
jButtonConnectDisconnect.setContentAreaFilled(false);
jButtonConnectDisconnect.setFocusPainted(false);
jButtonConnectDisconnect.setFocusable(false);
jButtonConnectDisconnect.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseExited(java.awt.event.MouseEvent evt) {
jButtonConnectDisconnectMouseExited(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
jButtonConnectDisconnectMouseEntered(evt);
}
});
jButtonConnectDisconnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonConnectDisconnectActionPerformed(evt);
}
});
ConnectButtonPanel.add(jButtonConnectDisconnect);
northPanel.add(ConnectButtonPanel, java.awt.BorderLayout.EAST);
getContentPane().add(northPanel, java.awt.BorderLayout.NORTH);
westPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), bundle.getString("LBL_MessengerMode"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
westPanel.setFocusable(false);
westPanel.setRequestFocusEnabled(false);
westPanel.setLayout(new java.awt.BorderLayout());
jPanelModes.setLayout(new java.awt.BorderLayout());
westPanel.add(jPanelModes, java.awt.BorderLayout.CENTER);
westPanel.add(InfoPanel, java.awt.BorderLayout.SOUTH);
buttonCopyInfo.setText("Copy Info");
buttonCopyInfo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonCopyInfoActionPerformed(evt);
}
});
westPanel.add(buttonCopyInfo, java.awt.BorderLayout.PAGE_START);
getContentPane().add(westPanel, java.awt.BorderLayout.WEST);
southPanel.setLayout(new java.awt.BorderLayout());
footerToolbar.setFloatable(false);
footerToolbar.setFocusable(false);
footerToolbarContainer.setOpaque(false);
footerToolbarContainer.setLayout(new java.awt.BorderLayout(20, 0));
toolbarTimeLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
toolbarTimeLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/gmt.png"))); // NOI18N
toolbarTimeLabel.setText(" ");
footerToolbarContainer.add(toolbarTimeLabel, java.awt.BorderLayout.EAST);
toolbarRawStatsLabel.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
toolbarRawStatsLabel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
toolbarRawStatsLabelMouseClicked(evt);
}
});
footerToolbarContainer.add(toolbarRawStatsLabel, java.awt.BorderLayout.CENTER);
footerToolbar.add(footerToolbarContainer);
southPanel.add(footerToolbar, java.awt.BorderLayout.SOUTH);
logScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Log Window"));
logScrollPane.setMaximumSize(new java.awt.Dimension(32767, 100));
logScrollPane.setMinimumSize(new java.awt.Dimension(31, 100));
logScrollPane.setPreferredSize(new java.awt.Dimension(116, 100));
jLogPane.setContentType("text/html");
jLogPane.setEditable(false);
logScrollPane.setViewportView(jLogPane);
southPanel.add(logScrollPane, java.awt.BorderLayout.NORTH);
getContentPane().add(southPanel, java.awt.BorderLayout.SOUTH);
eastPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), bundle.getString("LBL_ChatUsers"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
eastPanel.setFocusable(false);
eastPanel.setPreferredSize(new java.awt.Dimension(130, 144));
eastPanel.setLayout(new java.awt.CardLayout());
jPanelMessengerMode.setLayout(new java.awt.BorderLayout());
JListChatUsers.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
JListChatUsers.setModel(ListModelChatUsers);
JListChatUsers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
JListChatUsers.setFocusable(false);
JListChatUsers.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
JListChatUsersMousePressed(evt);
}
});
jScrollPane1.setViewportView(JListChatUsers);
jPanelMessengerMode.add(jScrollPane1, java.awt.BorderLayout.CENTER);
eastPanel.add(jPanelMessengerMode, "card1");
jPanelArenaMode.setLayout(new java.awt.BorderLayout());
jListArenaUsers.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
jListArenaUsers.setModel(ListModelArenaUsers);
jScrollPane2.setViewportView(jListArenaUsers);
jPanelArenaMode.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jLabel2.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
jLabel2.setText("Arena Users");
jPanelArenaMode.add(jLabel2, java.awt.BorderLayout.NORTH);
eastPanel.add(jPanelArenaMode, "card2");
getContentPane().add(eastPanel, java.awt.BorderLayout.EAST);
centerPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), bundle.getString("LBL_Chats"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 10))); // NOI18N
centerPanel.setFocusable(false);
centerPanel.setLayout(new java.awt.BorderLayout());
jTabbedPane.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
jTabbedPane.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
jTabbedPane.setFocusable(false);
jTabbedPane.setFont(new java.awt.Font("Dialog", 0, 10)); // NOI18N
jTabbedPane.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jTabbedPaneStateChanged(evt);
}
});
jTabbedPane.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
jTabbedPaneFocusGained(evt);
}
});
centerPanel.add(jTabbedPane, java.awt.BorderLayout.CENTER);
jPanel2.setMinimumSize(new java.awt.Dimension(121, 100));
jPanel2.setPreferredSize(new java.awt.Dimension(563, 175));
jPanel2.setLayout(new java.awt.BorderLayout());
jPanel3.setLayout(new java.awt.GridBagLayout());
buttonSavePhrase.setText("save");
buttonSavePhrase.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
buttonSavePhraseMouseClicked(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
jPanel3.add(buttonSavePhrase, gridBagConstraints);
buttonChangePhraseEditor.setText("Edit");
buttonChangePhraseEditor.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
buttonChangePhraseEditorMouseClicked(evt);
}
});
jPanel3.add(buttonChangePhraseEditor, new java.awt.GridBagConstraints());
jPanel2.add(jPanel3, java.awt.BorderLayout.WEST);
jPanel5.setLayout(new java.awt.GridLayout(1, 0));
jPanel4.setLayout(new java.awt.CardLayout());
PhraseList.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "��^���ł�", "edit�{�^���ŕҏW", "save�{�^���ŕۑ��ł��܂�" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
PhraseList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
PhraseList.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
PhraseListMouseClicked(evt);
}
});
jScrollPane3.setViewportView(PhraseList);
jPanel4.add(jScrollPane3, "card2");
PhraseEditorPane.setColumns(20);
PhraseEditorPane.setRows(5);
jScrollPane4.setViewportView(PhraseEditorPane);
jPanel4.add(jScrollPane4, "card3");
jPanel5.add(jPanel4);
jPanel6.setLayout(new java.awt.GridLayout(1, 0));
EmotIconPane.setContentType("text/html");
EmotIconPane.setEditable(false);
EmotIconPane.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {
EmotIconPaneHyperlinkUpdate(evt);
}
});
jScrollPane5.setViewportView(EmotIconPane);
jPanel6.add(jScrollPane5);
jPanel5.add(jPanel6);
jPanel2.add(jPanel5, java.awt.BorderLayout.CENTER);
centerPanel.add(jPanel2, java.awt.BorderLayout.SOUTH);
getContentPane().add(centerPanel, java.awt.BorderLayout.CENTER);
jMenu1.setText("Menu");
jMenu1.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
jMenuItemLog.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
jMenuItemLog.setText("Log Window");
jMenuItemLog.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemLogActionPerformed(evt);
}
});
jMenu1.add(jMenuItemLog);
jMenuItemSettings.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
jMenuItemSettings.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openSettings(evt);
}
});
jMenu1.add(jMenuItemSettings);
jMenu1.add(jSeparator1);
jMenuItemExit.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
jMenuItemExit.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
JMenuItemExitPressed(evt);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuItemExitMouseClicked(evt);
}
});
jMenuItemExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemExitActionPerformed(evt);
}
});
jMenu1.add(jMenuItemExit);
jMenuBar1.add(jMenu1);
bookmarkMenu.setText(bundle.getString("MENU_Bookmark")); // NOI18N
bookmarkMenu.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
bookmarkMenu.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bookmarkMenuActionPerformed(evt);
}
});
jMenuBar1.add(bookmarkMenu);
versionMenu.setText("Version");
versionMenu.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
menuitemVersion.setText("version");
menuitemVersion.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuitemVersionActionPerformed(evt);
}
});
versionMenu.add(menuitemVersion);
jMenuBar1.add(versionMenu);
setJMenuBar(jMenuBar1);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-871)/2, (screenSize.height-657)/2, 871, 657);
}// </editor-fold>//GEN-END:initComponents
private void jButtonConnectDisconnectMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButtonConnectDisconnectMouseExited
jButtonConnectDisconnect.setBorderPainted(false);
jButtonConnectDisconnect.setContentAreaFilled(false);
}//GEN-LAST:event_jButtonConnectDisconnectMouseExited
private void jButtonConnectDisconnectMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButtonConnectDisconnectMouseEntered
jButtonConnectDisconnect.setBorderPainted(true);
jButtonConnectDisconnect.setContentAreaFilled(true);
}//GEN-LAST:event_jButtonConnectDisconnectMouseEntered
private void jButtonConnectDisconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonConnectDisconnectActionPerformed
if (JKaiUI.status == JKaiUI.CONNECTED) {
JKaiUI.disconnect();
} else {
JKaiUI.connect();
}
}//GEN-LAST:event_jButtonConnectDisconnectActionPerformed
private void openSettings(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openSettings
// TODO: Find a good icon for settings to be displayed in the tab!
Component[] children = jTabbedPane.getComponents();
for (int i = 0; i < children.length; i++)
if(children[i] instanceof KaiSettingsPanel)
return;
KaiSettingsPanel newSettingsPanel = new KaiSettingsPanel();
jTabbedPane.addTab(ResourceBundle.getBundle("pt/jkaiui/ui/Bundle").getString("LBL_Config_Header"), new ImageIcon(getClass().getResource("/pt/jkaiui/ui/resources/settings_tabicon.png")), newSettingsPanel);
jTabbedPane.setSelectedComponent(newSettingsPanel);
}//GEN-LAST:event_openSettings
private void bookmarkMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bookmarkMenuActionPerformed
}//GEN-LAST:event_bookmarkMenuActionPerformed
private void jMenuChatUsersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuChatUsersActionPerformed
Object source = evt.getSource();
String UserName = JListChatUsers.getSelectedValue().toString();
if (UserName == null) {
return;
}
User user = new User();
user.setName(UserName);
if (source == jMenuItemUserProfile) {
JKaiUI.getManager().send(new GetUserProfile(UserName));
} else if (source == jMenuItemChatUser) {
JKaiUI.getChatManager().openChat(user);
} else if (source == jMenuItemAddBuddy) {
AddContactOut out = new AddContactOut();
out.setUser(new KaiString(user.getUser()));
JKaiUI.getManager().getExecuter().execute(out);
}
}//GEN-LAST:event_jMenuChatUsersActionPerformed
private void JListChatUsersMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JListChatUsersMousePressed
if (SwingUtilities.isRightMouseButton(evt)) {
JListChatUsers.setSelectedIndex(JListChatUsers.locationToIndex(evt.getPoint()));
jPopupMenuChatUsers.show(JListChatUsers, evt.getX(), evt.getY());
}
}//GEN-LAST:event_JListChatUsersMousePressed
private void toolbarRawStatsLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_toolbarRawStatsLabelMouseClicked
statsSetter.setNextString(true);
}//GEN-LAST:event_toolbarRawStatsLabelMouseClicked
private void jMenuItemExitMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenuItemExitMouseClicked
}//GEN-LAST:event_jMenuItemExitMouseClicked
private void jMenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemExitActionPerformed
this.windowClosing(null);
}//GEN-LAST:event_jMenuItemExitActionPerformed
private void diagModeMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_diagModeMouseExited
//previewMode.startTimer();
jButtonDiagMode.setBorderPainted(false);
jButtonDiagMode.setContentAreaFilled(false);
}//GEN-LAST:event_diagModeMouseExited
private void diagModeMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_diagModeMouseEntered
//previewMode(JKaiUI.DIAG_MODE);
if(jButtonDiagMode.isEnabled()) {
jButtonDiagMode.setBorderPainted(true);
jButtonDiagMode.setContentAreaFilled(true);
}
}//GEN-LAST:event_diagModeMouseEntered
private void jButtonDiagModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDiagModeActionPerformed
selectDiagMode();
JKaiUI.getManager().send( new GetMetrics() );
jButtonArenaMode.setEnabled(true);
jButtonMessengerMode.setEnabled(true);
jButtonDiagMode.setEnabled(false);
JKaiUI.CURRENT_MODE = JKaiUI.DIAG_MODE;
// vector must be changed if switching from messenger to diag and back to messenger mode
/* KaiVectorOut vector = new KaiVectorOut();
if (JKaiUI.ARENA == null)
vector.setVector(new KaiString("Arena"));
else
vector.setVector(new KaiString(JKaiUI.ARENA));
JKaiUI.getManager().getExecuter().execute(vector);
*/
}//GEN-LAST:event_jButtonDiagModeActionPerformed
private void arenaModeMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_arenaModeMouseExited
//previewMode.startTimer();
jButtonArenaMode.setBorderPainted(false);
jButtonArenaMode.setContentAreaFilled(false);
}//GEN-LAST:event_arenaModeMouseExited
private void arenaModeMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_arenaModeMouseEntered
//previewMode(JKaiUI.ARENA_MODE);
if(jButtonArenaMode.isEnabled()) {
jButtonArenaMode.setBorderPainted(true);
jButtonArenaMode.setContentAreaFilled(true);
}
}//GEN-LAST:event_arenaModeMouseEntered
private void messengerModeMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_messengerModeMouseExited
previewMode.startTimer();
jButtonMessengerMode.setBorderPainted(false);
jButtonMessengerMode.setContentAreaFilled(false);
}//GEN-LAST:event_messengerModeMouseExited
private void messengerModeMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_messengerModeMouseEntered
if(jButtonMessengerMode.isEnabled()) {
jButtonMessengerMode.setBorderPainted(true);
jButtonMessengerMode.setContentAreaFilled(true);
}
if(JKaiUI.CURRENT_MODE == JKaiUI.ARENA_MODE){
previewMode(JKaiUI.MESSENGER_MODE);
}
}//GEN-LAST:event_messengerModeMouseEntered
private void jTabbedPaneFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTabbedPaneFocusGained
if(evt.getSource() instanceof ChatPanel) {
JTabbedPane pane = (JTabbedPane) evt.getSource();
ChatPanel panel = (ChatPanel) pane.getSelectedComponent();
panel.jTextFieldInput.requestFocus();
JKaiUI.getChatManager().disableIcon(panel);
}
}//GEN-LAST:event_jTabbedPaneFocusGained
private void jButtonArenaModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonArenaModeActionPerformed
selectArenaMode();
if (JKaiUI.CURRENT_MODE == JKaiUI.MESSENGER_MODE) {
KaiVectorOut vector = new KaiVectorOut();
if (JKaiUI.ARENA == null) {
// Init arena mode
vector.setVector(new KaiString("Arena"));
} else {
vector.setVector(new KaiString(JKaiUI.ARENA));
}
JKaiUI.getManager().getExecuter().execute(vector);
}
jButtonArenaMode.setEnabled(false);
jButtonMessengerMode.setEnabled(true);
jButtonDiagMode.setEnabled(true);
JKaiUI.CURRENT_MODE = JKaiUI.ARENA_MODE;
}//GEN-LAST:event_jButtonArenaModeActionPerformed
private void jButtonMessengerModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMessengerModeActionPerformed
selectMessengerMode();
// Go back to messenger mode
KaiVectorOut vector = new KaiVectorOut();
vector.setVector(new KaiString(""));
JKaiUI.getManager().getExecuter().execute(vector);
jButtonArenaMode.setEnabled(true);
jButtonMessengerMode.setEnabled(false);
jButtonDiagMode.setEnabled(true);
JKaiUI.CURRENT_MODE = JKaiUI.MESSENGER_MODE;
}//GEN-LAST:event_jButtonMessengerModeActionPerformed
private void jMenuItemLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemLogActionPerformed
if(jMenuItemLog.isSelected())
logScrollPane.setVisible(true);
else
logScrollPane.setVisible(false);
paintAll(getGraphics());
}//GEN-LAST:event_jMenuItemLogActionPerformed
private void JMenuItemExitPressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JMenuItemExitPressed
// TODO add your handling code here:
}//GEN-LAST:event_JMenuItemExitPressed
private void menuitemVersionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuitemVersionActionPerformed
//JOptionPane.showConfirmDialog(null, JKaiUI.getVersion()+"\nOriginal jKaiUI:http://jkaiui.sourceforge.net/downloads/\nJKaiUI Modification:https://sites.google.com/site/yuuakron/", "jKaiUI version", JOptionPane.CLOSED_OPTION);
String objects[] = {"Close", "Copy Version"};
int result = JOptionPane.showOptionDialog(
this,
JKaiUI.getUIName()+JKaiUI.getVersion() + "\nOriginal jKaiUI:http://jkaiui.sourceforge.net/downloads/\n"+JKaiUI.getUIName()+":https://sites.google.com/site/yuuakron/",
"jKaiUI version",
JOptionPane.CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
objects,
objects[0]);
if(result == 1){
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection = new StringSelection(JKaiUI.getVersion());
clipboard.setContents(selection, null);
}
}//GEN-LAST:event_menuitemVersionActionPerformed
private void buttonCopyInfoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonCopyInfoActionPerformed
MessengerModeListModel model = (MessengerModeListModel) JKaiUI.getDiagMode().getListModel();
StringBuffer strbuf = new StringBuffer("Diags infomation \n\n");//�ۑ�����ݒ���
Diags diags = (Diags) model.get(0);
strbuf.append("OrbServer: "+diags.getValue1() + "\n");
diags = (Diags) model.get(1);
// strbuf.append("Network: "+diags.getValue1()+" "+diags.getValue2() + "\n");
strbuf.append("Network: "+diags.getValue2() + "\n");
diags = (Diags) model.get(2);
strbuf.append("Hardware: "+diags.getValue1()+ " " +diags.getValue2()+ "\n");
diags = (Diags) model.get(3);
strbuf.append("Engine: "+diags.getValue1()+ " " +diags.getValue2() + "\n");
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection = new StringSelection(strbuf.toString());
clipboard.setContents(selection, null);
}//GEN-LAST:event_buttonCopyInfoActionPerformed
private void menuClosePMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuClosePMActionPerformed
((ChatPanel)this.jTabbedPane.getSelectedComponent()).jButtonClose.doClick();
}//GEN-LAST:event_menuClosePMActionPerformed
private void jTabbedPaneStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jTabbedPaneStateChanged
if (jTabbedPane.getSelectedIndex() == 0) {
menuClosePM.setVisible(false);
}else{
menuClosePM.setVisible(true);
}
// System.out.println(jTabbedPane.getSelectedIndex());
}//GEN-LAST:event_jTabbedPaneStateChanged
private void buttonSavePhraseMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_buttonSavePhraseMouseClicked
fixedphrasesave();
}//GEN-LAST:event_buttonSavePhraseMouseClicked
private void buttonChangePhraseEditorMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_buttonChangePhraseEditorMouseClicked
buttonSavePhrase.setVisible(!buttonSavePhrase.isVisible());
((CardLayout) jPanel4.getLayout()).next(jPanel4);
}//GEN-LAST:event_buttonChangePhraseEditorMouseClicked
private void PhraseListMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_PhraseListMouseClicked
if (SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() == 2) {
JList list = (JList) evt.getComponent();
Object obj = list.getSelectedValue();
String text = (String)obj;
if (text.length() == 0) {
return;
}
/*
text = JKaiUIcommand(text);
if (text == null) {
return;
}
*/
// Build a OutMessage and pass it to ChatManager
// Now Im testing a few messages
OutMessage msg = new OutMessage();
if(!(jTabbedPane.getSelectedComponent() instanceof ChatPanel)){
return;
}
ChatPanel tmp = (ChatPanel)jTabbedPane.getSelectedComponent();
if (!tmp.isClosable()) {
msg.setType(ChatMessage.PUBLIC_MESSAGE);
} else {
msg.setType(ChatMessage.PRIVATE_MESSAGE);
msg.setUser(new User(tmp.getName()));
}
msg.setMessage(text);
JKaiUI.getChatManager().processMessage(msg);
}
}//GEN-LAST:event_PhraseListMouseClicked
private void EmotIconPaneHyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {//GEN-FIRST:event_EmotIconPaneHyperlinkUpdate
String tooltipbuf = "";
if (evt.getEventType() == EventType.ACTIVATED) { //�N���b�N���ꂽ��
URL url = evt.getURL();
// System.err.println(url.toString());
if (url.toString().matches("^(https://sites.google.com/site/yuuakron/dummy/)(.*)")) {
//�G�������`���b�g���͗��ɃR�s�[
// System.out.print("user");
if (!(jTabbedPane.getSelectedComponent() instanceof ChatPanel)) {
return;
}
ChatPanel tmp = (ChatPanel)jTabbedPane.getSelectedComponent();
try {
tmp.jTextFieldInput.getDocument().insertString(tmp.jTextFieldInput.getCaretPosition(), url.toString().replace("https://sites.google.com/site/yuuakron/dummy/", ""), null);
} catch (Exception e) {
System.out.println("hyperlink emoticon:" + e);
}
}
} else if (evt.getEventType() == HyperlinkEvent.EventType.ENTERED) {//�����N��ɂ����Ƃ�
tooltipbuf = EmotIconPane.getToolTipText();
EmotIconPane.setToolTipText(null);
URL url = evt.getURL();
EmotIconPane.setToolTipText(url.toExternalForm().replace("https://sites.google.com/site/yuuakron/dummy/", "" ));
} else if (evt.getEventType() == HyperlinkEvent.EventType.EXITED) {//�����N�ォ�痣�ꂽ�Ƃ�
EmotIconPane.setToolTipText(tooltipbuf);
}
}//GEN-LAST:event_EmotIconPaneHyperlinkUpdate
public void openSettings() {
openSettings(null);
}
public ImageIcon getBookmarkIcon(Arena arena) {
File iconLocation = new File(JKaiUI.getConfig().getConfigString(AVATARCACHE), arena.getVector().replace('/', File.separatorChar).toLowerCase() + ".ii");
ImageIcon avatar = null;
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(iconLocation));
avatar = (ImageIcon) ois.readObject();
ois.close();
} catch(Exception e) {
System.out.println("MainUI openSetting:"+e);
}
return avatar;
}
private ImageIcon overlapGraphics(ImageIcon originalIcon, ImageIcon overIcon){
// Original Image
Image image = originalIcon.getImage();
Image image2 = overIcon.getImage();
BufferedImage originalImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = originalImage.createGraphics();
//g.setColor(Color.WHITE);
//g.fillRect(0,0,image.getWidth(null),image.getHeight(null));
g.drawImage(image, 0, 0, null);
g.drawImage(image2, 0, 0, null);
g.dispose();
return new ImageIcon(originalImage);
}
public void addBookmark(Arena arena) {
addBookmark(arena, true);
}
public void addBookmark(Arena arena, boolean store) {
final JMenuItem item;
if(!isBookmark(arena)) {
bookmarkVector.add(arena);
item = new JMenuItem(arena.getName());
item.setFont(bookmarkMenu.getFont());
bookmarkMenu.add(item);
if (store)
JKaiUI.getConfig().saveBookmarks(bookmarkVector);
item.setIcon(this.getBookmarkIcon(arena));
item.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt) {
Arena arena = new Arena();
for(int i=0;i<bookmarkVector.size();i++){
arena = (Arena)bookmarkVector.get(i);
if (arena.getName().equals(item.getText())){
if (JKaiUI.CURRENT_MODE != JKaiUI.ARENA_MODE)
jButtonArenaModeActionPerformed(null);
JKaiUI.getManager().enterArena(arena);
return;
}
}
}
});
}
}
public boolean isBookmark(Arena arena) {
if(bookmarkVector.isEmpty() || !bookmarkVector.contains(arena)) {
return false;
}
return true;
}
public void deleteBookmark(Arena arena) {
int index = bookmarkVector.indexOf(arena);
if (index == -1) return;
bookmarkVector.remove(index);
JKaiUI.getConfig().saveBookmarks(bookmarkVector);
for(int i=0; i < bookmarkMenu.getItemCount() ; i++) {
if(arena.getName().equals(bookmarkMenu.getItem(i).getText())) {
bookmarkMenu.remove(i);
return;
}
}
}
public void SetConnectedStatus() {
jButtonConnectDisconnect.setIcon(DISCONNECT_ICON);
jButtonConnectDisconnect.setToolTipText(resourceBundle.getString("LBL_DISCONNECT"));
}
public void SetDisConnectedStatus() {
jButtonConnectDisconnect.setIcon(CONNECT_ICON);
jButtonConnectDisconnect.setToolTipText(resourceBundle.getString("LBL_CONNECT"));
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainUI().setVisible(true);
}
});
}
public javax.swing.JPanel getJPanelMode(){
return jPanelModes;
}
public JEditorPane getLogEditorPane(){
return jLogPane;
}
public JPanel getToolbarPanel() {
return footerToolbarContainer;
}
public InfoPanel getJPanelInfos() {
return InfoPanel;
}
public static JPanel getSpecialCommandsPanel(){
return specialCommandsPanel;
}
public void windowClosing(WindowEvent e) {
System.out.println("Closing.... ");
if (JKaiUI.getConfig().getConfigBoolean(STOREWINDOWSIZEPOSITION)) {
Dimension windim = new Dimension();
Point winloc = new Point();
windim = this.getSize();
winloc = this.getLocation();
JKaiUI.getConfig().storeWindowSizePosition(windim.height, windim.width, winloc.getX(), winloc.getY());
}
JKaiUI.disconnect();
System.exit(0);
}
// The other implementation of WindowListener... nothing! :)
public void windowClosed(WindowEvent e) {
}
public void windowOpened(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowActivated(WindowEvent e) {
}
public void windowDeactivated(WindowEvent e) {
}
/**
* <p>This is an easier way to prompt the user with a question than writing
* horribly long JOptionPane calls every time a question needs to be asked.</p>
*
* <p>To use, simply provide the resource names from the ResourceBundle for
* the question and title.</p>
*
* @param questionResource A reference to the question asked from the ResourceBundle properties file.
* @param titleResource A reference to the title of the dialog from the ResourceBundle properties file.
* @return true if "Yes" was pressed or false if "No" was.
*/
public boolean askYesNoDialog(String questionResource, String titleResource) {
Object[] opts = new Object[] { resourceBundle.getString("BTN_Yes"), resourceBundle.getString("BTN_No") };
int result = JOptionPane.showOptionDialog(this,
resourceBundle.getString(questionResource),
resourceBundle.getString(titleResource),
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
opts,
opts[0]
);
return (result == 0);
}
public void okDialog(String messageResource) {
JOptionPane.showConfirmDialog(this, resourceBundle.getString(messageResource));
}
public boolean askRetry(String messageResource, String titleResource) {
String[] options = new String[] {
resourceBundle.getString("BTN_Retry"), // Index 0
resourceBundle.getString("BTN_Cancel") // Index 1
};
int result = JOptionPane.showOptionDialog(
this,
resourceBundle.getString(messageResource),
resourceBundle.getString(titleResource),
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[0]
);
return (result == 0);
}
public String openEnginePrompt(String[] engines) {
if(engines.length == 0) throw new IllegalArgumentException("MainUI.openEnginePrompt() should only be given an array with more than one engine!");
Object result = JOptionPane.showInputDialog(this, resourceBundle.getString("MSG_ChooseEngine"), resourceBundle.getString("MSG_ChooseEngineDialogTitle"),JOptionPane.QUESTION_MESSAGE, null, engines, engines[0]);
// This may be null if Cancel was pressed! Beware!
return (result == null)?null:(String) result;
}
protected void resetPreview(){
showCurrentMode();
JKaiUI.resetModeName();
}
protected void showCurrentMode(){
if (JKaiUI.CURRENT_MODE == JKaiUI.MESSENGER_MODE)
previewMessengerMode();
else if (JKaiUI.CURRENT_MODE == JKaiUI.ARENA_MODE)
previewArenaMode();
else if (JKaiUI.CURRENT_MODE == JKaiUI.DIAG_MODE)
previewDiagMode();
}
protected void selectMessengerMode(){
if(InfoPanel != null) InfoPanel.hidePanel();
Vector modesVector = JKaiUI.getModesVector();
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m instanceof MessengerMode ) {
m.selectMode();
ListModelChatUsers.clear();
eastPanel.setPreferredSize(new Dimension(130, 0));
eastPanel.setVisible(true);
CardLayout cards = (CardLayout)eastPanel.getLayout();
cards.show(eastPanel, "card1");
}
}
buttonCopyInfo.setVisible(false);
}
protected void selectArenaMode() {
if (InfoPanel != null) {
InfoPanel.hidePanel();
}
Vector modesVector = JKaiUI.getModesVector();
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m instanceof ArenaMode) {
m.selectMode();
eastPanel.setVisible(false);
// ListModelArenaUsers.clear();
// eastPanel.setPreferredSize(new Dimension(210, 0));
// eastPanel.setVisible(true);
// CardLayout cards = (CardLayout)eastPanel.getLayout();
// cards.show(eastPanel, "card2");
}
}
buttonCopyInfo.setVisible(false);
}
protected void selectDiagMode() {
if (InfoPanel != null) {
InfoPanel.hidePanel();
}
Vector modesVector = JKaiUI.getModesVector();
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m instanceof DiagMode ) {
m.selectMode();
eastPanel.setVisible(false);
}
}
buttonCopyInfo.setVisible(true);
}
protected void previewMessengerMode(){
Vector modesVector = JKaiUI.getModesVector();
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m instanceof MessengerMode )
m.previewMode();
}
}
protected void previewArenaMode(){
Vector modesVector = JKaiUI.getModesVector();
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m instanceof ArenaMode)
m.previewMode();
}
}
protected void previewDiagMode(){
Vector modesVector = JKaiUI.getModesVector();
for (Enumeration e = modesVector.elements(); e.hasMoreElements() ; ){
MainMode m = (MainMode) e.nextElement();
if ( m instanceof DiagMode)
m.previewMode();
}
}
public void previewMode(int mode){
// first of all, this is only relevant if we are connected
if (JKaiUI.status == JKaiUI.DISCONNECTED )
return;
// lets se if its running
if (previewMode.isRunning()){
// if it is not this mode, cancel and switch
if ( previewMode.getMode() != mode){
previewMode.stop();
// Only start new preview if that mode is different than the current
if (mode != JKaiUI.CURRENT_MODE){
previewMode.setMode(mode);
previewMode.start();
}
}
} else{
// Only start new preview if that mode is different than the current
if (mode != JKaiUI.CURRENT_MODE){
previewMode.setMode(mode);
previewMode.start();
}
}
}
private DefaultSortableListModel ListModelChatUsers = new DefaultSortableListModel();
private DefaultSortableListModel ListModelArenaUsers = new DefaultSortableListModel();
public DefaultSortableListModel getListModelChatUsers() {
return ListModelChatUsers;
}
public DefaultSortableListModel getListModelArenaUsers() {
return ListModelArenaUsers;
}
public void UpdateChatUsersQuantity() {
TitledBorder brd = (TitledBorder)eastPanel.getBorder();
brd.setTitle(java.util.ResourceBundle.getBundle("pt/jkaiui/ui/Bundle").getString("LBL_ChatUsers") + " (" + ListModelChatUsers.size() + ")");
eastPanel.repaint(0,0, eastPanel.WIDTH, 15);
}
public void SetModeTitle(String title) {
TitledBorder brd = (TitledBorder)westPanel.getBorder();
brd.setTitle(title);
westPanel.repaint(0,0, westPanel.WIDTH, 15);
}
private class PreviewMode implements Runnable{
private static final int SHOW_AND_KEEP = 1;
private static final int SHOW_AND_CLOSE = 2;
private int status;
private boolean isRunning = false;
private volatile Thread blinker;
private Logger _logger;
/**
* Holds value of property mode.
*/
private int mode;
public void start() {
isRunning = true;
status = SHOW_AND_KEEP;
if(getMode() == JKaiUI.MESSENGER_MODE)
previewMessengerMode();
else if(getMode() == JKaiUI.ARENA_MODE)
previewArenaMode();
else if(getMode() == JKaiUI.DIAG_MODE)
previewDiagMode();
blinker = new Thread(this);
blinker.start();
}
public void startTimer(){
if (JKaiUI.status == JKaiUI.DISCONNECTED || blinker == null)
return ;
status = SHOW_AND_CLOSE;
blinker.interrupt();
}
public void stop() {
Thread moribund = blinker;
blinker = null;
moribund.interrupt();
}
public void run() {
Thread thisThread = Thread.currentThread();
while (blinker == thisThread) {
try {
if (status == SHOW_AND_KEEP){
thisThread.sleep(100000000); // wait() thows exception...
} else if (status == SHOW_AND_CLOSE){
thisThread.sleep(500);
blinker = null;
}
} catch (InterruptedException e){
System.out.println("MainUI run:"+e);
}
repaint();
}
isRunning = false;
resetPreview();
}
public boolean isRunning(){
return isRunning;
}
/**
* Getter for property mode.
* @return Value of property mode.
*/
public int getMode() {
return this.mode;
}
/**
* Setter for property mode.
* @param mode New value of property mode.
*/
public void setMode(int mode) {
this.mode = mode;
}
}
private class UniversalTimeSetter extends Thread {
private static final int RETRY_ATTEMPTS = 4;
private static final int SLEEPTIME = 10000;
private String pre;
private JLabel victim;
private java.text.SimpleDateFormat formatter;
private long offset;
private Thread runner;
private boolean isActive;
private boolean isOSX;
protected UniversalTimeSetter(JLabel label) {
super("MainUI Toolbar Universal Time Setter Thread");
isActive = true;
victim = label;
pre = resourceBundle.getString("LBL_UniversalTime") + ": ";
formatter = new java.text.SimpleDateFormat("H:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT:00"));
isOSX = System.getProperty("mrj.version") != null;
}
public void run() {
if(JKaiUI.getConfig().getConfigString(NTPSERVER).equals("")) {
offset = 0;
} else {
long ntptime = 0;
for(int i = 0; i < RETRY_ATTEMPTS; i++) {
ntptime = pt.jkaiui.ui.tools.NTPClient.getNTPTime();
if(ntptime != 0) break;
}
offset = (ntptime != 0) ? ntptime - System.currentTimeMillis() : 0;
}
while(isActive) {
victim.setText(pre + formatter.format(new java.util.Date(System.currentTimeMillis() + offset)) + (isOSX ? " ":""));
try {
Thread.sleep(SLEEPTIME);
} catch(InterruptedException ie) {
System.out.println("MainUI run:"+ie);
}
}
}
public void convinceToStop() {
isActive = false;
}
}
private class RawStatsSetter extends Thread {
//private static final int SLEEPTIME = 600000;
private static final int SLEEPTIME = 5000;
private static final int RETRY_ATTEMPTS = 2;
private String stats;
private JLabel victim;
private java.text.SimpleDateFormat formatter;
private HashMap statsHashMap;
private int cycle1;
private int cycle2;
private boolean isActive;
protected RawStatsSetter(JLabel label) {
super("MainUI Toolbar Raw Network Statistics Setter Thread");
isActive = true;
stats = "";
victim = label;
cycle1 = 9;
cycle2 = 5;
}
public void run() {
while(isActive) {
if(cycle1 == 9) {
if(++cycle2 == 6) {
cycle2 = 1;
for(int i = 0; i < RETRY_ATTEMPTS; i++) {
statsHashMap = XLinkNetworkRawStatsParser.getRawStatsInfo();
if(statsHashMap == null) {
convinceToStop();
return;
}
if(!statsHashMap.isEmpty()) break;
}
}
}
setNextString(false);
try {
if(isActive) Thread.sleep(SLEEPTIME);
} catch (InterruptedException ie) {
System.out.println("MinUI run:"+ie);
}
}
}
public synchronized void setNextString(boolean quick) {
cycle1 = (cycle1 >= 9) ? 1 : cycle1 + 1;
String nextKey = XLinkNetworkRawStatsParser.sequenceToName(cycle1);
if(!quick) {
for(int i = 0; i <= 225; i += 25) {
victim.setForeground(new Color(i,i,i));
try {
Thread.sleep(30);
} catch(InterruptedException ie) {
System.out.println("MainUI setNextString:"+ie);
}
}
}
victim.setText("<html><body><b>" + nextKey + ":</b> " + statsHashMap.get(nextKey) + "</body></html>");
if(quick) victim.setForeground(Color.BLACK);
else {
for(int i = 250; i >= 0; i -= 25) {
victim.setForeground(new Color(i,i,i));
try {
Thread.sleep(20);
} catch (InterruptedException ie) {
System.out.println("MainUI setNextString:"+ie);
}
}
}
}
public void convinceToStop() {
isActive = false;
}
}
public void clickConnectDisconnectButton(){
jButtonConnectDisconnect.doClick();
}
public Vector bookmarkVector = new Vector();
private void fixedphraseinit(){
File PhraseFile = new File(fixedphrasefile);
File PhraseHolder = new File(PhraseFile.getParent());
Vector phrase = new Vector();
PhraseEditorPane.setText("");
if (!PhraseHolder.exists()) {
return;
}
if (!PhraseFile.exists()) {
return;
}
try {
if (PhraseFile.isFile() && PhraseFile.canRead()) {
BufferedReader logfilebr = new BufferedReader(new FileReader(PhraseFile));
String line;
while ((line = logfilebr.readLine()) != null) {
phrase.add(line);
PhraseEditorPane.append(line + "\n");
}
logfilebr.close();
}
} catch (Exception e) {
System.out.println("fixedphraseinit:" + e);
}
PhraseList.setListData(phrase);
}
private void fixedphrasesave() {
File PhraseFile = new File(fixedphrasefile);
File PhraseHolder = new File(PhraseFile.getParent());
PrintWriter phrasefilepw;
try {
if (!PhraseHolder.exists()) {
PhraseHolder.mkdir();
}
if (!PhraseFile.exists()) {
PhraseFile.createNewFile();
}
if (PhraseFile.isFile() && PhraseFile.canWrite()) {
//�o�b�t�@�������Ńt���b�V��
phrasefilepw = new PrintWriter(new BufferedWriter(new FileWriter(PhraseFile)), true);
phrasefilepw.print(PhraseEditorPane.getText());
phrasefilepw.close();
fixedphraseinit();
}
} catch (Exception e) {
System.out.println("fileopen err:" + e);
}
}
public void initEmotIconPane(){
StringBuffer s = new StringBuffer("");
//JKaiUI
// String out = "<table style=\"padding:2px;width:100%;font-family:Dialog;"+ wordbreak +"font-size:"+JKaiUI.getConfig().getChatFontSize()+"px\"><tr style=\"background-color:" + color + "\"><td>" + user + "</td><td align=\"right\">";
// out += "</td></tr><tr><td colspan=2>" + msgtmp + "</td></tr></table>";
String size = " width=\"30\" height=\"30\"";
ArrayList emoticons = JKaiUI.getChatManager().getEmotIconList();
for (int i = 0; i < emoticons.size(); i++) {
String[] tmp = ((String) emoticons.get(i)).split(",");
s = s.append(createlink(tmp[0], encodeImgTag(tmp[1], size)));
}
EmotIconPane.setText(s.toString());
}
public void resetEmotIconPane(){
EmotIconPane.setText("");
}
//dummy�A�h���X�������������N���쐬
private String createlink(String address, String v) {
//user�Ƀ����N��lj��@�����N���N���b�N����ƃ`���b�g���͉�ʂɏo����
//https://sites.google.com/site/yuuakron/dummy/�̓_�~�[�A�h���X
return "<a href=\"https://sites.google.com/site/yuuakron/dummy/" + address + "\">" + v + "</a>";
}
private String encodeImgTag(String s, String size) {
s = "<img src=\"" + s + "\"" + size + ">";
return s;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel ConnectButtonPanel;
public javax.swing.JTextPane EmotIconPane;
private pt.jkaiui.ui.InfoPanel InfoPanel;
private javax.swing.JList JListChatUsers;
public javax.swing.JTextArea PhraseEditorPane;
public javax.swing.JList PhraseList;
private javax.swing.JMenu bookmarkMenu;
private javax.swing.JToggleButton buttonChangePhraseEditor;
private javax.swing.JButton buttonCopyInfo;
private javax.swing.JButton buttonSavePhrase;
private javax.swing.JPanel centerPanel;
private javax.swing.JPanel eastPanel;
private javax.swing.JToolBar footerToolbar;
private javax.swing.JPanel footerToolbarContainer;
public javax.swing.JButton jButtonArenaMode;
public javax.swing.JButton jButtonConnectDisconnect;
public javax.swing.JButton jButtonDiagMode;
public javax.swing.JButton jButtonMessengerMode;
private javax.swing.JLabel jLabel2;
private javax.swing.JList jListArenaUsers;
private javax.swing.JEditorPane jLogPane;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItemAddBuddy;
private javax.swing.JMenuItem jMenuItemChatUser;
private javax.swing.JMenuItem jMenuItemExit;
public javax.swing.JCheckBoxMenuItem jMenuItemLog;
public javax.swing.JMenuItem jMenuItemSettings;
private javax.swing.JMenuItem jMenuItemUserProfile;
public javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanelArenaMode;
private javax.swing.JPanel jPanelMessengerMode;
private javax.swing.JPanel jPanelModes;
private javax.swing.JPopupMenu jPopupMenuChatUsers;
private javax.swing.JPopupMenu jPopupMenuTabs;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JScrollPane jScrollPane5;
private javax.swing.JSeparator jSeparator1;
public javax.swing.JTabbedPane jTabbedPane;
private javax.swing.JScrollPane logScrollPane;
private javax.swing.JMenuItem menuClosePM;
private javax.swing.JMenuItem menuitemVersion;
private javax.swing.JPanel modeButtonPanel;
private javax.swing.JPanel northPanel;
private javax.swing.JPanel southPanel;
private static javax.swing.JPanel specialCommandsPanel;
private javax.swing.JLabel toolbarRawStatsLabel;
private javax.swing.JLabel toolbarTimeLabel;
private javax.swing.JMenu versionMenu;
private javax.swing.JPanel westPanel;
// End of variables declaration//GEN-END:variables
}