⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsmainframe.java

📁 一款即时通讯软件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        }

        // 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 + -