From: Alexander S. <as...@us...> - 2006-12-08 17:27:59
|
Update of /cvsroot/jxtaim/jxtaim/src/vsis/im/view In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv19454/src/vsis/im/view Modified Files: ChatGui.java Log Message: use toggle buttons for font modifiers (bold, italic, etc.) and automatically change state depending on attributes below cursor Index: ChatGui.java =================================================================== RCS file: /cvsroot/jxtaim/jxtaim/src/vsis/im/view/ChatGui.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** ChatGui.java 24 Jul 2006 11:55:13 -0000 1.21 --- ChatGui.java 8 Dec 2006 17:27:56 -0000 1.22 *************** *** 29,34 **** --- 29,36 ---- import java.awt.Color; + import java.awt.Component; import java.awt.Container; import java.awt.Dimension; + import java.awt.Event; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; *************** *** 38,41 **** --- 40,44 ---- import java.awt.event.ActionEvent; import java.awt.event.ActionListener; + import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; *************** *** 43,49 **** --- 46,55 ---- import java.io.StringReader; import java.io.StringWriter; + import java.util.Enumeration; + import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; + import javax.swing.InputMap; import javax.swing.JButton; import javax.swing.JEditorPane; *************** *** 54,66 **** --- 60,85 ---- import javax.swing.JMenuItem; import javax.swing.JScrollPane; + import javax.swing.JToggleButton; import javax.swing.JToolBar; + import javax.swing.KeyStroke; + import javax.swing.JSpinner.DefaultEditor; + import javax.swing.border.EtchedBorder; import javax.swing.border.LineBorder; + import javax.swing.event.CaretEvent; + import javax.swing.event.CaretListener; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; + import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; + import javax.swing.text.DefaultEditorKit; + import javax.swing.text.DefaultStyledDocument; + import javax.swing.text.Element; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; import javax.swing.text.StyledEditorKit; + import javax.swing.text.AbstractDocument.BranchElement; + import javax.swing.text.html.HTMLDocument.BlockElement; + import javax.swing.undo.UndoManager; import vsis.im.ServiceProviderManager; *************** *** 232,235 **** --- 251,255 ---- }); + chatscroller = new JScrollPane(chatpane,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); gc.gridx=0; gc.gridy = 0; *************** *** 258,263 **** inputtoolbar.setBorder(new LineBorder(Color.DARK_GRAY,1)); inputtoolbar.setBackground(new Color(245,245,255)); ! Action boldAction = new BBStyledEditorKit.BBBoldAction() { public void actionPerformed(ActionEvent e) { super.actionPerformed(e); --- 278,284 ---- inputtoolbar.setBorder(new LineBorder(Color.DARK_GRAY,1)); inputtoolbar.setBackground(new Color(245,245,255)); + inputtoolbar.setRollover(true); ! final Action boldAction = new BBStyledEditorKit.BBBoldAction() { public void actionPerformed(ActionEvent e) { super.actionPerformed(e); *************** *** 265,272 **** } }; ! inputtoolbar.add(boldAction); ! ! inputtoolbar.add(new BBStyledEditorKit.BBItalicAction() { @Override public void actionPerformed(ActionEvent e) { --- 286,294 ---- } }; + boldAction.putValue(Action.NAME, "B"); + JToggleButton boldButton = new JToggleButton(boldAction); + inputtoolbar.add(boldButton); ! final Action italicAction = new BBStyledEditorKit.BBItalicAction() { @Override public void actionPerformed(ActionEvent e) { *************** *** 275,281 **** } ! }); ! inputtoolbar.add(new BBStyledEditorKit.BBUnderlineAction() { @Override public void actionPerformed(ActionEvent e) { --- 297,306 ---- } ! }; ! italicAction.putValue(Action.NAME, "I"); ! JToggleButton italicButton = new JToggleButton(italicAction); ! inputtoolbar.add(italicButton); ! final Action underlineAction = new BBStyledEditorKit.BBUnderlineAction() { @Override public void actionPerformed(ActionEvent e) { *************** *** 283,287 **** inputarea.requestFocus(); } ! }); gc.gridx=0; gc.gridy = 3; --- 308,325 ---- inputarea.requestFocus(); } ! }; ! underlineAction.putValue(Action.NAME, "U"); ! JToggleButton underlineButton = new JToggleButton(underlineAction); ! inputtoolbar.add(underlineButton); ! ! final Action fileuploadAction = new AbstractAction() ! { ! public void actionPerformed(ActionEvent e) { ! ! } ! }; ! inputtoolbar.addSeparator(); ! fileuploadAction.putValue(Action.NAME, "..."); ! inputtoolbar.add(fileuploadAction); gc.gridx=0; gc.gridy = 3; *************** *** 308,312 **** } }); ! // XXX: (keyPressed) this has to be replaced with an external binding // configuration of keys with masks: a generic method here; explicit --- 346,350 ---- } }); ! // XXX: (keyPressed) this has to be replaced with an external binding // configuration of keys with masks: a generic method here; explicit *************** *** 349,353 **** --- 387,470 ---- } }); + + inputarea.addCaretListener(new CaretListener() { + public void caretUpdate(CaretEvent e) { + int dot = e.getDot(); + + if(dot < 0) + { + return; + } + dot = dot -1; + DefaultStyledDocument doc = (DefaultStyledDocument) inputarea.getDocument(); + AttributeSet as = doc.getCharacterElement(dot).getAttributes(); + + Component[] component = inputtoolbar.getComponents(); + for(int i = 0; i < component.length; i++) + { + if(component[i] instanceof JToggleButton) + { + JToggleButton button = (JToggleButton) component[i]; + Action ac = button.getAction(); + if(ac == boldAction) + { + Object boldval = as.getAttribute("B"); + + if("true".equals(boldval)) + { + button.setSelected(true); + } else { + button.setSelected(false); + } + } + else if (ac == italicAction) + { + Object italicval = as.getAttribute("I"); + if("true".equals(italicval)) + { + button.setSelected(true); + } else { + button.setSelected(false); + } + } + else if (ac == underlineAction) + { + Object underlineval = as.getAttribute("U"); + if("true".equals(underlineval)) + { + button.setSelected(true); + } else { + button.setSelected(false); + } + } + } + } + } + }); + + final UndoManager manager = new UndoManager(); + manager.setLimit(100000); + inputarea.getDocument().addUndoableEditListener(manager); + + KeyStroke keyUndo = KeyStroke.getKeyStroke(KeyEvent.VK_Z, + Event.CTRL_MASK); + KeyStroke keyRedo = KeyStroke.getKeyStroke(KeyEvent.VK_Y, + Event.CTRL_MASK); + InputMap inputMap = inputarea.getInputMap(); + inputMap.put(keyUndo, "undo"); + inputMap.put(keyRedo, "redo"); + inputarea.getActionMap().put("undo", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + if(manager.canUndo()) + manager.undo(); + } + }); + inputarea.getActionMap().put("redo", new AbstractAction() { + public void actionPerformed(ActionEvent e) { + if(manager.canRedo()) + manager.redo(); + } + }); // loader History typoHistoryStepper = controller.getTypoHistory().listStepper *************** *** 455,459 **** StringWriter out = new StringWriter(); inputarea.getEditorKit().write(out,inputarea.getDocument(),0, inputarea.getDocument().getLength()); - System.out.println("Input Text: "+out.toString()); return out.getBuffer().toString(); } catch (BadLocationException e) { --- 572,575 ---- *************** *** 518,522 **** String doc = getInputText(); - System.out.println("NEW DOC: "+doc); adjustViewport(); --- 634,637 ---- |