Search in sources :

Example 1 with JiveTreeCellRenderer

use of org.jivesoftware.spark.component.JiveTreeCellRenderer in project Spark by igniterealtime.

the class CustomMessages method editCustomMessages.

public static void editCustomMessages() {
    final JiveTreeNode rootNode = new JiveTreeNode(Res.getString("status.custom.messages"));
    final Tree tree = new Tree(rootNode);
    tree.setCellRenderer(new JiveTreeCellRenderer());
    final List<CustomStatusItem> customItems = load();
    final StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
    Iterator<StatusItem> statusItems = statusBar.getStatusList().iterator();
    while (statusItems.hasNext()) {
        StatusItem item = statusItems.next();
        JiveTreeNode node = new JiveTreeNode(item.getText(), false, item.getIcon());
        Iterator<CustomStatusItem> cMessages = customItems.iterator();
        node.setAllowsChildren(true);
        while (cMessages.hasNext()) {
            CustomStatusItem csi = cMessages.next();
            if (csi.getType().equals(item.getText())) {
                JiveTreeNode subNode = new JiveTreeNode(csi.getStatus(), false);
                node.add(subNode);
            }
        }
        rootNode.add(node);
    }
    final JScrollPane pane = new JScrollPane(tree);
    // The user should only be able to close this dialog.
    Object[] options = { Res.getString("close") };
    final JOptionPane optionPane = new JOptionPane(pane, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout());
    mainPanel.add(optionPane, BorderLayout.CENTER);
    final JDialog optionsDialog = new JDialog(SparkManager.getMainWindow(), Res.getString("title.edit.custom.message"), true);
    optionsDialog.setContentPane(mainPanel);
    optionsDialog.pack();
    optionsDialog.setLocationRelativeTo(SparkManager.getMainWindow());
    optionPane.addPropertyChangeListener(propertyChangeEvent -> {
        String value = (String) optionPane.getValue();
        if (Res.getString("close").equals(value)) {
            optionsDialog.setVisible(false);
        }
    });
    for (int i = 0; i <= tree.getRowCount(); i++) {
        tree.expandPath(tree.getPathForRow(i));
    }
    tree.addMouseListener(new MouseAdapter() {

        public void mousePressed(MouseEvent mouseEvent) {
            checkPopup(mouseEvent);
        }

        public void mouseReleased(MouseEvent mouseEvent) {
            checkPopup(mouseEvent);
        }

        public void checkPopup(MouseEvent event) {
            if (!event.isPopupTrigger()) {
                return;
            }
            TreePath path = tree.getPathForLocation(event.getX(), event.getY());
            if (path != null) {
                tree.setSelectionPath(path);
            }
            final JiveTreeNode selectedNode = (JiveTreeNode) tree.getLastSelectedPathComponent();
            if (selectedNode == null || selectedNode.getParent() == null) {
                return;
            } else if (selectedNode.getParent() == rootNode) {
                JPopupMenu popup = new JPopupMenu();
                Action addAction = new AbstractAction() {

                    private static final long serialVersionUID = 2187174931315380754L;

                    public void actionPerformed(ActionEvent actionEvent) {
                        CustomStatus status = new CustomStatus();
                        String type = (String) selectedNode.getUserObject();
                        status.invoke(type);
                        reloadTree(rootNode, tree);
                    }
                };
                addAction.putValue(Action.NAME, Res.getString("menuitem.add"));
                popup.add(addAction);
                popup.show(tree, event.getX(), event.getY());
                return;
            }
            final JiveTreeNode parentNode = (JiveTreeNode) selectedNode.getParent();
            final String messageStatus = (String) selectedNode.getUserObject();
            final String messageType = (String) parentNode.getUserObject();
            if (event.isPopupTrigger()) {
                JPopupMenu popup = new JPopupMenu();
                Action deleteAction = new AbstractAction() {

                    private static final long serialVersionUID = -4421868467918912876L;

                    public void actionPerformed(ActionEvent actionEvent) {
                        List<CustomStatusItem> list = new ArrayList<>();
                        // Refresh customItems list
                        List<CustomStatusItem> customItems = load();
                        Iterator<CustomStatusItem> iter = customItems.iterator();
                        while (iter.hasNext()) {
                            CustomStatusItem item = iter.next();
                            if (item.getType().equals(messageType) && item.getStatus().equals(messageStatus)) {
                            } else {
                                list.add(item);
                            }
                        }
                        parentNode.remove(selectedNode);
                        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
                        model.nodeStructureChanged(parentNode);
                        save(list);
                    }
                };
                deleteAction.putValue(Action.NAME, Res.getString("menuitem.delete"));
                popup.add(deleteAction);
                Action editAction = new AbstractAction() {

                    private static final long serialVersionUID = 39916149252596354L;

                    public void actionPerformed(ActionEvent actionEvent) {
                        List<CustomStatusItem> newItems = load();
                        Iterator<CustomStatusItem> iter = newItems.iterator();
                        while (iter.hasNext()) {
                            CustomStatusItem item = iter.next();
                            if (item.getType().equals(messageType) && item.getStatus().equals(messageStatus)) {
                                CustomStatus customStatus = new CustomStatus();
                                customStatus.showEditDialog(item);
                                // Reload tree.
                                reloadTree(rootNode, tree);
                                break;
                            }
                        }
                    }
                };
                editAction.putValue(Action.NAME, Res.getString("menuitem.edit"));
                popup.add(editAction);
                popup.show(tree, event.getX(), event.getY());
            }
        }
    });
    optionsDialog.setVisible(true);
    optionsDialog.toFront();
    optionsDialog.requestFocus();
}
Also used : JPanel(javax.swing.JPanel) Action(javax.swing.Action) AbstractAction(javax.swing.AbstractAction) ActionEvent(java.awt.event.ActionEvent) JiveTreeCellRenderer(org.jivesoftware.spark.component.JiveTreeCellRenderer) BorderLayout(java.awt.BorderLayout) JiveTreeNode(org.jivesoftware.spark.component.JiveTreeNode) Iterator(java.util.Iterator) Tree(org.jivesoftware.spark.component.Tree) ArrayList(java.util.ArrayList) List(java.util.List) AbstractAction(javax.swing.AbstractAction) JScrollPane(javax.swing.JScrollPane) MouseEvent(java.awt.event.MouseEvent) MouseAdapter(java.awt.event.MouseAdapter) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) JOptionPane(javax.swing.JOptionPane) JPopupMenu(javax.swing.JPopupMenu) TreePath(javax.swing.tree.TreePath) JDialog(javax.swing.JDialog)

Example 2 with JiveTreeCellRenderer

use of org.jivesoftware.spark.component.JiveTreeCellRenderer in project Spark by igniterealtime.

the class WorkgroupInvitationDialog method hasSelectedAgent.

/**
 * Returns the agent selected.
 *
 * @param chatRoom the room this roster will be used with.
 * @param transfer true if this will be a transfer.
 * @return true if a valid agent has been selected.
 */
public boolean hasSelectedAgent(ChatRoom chatRoom, boolean transfer) {
    final JiveTreeNode workgroupsNode = new JiveTreeNode("Workgroups", true);
    final JiveTreeNode queueNode = new JiveTreeNode("Queues", true);
    final String workgroupService = "workgroup." + SparkManager.getSessionManager().getServerAddress();
    final String jid = SparkManager.getSessionManager().getJID();
    String room = chatRoom.getRoomname();
    Collection agents = null;
    try {
        agents = getAvailableAgents(FastpathPlugin.getAgentSession().getAgentRoster(), room);
    } catch (SmackException.NotConnectedException e) {
        Log.warning("Unable to get agent roster.", e);
    }
    // Clear jid field
    jidField.setText("");
    String title = FpRes.getString("invite.agent");
    String acceptButton = FpRes.getString("invite");
    if (transfer) {
        title = FpRes.getString("transfer.to.agent");
        acceptButton = FpRes.getString("transfer");
    }
    String stockMessage = FpRes.getString("message.transfering.to.user");
    if (!transfer) {
        stockMessage = FpRes.getString("message.join.me.in.chat");
    }
    rootNode = new JiveTreeNode("Ask For Assistance", true);
    tree = new Tree(rootNode);
    tree.setCellRenderer(new JiveTreeCellRenderer());
    // This will remove lines from the tree and setup initial l&f
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree.setRowHeight(16);
    tree.setExpandsSelectedPaths(true);
    tree.addTreeSelectionListener(new TreeSelectionListener() {

        public void valueChanged(TreeSelectionEvent e) {
            TreePath path = e.getNewLeadSelectionPath();
            Object o = path.getLastPathComponent();
            if (o instanceof JiveTreeNode) {
                JiveTreeNode node = (JiveTreeNode) o;
                JiveTreeNode parentNode = (JiveTreeNode) node.getParent();
                if (parentNode == workgroupsNode) {
                    jidField.setText(node.getUserObject().toString() + "@" + workgroupService);
                } else if (parentNode == queueNode) {
                    jidField.setText(FastpathPlugin.getWorkgroup().getWorkgroupJID() + "/" + node.getUserObject().toString());
                } else {
                    String agent = getAgent();
                    jidField.setText(agent);
                }
            }
        }
    });
    // Create message field
    messageField = new JTextArea();
    messageField.setWrapStyleWord(true);
    inviteLabel = new JLabel();
    if (transfer) {
        inviteLabel.setText(FpRes.getString("transfer.to") + ":");
    } else {
        inviteLabel.setText(FpRes.getString("invite") + ":");
    }
    if (transfer) {
        // Create the title panel for this dialog
        titlePanel = new TitlePanel(FpRes.getString("title.transfer"), FpRes.getString("message.transfer.to.another.agent"), FastpathRes.getImageIcon(FastpathRes.CHATTING_AGENT_IMAGE), true);
    } else {
        // Create the title panel for this dialog
        titlePanel = new TitlePanel(FpRes.getString("title.invitation"), FpRes.getString("message.invite.another.agent"), FastpathRes.getImageIcon(FastpathRes.CHATTING_AGENT_IMAGE), true);
    }
    // Build Tree
    String joinedWorkgroupName = XmppStringUtils.parseLocalpart(FastpathPlugin.getWorkgroup().getWorkgroupJID());
    final JiveTreeNode workgroupNode = new JiveTreeNode(joinedWorkgroupName, true);
    final Iterator agentIter = agents.iterator();
    while (agentIter.hasNext()) {
        while (agentIter.hasNext()) {
            String agentName = UserManager.unescapeJID((String) agentIter.next());
            final JiveTreeNode agentNode = new JiveTreeNode(agentName, false, FastpathRes.getImageIcon(FastpathRes.GREEN_BALL));
            workgroupNode.add(agentNode);
        }
        if (workgroupNode.getChildCount() > 0) {
            rootNode.add(workgroupNode);
        }
    }
    Collection workgroupAgents;
    try {
        workgroupAgents = Agent.getWorkgroups(workgroupService, jid, SparkManager.getConnection());
    } catch (XMPPException | SmackException e) {
        Log.error(e);
        workgroupAgents = Collections.EMPTY_LIST;
    }
    if (workgroupAgents.size() > 0) {
        // Add workgroups to combobox
        Iterator<String> workgroups = workgroupAgents.iterator();
        while (workgroups.hasNext()) {
            String workgroup = workgroups.next();
            String workgroupName = XmppStringUtils.parseLocalpart(workgroup);
            final JiveTreeNode wgNode = new JiveTreeNode(workgroupName, false, FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_16x16));
            workgroupsNode.add(wgNode);
        }
        rootNode.add(workgroupsNode);
    }
    Iterator iter = FastpathPlugin.getAgentSession().getQueues();
    while (iter.hasNext()) {
        final WorkgroupQueue queue = (WorkgroupQueue) iter.next();
        if (queue.getStatus() == WorkgroupQueue.Status.OPEN) {
            final JiveTreeNode qNode = new JiveTreeNode(queue.getName(), false, FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_16x16));
            queueNode.add(qNode);
        }
    }
    rootNode.add(queueNode);
    // New Roster tree. Do not show agents at all.
    final UserManager userManager = SparkManager.getUserManager();
    Collection jids = userManager.getUserJidsInRoom(room, false);
    roster = new WorkgroupRosterTree(jids, false, workgroups);
    try {
        rosterTree = roster.getRosterTree();
        JiveTreeNode node = (JiveTreeNode) rosterTree.getModel().getRoot();
        rootNode.add(node);
    } catch (Exception e) {
        Log.error("Error checking for selected agent", e);
    }
    // Construct main panel w/ layout.
    final JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout());
    mainPanel.add(titlePanel, BorderLayout.NORTH);
    // The user should only be able to close this dialog.
    Object[] options = { acceptButton, FpRes.getString("cancel") };
    // Create objects to add to mainPanel.
    final JPanel parentPanel = new JPanel();
    final JLabel messageLabel = new JLabel();
    final JLabel agentLabel = new JLabel();
    parentPanel.setLayout(new GridBagLayout());
    // Update Labels using ResourceUtils
    ResourceUtils.resLabel(messageLabel, messageField, FpRes.getString("label.message.to.agent"));
    ResourceUtils.resLabel(agentLabel, tree, FpRes.getString("label.select.agent"));
    // Add Components to Parent Panel
    parentPanel.add(agentLabel, new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
    parentPanel.add(new JScrollPane(tree), new GridBagConstraints(0, 1, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 100));
    parentPanel.add(messageLabel, new GridBagConstraints(0, 3, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
    parentPanel.add(new JScrollPane(messageField), new GridBagConstraints(0, 4, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 25));
    parentPanel.add(inviteLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
    parentPanel.add(jidField, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
    // Use line wrap.
    messageField.setLineWrap(true);
    // Update MessageField with stock message
    messageField.setText(stockMessage);
    // Add Parent Object to master OptionPane
    pane = new JOptionPane(parentPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
    mainPanel.add(pane, BorderLayout.CENTER);
    dlg = new JDialog(SparkManager.getChatManager().getChatContainer().getChatFrame(), title, true);
    dlg.pack();
    dlg.setSize(500, 500);
    dlg.setContentPane(mainPanel);
    dlg.setLocationRelativeTo(chatRoom);
    pane.addPropertyChangeListener(this);
    // expand the tree for displaying
    for (int i = 0; i <= tree.getRowCount(); i++) {
        tree.expandPath(tree.getPathForRow(i));
    }
    dlg.setVisible(true);
    dlg.toFront();
    dlg.requestFocus();
    if (!isValid) {
        return false;
    }
    return true;
}
Also used : JPanel(javax.swing.JPanel) GridBagConstraints(java.awt.GridBagConstraints) JTextArea(javax.swing.JTextArea) Insets(java.awt.Insets) GridBagLayout(java.awt.GridBagLayout) TreeSelectionListener(javax.swing.event.TreeSelectionListener) WorkgroupQueue(org.jivesoftware.smackx.workgroup.agent.WorkgroupQueue) JiveTreeCellRenderer(org.jivesoftware.spark.component.JiveTreeCellRenderer) BorderLayout(java.awt.BorderLayout) JiveTreeNode(org.jivesoftware.spark.component.JiveTreeNode) Iterator(java.util.Iterator) Tree(org.jivesoftware.spark.component.Tree) JScrollPane(javax.swing.JScrollPane) SmackException(org.jivesoftware.smack.SmackException) JLabel(javax.swing.JLabel) JOptionPane(javax.swing.JOptionPane) TitlePanel(org.jivesoftware.spark.component.TitlePanel) SmackException(org.jivesoftware.smack.SmackException) XMPPException(org.jivesoftware.smack.XMPPException) TreePath(javax.swing.tree.TreePath) UserManager(org.jivesoftware.spark.UserManager) Collection(java.util.Collection) TreeSelectionEvent(javax.swing.event.TreeSelectionEvent) XMPPException(org.jivesoftware.smack.XMPPException) JDialog(javax.swing.JDialog)

Example 3 with JiveTreeCellRenderer

use of org.jivesoftware.spark.component.JiveTreeCellRenderer in project Spark by igniterealtime.

the class BookmarksUI method loadUI.

/**
 * Initialize Conference UI.
 */
public void loadUI() {
    EventQueue.invokeLater(() -> {
        setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        setLayout(new GridBagLayout());
        add(getServicePanel(), new GridBagConstraints(0, 0, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
        rootNode = new JiveTreeNode("Conference Services");
        tree = new Tree(rootNode) {

            private static final long serialVersionUID = -8445572224948613446L;

            @Override
            protected void setExpandedState(TreePath path, boolean state) {
                // Ignore all collapse requests; collapse events will not be fired
                if (state) {
                    super.setExpandedState(path, state);
                }
            }
        };
        tree.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(MouseEvent mouseEvent) {
                tree.setCursor(GraphicUtils.HAND_CURSOR);
            }

            @Override
            public void mouseExited(MouseEvent mouseEvent) {
                tree.setCursor(GraphicUtils.DEFAULT_CURSOR);
            }
        });
        JScrollPane scrollPane = new JScrollPane(tree);
        add(scrollPane, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
        // Add all registered services.
        addRegisteredServices();
        tree.setCellRenderer(new JiveTreeCellRenderer());
        tree.putClientProperty("JTree.lineStyle", "None");
        tree.setRootVisible(false);
        tree.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent mouseEvent) {
                if (mouseEvent.getClickCount() == 2) {
                    TreePath path = tree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY());
                    if (path == null) {
                        return;
                    }
                    JiveTreeNode node = (JiveTreeNode) path.getLastPathComponent();
                    if (node != null && node.getAllowsChildren()) {
                        browseRooms((String) node.getUserObject());
                    } else if (node != null) {
                        String roomJID = node.getAssociatedObject().toString();
                        ConferenceUtils.joinConferenceOnSeperateThread(node.getUserObject().toString(), roomJID, null);
                    }
                }
            }

            @Override
            public void mouseReleased(MouseEvent mouseEvent) {
                checkPopup(mouseEvent);
            }

            @Override
            public void mousePressed(MouseEvent mouseEvent) {
                checkPopup(mouseEvent);
            }
        });
        setBackground(Color.white);
        try {
            manager = BookmarkManager.getBookmarkManager(SparkManager.getConnection());
        } catch (XMPPException | SmackException e) {
            Log.error(e);
        }
        final TimerTask bookmarkTask = new TimerTask() {

            @Override
            public void run() {
                Collection<BookmarkedConference> bc = null;
                try {
                    while (bc == null) {
                        bc = manager.getBookmarkedConferences();
                    }
                    setBookmarks(bc);
                } catch (XMPPException | SmackException error) {
                    Log.error(error);
                }
            }
        };
        TaskEngine.getInstance().schedule(bookmarkTask, 5000);
    });
}
Also used : SmackException(org.jivesoftware.smack.SmackException) BookmarkedConference(org.jivesoftware.smackx.bookmarks.BookmarkedConference) JiveTreeCellRenderer(org.jivesoftware.spark.component.JiveTreeCellRenderer) TreePath(javax.swing.tree.TreePath) JiveTreeNode(org.jivesoftware.spark.component.JiveTreeNode) Tree(org.jivesoftware.spark.component.Tree) XMPPException(org.jivesoftware.smack.XMPPException)

Aggregations

TreePath (javax.swing.tree.TreePath)3 JiveTreeCellRenderer (org.jivesoftware.spark.component.JiveTreeCellRenderer)3 JiveTreeNode (org.jivesoftware.spark.component.JiveTreeNode)3 Tree (org.jivesoftware.spark.component.Tree)3 BorderLayout (java.awt.BorderLayout)2 Iterator (java.util.Iterator)2 JDialog (javax.swing.JDialog)2 JOptionPane (javax.swing.JOptionPane)2 JPanel (javax.swing.JPanel)2 JScrollPane (javax.swing.JScrollPane)2 SmackException (org.jivesoftware.smack.SmackException)2 XMPPException (org.jivesoftware.smack.XMPPException)2 GridBagConstraints (java.awt.GridBagConstraints)1 GridBagLayout (java.awt.GridBagLayout)1 Insets (java.awt.Insets)1 ActionEvent (java.awt.event.ActionEvent)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1