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.
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.