Cocoa/ListView: in vsReport, fix the issues that sortting with Multi Selection

This commit is contained in:
rich2014 2024-08-05 23:10:14 +08:00
parent 0004dffe30
commit 8557bc7d46

View File

@ -76,6 +76,8 @@ type
// Own methods, mostly convenience methods // Own methods, mostly convenience methods
function getIndexOfColumn(ACol: NSTableColumn): Integer; message 'getIndexOfColumn:'; function getIndexOfColumn(ACol: NSTableColumn): Integer; message 'getIndexOfColumn:';
procedure reloadDataForRow_column(ARow, ACol: NSInteger); message 'reloadDataForRow:column:'; procedure reloadDataForRow_column(ARow, ACol: NSInteger); message 'reloadDataForRow:column:';
procedure selectOneItemByIndex( index: Integer; isSelected: Boolean );
message 'selectOneItemByIndex:isSelected:';
procedure selectRowIndexesByProgram( indexes: NSIndexSet ); procedure selectRowIndexesByProgram( indexes: NSIndexSet );
message 'selectRowIndexesByProgram:'; message 'selectRowIndexesByProgram:';
@ -622,6 +624,30 @@ begin
reloadDataForRowIndexes_columnIndexes(lRowSet, lColSet); reloadDataForRowIndexes_columnIndexes(lRowSet, lColSet);
end; end;
procedure TCocoaTableListView.selectOneItemByIndex( index: Integer; isSelected: Boolean );
var
lclcb: TLCLListViewCallback;
selection: NSMutableIndexSet;
begin
if (index < 0) or (index >= self.numberOfRows) then
Exit;
lclcb:= TLCLListViewCallback( self.callback.GetCallbackObject );
selection:= NSMutableIndexSet.alloc.initWithIndexSet( lclcb.selectionIndexSet );
if isSelected then begin
if NOT self.allowsMultipleSelection then
selection.removeAllIndexes;
selection.addIndex( index );
end else begin
selection.removeIndex( index );
end;
if NOT selection.isEqualToIndexSet(lclcb.selectionIndexSet) then
self.selectRowIndexes_byExtendingSelection( selection, False );
selection.release;
end;
procedure TCocoaTableListView.selectRowIndexesByProgram( indexes: NSIndexSet ); procedure TCocoaTableListView.selectRowIndexesByProgram( indexes: NSIndexSet );
begin begin
self.selectingByProgram:= True; self.selectingByProgram:= True;
@ -1807,20 +1833,18 @@ procedure TCocoaWSListView_TableViewHandler.ItemSetState(
const AIndex: Integer; const AItem: TListItem; const AState: TListItemState; const AIndex: Integer; const AItem: TListItem; const AState: TListItemState;
const AIsSet: Boolean); const AIsSet: Boolean);
var var
row: Integer; lclcb: TLCLListViewCallback;
isSel: Boolean;
begin begin
row := AItem.Index; lclcb:= self.getCallback;
if (row < 0) or (row >= _tableView.numberOfRows) then Exit; if NOT Assigned(lclcb) then
Exit;
case AState of case AState of
lisFocused, lisFocused,
lisSelected: begin lisSelected: begin
isSel := _tableView.selectedRowIndexes.containsIndex(row); if lclcb.getItemStableSelection(AIndex) <> AIsSet then begin
if AIsSet and not isSel then _tableView.selectOneItemByIndex( AIndex, AIsSet );
_tableView.selectRowIndexesByProgram( NSIndexSet.indexSetWithIndex(row) ) end;
else if not AIsSet and isSel then
_tableView.deselectRow(row);
end; end;
end; end;
end; end;