📄 bsmainframe.java
字号:
}
// displays update info dialog
else if (source == updatesMenuItem) {
BSUpdatesDialog dlg = new BSUpdatesDialog(this);
dlg.show();
}
// opens preferences dialog and possibly stores the values
else if (source == prefsMenuItem) {
properties.setProperty(PREF_NAME_LAF, currentLookAndFeel);
BSPrefsDialog dlg = new BSPrefsDialog(this, properties);
Vector components = new Vector();
Vector names = new Vector();
plugins.getPrefTabs(components, names);
dlg.addPrefTabs(components, names);
boolean validated = true;
do {
dlg.show();
if (dlg.username != null) {
username = dlg.username;
password = dlg.password;
resource = dlg.resource;
server = dlg.server;
port = dlg.port;
priority = dlg.priority;
useSSL = dlg.useSSL;
autoLogin = dlg.autoLogin;
fileServer = dlg.fileServer;
fileServerPath = dlg.fileServerPath;
fileServerPort = dlg.fileServerPort;
proxy = dlg.proxy;
proxyPort = dlg.proxyPort;
setProxy(proxy, proxyPort);
compactView = dlg.compactView;
changeViewType(compactView);
onlyOnline = dlg.onlyOnline;
onlyOnlineMenuItem.setSelected(onlyOnline);
onlyOnlineButton.setSelected(onlyOnline);
rosterTree.setOnlyOnline(onlyOnline);
dockWindows = dlg.dockWindows;
dockWindowsMenuItem.setSelected(dockWindows);
showMsgs = dlg.showMsgsWin;
msgWinMan.showMessagesWindow(showMsgs, true, dockWindows);
showStatus = dlg.showStatus;
msgWinMan.showStatusWindow(showStatus, true, core, dockWindows);
showDebug = dlg.showDebug;
msgWinMan.showDebugWindow(showDebug, true, core, dockWindows);
scrollTabs = dlg.scrollTabs;
scrollTabsMenuItem.setSelected(scrollTabs);
if (OSVersion.isJava1Point4orHigher())
mainTabbedPane.setTabLayoutPolicy(scrollTabs?
JTabbedPane.SCROLL_TAB_LAYOUT : JTabbedPane.WRAP_TAB_LAYOUT);
/*logoImgPath = dlg.logoImgPath;
Icon logoIcon = new ImageIcon(logoImgPath);
logoIconLabel.setIcon(logoIcon);*/
autoSelectChat = dlg.autoSelect;
autoPopupMenuItem.setSelected(autoSelectChat);
forceMsgsIntoChat = dlg.forceMsgsIntoChat;
autoAway = dlg.autoAway;
newMsgSoundFileName = dlg.newMsgSoundFileName;
soundPlayer = new SoundPlayer(newMsgSoundFileName);
pluginSimLink = dlg.pluginSimLink;
pluginBuddyFinder = dlg.pluginBuddyFinder;
//ixPropsPath = dlg.ixPropsPath;
rosterTree.updateRoster();
savePreferences();
validated = plugins.storePrefs();
}
} while (dlg.username != null && !validated);
}
else if (source instanceof BSJIDActionMenuItem) {
BSJIDActionMenuItem mi = (BSJIDActionMenuItem) source;
JID jid = mi.getJID();
String namespace = mi.getNamespace();
if (!plugins.performAction(jid, namespace))
JOptionPane.showMessageDialog(this, "Action within namespace " +
namespace +
((jid != null)? (" for JID " + jid.toString()) : "") +
" cannot be performed", "Plugin error",
JOptionPane.ERROR_MESSAGE);
}
}
/** Returns wether is connected */
public boolean isConnected() {
return (core == null)? false :
(core.getConnectionState() == ConnectionEvent.STATE_CONNECTED);
}
/** (Dis)connects - before connecting shows login dialog */
private void connect(boolean connect) {
if (connect && !isConnected()) {
BSLoginDialog dlg = new BSLoginDialog(this,
username, password, resource,
server, port, newAccount, useSSL);
dlg.setVisible(true);
if (dlg.username != null) {
username = dlg.username;
server = dlg.server;
port = dlg.port;
resource = dlg.resource;
password = dlg.password;
newAccount = dlg.newAccount;
useSSL = dlg.useSSL;
// saves login values
if (dlg.saveValues) {
String[] names = {BSMainFrame.PREF_NAME_USERNAME,
BSMainFrame.PREF_NAME_SERVER,
BSMainFrame.PREF_NAME_PORT,
BSMainFrame.PREF_NAME_RESOURCE,
BSMainFrame.PREF_NAME_PASSWORD,
BSMainFrame.PREF_NAME_USE_SSL};
String[] values = {username, server, Integer.toString(port),
resource, password, useSSL? "true":"false"};
addAndSavePreferences(names, values);
properties.setProperty(BSMainFrame.PREF_NAME_USERNAME, username);
properties.setProperty(BSMainFrame.PREF_NAME_SERVER, server);
properties.setProperty(BSMainFrame.PREF_NAME_PORT, Integer.toString(port));
properties.setProperty(BSMainFrame.PREF_NAME_RESOURCE, resource);
properties.setProperty(BSMainFrame.PREF_NAME_PASSWORD, password);
properties.setProperty(BSMainFrame.PREF_NAME_USE_SSL, useSSL? "true":"false");
}
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
connect(username, password, resource,
server, port, newAccount, useSSL);
}
else
setConnectButton(isConnected());
}
else if (!connect && isConnected()) {
if (loginProgressDlg == null)
loginProgressDlg = new BSLoginProgressDlg(this);
loginProgressDlg.setMessage("Disconnecting (10 sec)...");
loginProgressDlg.show();
Thread t = new Thread() {
public void run() { core.disconnect(); }
};
t.start();
}
}
/** Sets proxy */
public void setProxy(String proxy, String proxyPort) {
Properties prop = System.getProperties();
if (proxy != null && proxyPort != null) {
prop.put("http.proxyHost", proxy);
prop.put("http.proxyPort", proxyPort);
}
else {
prop.put("http.proxyHost", "");
prop.put("http.proxyPort", "");
}
}
/** Changes presence and stores the current state for future restore
* by restorePresence()
*/
public void setAutoPresence(String presenceStr, String statusStr) {
if (presenceBean == null || !autoAway) return;
BSPresenceInfo tmpPI = presenceBean.getResourcePresence(new JID(username, server, resource));
if (tmpPI != null && (BSPresenceInfo.SHOW_AWAY.equals(tmpPI.getShow()) ||
BSPresenceInfo.SHOW_XA.equals(tmpPI.getShow()) ||
BSPresenceInfo.SHOW_DND.equals(tmpPI.getShow())) )
// already away - doesn't change the status
return;
presenceBeforeAuto = tmpPI;
setPresence(presenceStr, statusStr, true);
}
/** Restores presence saved when changing it automatically using setAutoPresence()
*/
public void restorePresence() {
if (presenceBeforeAuto != null)
setPresence(presenceBeforeAuto.getFriendlyShow(), presenceBeforeAuto.getStatus(), true);
/*else
setPresence(SHOW_ONLINE_STR, null, true);*/
presenceBeforeAuto = null;
}
/** Changes presence */
public void setPresence(Icon presenceIcon, boolean sendPresence) {
if (onlineIcon == presenceIcon)
setPresence(SHOW_ONLINE_STR, null, sendPresence);
else if (chatIcon == presenceIcon)
setPresence(SHOW_CHAT_STR, null, sendPresence);
else if (busyIcon == presenceIcon)
setPresence(SHOW_ONLINE_STR, STATUS_BUSY_STR, sendPresence);
else if (elseIcon == presenceIcon)
setPresence(SHOW_ONLINE_STR, STATUS_ELSE_STR, sendPresence);
else if (awayIcon == presenceIcon)
setPresence(SHOW_AWAY_STR, null, sendPresence);
else if (xaIcon == presenceIcon)
setPresence(SHOW_XA_STR, null, sendPresence);
else if (dndIcon == presenceIcon)
setPresence(SHOW_DND_STR, null, sendPresence);
else if (offlineIcon == presenceIcon && !dontSendPresence)
connect(false);
}
/** Changes presence */
public void setPresence(String presenceStr, String statusStr, boolean sendPresence) {
if (isConnected() && presenceBean != null && sendPresence && !dontSendPresence) {
if (SHOW_ONLINE_STR.equals(presenceStr) &&
statusStr != null && statusStr.equals(STATUS_BUSY_STR))
presenceBean.setMyPresence(true, null, STATUS_BUSY_STR, priority);
else if (SHOW_ONLINE_STR.equals(presenceStr) &&
statusStr != null && statusStr.equals(STATUS_ELSE_STR))
presenceBean.setMyPresence(true, null, STATUS_ELSE_STR, priority);
else if (SHOW_ONLINE_STR.equals(presenceStr))
presenceBean.setMyPresence(true, null,
(statusStr!=null)? statusStr: SHOW_ONLINE_STR, priority);
else if (SHOW_CHAT_STR.equals(presenceStr))
presenceBean.setMyPresence(true, BSPresenceInfo.SHOW_CHAT,
(statusStr!=null)? statusStr: SHOW_CHAT_STR, priority);
else if (SHOW_AWAY_STR.equals(presenceStr))
presenceBean.setMyPresence(true, BSPresenceInfo.SHOW_AWAY,
(statusStr!=null)? statusStr: SHOW_AWAY_STR, priority);
else if (SHOW_XA_STR.equals(presenceStr))
presenceBean.setMyPresence(true, BSPresenceInfo.SHOW_XA,
(statusStr!=null)? statusStr: SHOW_XA_STR, priority);
else if (SHOW_DND_STR.equals(presenceStr))
presenceBean.setMyPresence(true, BSPresenceInfo.SHOW_DND,
(statusStr!=null)? statusStr: SHOW_DND_STR, priority);
}
setPresenceIcons(presenceStr, statusStr);
}
/** Changes application icon according to presence and message waiting */
private void setPresenceIcons(String showString, String statusString) {
Icon icon = getPresenceIcon(isConnected(), showString, statusString);
Image image = getPresenceImage(isConnected(), showString, newMessage);
setIconImage(image);
if (statusesBar != null)
statusesBar.setMyPresenceImage(image);
presenceMenu.setIcon(icon);
dontSendPresence = true;
showComboBox.setSelectedItem(icon);
dontSendPresence = false;
showComboBox.setEnabled(isConnected());
showComboBox.repaint();
if (systemTrayInd != null) systemTrayInd.setIcon(isConnected(), showString, newMessage);
}
/** Returns icon for given presence (for roster,...) */
public Icon getPresenceIcon(boolean connected, String showString, String statusString) {
if (!connected || (showString != null && showString.equals(SHOW_OFFLINE_STR)))
return offlineIcon;
else if (showString == null || showString.equals(SHOW_ONLINE_STR)) {
if (statusString != null && -1 != statusString.indexOf(STATUS_ELSE_STR))
return elseIcon;
else if (statusString != null && -1 != statusString.indexOf(STATUS_BUSY_STR))
return busyIcon;
else
return onlineIcon;
}
else if (showString.equals(SHOW_CHAT_STR))
return chatIcon;
else if (showString.equals(SHOW_AWAY_STR))
return awayIcon;
else if (showString.equals(SHOW_XA_STR))
return xaIcon;
else if (showString.equals(SHOW_DND_STR))
return dndIcon;
else
return offlineIcon;
}
/** Returns image for given presence (for frame,...) */
public Image getPresenceImage(boolean connected, String showString,
boolean newMessage) {
if (!connected || (showString != null && showString.equals(SHOW_OFFLINE_STR)))
return newMessage? offlineMsgImage: offlineImage;
else if (showString == null || showString.equals(SHOW_ONLINE_STR))
return newMessage?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -