commit 2fcbaa6649b154e354ac8af069bc5fafe4b1ba95 Author: mbirth <mbirth> Date: Wed Dec 8 10:14:32 2004 +0000 Initial Revision diff --git a/GPL.txt b/GPL.txt new file mode 100644 index 0000000..45645b4 --- /dev/null +++ b/GPL.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/JFastReader.java b/JFastReader.java new file mode 100644 index 0000000..45b5b25 --- /dev/null +++ b/JFastReader.java @@ -0,0 +1,378 @@ +import com.symbian.devnet.util.TaskSwitch; + +import java.awt.BorderLayout; +import java.awt.Button; +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.GridLayout; +import java.awt.Label; +import java.awt.Panel; +import java.awt.Point; +import java.awt.Scrollbar; +import java.awt.SystemColor; +import java.awt.TextField; +import java.awt.Toolkit; + +public class JFastReader extends Frame implements ActionListener { + + final static int WND_W=208, WND_H=276; // initial window size + final static String APPNAME="jFastReader"; + final static String APPVERSION="1.0"; + + private static JFastReader jFastReader = null; + + static Panel pnMain = new Panel(new BorderLayout()); + + static Panel pnTop = new Panel(new FlowLayout(FlowLayout.CENTER,1,1)); + static Panel pnBottom = new Panel(new BorderLayout()); + static Panel pnBottom2 = new Panel(new GridLayout(3,2,2,2)); + static Panel pnSpeed = new Panel(new BorderLayout()); + static Panel pnOptBook = new Panel(new GridLayout(1,2,1,1)); + static Panel pnSlowFast = new Panel(new GridLayout(1,2,1,1)); + static Panel pnBackForw = new Panel(new GridLayout(1,2,1,1)); + static Panel pnReadPaus = new Panel(new GridLayout(1,2,1,1)); + static Panel pnReptButt = new Panel(new GridLayout(1,2,1,1)); + static Panel pnButtons = new Panel(new GridLayout(2,1,1,1)); + + static Label lbGo = new Label("Word:", Label.RIGHT); + static TextField tfGo = new TextField("", 4); + static Button btGo = new Button("Go"); + static Button btAbout = new Button("About"); + static Button btText = new Button("Text"); + + static MyCanvas cvFR = new MyCanvas(); + + static Scrollbar sbProgress = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 0); + + static Label lbSpeedTag = new Label("Speed (wpm.)", Label.LEFT); + static MyProgBar cvSpeed = new MyProgBar(); + static Label lbSpeed = new Label("---", Label.LEFT); + + static Button btOptions = new Button("Options"); + static Button btBookmark = new Button("Bookmark"); + + static Button btSlower = new Button("<<\nSlower"); + static Button btFaster = new Button(">>\nFaster"); + static Button btBack = new Button("<<\nBKWD"); + static Button btForw = new Button(">>\nFWD"); + + static Button btRead = new Button("READ"); + static Button btPause = new Button("PAUSE"); + static Button btRepeat = new Button("REPEAT"); + + static Button btLoad = new Button("Load File"); + static Button btQuit = new Button("Exit"); + + + transient Dialog diAbout = new Dialog(this, "About...", true); + static Panel pnAboutText = new Panel(new GridLayout(0,1,0,0)); + static Panel pnAboutButt = new Panel(new FlowLayout(FlowLayout.RIGHT)); + static Label lbAbout1 = new Label(APPNAME, Label.CENTER); + static Label lbAbout2 = new Label("by Markus Birth", Label.CENTER); + static Label lbAbout3 = new Label("mbirth@webwriters.de", Label.CENTER); + static Label lbAbout4 = new Label("http://www.webwriters.de/mbirth/", Label.CENTER); + static Button btOk = new Button("OK"); + + static Dimension dmScreen = Toolkit.getDefaultToolkit().getScreenSize(); // get Screen dimensions + + transient Dialog diInfo = new Dialog(this, "infoPrint", false); + static Label lbInfo = new Label(); + transient InfoPrintThread thIPT = new InfoPrintThread(); + + private class MainWindowAdapter extends WindowAdapter { + public void windowClosing(WindowEvent we) { + // TODO: Insert commands to execute upon shutdown + System.out.println("Received windowClosing event... application shutting down."); + System.exit(0); + } + } + + private class DummyWindowAdapter extends WindowAdapter { + public void windowActivated(WindowEvent we) { + } + + public void windowClosing(WindowEvent we) { + if (we.getSource().equals(diAbout)) { + // System.out.println("About manually closed."); + diAbout.setVisible(false); + jFastReader.dispatchEvent(new WindowEvent(jFastReader, 201)); + } + } + } + + // handler for ActionListener + public void actionPerformed(ActionEvent ae) { + if (ae.getSource().equals(btOk)) { // OK button on AboutScreen + System.out.println("The user clicked OK. Trying to close the dialog."); + diAbout.setVisible(false); + } else if (ae.getSource().equals(btAbout)) { // About-Button + System.out.println("The user clicked 'About' button."); + diAbout.setVisible(true); + btOk.requestFocus(); + } else if (ae.getSource().equals(btQuit)) { // Quit-Button + System.out.println("Exit menuitem selected."); + infoPrint("Goodbye..."); + System.out.println("Initiated InfoPrint..."); + try { + while (thIPT.isAlive()) { + thIPT.setStopnow(true); + Thread.sleep(100); + } + } catch (InterruptedException exIE) { + System.out.println("Sleeping won't work. "+exIE.toString()); + exIE.printStackTrace(); + } + System.out.println("InfoPrint stopped. Sending event..."); + dispatchEvent(new WindowEvent(this, 201)); + } + // TODO: more events + } + + public JFastReader() { // Constructor + addWindowListener(new MainWindowAdapter()); + setTitle(APPNAME+" "+APPVERSION+" by Markus Birth"); // set Frame title + //setResizable(false); + setSize(WND_W, WND_H); // set Frame size + setLocation((dmScreen.width-WND_W)/2, (dmScreen.height-WND_H)/2); // center Frame + infoPrint(APPNAME+" loading..."); + doAbout(); + + btAbout.addActionListener(this); + btQuit.addActionListener(this); + + pnMain.setFont(new Font("Dialog", Font.PLAIN, 8)); + + pnTop.add(lbGo); + pnTop.add(tfGo); + pnTop.add(btGo); + pnTop.add(btAbout); + pnTop.add(btText); + + pnSpeed.add(lbSpeedTag, BorderLayout.NORTH); + pnSpeed.add(cvSpeed, BorderLayout.CENTER); + pnSpeed.add(lbSpeed, BorderLayout.EAST); + + pnOptBook.add(btOptions); + pnOptBook.add(btBookmark); + + pnSlowFast.add(btSlower); + pnSlowFast.add(btFaster); + + pnBackForw.add(btBack); + pnBackForw.add(btForw); + + pnReadPaus.add(btRead); + pnReadPaus.add(btPause); + + pnButtons.add(btLoad); + pnButtons.add(btQuit); + + pnReptButt.add(btRepeat); + pnReptButt.add(pnButtons); + + pnBottom2.add(pnSpeed); + pnBottom2.add(pnOptBook); + pnBottom2.add(pnSlowFast); + pnBottom2.add(pnBackForw); + pnBottom2.add(pnReadPaus); + pnBottom2.add(pnReptButt); + + //pnBottom.add(cvFR); + //pnBottom.add(cvFR, BorderLayout.NORTH); + pnBottom.add(sbProgress, BorderLayout.CENTER); + pnBottom.add(pnBottom2, BorderLayout.SOUTH); + + pnMain.add(pnTop, BorderLayout.NORTH); + pnMain.add(cvFR, BorderLayout.CENTER); + pnMain.add(pnBottom, BorderLayout.SOUTH); + + add(pnMain); + + btOk.addActionListener(this); + + // TODO: more initialization commands + show(); // automagically calls paint(Graphics g) + diInfo.setVisible(false); // init done, hide infoPrint + } + + public static void main(String args[]) { + try { + jFastReader = new JFastReader(); + } catch (Exception ex) { + System.out.println("Caught exception: "+ex.toString()); + ex.printStackTrace(); + System.exit(1); + } + } + + public final void doAbout() { + Font ftPlain = new Font("Dialog", Font.PLAIN, 10); + Font ftBold = new Font("Dialog", Font.BOLD, 12); + pnAboutButt.add(btOk); + lbAbout1.setFont(ftBold); + lbAbout2.setFont(ftPlain); + lbAbout3.setFont(ftPlain); + lbAbout4.setFont(ftPlain); + diAbout.setLayout(new BorderLayout()); + diAbout.setBackground(SystemColor.control); + pnAboutText.add(lbAbout1); + pnAboutText.add(lbAbout2); + pnAboutText.add(lbAbout3); + pnAboutText.add(lbAbout4); + diAbout.add(pnAboutText, "North"); + diAbout.add(pnAboutButt, "South"); + diAbout.addWindowListener(new DummyWindowAdapter()); + diAbout.pack(); // without it, the Dialog won't get displayed!! + Dimension dmAboutBox = diAbout.getSize(); + Dimension dmWindow = this.getSize(); + Point ptWindow = this.getLocation(); + diAbout.setLocation(ptWindow.x+(dmWindow.width-dmAboutBox.width)/2, ptWindow.y+dmWindow.height-dmAboutBox.height); + } + + private static class MyCanvas extends Canvas { + static Color bgColor = new Color(0,0,128); + static Color fgColor = new Color(255,255,0); + static String word = ""; + static int maxFontSize = 100; + + public void paint(Graphics g) { + g.setColor(bgColor); + g.fillRect(0,0,getSize().width-1,getSize().height-2); + g.setColor(Color.black); + g.drawRect(0,0,getSize().width-1,getSize().height-2); + if (word.length()>0) { + g.setColor(fgColor); + // do auto-downsizing of font + int fs = maxFontSize; + Font f; + FontMetrics fm; + do { + f = new Font("Dialog", Font.BOLD, fs); + fm = g.getFontMetrics(f); + fs -= 2; + } while ((fm.stringWidth(word)>getSize().width-2) || (fm.getHeight()>getSize().height-2)); + g.setFont(f); + g.drawString(word, getSize().width/2-fm.stringWidth(word)/2, getSize().height/2-fm.getHeight()/2+fm.getAscent()); + } + } + + public void setWord(String txt) { + word = txt; + repaint(); + } + } + + private static class MyProgBar extends Canvas { + static int minVal = 0; + static int maxVal = 100; + static int curVal = 50; + static Color fgColor = new Color(0,0,128); + static Color bgColor = Color.lightGray; + static Color txColor = Color.white; + + public void paint(Graphics g) { + double percentage = (double)(curVal-minVal)/(double)(maxVal-minVal); + String percString = Double.toString(percentage*100) + "%"; + g.setFont(new Font("Dialog", Font.PLAIN, 10)); + FontMetrics fm = getFontMetrics(g.getFont()); + g.setColor(bgColor); + g.fillRect(0,0,getSize().width-1,getSize().height-1); + g.setColor(fgColor); + g.fillRect(0,0,(int)((double)(getSize().width-1)/(maxVal-minVal)*(curVal-minVal)),getSize().height-1); + g.setXORMode(txColor); + g.drawString(percString, getSize().width/2-fm.stringWidth(percString)/2, getSize().height/2-fm.getHeight()/2+fm.getAscent()); + g.setPaintMode(); + g.setColor(Color.black); + g.drawRect(0,0,getSize().width-1,getSize().height-1); + } + + public void setMinValue(int v) { + minVal = v; + } + + public void setMaxValue(int v) { + maxVal = v; + } + + public void setPos(int p) { + curVal = p; + repaint(); + } + } + + // waits 3 seconds and then hides the diInfo-Dialog + private class InfoPrintThread extends Thread { + private transient boolean stopnow; + + public void run() { + this.stopnow = false; + try { + // System.out.println("IPT: started."); + long dtStart = System.currentTimeMillis(); + while (System.currentTimeMillis()<dtStart+3000 && !this.stopnow) { + try { + Thread.sleep(100); + } catch (InterruptedException exIE) { + System.out.println("Caught "+exIE.toString()); + exIE.printStackTrace(); + } + } + diInfo.setVisible(false); + // System.out.println("IPT: completed."); + return; + } catch (Exception ex) { + System.out.println("Exception in IPT: "+ex.toString()); + ex.printStackTrace(); + } + } + + public void setStopnow(boolean x) { + this.stopnow = x; + } + } + + public final void infoPrint(String txt) { + if (System.getProperty("os.name").equals("EPOC")) { + TaskSwitch.infoPrint(txt); + } else { + while (thIPT.isAlive()) { + thIPT.setStopnow(true); + try { + Thread.sleep(100); + } catch (InterruptedException exIE) { + System.out.println("Caught "+exIE.toString()); + exIE.printStackTrace(); + } + } + diInfo.add(lbInfo); + lbInfo.setText(txt); + diInfo.pack(); + Dimension dmWindow = this.getSize(); + Point ptWindow = this.getLocation(); + Dimension dmInfo = diInfo.getSize(); + // System.out.println("Window is at "+ptWindow.x+"|"+ptWindow.y+" and "+dmWindow.width+"x"+dmWindow.height); + // System.out.println("InfoPrint is "+dmInfo.width+"x"+dmInfo.height); + Point ptInfo = new Point(); + ptInfo.x = ptWindow.x+dmWindow.width-dmInfo.width; + ptInfo.y = ptWindow.y; + // System.out.println("InfoPrint will be positioned at "+ptInfo.x+"|"+ptInfo.y); + diInfo.setLocation(ptInfo); + diInfo.repaint(); + diInfo.show(); + // System.out.println("infoPrint: "+txt); + thIPT = new InfoPrintThread(); + thIPT.start(); + } + } +} diff --git a/MyCanvas.java b/MyCanvas.java new file mode 100644 index 0000000..bc6a6ed --- /dev/null +++ b/MyCanvas.java @@ -0,0 +1,39 @@ +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; + +class MyCanvas extends Canvas { + Color bgColor = new Color(0,0,128); + Color fgColor = new Color(255,255,0); + String word = ""; + int maxFontSize = 100; + + public void paint(Graphics g) { + g.setColor(bgColor); + g.fillRect(0,0,getSize().width-1,getSize().height-2); + g.setColor(Color.black); + g.drawRect(0,0,getSize().width-1,getSize().height-2); + if (word.length()>0) { + g.setColor(fgColor); + // do auto-downsizing of font + int fs = maxFontSize; + Font f; + FontMetrics fm; + do { + f = new Font("Dialog", Font.BOLD, fs); + fm = g.getFontMetrics(f); + fs -= 2; + } while ((fm.stringWidth(word)>getSize().width-2) || (fm.getHeight()>getSize().height-2)); + g.setFont(f); + g.drawString(word, getSize().width/2-fm.stringWidth(word)/2, getSize().height/2-fm.getHeight()/2+fm.getAscent()); + } + } + + public void setWord(String txt) { + word = txt; + repaint(); + } +} diff --git a/MyInfoPrint.java b/MyInfoPrint.java new file mode 100644 index 0000000..50107a6 --- /dev/null +++ b/MyInfoPrint.java @@ -0,0 +1,109 @@ +import com.symbian.devnet.util.TaskSwitch; + +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Label; +import java.awt.Point; + +public class MyInfoPrint { + Frame parent; + Dialog diInfo; + Label lbInfo = new Label(); + InfoPrintThread thIPT = new InfoPrintThread(); + + public MyInfoPrint(Frame p) { + parent = p; + diInfo = new Dialog(parent, "infoPrint", false); + } + + // waits 3 seconds and then hides the diInfo-Dialog + private class InfoPrintThread extends Thread { + private transient boolean stopnow; + + public void run() { + this.stopnow = false; + try { + // System.out.println("IPT: started."); + long dtStart = System.currentTimeMillis(); + while (System.currentTimeMillis()<dtStart+3000 && !this.stopnow) { + try { + Thread.sleep(100); + } catch (InterruptedException exIE) { + System.out.println("Caught "+exIE.toString()); + exIE.printStackTrace(); + } + } + diInfo.setVisible(false); + // System.out.println("IPT: completed."); + return; + } catch (Exception ex) { + System.out.println("Exception in IPT: "+ex.toString()); + ex.printStackTrace(); + } + } + + public void setStopnow(boolean x) { + this.stopnow = x; + } + } + + private final void doBox(String txt) { + while (thIPT.isAlive()) { + thIPT.setStopnow(true); + try { + Thread.sleep(100); + } catch (InterruptedException exIE) { + System.out.println("Caught "+exIE.toString()); + exIE.printStackTrace(); + } + } + diInfo.add(lbInfo); + lbInfo.setText(txt); + diInfo.pack(); + Dimension dmWindow = parent.getSize(); + Point ptWindow = parent.getLocation(); + Dimension dmInfo = diInfo.getSize(); + // System.out.println("Window is at "+ptWindow.x+"|"+ptWindow.y+" and "+dmWindow.width+"x"+dmWindow.height); + // System.out.println("InfoPrint is "+dmInfo.width+"x"+dmInfo.height); + Point ptInfo = new Point(); + ptInfo.x = ptWindow.x+dmWindow.width-dmInfo.width; + ptInfo.y = ptWindow.y; + // System.out.println("InfoPrint will be positioned at "+ptInfo.x+"|"+ptInfo.y); + diInfo.setLocation(ptInfo); + diInfo.repaint(); + diInfo.show(); + } + + public final void busy(String txt) { + if (System.getProperty("os.name").equals("EPOC")) { + TaskSwitch.infoPrint(txt); + } else { + doBox(txt); + } + } + + public final void hide() { + while (thIPT.isAlive()) { + thIPT.setStopnow(true); + try { + Thread.sleep(100); + } catch (InterruptedException exIE) { + System.out.println("Caught "+exIE.toString()); + exIE.printStackTrace(); + } + } + diInfo.setVisible(false); + } + + public final void infoPrint(String txt) { + if (System.getProperty("os.name").equals("EPOC")) { + TaskSwitch.infoPrint(txt); + } else { + doBox(txt); + // System.out.println("infoPrint: "+txt); + thIPT = new InfoPrintThread(); + thIPT.start(); + } + } +} diff --git a/MyProgBar.java b/MyProgBar.java new file mode 100644 index 0000000..cceef58 --- /dev/null +++ b/MyProgBar.java @@ -0,0 +1,43 @@ +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; + +class MyProgBar extends Canvas { + int minVal = 0; + int maxVal = 100; + int curVal = 50; + Color fgColor = new Color(0,0,128); + Color bgColor = Color.lightGray; + Color txColor = Color.white; + + public void paint(Graphics g) { + double percentage = (double)(curVal-minVal)/(double)(maxVal-minVal); + String percString = Double.toString(percentage*100) + "%"; + g.setFont(new Font("Dialog", Font.PLAIN, 10)); + FontMetrics fm = getFontMetrics(g.getFont()); + g.setColor(bgColor); + g.fillRect(0,0,getSize().width-1,getSize().height-1); + g.setColor(fgColor); + g.fillRect(0,0,(int)((double)(getSize().width-1)/(maxVal-minVal)*(curVal-minVal)),getSize().height-1); + g.setXORMode(txColor); + g.drawString(percString, getSize().width/2-fm.stringWidth(percString)/2, getSize().height/2-fm.getHeight()/2+fm.getAscent()); + g.setPaintMode(); + g.setColor(Color.black); + g.drawRect(0,0,getSize().width-1,getSize().height-1); + } + + public void setMinValue(int v) { + minVal = v; + } + + public void setMaxValue(int v) { + maxVal = v; + } + + public void setPos(int p) { + curVal = p; + repaint(); + } +} diff --git a/StrReplaceTest.txt b/StrReplaceTest.txt new file mode 100644 index 0000000..3fc622f --- /dev/null +++ b/StrReplaceTest.txt @@ -0,0 +1,3 @@ + Two spaces at beginning of line. +And here two spaces at end of line. + A B C D E F G H I J K L M diff --git a/jd.cmd b/jd.cmd new file mode 100644 index 0000000..be9d7fa --- /dev/null +++ b/jd.cmd @@ -0,0 +1 @@ +@javadoc -private -sourcepath ./ -classpath ./;C:/progra~1/java/jre1.4.2_04/lib -d ./docs -linkoffline http://java.sun.com/j2se/1.5.0/docs/api/ C:/progra~1/java/jdk1.5.0/docs/api -author -use -verbose -version JFastReader.java diff --git a/make.cmd b/make.cmd new file mode 100644 index 0000000..6c7df01 --- /dev/null +++ b/make.cmd @@ -0,0 +1,8 @@ +@echo off +setlocal +set BCP=c:\Progra~1\Java\PersonalJava\classes.zip +set CP=c:\progra~1\Java\PersonalJava\symbian.jar +set MISC=-g -source 1.3 -target 1.1 -deprecation +for %%f in (*.class) do del %%f +for %%f in (*.java) do javac -bootclasspath %BCP% -classpath .\;%CP% %MISC% %%f +endlocal diff --git a/run.cmd b/run.cmd new file mode 100644 index 0000000..729ce59 --- /dev/null +++ b/run.cmd @@ -0,0 +1 @@ +@java JFastReader diff --git a/testfile.txt b/testfile.txt new file mode 100644 index 0000000..51108dd --- /dev/null +++ b/testfile.txt @@ -0,0 +1,4 @@ +This is only a test +with jFastReader to +see if it works perfectly +andthisisanextralongwordforit