/* * @(#)TextBoundDemo.java 1.1 96/11/23 * * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved * (C) Copyright IBM Corp. 1996 - All Rights Reserved * * Portions copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved. * * The original version of this source code and documentation is copyrighted * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These * materials are provided under terms of a License Agreement between Taligent * and Sun. This technology is protected by multiple US and International * patents. This notice and attribution to Taligent may not be removed. * Taligent is a registered trademark of Taligent, Inc. * * Permission to use, copy, modify, and distribute this software * and its documentation for NON-COMMERCIAL purposes and without * fee is hereby granted provided that this copyright notice * appears in all copies. Please refer to the file "copyright.html" * for further important copyright and licensing information. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. * */ import java.applet.Applet; import java.awt.event.*; import java.awt.*; import java.util.*; import java.text.*; public class TextBoundDemo extends DemoApplet { public static void main(String argv[]) { DemoApplet.showDemo(new TextBoundFrame(null)); } public Frame createDemoFrame(DemoApplet applet) { return new TextBoundFrame(applet); } } class TextBoundFrame extends Frame implements WindowListener, ItemListener , KeyListener { private static final String creditString = "v1.1a9, Demo"; private static final String copyrightString = ""; private static final String copyrightString2 = ""; private static final int FIELD_COLUMNS = 45; private static final Font choiceFont = null; private static final boolean DEBUG = false; private DemoApplet applet; final String right = "-->"; final String left = "<--"; private BreakIterator enum; TextArea text; Choice bound; public TextBoundFrame(DemoApplet applet) { this.applet = applet; addWindowListener(this); init(); start(); } public void run() { } public int getSelectionStart() { return text.getSelectionStart() & 0x7FFF; } public int getSelectionEnd() { return text.getSelectionEnd() & 0x7FFF; } public synchronized void checkChange() { int e = enum.following(getSelectionStart()); int s = enum.previous(); selectRange(s, e); } public final synchronized void selectRange(int s, int e) { try { //if (getSelectionStart() != s || getSelectionEnd() != e) { text.select(s, e); //} if (getSelectionStart() != s || getSelectionEnd() != e) { System.out.println("AGH! select("+s+","+e+") -> ("+ getSelectionStart()+","+getSelectionEnd()+")"); } } catch (Exception exp) { errorText(exp.toString()); } } public void init() { buildGUI(); } public void start() { } void addWithFont(Container container, Component foo, Font font) { if (font != null) foo.setFont(font); container.add(foo); } public void buildGUI() { setBackground(Color.white); setLayout(new BorderLayout()); Panel topPanel = new Panel(); Label titleLabel = new Label("Text Boundary Demo", Label.CENTER); titleLabel.setFont(Utility.titleFont); topPanel.add(titleLabel); Label demo=new Label(creditString, Label.CENTER); demo.setFont(Utility.creditFont); topPanel.add(demo); Panel choicePanel = new Panel(); Label demo1=new Label("Boundaries", Label.LEFT); demo1.setFont(Utility.labelFont); choicePanel.add(demo1); bound = new Choice(); bound.addItemListener(this); bound.addItem("Sentence"); bound.addItem("Line Break"); bound.addItem("Word"); bound.addItem("Char"); if (choiceFont != null) bound.setFont(choiceFont); choicePanel.add(bound); topPanel.add(choicePanel); Utility.fixGrid(topPanel,1); add("North", topPanel); int ROWS = 15; int COLUMNS = 50; text = new TextArea(getInitialText(), ROWS, COLUMNS); text.addKeyListener(this); text.setEditable(true); text.selectAll(); text.setFont(Utility.editFont); add("Center", text); Panel copyrightPanel = new Panel(); addWithFont (copyrightPanel, new Label(copyrightString, Label.LEFT),Utility.creditFont); addWithFont (copyrightPanel, new Label(copyrightString2, Label.LEFT),Utility.creditFont); Utility.fixGrid(copyrightPanel,1); add("South", copyrightPanel); //layout(); handleEnumChanged(); // (new Thread(this)).start(); } public String getInitialText() { return /* "\"This is a sentence.\" This is not.\" \"because. And go. " + "This is a simple 012.566,5 sample sentence. \n"+ "It does not have to make any sense as you can see. \n"+ "Nel mezzo del cammin di nostra vita, mi ritrovai in "+ "una selva oscura. \n"+ "Che la dritta via aveo smarrita. \n"+ "He said, that I said, that you said!! \n"+ "Don't rock the boat.\n\n"+ "Because I am the daddy, that is why. \n"+ "Not on my time (el timo.)! \n"+ "Tab\tTab\rTab\tWow."+ "So what!!\n\n"+ "Is this a question??? " + "I wonder...Hmm.\n" + "Harris thumbed down several, including \"Away We Go\" "+ "(which became the huge success Oklahoma!). \n"+ "One species, B. anthracis, is highly virulent.\n"+ "Wolf said about Sounder: \"Beautifully thought-out and "+ "directed.\"\n"+ "Have you ever said, \"This is where I shall live\"? \n"+ "He 1000,233,456.000 answered, \"You may not!\" \n"+ "Another popular saying is: \"How do you do?\". \n"+ "What is the proper use of the abbreviation pp.? \n"+ "Yes, I am 1,23.322% definatelly 12\" tall!!"; */ "(\"This is a complete sentence.\") This is (\"not.\") also. \n" +"An abbreviation in the middle, etc. and one at the end, etc. "+ "This\n" +"is a simple sample 012.566,5 sentence. It doesn't\n" +"have to make any sense, as you can see. Nel mezzo del \nc" +"ammin di nostra vita, mi ritrovai in una selva oscura. Che\n" +"la dritta via aveo smarrita. Not on my time (el timo.)! And\n" +"tabulated columns: \tCol1\tCol2\t3,456%.\t\n" +"Is this a question??? I wonder... Hmm. Harris thumbed\n" +"down several, including \"Away We Go\" (which became the \n" +"huge success Oklahoma!). One species, B. anthracis, is \n" +"highly virulent. Wolf said about Sounder: \"Beautifully \n" +"thought-out and directed.\" Have you ever said, \"This is "+ "where I\n" +"shall live\"? He said 1000,233,456.000 and answered, \"You "+ "may not!\" \n" +"Another popular saying is: \"How do you do?\". What is the \n" +"proper use of the abbreviation pp.? Yes, I am 12\' 3\" tall!!"; } public void handleEnumChanged() { String s = bound.getSelectedItem(); if (s.equals("Char")) { errorText("getCharacterInstance"); enum = BreakIterator.getCharacterInstance(); } else if (s.equals("Word")) { errorText("tWordBreak"); enum = BreakIterator.getWordInstance(); } else if (s.equals("Line Break")) { errorText("getLineInstance"); enum = BreakIterator.getLineInstance(); } else /* if (s.equals("Sentence")) */ { errorText("getSentenceInstance"); enum = BreakIterator.getSentenceInstance(); } enum.setText(text.getText()); selectRange(0, 0); //text.select(0,0); } public void handleForward() { try { enum.setText(text.getText()); int oldStart = getSelectionStart(); int oldEnd = getSelectionEnd(); if (oldEnd < 1) { selectRange(0, enum.following(0)); } else { int s = enum.following(oldEnd-1); int e = enum.next(); if (e == -1) { e = s; } selectRange(s, e); } //text.select(s, e); //errorText("<" + oldStart + "," + oldEnd + "> -> <" + //s + "," + e + ">"); } catch (Exception exp) { errorText(exp.toString()); } } public void handleBackward() { try { enum.setText(text.getText()); int oldStart = getSelectionStart(); int oldEnd = getSelectionEnd(); if (oldStart < 1) { selectRange(0, 0); } else { int e = enum.following(oldStart-1); int s = enum.previous(); selectRange(s, e); } //text.select(s, e); //errorText("<" + oldStart + "," + oldEnd + "> -> <" + s + "," + e + ">"); } catch (Exception exp) { errorText(exp.toString()); } } /* ItemListener method */ public void itemStateChanged(ItemEvent e) { if(e.getSource() instanceof Choice) handleEnumChanged(); } /* KeyListener methods */ public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT){ e.consume();// don't deliver the event to the native widget handleForward(); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { e.consume();// don't deliver the event to the native widget handleBackward(); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } /* Window Listener methods */ public void windowClosed(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } public void windowOpened(WindowEvent e) { } public void windowClosing(WindowEvent e) { setVisible(false); dispose(); if (applet != null) { applet.demoClosed(); } else System.exit(0); } public void errorText(String s) { if (DEBUG) System.out.println(s); } }