mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 01:00:34 +02:00
Cocoa: comments added in ListView
This commit is contained in:
parent
97f08d7f6e
commit
8ae3b2d018
@ -16,6 +16,68 @@ uses
|
|||||||
CocoaWSCommon, cocoa_extra, CocoaGDIObjects, CocoaUtils;
|
CocoaWSCommon, cocoa_extra, CocoaGDIObjects, CocoaUtils;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
{
|
||||||
|
1. Key Features
|
||||||
|
1.1 currently ListView supports all ViewStyles of TListView
|
||||||
|
(vsReport/vsIcon/vsSmallIcon/vsList)
|
||||||
|
1.2 supports MultiSelection, supports checkBoxes
|
||||||
|
1.3 supports keeping the selection and checkBox unchanged after
|
||||||
|
inserting/deleting/sorting/switching ViewStyle
|
||||||
|
1.4 supports OwnerData
|
||||||
|
1.5 supports OwnerDraw(OnDrawItem)
|
||||||
|
1.6 supports CustomDraw(OnCustomDraw/OnCustomDrawItem/OnCustomDrawSubItem)
|
||||||
|
|
||||||
|
2. the Overall Structure of ListView
|
||||||
|
since Cocoa does not have a single control corresponding to TListView,
|
||||||
|
multiple controls need to be combined to implement TListView.
|
||||||
|
at the same time, in order to avoid RecreateWnd when switching ViewStyle,
|
||||||
|
a three-layers structure is used:
|
||||||
|
2.1 Stability layer
|
||||||
|
TCocoaListView is a simple NSView, corresponding to the Handle
|
||||||
|
returned to LCL. it remains unchanged when switching ViewStyle.
|
||||||
|
2.2 Scrolling Layer
|
||||||
|
TCocoaScrollView is a simple NSScrollView that provides scrolling
|
||||||
|
support for the underlying control. it will be recreated when
|
||||||
|
switching ViewStyle.
|
||||||
|
2.3 Implementation layer
|
||||||
|
control that implement real functions. it will be recreated when
|
||||||
|
switching ViewStyle.
|
||||||
|
2.3.1 vsReport corresponds to TCocoaTableListView (NSTableView)
|
||||||
|
2.3.2 other styles correspond to TCocoaCollectionView (NSCollectionView)
|
||||||
|
|
||||||
|
3. TCocoaWSListViewHandler
|
||||||
|
LCL interacts with TCocoaListView through TWSCustomListView. in order to
|
||||||
|
isolate the codes of two different underlying controls,
|
||||||
|
TCocoaWSListViewHandler and its subclasses are added:
|
||||||
|
3.1 in TCocoaWSCustomListView (TWSCustomListView), forward to the
|
||||||
|
corresponding subclass of TCocoaWSListViewHandler according to
|
||||||
|
ViewStyle
|
||||||
|
3.2 vsReport corresponds to TCocoaWSListView_TableViewHandler
|
||||||
|
(implemented in CocoaTables unit)
|
||||||
|
3.3 other styles correspond to TCocoaWSListView_CollectionViewHandler
|
||||||
|
(implemented in CocoaCollectionView unit)
|
||||||
|
|
||||||
|
4. TLCLListViewCallback
|
||||||
|
TCocoaListView interacts with LCL through IListViewCallback (TLCLListViewCallback)
|
||||||
|
4.1 since TListView is a whole control in LCL, TLCLListViewCallback
|
||||||
|
does not need to be customized for different ViewStyles
|
||||||
|
4.2 however, it should be noted that TCocoaTableListView is not only the
|
||||||
|
underlying control of TListView, but also the corresponding control of
|
||||||
|
TListBox/TCheckListBox.
|
||||||
|
therefore, the callback contained in TCocoaTableListView is
|
||||||
|
IListViewCallback. there are three implementation classes:
|
||||||
|
TLCLListViewCallback/TLCLListBoxCallback/TLCLCheckboxListCallback
|
||||||
|
|
||||||
|
5. TCocoaListView_CollectionView_StyleHandler
|
||||||
|
TCocoaCollectionView supports three ViewStyles. in order to isolate the
|
||||||
|
code of different ViewStyles, TCocoaListView_CollectionView_StyleHandler
|
||||||
|
and its subclasses are added.
|
||||||
|
5.1 vsIcon corresponds to TCocoaListView_CollectionView_LargeIconHandler
|
||||||
|
5.2 vsSmallIcon corresponds to TCocoaListView_CollectionView_SmallIconHandler
|
||||||
|
5.3 vsList corresponds to TCocoaListView_CollectionView_ListHandler
|
||||||
|
(it uses a horizontal scroll bar)
|
||||||
|
}
|
||||||
|
|
||||||
{ TLCLListViewCallback }
|
{ TLCLListViewCallback }
|
||||||
|
|
||||||
TLCLListViewCallback = class(TLCLCommonCallback, IListViewCallback)
|
TLCLListViewCallback = class(TLCLCommonCallback, IListViewCallback)
|
||||||
|
Loading…
Reference in New Issue
Block a user