mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 22:59:07 +02:00
Cocoa/ListView: in vsReport, fix the issues that sortting with Multi Selection
This commit is contained in:
parent
0004dffe30
commit
8557bc7d46
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user