I fixed this the easy way, by checking the value of isEditable() before
cutting, pasting, or adding typed text. I may have missed a spot, but
checking at a lower level is a bit less efficient.
Fixing this the hard way, the keymaps-and-overridden-default-action way,
seems like it will make the code uglier, not cleaner. And it won't get us
closer to fixing the killer bug, 614475, "Improper Line Wrapping".
and fixed aspects of QD's QT for Java component. At the moment
there are two classes, SmartQT4JPlayer and SmartJMFPlayer, that
both extend SmartMoviePanel, an abstract class extending Panel.
If it would be better to make SmartMoviePanel an interface that
would only require minor changes.
You can switch back and forth between JMF and QT4J from the
menu bar, or you can type:
java -Dthdl.media.player=qt4j/jmf -jar QuillDriver.jar
Note that the QT4J module crashes sometimes before it can open
the video file. I'm not sure why.
string-valued preferences built atop java.util.Properties.
How it works: the jvm is asked first, and then the user's prefs file, if it exists,
then the system-wide prefs file, and then the built-in preferences. Finally, for
robustness, a default may be optionally hard-coded in the source.
I made several things configurable, too:
the default Tibetan keyboard
the default font sizes and faces
whether you want developer-only features enabled
Savant's file extension (.savant)
etc.
The only known problems are the following:
The default location for the user's preferences file is windows-specific,
arbitrary, and not in the user documentation. Likewise for the location of the
system-wide preferences file. You can change them using 'java -D', though.
There is no "Save preferences" option yet, and closing the program does
not save preferences either.
that you don't want one. It's on by default.
If you set another system property, every keypress in "Tibetan" input mode
causes an update to the status bar. The messages are for developers, not
users, so this option is off by default.
Updated to use the new log file facility.
Added great flexibility to the code that creates the log file. It is property
driven at present, and the default behavior is the same as the old default
behavior, except that a message is printed to standard output telling the
user which log file is being used, and that they should include its contents
in bug reports.
You can log to the temporary directory, a directory of your choice, or (by
default) the current directory. Edward's related feature request can now
quickly be fulfilled.
comments.
Reformatted the code in processTibetan() in an attempt to understand what
it does. I'll soon commit some code that updates a status bar with "what
Jskad is thinking" in this maze of control flow.
release have been updated. The .war file is now deleted after the build
mines it for the goodies. If we use Tomcat or another app server down the
road, we'll be ready to go.
At present, dist/*.jnlp refer to my own personal web server, and the build
system is aware of my personal keystore because creating a JWS release
involves signing JARs. It will be very simple to change this once we have
a real PKI certificate and once we deploy on thdl.org.
Note that Savant and QuillDriver's releases are only half-done right now;
they do not include the XML and JMF libraries yet.
The binary JARs now contain license docs.
There are now four builds for the four faces of the translation tool.
By default, class files will now be compiled for the 1.1 JVM, even if you
use J2SDK 1.4 to compile them. 'ant -Dtarget.jvm=1.2' gives you 1.4's
default. I'm not sure what 1.2 buys us, but it means we don't work on
a large number of JVMs in the field.
Added a "Quit" option to Savant's File menu. Factored out the Close
option in doing so.
Exceptions in many action listeners are now handled by
org.thdl.util.ThdlActionListener or org.thdl.util.ThdlAbstractAction.
Many exceptions that we used to just log now optionally cause aborts.
This option is on by default for developers using 'ant savant-run'-style
targets, but it is off for users.
An erroneous CLASSPATH now causes a useful error message in almost
all situations.
Fixed some typos and bad links in Javadoc comments.
Added a simple assertion facility, but the overhead is suffered even in
release builds.
Factored out the code that sets up log files like savant.log and jskad.log.
Added a 'releases' target that builds Javadocs, binary JARs, and a source
zipfile. It generates double-clickable Jskad and translation tool JARs, but it
does NOT generate double-clickable Savant or QuillDriver jars because
that would require putting jdom/xalan/xml-apis/xercesImpl/jmf JARs onto
the Class-path attribute in the manifest files. That would be a relative path,
though, and until we have an installer, I don't know what to put in there.
That means that, for now, you invoke Savant with
'java -cp jdom.jar;jmf.jar;....;Savant-2002XXXX.jar
org.thdl.savant.SavantShell'
BUT, I've added targets to run all four programs: savant-run, qd-run, tt-run,
and jskad-run.
No longer uses manifests/*. Ant has a <manifest> task that we use instead.
Now uses the source/overview.html file in Javadoc builds.