/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package rsclient.chat; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListModel; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EtchedBorder; import javax.swing.text.DefaultCaret; import logic.IrcManager; import net.miginfocom.swing.MigLayout; import org.pircbotx.User; /** * * @author ben */ public class ChatMainPane extends JPanel { JTextArea messagewindow; JTextField inputfield; JTextArea userlist; JList chanlist; ListModel curChans; JScrollPane messagescroll, userscroll, chanscroll; private ActionListener inputListener; String currentChannel; Font ircFont; HashMap<String, JTextArea> messagePanels = new HashMap(); HashMap<String, JTextArea> userPanels = new HashMap(); IrcPanel mainPanel; IrcManager manager; public ChatMainPane(IrcPanel ircPanel) { this.ircFont = new Font("SansSerif", Font.PLAIN, 12); this.mainPanel = ircPanel; this.setLayout(new MigLayout("ins 10")); setup(); setupListeners(); inputfield.addActionListener(inputListener); } private void setup() { UIManager.put("Tree.rendererFillBackground", false); Border loweredbevel = BorderFactory.createEtchedBorder(EtchedBorder.RAISED); DefaultListModel<String> curChans = new DefaultListModel<>(); messagewindow = new JTextArea(); messagewindow.setLineWrap(true); inputfield = new JTextField(); userlist = new JTextArea(); chanlist = new JList(curChans); chanscroll = new JScrollPane(chanlist, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); messagescroll = new JScrollPane(messagewindow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); userscroll = new JScrollPane(userlist, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); chanscroll.setBorder(loweredbevel); messagescroll.setBorder(loweredbevel); userscroll.setBorder(loweredbevel); inputfield.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED, new Color(51, 51, 51), new Color(51, 51, 51))); inputfield.setBackground(new Color(71, 71, 71)); messagewindow.setBackground(new Color(71, 71, 71)); userlist.setBackground(new Color(71, 71, 71)); chanlist.setBackground(new Color(71, 71, 71)); chanlist.setForeground(Color.white); messagewindow.setForeground(Color.white); messagewindow.setFont(ircFont); inputfield.setForeground(Color.white); messagewindow.setText(""); messagewindow.setEditable(false); inputfield.setCaretColor(Color.black); chanlist.setForeground(Color.white); add(chanscroll, "cell 0 0, growx, growy, height 100%,width 15%, align left, spany, "); add(messagescroll, "growy, cell 1 0, width 68%, height 80%, align center, align left"); add(userscroll, "grow y, cell 2 0, width 17%, height 80%, align left"); add(inputfield, "growx, cell 1 1, spanx, width 68%,height 20,align left"); // messagescroll.setViewportView((messagewindow2)); } public void switchChanPanels(String chanName) { userscroll.setViewportView(userPanels.get(chanName)); messagescroll.setViewportView(messagePanels.get(chanName)); messagePanels.get(chanName).setCaretPosition(messagePanels.get(chanName).getDocument().getLength()); currentChannel = chanName; } public void addChanPanel(String chanName) { JTextArea messagePanel = new JTextArea(); messagePanel.setLineWrap(true); messagePanel.setBackground(new Color(71, 71, 71)); messagePanel.setForeground(Color.white); messagePanel.setFont(ircFont); messagePanel.setEditable(false); DefaultCaret dc = (DefaultCaret) messagePanel.getCaret(); dc.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); JTextArea userPanel = new JTextArea(); userPanel.setBackground(new Color(71, 71, 71)); messagePanels.put(chanName, messagePanel); userPanels.put(chanName, userPanel); } public void addMessageToPanel(String user, String chanName, String message) { //Called by IrcManager String time = new SimpleDateFormat("HH:mm").format(new Date()); messagePanels.get(chanName).append("\n[" + time + "] <" + user + "> " + message); messagePanels.get(chanName).setCaretPosition(messagePanels.get(chanName).getDocument().getLength()); } public void updateUsers(ArrayList<User> users) { for (User u : users) { userPanels.get(currentChannel).append("\n" + u.toString()); } } public void setIrcManager(IrcManager mgr) { manager = mgr; } public void clearInputField() { inputfield.setText(""); } public HashMap<String, JTextArea> getMessagePanels() { return messagePanels; } public String getCurrentChannel() { return currentChannel; } private void setupListeners() { inputListener = new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { manager.onUserInput(inputfield.getText()); // if("/test".equals(inputfield.getText())){ // addChanPanels("#pixelz"); // switchChanPanels("#pixelz"); // } } }; } }