@Override protected Transferable createTransferable(JComponent c) { JTextPane aTextPane = (JTextPane) c; HTMLEditorKit kit = ((HTMLEditorKit) aTextPane.getEditorKit()); StyledDocument sdoc = aTextPane.getStyledDocument(); int sel_start = aTextPane.getSelectionStart(); int sel_end = aTextPane.getSelectionEnd(); int i = sel_start; StringBuilder output = new StringBuilder(); while (i < sel_end) { Element e = sdoc.getCharacterElement(i); Object nameAttr = e.getAttributes().getAttribute(StyleConstants.NameAttribute); int start = e.getStartOffset(), end = e.getEndOffset(); if (nameAttr == HTML.Tag.BR) { output.append("\n"); } else if (nameAttr == HTML.Tag.CONTENT) { if (start < sel_start) { start = sel_start; } if (end > sel_end) { end = sel_end; } try { String str = sdoc.getText(start, end - start); output.append(str); } catch (BadLocationException ble) { Debug.error(me + "Copy-paste problem!\n%s", ble.getMessage()); } } i = end; } return new StringSelection(output.toString()); }
public void showItem() { if (!this.editorPanel.getViewer().isLanguageFunctionAvailable()) { return; } this.highlight = this.editorPanel .getEditor() .addHighlight(this.position, this.position + this.word.length(), null, true); final FindSynonymsActionHandler _this = this; QTextEditor editor = this.editorPanel.getEditor(); Rectangle r = null; try { r = editor.modelToView(this.position); } catch (Exception e) { // BadLocationException! Environment.logError("Location: " + this.position + " is not valid", e); UIUtils.showErrorMessage(this.editorPanel, "Unable to display synonyms."); return; } int y = r.y; // Show a panel of all the items. final QPopup p = this.popup; p.setOpaque(false); Synonyms syns = null; try { syns = this.projectViewer.getSynonymProvider().getSynonyms(this.word); } catch (Exception e) { UIUtils.showErrorMessage(this.editorPanel, "Unable to display synonyms."); Environment.logError("Unable to lookup synonyms for: " + word, e); return; } if ((syns.words.size() == 0) && (this.word.toLowerCase().endsWith("ed"))) { // Trim off the ed and try again. try { syns = this.projectViewer.getSynonyms(this.word.substring(0, this.word.length() - 2)); } catch (Exception e) { UIUtils.showErrorMessage(this.editorPanel, "Unable to display synonyms."); Environment.logError("Unable to lookup synonyms for: " + word, e); return; } } if ((syns.words.size() == 0) && (this.word.toLowerCase().endsWith("s"))) { // Trim off the ed and try again. try { syns = this.projectViewer.getSynonyms(this.word.substring(0, this.word.length() - 1)); } catch (Exception e) { UIUtils.showErrorMessage(this.editorPanel, "Unable to display synonyms."); Environment.logError("Unable to lookup synonyms for: " + word, e); return; } } StringBuilder sb = new StringBuilder(); if (syns.words.size() > 0) { sb.append("6px"); for (int i = 0; i < syns.words.size(); i++) { if (sb.length() > 0) { sb.append(", "); } sb.append("p, 3px, [p,90px], 5px"); } /* if (syns.words.size () > 0) { sb.append (",5px"); } */ } else { sb.append("6px, p, 6px"); } FormLayout summOnly = new FormLayout("3px, fill:380px:grow, 3px", sb.toString()); PanelBuilder pb = new PanelBuilder(summOnly); CellConstraints cc = new CellConstraints(); int ind = 2; Map<String, String> names = new HashMap(); names.put(Synonyms.ADJECTIVE + "", "Adjectives"); names.put(Synonyms.NOUN + "", "Nouns"); names.put(Synonyms.VERB + "", "Verbs"); names.put(Synonyms.ADVERB + "", "Adverbs"); names.put(Synonyms.OTHER + "", "Other"); if (syns.words.size() == 0) { JLabel l = new JLabel("No synonyms found."); l.setFont(l.getFont().deriveFont(Font.ITALIC)); pb.add(l, cc.xy(2, 2)); } // Determine what type of word we are looking for. for (Synonyms.Part i : syns.words) { JLabel l = new JLabel(names.get(i.type + "")); l.setFont(l.getFont().deriveFont(Font.ITALIC)); l.setFont(l.getFont().deriveFont((float) UIUtils.getEditorFontSize(10))); l.setBorder( new CompoundBorder( new MatteBorder(0, 0, 1, 0, Environment.getBorderColor()), new EmptyBorder(0, 0, 3, 0))); pb.add(l, cc.xy(2, ind)); ind += 2; HTMLEditorKit kit = new HTMLEditorKit(); HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument(); JTextPane t = new JTextPane(doc); t.setEditorKit(kit); t.setEditable(false); t.setOpaque(false); StringBuilder buf = new StringBuilder( "<style>a { text-decoration: none; } a:hover { text-decoration: underline; }</style><span style='color: #000000; font-size: " + ((int) UIUtils.getEditorFontSize(10) /*t.getFont ().getSize () + 2*/) + "pt; font-family: " + t.getFont().getFontName() + ";'>"); for (int x = 0; x < i.words.size(); x++) { String w = (String) i.words.get(x); buf.append("<a class='x' href='http://" + w + "'>" + w + "</a>"); if (x < (i.words.size() - 1)) { buf.append(", "); } } buf.append("</span>"); t.setText(buf.toString()); t.addHyperlinkListener( new HyperlinkAdapter() { public void hyperlinkUpdate(HyperlinkEvent ev) { if (ev.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { QTextEditor ed = _this.editorPanel.getEditor(); ed.replaceText( _this.position, _this.position + _this.word.length(), ev.getURL().getHost()); ed.removeHighlight(_this.highlight); _this.popup.setVisible(false); _this.projectViewer.fireProjectEvent( ProjectEvent.SYNONYM, ProjectEvent.REPLACE, ev.getURL().getHost()); } } }); // Annoying that we have to do this but it prevents the text from being too small. t.setSize(new Dimension(380, Short.MAX_VALUE)); JScrollPane sp = new JScrollPane(t); t.setCaretPosition(0); sp.setOpaque(false); sp.getVerticalScrollBar().setValue(0); /* sp.setPreferredSize (t.getPreferredSize ()); sp.setMaximumSize (new Dimension (380, 75)); */ sp.getViewport().setOpaque(false); sp.setOpaque(false); sp.setBorder(null); sp.getViewport().setBackground(Color.WHITE); sp.setAlignmentX(Component.LEFT_ALIGNMENT); pb.add(sp, cc.xy(2, ind)); ind += 2; } JPanel pan = pb.getPanel(); pan.setOpaque(true); pan.setBackground(Color.WHITE); this.popup.setContent(pan); // r.y -= this.editorPanel.getScrollPane ().getVerticalScrollBar ().getValue (); Point po = SwingUtilities.convertPoint(editor, r.x, r.y, this.editorPanel); r.x = po.x; r.y = po.y; // Subtract the insets of the editorPanel. Insets ins = this.editorPanel.getInsets(); r.x -= ins.left; r.y -= ins.top; this.editorPanel.showPopupAt(this.popup, r, "above", true); }
@Override public synchronized void run() { try { for (int i = 0; i < NUM_PIPES; i++) { while (Thread.currentThread() == reader[i]) { try { this.wait(100); } catch (InterruptedException ie) { } if (pin[i].available() != 0) { String input = this.readLine(pin[i]); appendMsg(htmlize(input)); if (textArea.getDocument().getLength() > 0) { textArea.setCaretPosition(textArea.getDocument().getLength() - 1); } } if (quit) { return; } } } } catch (Exception e) { Debug.error(me + "Console reports an internal error:\n%s", e.getMessage()); } }
public void toChatScreen(String toScreen, boolean selfSeen) throws IOException, BadLocationException { // Timestamp ts = new Timestamp(); String toScreenFinal = ""; Date now = Calendar.getInstance().getTime(); SimpleDateFormat format = new SimpleDateFormat("hh:mm"); String ts = format.format(now); // chatScreen.append(ts + " " + toScreen + "\n"); toScreenFinal = "<font color=gray>" + ts + "</font> "; if (selfSeen) toScreenFinal = toScreenFinal + "<font color=red>" + toScreen + "</font>"; else toScreenFinal = toScreenFinal + toScreen; // chatter.addTo(toScreen); // if(standardWindow) { // chatScreen.setCaretPosition(chatScreen.getDocument().getLength()); // } // else { JScrollBar vBar = scrollChat.getVerticalScrollBar(); int vSize = vBar.getVisibleAmount(); int maxVBar = vBar.getMaximum(); int currVBar = vBar.getValue() + vSize; kit.insertHTML(doc, doc.getLength(), toScreenFinal, 0, 0, null); if (maxVBar == currVBar) { chatScreen.setCaretPosition(chatScreen.getDocument().getLength()); } // } // kit.insertHTML(doc, doc.getLength(), toScreenFinal, 0, 0, null); }
public EditorConsolePane() { super(); textArea = new JTextPane(); textArea.setEditorKit(new HTMLEditorKit()); textArea.setTransferHandler(new JTextPaneHTMLTransferHandler()); String css = PreferencesUser.getInstance().getConsoleCSS(); ((HTMLEditorKit) textArea.getEditorKit()).getStyleSheet().addRule(css); textArea.setEditable(false); setLayout(new BorderLayout()); add(new JScrollPane(textArea), BorderLayout.CENTER); if (ENABLE_IO_REDIRECT) { Debug.log(3, "EditorConsolePane: starting redirection to message area"); int npipes = 2; NUM_PIPES = npipes * ScriptRunner.scriptRunner.size(); pin = new PipedInputStream[NUM_PIPES]; reader = new Thread[NUM_PIPES]; for (int i = 0; i < NUM_PIPES; i++) { pin[i] = new PipedInputStream(); } int irunner = 0; for (IScriptRunner srunner : ScriptRunner.scriptRunner.values()) { Debug.log(3, "EditorConsolePane: redirection for %s", srunner.getName()); if (srunner.doSomethingSpecial( "redirect", Arrays.copyOfRange(pin, irunner * npipes, irunner * npipes + 2))) { Debug.log(3, "EditorConsolePane: redirection success for %s", srunner.getName()); quit = false; // signals the Threads that they should exit // TODO Hack to avoid repeated redirect of stdout/err ScriptRunner.systemRedirected = true; // Starting two seperate threads to read from the PipedInputStreams for (int i = irunner * npipes; i < irunner * npipes + npipes; i++) { reader[i] = new Thread(this); reader[i].setDaemon(true); reader[i].start(); } irunner++; } } } // Create the popup menu. popup = new JPopupMenu(); JMenuItem menuItem = new JMenuItem("Clear messages"); // Add ActionListener that clears the textArea menuItem.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { textArea.setText(""); } }); popup.add(menuItem); // Add listener to components that can bring up popup menus. MouseListener popupListener = new PopupListener(popup); textArea.addMouseListener(popupListener); }
private void appendMsg(String msg) { HTMLDocument doc = (HTMLDocument) textArea.getDocument(); HTMLEditorKit kit = (HTMLEditorKit) textArea.getEditorKit(); try { kit.insertHTML(doc, doc.getLength(), msg, 0, 0, null); } catch (Exception e) { Debug.error(me + "Problem appending text to message area!\n%s", e.getMessage()); } }
public void substarterEnd(String prefix, String userName, String input) { System.out.println("ending give"); if (substarter.end(winNum)) { g_start.setEnabled(true); g_end.setEnabled(false); String winner = substarter.returnWinner(winNum); input = "Congrats to the new sub winner: " + winner + "!"; prefix = "<b><font color=blue>[" + userName + "]:</font></b> "; registeredUserList.setText(winner + "\n"); } else { g_start.setEnabled(true); g_end.setEnabled(false); prefix = "<b><font color=blue>[" + userName + "]:</font></b> "; input = "No one entered giveaway, ending giveaway."; } sock.outputToChannel(input, channelName); try { toChatScreen(prefix + input, false); } catch (IOException | BadLocationException ex) { Logger.getLogger(IRCBOT.class.getName()).log(Level.SEVERE, null, ex); } }
public void substarterBegin(String prefix, String userName, String input) { if (substarter.start(winNum)) { System.out.println("Starting give"); g_start.setEnabled(false); g_end.setEnabled(true); registeredUserList.setText(""); prefix = "<b><font color=blue>[" + userName + "]:</font></b> "; input = "Substarter giveaway is starting, make sure to register at http://substarter.com/my-account to participate. Type !substarter for a chance to win a free sub!"; sock.outputToChannel(input, channelName); } else { input = "<font color='red'>[WARNING]: Giveaway already started, perhaps in another chat window.</font>"; } try { toChatScreen(prefix + input, false); } catch (IOException | BadLocationException ex) { Logger.getLogger(IRCBOT.class.getName()).log(Level.SEVERE, null, ex); } }
public void clear() { textArea.setText(""); }
public IRCBOT(boolean uList, String channel, int chatNum) { // chatter = new ChatDisplay("<html><body bgcolor='black'><table border=0pt width=100%>"); winNum = chatNum; URL iconURL = getClass().getResource("P_300x300.png"); ImageIcon icon = new ImageIcon(iconURL); setIconImage(icon.getImage()); Action doNothing = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) {} }; channelName = channel; standardWindow = uList; chatInput = new JTextArea(4, 55); chatInput.setWrapStyleWord(true); chatInput.setLineWrap(true); chatInput.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "doNothing"); chatScreen = new JTextPane(); chatScreen.setContentType("text/html"); chatScreen.setEditorKit(kit); chatScreen.setDocument(doc); userList = new JTextPane(); registeredUserList = new JTextPane(); sendButton = new JButton("SEND"); g_start = new JButton("START"); g_end = new JButton("END"); g_reroll = new JButton("secret"); JLabel l_giveaway = new JLabel("Giveaway", JLabel.CENTER); JLabel l_chat = new JLabel("Chat", JLabel.CENTER); JLabel l_uList = new JLabel("User List", JLabel.CENTER); sendButton.addActionListener(this); g_start.addActionListener(this); g_end.addActionListener(this); g_reroll.addActionListener(this); g_start.setEnabled(false); // disabled for basic irc client g_end.setEnabled(false); g_reroll.setEnabled(false); // String start = "<html><body>"; Dimension min = new Dimension(100, 1); Dimension pref = new Dimension(150, 1); Dimension max = new Dimension(600, 600); // chatScreen.setMinimumSize(min); // userList.setMinimumSize(min); // chatInput.addKeyListener(KeyBoardListener); JPanel mainPanel = new JPanel(new BorderLayout(5, 5)); JPanel left = new JPanel(new BorderLayout(5, 5)); JPanel mid = new JPanel(new BorderLayout(5, 5)); JPanel right = new JPanel(new BorderLayout(5, 5)); JPanel giveaway_buttons = new JPanel(new BorderLayout(5, 5)); JPanel sendBar = new JPanel(); scrollChat = new JScrollPane(chatScreen); JScrollPane scrollChatInput = new JScrollPane(chatInput); userListScroll = new JScrollPane(userList); JScrollPane regUserListScroll = new JScrollPane(registeredUserList); userListScroll.setMinimumSize(min); // userListScroll.setPreferredSize(pref); // userListScroll.setMaximumSize(new Dimension(800,600)); // userListScroll.setPreferredSize(new Dimension(100,100)); // scrollChat.setPreferredSize(pref); scrollChat.setMinimumSize(min); // scrollChat.setMaximumSize(new Dimension(500,500)); regUserListScroll.setPreferredSize(pref); mid.add(l_chat, BorderLayout.NORTH); mid.add(scrollChat, BorderLayout.CENTER); right.add(l_uList, BorderLayout.NORTH); right.add(userListScroll, BorderLayout.CENTER); giveaway_buttons.add(g_start, BorderLayout.WEST); giveaway_buttons.add(g_end, BorderLayout.CENTER); giveaway_buttons.add(g_reroll, BorderLayout.PAGE_END); left.add(giveaway_buttons, BorderLayout.PAGE_END); JSplitPane chat_userList = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, mid, right); chat_userList.setOneTouchExpandable(true); chat_userList.setDividerLocation(500); chat_userList.setResizeWeight(0.5); chat_userList.setContinuousLayout(true); // chat_userList.setPreferredSize(new Dimension(100,100)); chat_userList.setMinimumSize(min); // chat_userList.setMaximumSize(max); userListScroll.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER); // scroll.add(chatScreen); sendBar.add(scrollChatInput); sendBar.add(sendButton); if (standardWindow) { mainPanel.add(chat_userList, BorderLayout.CENTER); mainPanel.add(sendBar, BorderLayout.PAGE_END); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); settings = new JMenuItem("Settings"); settings.addActionListener(this); fileMenu.add(settings); menuBar.add(fileMenu); left.add(l_giveaway, BorderLayout.NORTH); left.add(regUserListScroll, BorderLayout.CENTER); // left.setBorder(new EmptyBorder(0,5,0,0)); // chat_userList.setBorder(new EtchedBorder(0,0,0,5)); mainPanel.add(left, BorderLayout.WEST); mainPanel.add(menuBar, BorderLayout.PAGE_START); // mainPanel.setBorder(new EmptyBorder(0,10,10,10)); } else { mainPanel.add(scrollChat, BorderLayout.CENTER); } registeredUserList.setEditable(false); userList.setEditable(false); chatScreen.setEditable(false); registeredUserList.setFont(new Font("Courier New", Font.PLAIN, 12)); chatScreen.setFont(new Font("Courier New", Font.PLAIN, 12)); chatInput.setFont(new Font("Courier New", Font.PLAIN, 12)); getContentPane().add(mainPanel); setSize(800, 500); setVisible(true); setResizable(true); setLocationRelativeTo(null); setTitle("IRC Chatter"); setMinimumSize(new Dimension(500, 200)); addWindowListener( new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // System.out.println("\n\n\n\n\n\\n\nCLOSEDWINDOW\n\n\n\n\n\n\n\n"); if (sock.isSafe() == true) sock.outputText("PART " + channelName + "\r\n"); // System.out.println("\n\n\n\n\n\\n\nCLOSEDWINDOW\n\n\n\n\n\n\n\n"); } }); chatInput.addKeyListener(this); chatInput.requestFocus(); }
public void setRegUserList(String list) { // DB function // Registered User List from db registeredUserList.setText(list); }
public void setUserList(String list) { userList.setText(list); }