sr=sfraser@netscape.com,mscott@netscape.com r=jfrancis@netscape.com
* nsITransaction, nsITransactionListenter, nsITransactionManager have
been XPIDL'ized and moved into mozilla/editor/txmgr/idl. The versions
of these interfaces in mozilla/editor/txmgr/public are being CVS removed.
* Renamed Do(), Undo(), and Redo() to DoTransaction(), UndoTransaction(),
and RedoTransaction() to avoid reserved word problems in languages like
JS. I did a sweep through editor and mailnews to remove these methods.
* PeekUndoStack() and PeekRedoStack() now return an AddRef'd pointer.
* Removed GetUndoString(), GetRedoString() and Write() from the
nsITransaction interface. Neither editor or mailnews really made
use of these methods.
* Removed Write() from the nsITransactionManager.cpp interface.
* The Transaction Manager now supports weak references.
* Added support for nsITransactionList to the TransactionManager
to allow access to all transactions on the Undo and Redo stacks, as
well as auto-aggregated transactions.
* Removed all references to nsITransactionDescription from txmgr and editor.
* Added nsPIEditorTransaction and made all Editor internal transactions
inherit from it so we can distinguish between our transactions and
ones from 3rd parties.
New files checked in:
editor/txmgr/idl/nsITransaction.idl
editor/txmgr/idl/nsITransactionList.idl
editor/txmgr/idl/nsITransactionListener.idl
editor/txmgr/idl/nsITransactionManager.idl
editor/txmgr/src/nsITransactionList.cpp
editor/txmgr/src/nsITransactionList.h
editor/idl/nsPIEditorTransaction.idl
Files that were CVS removed:
editor/txmgr/public/nsITransaction.h
editor/txmgr/public/nsITransactionListener.h
editor/txmgr/public/nsITransactionManager.h
editor/txmgr/idl/nsITransactionDescription.h
editor/base/IMECommitTxn.cpp
editor/base/IMECommitTxn.h
Files modified:
editor/Makefile.in
editor/makefile.win
editor/base/ChangeAttributeTxn.cpp
editor/base/ChangeAttributeTxn.h
editor/base/CreateElementTxn.cpp
editor/base/CreateElementTxn.h
editor/base/DeleteElementTxn.cpp
editor/base/DeleteElementTxn.h
editor/base/DeleteRangeTxn.cpp
editor/base/DeleteRangeTxn.h
editor/base/DeleteTextTxn.cpp
editor/base/DeleteTextTxn.h
editor/base/EditAggregateTxn.cpp
editor/base/EditAggregateTxn.h
editor/base/EditTxn.cpp
editor/base/EditTxn.h
editor/base/IMECommitTxn.cpp
editor/base/IMECommitTxn.h
editor/base/IMETextTxn.cpp
editor/base/IMETextTxn.h
editor/base/InsertElementTxn.cpp
editor/base/InsertElementTxn.h
editor/base/InsertTextTxn.cpp
editor/base/InsertTextTxn.h
editor/base/JoinElementTxn.cpp
editor/base/JoinElementTxn.h
editor/base/nsEditor.cpp
editor/base/nsEditorShell.cpp
editor/base/nsEditorShell.h
editor/base/nsEditorTxnLog.cpp
editor/base/nsStyleSheetTxns.cpp
editor/base/nsStyleSheetTxns.h
editor/base/PlaceholderTxn.cpp
editor/base/PlaceholderTxn.h
editor/base/SetDocTitleTxn.cpp
editor/base/SetDocTitleTxn.h
editor/base/SplitElementTxn.cpp
editor/base/SplitElementTxn.h
editor/idl/Makefile.in
editor/idl/makefile.win
editor/idl/MANIFEST
editor/idl/nsIEditorShell.idl
editor/macbuild/editor.mcp
editor/macbuild/EditorIDL.mcp
editor/txmgr/idl/Makefile.in
editor/txmgr/idl/makefile.win
editor/txmgr/idl/MANIFEST
editor/txmgr/idl/nsITransactionManager.idl
editor/txmgr/macbuild/txmgr.mcp
editor/txmgr/macbuild/txmgrIDL.mcp
editor/txmgr/public/Makefile.in
editor/txmgr/public/makefile.win
editor/txmgr/public/MANIFEST
editor/txmgr/src/Makefile.in
editor/txmgr/src/makefile.win
editor/txmgr/src/nsTransactionItem.cpp
editor/txmgr/src/nsTransactionItem.h
editor/txmgr/src/nsTransactionList.cpp
editor/txmgr/src/nsTransactionList.h
editor/txmgr/src/nsTransactionManager.cpp
editor/txmgr/src/nsTransactionManager.h
editor/txmgr/src/nsTransactionManagerFactory.cpp
editor/txmgr/src/nsTransactionStack.cpp
editor/txmgr/src/nsTransactionStack.h
editor/txmgr/tests/TestTXMgr.cpp
editor/ui/composer/content/EditorCommandsDebug.js
editor/ui/composer/content/editorOverlay.xul
editor/ui/composer/locale/en-US/editorOverlay.dtd
mailnews/base/src/nsMessenger.cpp
mailnews/base/util/nsMsgTxn.cpp
mailnews/base/util/nsMsgTxn.h
mailnews/imap/src/nsImapMailFolder.cpp
mailnews/imap/src/nsImapUndoTxn.cpp
mailnews/imap/src/nsImapUndoTxn.h
mailnews/local/src/nsLocalMailFolder.cpp
mailnews/local/src/nsLocalUndoTxn.cpp
mailnews/local/src/nsLocalUndoTxn.h
Added some comments of the form "// XXX: ERROR_HANDLING <explanation>"
wherever I saw a potential error but wasn't 100% sure of the intention of the code.
Fixed a few bugs along the way.
features like set paragraph style, set list type, indent, etc. I'm sure there's holes in my
implementation that these high level features will make obvious.
2. I've factored a lot of utility methods from several modules into nsEditor as public static methods.
This makes them easily accessable to all, and will help Joe and I remove redundant methods.
3. I changed the HTML tags to lower case, and made all string compares case-insensitive. No, this
isn't quite the right thing to do, but we don't have atoms from layout yet. The Right Thing is for us
to reuse those atoms.
added aFirst out param to GetTextProperty, so the caller can know if the first character has the property in the case of aAny=true and aAll=false.
fixed a bunch of places where result was being used incorrectly as a return val from do_QueryInterface
some minor undo/redo fixes to split and join of interior nodes.
anywhere any more.
* Cleaned up split and join undo/redo.
* Added TypeInState, a data struct that remembers things about text properties for collapsed selections, so you can type
* Ctrl-B with an insertion point and the next character will be bold.
* Added all the logic to handle inline vs. block elements when setting text properties.
* Added some support for italic and underline as well. Adding these things is pretty easy now. Ctrl-B, Ctrl-I, Ctrl-U for testing bold, italic, underline.
* Added all the logic to make sure we only add style tags where they're needed, so you should never get the same style tag nested within itself, except as needed for block elements.
* Added methods for testing a node to see if a particular style is set. This isn't 100% done yet, but with very little work we could have toolbar buttons that respond to selection changed notification that show the state of bold, italic, underline, etc. in real time. Supports tri-state: whole selection is bold, some of selection is bold, none of selection is bold, ...
* Fully undoable and redoable.
* Added some debug printfs to transactions and editors. all controlled by a gNoisy static in each module. helps me track down undo/redo problems. if the output bugs people enough, I'll shut it off and re-enable it in my local tree.
Noticably missing: make un-bold, make un-italic, etc. This is coming soon.
added nsEditProperty
beginning of implementation for SetTextProperties. Currently, it only works if the selection is entirely within a single text node. Currently only
supports bold and italic (mapped to ctrl-b and ctrl-i for testing purposes.)
changed a bunch of interfaces to make things easier, like CreateElement now returns (as an out-param) the element created.
updated to new nsCOMPtr usage
nsTextEditor::InsertBreak() implemented
splits the text node at the caret (deletes any extended selection to force a collapsed selection.)
inserts a <BR> which I assume we'll convert to a CR when we write to a text stream.
undo and redo work, except for the bug noted below
More stuff:
interface cleanup
strategic debugging code added
delete selection txn sets the collapses the selection...this is just a placeholder, but I needed it for undo/redo of InsertBreak.
join and split now work for text nodes as well as interior nodes
* added DeleteSelection to editor. Doesn't work very well yet because selection is giving me random offsets into text content.
* lots of work in the various transactions.
The key listener is now mostly a mapper of key events to editor actions. Soon, this should be 100% true.
The editor builds transactions that are themselves intelligent. The editor makes very few DOM calls itself.
It relies on the transactions to do most of the actual editing.