* CPTableView.j: Add forward @class declaration for CPTableView preceding _CPTableRowView.
* CPOutlineView.j:
- Import CPCompatibility.j and declare the global document reference.
- Replace partial DOM guards in -[CPDisclosureButton drawRect:] with an early return.
Regression tests and their supporting framework fixes are incorporated.
Remaining test failures identify Aristo3 defects.
Conflict resolutions:
* CPButtonBar: Retain Aristo3 decoding and observe the hidden state of decoded buttons.
* CPPopUpButton: Retain the Aristo3 bezel style and clear the inherited button value.
Ensure decoded views are correct by verifying they retain their connections and
respond as before archiving.
A decoded table no longer raises, and decoded button bars, tab views, text
fields and outlines retain their observers, selection, delegates and data source
methods.
* CPButtonBar: Observe the hidden state of decoded buttons.
* CPOutlineView: Decode the data source and delegate through their setters.
* CPTableView: Set the data source and delegate after _init during decoding.
* CPTabView: Select the archived tab view item during decoding, before the
delegate is set.
* CPTextField: Archive the delegate.
* CPViewDecodedBehaviorTest: Verifies connections, the view hierarchy, and the
behaviour of objects each class creates or observes after decoding.
Protects the selection, editing and drag and drop contracts of tables and
outlines by verifying the events, delegate calls and data source calls that
applications depend on. A drop retargeted between the children of an item is
delivered to that item.
* CPOutlineView: Set the retargeted drop operation in
setDropItem:dropChildIndex:.
* CPTableViewInteractionTest: Verify selection by mouse and keyboard, editing,
drag initiation and drop handling, including refusal and retargeting by the
delegate and data source.
* CPOutlineViewInteractionTest: Verify dragged items, proposed parents and child
indexes, drop retargeting, and expansion and its cancellation during a hover.
- CABackingStore PIXEL, CPDragServer DRAGGING_WINDOW,
CPOutlineView SELECTION_SHOULD_CHANGE and SHOULD_SELECT_ITEM
become plain functions; call syntax is unchanged at all sites
- these macros reference only their parameters, so no ambient state
is involved
CPOutlineView.j used CPTreeNode before AppKit.j imported it. This
triggered build warnings. This commit adds an import.
- Add @import "CPTreeNode.j" to CPOutlineView.j.
While addressing this warning, CPTreeNode was audited and found to have an algorithmic complexity regression and multiple structural inconsistencies in the KVO support code.
The test suite for CPTreeNode was Spartan in the extreme.
All of these have been addressed - see inline notes for details.
CPTreeNode is subject to further audit.