mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-14 00:40:03 +02:00
lcl-cocoa: Moves the TListView objc class to CocoaPrivate and greatly extends it, fixes memleak, implements a callback for it, etc
git-svn-id: trunk@44785 -
This commit is contained in:
parent
51218fc679
commit
be57a75758
@ -27,7 +27,7 @@ uses
|
|||||||
// Libs
|
// Libs
|
||||||
CocoaAll, CocoaUtils, CocoaGDIObjects,
|
CocoaAll, CocoaUtils, CocoaGDIObjects,
|
||||||
// LCL
|
// LCL
|
||||||
LCLType, LCLProc, Controls;
|
LCLType, LCLProc, Controls, ComCtrls;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -152,12 +152,18 @@ type
|
|||||||
procedure ButtonClick;
|
procedure ButtonClick;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ IListBoxCallBack }
|
{ IListBoxCallBack }
|
||||||
|
|
||||||
IListBoxCallBack = interface(ICommonCallback)
|
IListBoxCallBack = interface(ICommonCallback)
|
||||||
procedure SelectionChanged;
|
procedure SelectionChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ IListViewCallBack }
|
||||||
|
|
||||||
|
IListViewCallBack = interface(ICommonCallback)
|
||||||
|
procedure SelectionChanged;
|
||||||
|
end;
|
||||||
|
|
||||||
{ IWindowCallback }
|
{ IWindowCallback }
|
||||||
|
|
||||||
IWindowCallback = interface(ICommonCallBack)
|
IWindowCallback = interface(ICommonCallBack)
|
||||||
@ -478,8 +484,8 @@ type
|
|||||||
TCocoaListBox = objcclass(NSTableView, NSTableViewDelegateProtocol, NSTableViewDataSourceProtocol )
|
TCocoaListBox = objcclass(NSTableView, NSTableViewDelegateProtocol, NSTableViewDataSourceProtocol )
|
||||||
public
|
public
|
||||||
callback: IListBoxCallback;
|
callback: IListBoxCallback;
|
||||||
|
resultNS: NSString;
|
||||||
list: TCocoaStringList;
|
list: TCocoaStringList;
|
||||||
resultNS: NSString; //use to return values to combo
|
|
||||||
function acceptsFirstResponder: Boolean; override;
|
function acceptsFirstResponder: Boolean; override;
|
||||||
function becomeFirstResponder: Boolean; override;
|
function becomeFirstResponder: Boolean; override;
|
||||||
function resignFirstResponder: Boolean; override;
|
function resignFirstResponder: Boolean; override;
|
||||||
@ -517,29 +523,34 @@ type
|
|||||||
function lclIsHandle: Boolean; override;
|
function lclIsHandle: Boolean; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCocoaListView }
|
{ TCocoaTableListView }
|
||||||
|
|
||||||
TCocoaListView = objcclass(NSTableView, NSTableViewDelegateProtocol, NSTableViewDataSourceProtocol )
|
TCocoaTableListView = objcclass(NSTableView, NSTableViewDelegateProtocol, NSTableViewDataSourceProtocol)
|
||||||
public
|
public
|
||||||
callback: IListBoxCallback;
|
ListView: TCustomListView; // just reference, don't release
|
||||||
list: TCocoaStringList;
|
callback: IListViewCallback;
|
||||||
resultNS: NSString; //use to return values to combo
|
//list: TCocoaStringList;
|
||||||
|
//resultNS: NSString; //use to return values to combo
|
||||||
|
|
||||||
|
// Owned Pascal classes which need to be released
|
||||||
|
Items: TStringList; // Object are TStringList for sub-items
|
||||||
|
|
||||||
function acceptsFirstResponder: Boolean; override;
|
function acceptsFirstResponder: Boolean; override;
|
||||||
function becomeFirstResponder: Boolean; override;
|
function becomeFirstResponder: Boolean; override;
|
||||||
function resignFirstResponder: Boolean; override;
|
function resignFirstResponder: Boolean; override;
|
||||||
function lclGetCallback: ICommonCallback; override;
|
function lclGetCallback: ICommonCallback; override;
|
||||||
procedure lclClearCallback; override;
|
procedure lclClearCallback; override;
|
||||||
function numberOfRowsInTableView(aTableView: NSTableView): NSInteger; message 'numberOfRowsInTableView:';
|
|
||||||
|
|
||||||
|
// NSTableViewDataSourceProtocol
|
||||||
|
function numberOfRowsInTableView(tableView: NSTableView): NSInteger; message 'numberOfRowsInTableView:';
|
||||||
function tableView_shouldEditTableColumn_row(tableView: NSTableView;
|
function tableView_shouldEditTableColumn_row(tableView: NSTableView;
|
||||||
tableColumn: NSTableColumn; row: NSInteger): Boolean;
|
tableColumn: NSTableColumn; row: NSInteger): Boolean;
|
||||||
message 'tableView:shouldEditTableColumn:row:';
|
message 'tableView:shouldEditTableColumn:row:';
|
||||||
|
function tableView_objectValueForTableColumn_row(tableView: NSTableView; tableColumn: NSTableColumn; row: NSInteger): id; message 'tableView:objectValueForTableColumn:row:';
|
||||||
function tableView_objectValueForTableColumn_row(tableView: NSTableView;
|
//procedure tableView_setObjectValue_forTableColumn_row(tableView: NSTableView; object_: id; tableColumn: NSTableColumn; row: NSInteger); message 'tableView:setObjectValue:forTableColumn:row:';
|
||||||
objectValueForTableColumn: NSTableColumn; row: NSInteger):id;
|
|
||||||
message 'tableView:objectValueForTableColumn:row:';
|
|
||||||
|
|
||||||
procedure tableViewSelectionDidChange(notification: NSNotification); message 'tableViewSelectionDidChange:';
|
procedure tableViewSelectionDidChange(notification: NSNotification); message 'tableViewSelectionDidChange:';
|
||||||
|
//
|
||||||
|
procedure setStringValue_forTableColumn_row(AStr: NSString; col, row: NSInteger); message 'setStringValue:forTableColumn:row:';
|
||||||
|
|
||||||
procedure dealloc; override;
|
procedure dealloc; override;
|
||||||
procedure resetCursorRects; override;
|
procedure resetCursorRects; override;
|
||||||
@ -2023,7 +2034,7 @@ begin
|
|||||||
if row>=list.count then Result:=nil
|
if row>=list.count then Result:=nil
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
resultNS.release; //so we can reuse it
|
resultNS.release;
|
||||||
resultNS := NSStringUtf8(list[row]);
|
resultNS := NSStringUtf8(list[row]);
|
||||||
Result:= ResultNS;
|
Result:= ResultNS;
|
||||||
end;
|
end;
|
||||||
@ -2112,147 +2123,199 @@ begin
|
|||||||
inherited keyUp(event);
|
inherited keyUp(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCocoaListView }
|
{ TCocoaTableListView }
|
||||||
|
|
||||||
function TCocoaListView.lclIsHandle: Boolean;
|
function TCocoaTableListView.lclIsHandle: Boolean;
|
||||||
begin
|
begin
|
||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaListView.acceptsFirstResponder: Boolean;
|
function TCocoaTableListView.acceptsFirstResponder: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaListView.becomeFirstResponder: Boolean;
|
function TCocoaTableListView.becomeFirstResponder: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := inherited becomeFirstResponder;
|
Result := inherited becomeFirstResponder;
|
||||||
callback.BecomeFirstResponder;
|
callback.BecomeFirstResponder;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaListView.resignFirstResponder: Boolean;
|
function TCocoaTableListView.resignFirstResponder: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := inherited resignFirstResponder;
|
Result := inherited resignFirstResponder;
|
||||||
callback.ResignFirstResponder;
|
callback.ResignFirstResponder;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaListView.lclGetCallback: ICommonCallback;
|
function TCocoaTableListView.lclGetCallback: ICommonCallback;
|
||||||
begin
|
begin
|
||||||
Result := callback;
|
Result := callback;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.lclClearCallback;
|
procedure TCocoaTableListView.lclClearCallback;
|
||||||
begin
|
begin
|
||||||
callback := nil;
|
callback := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaListView.numberOfRowsInTableView(aTableView:NSTableView): NSInteger;
|
function TCocoaTableListView.numberOfRowsInTableView(TableView:NSTableView): NSInteger;
|
||||||
begin
|
begin
|
||||||
if Assigned(list) then
|
if Assigned(Items) then
|
||||||
Result := list.Count
|
Result := Items.Count
|
||||||
else
|
else
|
||||||
Result := 0;
|
Result := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TCocoaListView.tableView_shouldEditTableColumn_row(tableView: NSTableView; tableColumn: NSTableColumn; row: NSInteger): Boolean;
|
function TCocoaTableListView.tableView_shouldEditTableColumn_row(tableView: NSTableView; tableColumn: NSTableColumn; row: NSInteger): Boolean;
|
||||||
begin
|
begin
|
||||||
result:=false; // disable cell editing by default
|
result:=false; // disable cell editing by default
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCocoaListView.tableView_objectValueForTableColumn_row(tableView: NSTableView;
|
function TCocoaTableListView.tableView_objectValueForTableColumn_row(tableView: NSTableView;
|
||||||
objectValueForTableColumn: NSTableColumn; row: NSInteger):id;
|
TableColumn: NSTableColumn; row: NSInteger):id;
|
||||||
|
var
|
||||||
|
lStringList: TStringList;
|
||||||
|
col: NSInteger;
|
||||||
|
StrResult: NSString;
|
||||||
begin
|
begin
|
||||||
if not Assigned(list) then
|
col := tableColumns.indexOfObject(tableColumn);
|
||||||
Result:=nil
|
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
||||||
else begin
|
WriteLn(Format('[TCocoaTableListView.tableView_objectValueForTableColumn_row] col=%d row=%d Items.Count=%d',
|
||||||
if row>=list.count then Result:=nil
|
[col, row, Items.Count]));
|
||||||
else
|
{$ENDIF}
|
||||||
begin
|
if row > Items.Count-1 then Exit;
|
||||||
resultNS.release; //so we can reuse it
|
if col = 0 then
|
||||||
resultNS := NSStringUtf8(list[row]);
|
StrResult := NSStringUTF8(Items.Strings[row])
|
||||||
Result:= ResultNS;
|
else
|
||||||
end;
|
begin
|
||||||
|
lStringList := TStringList(Items.Objects[row]);
|
||||||
|
StrResult := NSStringUTF8(lStringList.Strings[col-1]);
|
||||||
end;
|
end;
|
||||||
|
Result := StrResult;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.dealloc;
|
procedure TCocoaTableListView.dealloc;
|
||||||
begin
|
begin
|
||||||
FreeAndNil(list);
|
if Assigned(Items) then FreeAndNil(Items);
|
||||||
resultNS.release;
|
|
||||||
inherited dealloc;
|
inherited dealloc;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.resetCursorRects;
|
procedure TCocoaTableListView.resetCursorRects;
|
||||||
begin
|
begin
|
||||||
if not callback.resetCursorRects then
|
if not callback.resetCursorRects then
|
||||||
inherited resetCursorRects;
|
inherited resetCursorRects;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.tableViewSelectionDidChange(notification: NSNotification);
|
procedure TCocoaTableListView.tableViewSelectionDidChange(notification: NSNotification);
|
||||||
begin
|
begin
|
||||||
if Assigned(callback) then
|
if Assigned(callback) then
|
||||||
callback.SelectionChanged;
|
callback.SelectionChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.mouseDown(event: NSEvent);
|
procedure TCocoaTableListView.setStringValue_forTableColumn_row(
|
||||||
|
AStr: NSString; col, row: NSInteger);
|
||||||
|
var
|
||||||
|
lStringList: TStringList;
|
||||||
|
lStr: string;
|
||||||
|
begin
|
||||||
|
lStr := NSStringToString(AStr);
|
||||||
|
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
||||||
|
WriteLn(Format('[TCocoaTableListView.setStringValue_forTableColumn_row] AStr=%s col=%d row=%d Items.Count=%d',
|
||||||
|
[lStr, col, row, Items.Count]));
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
// make sure we have enough lines
|
||||||
|
while (row >= Items.Count) do
|
||||||
|
begin
|
||||||
|
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
||||||
|
WriteLn(Format('[TCocoaTableListView.setStringValue_forTableColumn_row] Adding line', []));
|
||||||
|
{$ENDIF}
|
||||||
|
Items.AddObject('', TStringList.Create());
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Now write it
|
||||||
|
if col = 0 then
|
||||||
|
Items.Strings[row] := lStr
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
lStringList := TStringList(Items.Objects[row]);
|
||||||
|
if lStringList = nil then
|
||||||
|
begin
|
||||||
|
lStringList := TStringList.Create;
|
||||||
|
Items.Objects[row] := lStringList;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// make sure we have enough columns
|
||||||
|
while (col-1 >= lStringList.Count) do
|
||||||
|
begin
|
||||||
|
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
||||||
|
WriteLn(Format('[TCocoaTableListView.setStringValue_forTableColumn_row] Adding column', []));
|
||||||
|
{$ENDIF}
|
||||||
|
lStringList.Add('');
|
||||||
|
end;
|
||||||
|
|
||||||
|
lStringList.Strings[col-1] := lStr;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaTableListView.mouseDown(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
||||||
inherited mouseDown(event);
|
inherited mouseDown(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.rightMouseDown(event: NSEvent);
|
procedure TCocoaTableListView.rightMouseDown(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
||||||
inherited rightMouseDown(event);
|
inherited rightMouseDown(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.rightMouseUp(event: NSEvent);
|
procedure TCocoaTableListView.rightMouseUp(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
||||||
inherited rightMouseUp(event);
|
inherited rightMouseUp(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.otherMouseDown(event: NSEvent);
|
procedure TCocoaTableListView.otherMouseDown(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
||||||
inherited otherMouseDown(event);
|
inherited otherMouseDown(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.otherMouseUp(event: NSEvent);
|
procedure TCocoaTableListView.otherMouseUp(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
if not Assigned(callback) or not callback.MouseUpDownEvent(event) then
|
||||||
inherited otherMouseUp(event);
|
inherited otherMouseUp(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.mouseDragged(event: NSEvent);
|
procedure TCocoaTableListView.mouseDragged(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.MouseMove(event) then
|
if not Assigned(callback) or not callback.MouseMove(event) then
|
||||||
inherited mouseDragged(event);
|
inherited mouseDragged(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.mouseEntered(event: NSEvent);
|
procedure TCocoaTableListView.mouseEntered(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
inherited mouseEntered(event);
|
inherited mouseEntered(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.mouseExited(event: NSEvent);
|
procedure TCocoaTableListView.mouseExited(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
inherited mouseExited(event);
|
inherited mouseExited(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.mouseMoved(event: NSEvent);
|
procedure TCocoaTableListView.mouseMoved(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
inherited mouseMoved(event);
|
inherited mouseMoved(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.keyDown(event: NSEvent);
|
procedure TCocoaTableListView.keyDown(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.KeyEvent(event) then
|
if not Assigned(callback) or not callback.KeyEvent(event) then
|
||||||
inherited keyDown(event);
|
inherited keyDown(event);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCocoaListView.keyUp(event: NSEvent);
|
procedure TCocoaTableListView.keyUp(event: NSEvent);
|
||||||
begin
|
begin
|
||||||
if not Assigned(callback) or not callback.KeyEvent(event) then
|
if not Assigned(callback) or not callback.KeyEvent(event) then
|
||||||
inherited keyUp(event);
|
inherited keyUp(event);
|
||||||
|
@ -10,7 +10,7 @@ interface
|
|||||||
uses
|
uses
|
||||||
// RTL, FCL, LCL
|
// RTL, FCL, LCL
|
||||||
CocoaAll,
|
CocoaAll,
|
||||||
Classes, LCLType, SysUtils, Contnrs,
|
Classes, LCLType, SysUtils, Contnrs, LCLMessageGlue, LMessages,
|
||||||
Controls, ComCtrls, Types, StdCtrls, LCLProc, Graphics, ImgList,
|
Controls, ComCtrls, Types, StdCtrls, LCLProc, Graphics, ImgList,
|
||||||
// WS
|
// WS
|
||||||
WSComCtrls,
|
WSComCtrls,
|
||||||
@ -144,6 +144,13 @@ type
|
|||||||
class procedure SetStyle(const AProgressBar: TCustomProgressBar; const NewStyle: TProgressBarStyle); override;
|
class procedure SetStyle(const AProgressBar: TCustomProgressBar; const NewStyle: TProgressBarStyle); override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TLCLListViewCallback }
|
||||||
|
|
||||||
|
TLCLListViewCallback = class(TLCLCommonCallback, IListViewCallback)
|
||||||
|
public
|
||||||
|
procedure SelectionChanged; virtual;
|
||||||
|
end;
|
||||||
|
TLCLListViewCallBackClass = class of TLCLListViewCallback;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -162,25 +169,6 @@ type
|
|||||||
//procedure lclClearCallback; override;
|
//procedure lclClearCallback; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCocoaTableListView }
|
|
||||||
|
|
||||||
TCocoaTableListView = objcclass(NSTableView, NSTableViewDataSourceProtocol)
|
|
||||||
callback: ICommonCallback;
|
|
||||||
ListView: TCustomListView;
|
|
||||||
// Owned Pascal classes which need to be released
|
|
||||||
Items: TStringList; // Object are TStringList for sub-items
|
|
||||||
|
|
||||||
//function lclGetCallback: ICommonCallback; override;
|
|
||||||
//procedure lclClearCallback; override;
|
|
||||||
|
|
||||||
// NSTableViewDataSourceProtocol
|
|
||||||
function numberOfRowsInTableView(tableView: NSTableView): NSInteger; message 'numberOfRowsInTableView:';
|
|
||||||
function tableView_objectValueForTableColumn_row(tableView: NSTableView; tableColumn: NSTableColumn; row: NSInteger): id; message 'tableView:objectValueForTableColumn:row:';
|
|
||||||
procedure tableView_setObjectValue_forTableColumn_row(tableView: NSTableView; object_: id; tableColumn: NSTableColumn; row: NSInteger); message 'tableView:setObjectValue:forTableColumn:row:';
|
|
||||||
//
|
|
||||||
procedure setStringValue_forTableColumn_row(AStr: NSString; col, row: NSInteger); message 'setStringValue:forTableColumn:row:';
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ TCocoaProgressIndicator }
|
{ TCocoaProgressIndicator }
|
||||||
|
|
||||||
TCocoaProgressIndicator = objcclass(NSProgressIndicator)
|
TCocoaProgressIndicator = objcclass(NSProgressIndicator)
|
||||||
@ -206,93 +194,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TCocoaTableListView }
|
|
||||||
|
|
||||||
function TCocoaTableListView.numberOfRowsInTableView(tableView: NSTableView
|
|
||||||
): NSInteger;
|
|
||||||
begin
|
|
||||||
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
|
||||||
WriteLn(Format('[TCocoaTableListView.numberOfRowsInTableView] Result=%d', [Items.Count]));
|
|
||||||
{$ENDIF}
|
|
||||||
Result := Items.Count;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TCocoaTableListView.tableView_objectValueForTableColumn_row(
|
|
||||||
tableView: NSTableView; tableColumn: NSTableColumn; row: NSInteger): id;
|
|
||||||
var
|
|
||||||
lStringList: TStringList;
|
|
||||||
col: NSInteger;
|
|
||||||
StrResult: NSString;
|
|
||||||
begin
|
|
||||||
col := tableColumns.indexOfObject(tableColumn);
|
|
||||||
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
|
||||||
WriteLn(Format('[TCocoaTableListView.tableView_objectValueForTableColumn_row] col=%d row=%d Items.Count=%d',
|
|
||||||
[col, row, Items.Count]));
|
|
||||||
{$ENDIF}
|
|
||||||
if row > Items.Count-1 then Exit;
|
|
||||||
if col = 0 then
|
|
||||||
StrResult := NSStringUTF8(Items.Strings[row])
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
lStringList := TStringList(Items.Objects[row]);
|
|
||||||
StrResult := NSStringUTF8(lStringList.Strings[col-1]);
|
|
||||||
end;
|
|
||||||
Result := StrResult;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCocoaTableListView.tableView_setObjectValue_forTableColumn_row(
|
|
||||||
tableView: NSTableView; object_: id; tableColumn: NSTableColumn;
|
|
||||||
row: NSInteger);
|
|
||||||
begin
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCocoaTableListView.setStringValue_forTableColumn_row(
|
|
||||||
AStr: NSString; col, row: NSInteger);
|
|
||||||
var
|
|
||||||
lStringList: TStringList;
|
|
||||||
lStr: string;
|
|
||||||
begin
|
|
||||||
lStr := NSStringToString(AStr);
|
|
||||||
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
|
||||||
WriteLn(Format('[TCocoaTableListView.setStringValue_forTableColumn_row] AStr=%s col=%d row=%d Items.Count=%d',
|
|
||||||
[lStr, col, row, Items.Count]));
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
// make sure we have enough lines
|
|
||||||
while (row >= Items.Count) do
|
|
||||||
begin
|
|
||||||
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
|
||||||
WriteLn(Format('[TCocoaTableListView.setStringValue_forTableColumn_row] Adding line', []));
|
|
||||||
{$ENDIF}
|
|
||||||
Items.AddObject('', TStringList.Create());
|
|
||||||
end;
|
|
||||||
|
|
||||||
// Now write it
|
|
||||||
if col = 0 then
|
|
||||||
Items.Strings[row] := lStr
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
lStringList := TStringList(Items.Objects[row]);
|
|
||||||
if lStringList = nil then
|
|
||||||
begin
|
|
||||||
lStringList := TStringList.Create;
|
|
||||||
Items.Objects[row] := lStringList;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// make sure we have enough columns
|
|
||||||
while (col-1 >= lStringList.Count) do
|
|
||||||
begin
|
|
||||||
{$IFDEF COCOA_DEBUG_TABCONTROL}
|
|
||||||
WriteLn(Format('[TCocoaTableListView.setStringValue_forTableColumn_row] Adding column', []));
|
|
||||||
{$ENDIF}
|
|
||||||
lStringList.Add('');
|
|
||||||
end;
|
|
||||||
|
|
||||||
lStringList.Strings[col-1] := lStr;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ TCocoaWSCustomPage }
|
{ TCocoaWSCustomPage }
|
||||||
|
|
||||||
class function TCocoaWSCustomPage.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
class function TCocoaWSCustomPage.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
|
||||||
@ -458,7 +359,7 @@ begin
|
|||||||
Result := TLCLIntfHandle(lTableLV);
|
Result := TLCLIntfHandle(lTableLV);
|
||||||
if Result <> 0 then
|
if Result <> 0 then
|
||||||
begin
|
begin
|
||||||
//lTableLV.callback := TLCLCommonCallback.Create(lTableLV, AWinControl);
|
lTableLV.callback := TLCLListViewCallback.Create(lTableLV, AWinControl);
|
||||||
lTableLV.Items := TStringList.Create;
|
lTableLV.Items := TStringList.Create;
|
||||||
|
|
||||||
lTableLV.ListView := TCustomListView(AWinControl);
|
lTableLV.ListView := TCustomListView(AWinControl);
|
||||||
@ -519,6 +420,7 @@ begin
|
|||||||
if (AIndex < 0) or (AIndex >= lTableLV.tableColumns.count()+1) then Exit;
|
if (AIndex < 0) or (AIndex >= lTableLV.tableColumns.count()+1) then Exit;
|
||||||
lTitle := NSStringUTF8(AColumn.Caption);
|
lTitle := NSStringUTF8(AColumn.Caption);
|
||||||
lColumn := NSTableColumn.alloc.initWithIdentifier(lTitle);
|
lColumn := NSTableColumn.alloc.initWithIdentifier(lTitle);
|
||||||
|
//?/lColumn.setHidden(False);
|
||||||
lTableLV.addTableColumn(lColumn);
|
lTableLV.addTableColumn(lColumn);
|
||||||
lTitle.release;
|
lTitle.release;
|
||||||
end;
|
end;
|
||||||
@ -762,4 +664,11 @@ begin
|
|||||||
inherited resetCursorRects;
|
inherited resetCursorRects;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TLCLListViewCallback }
|
||||||
|
|
||||||
|
procedure TLCLListViewCallback.SelectionChanged;
|
||||||
|
begin
|
||||||
|
SendSimpleMessage(Target, LM_SELCHANGE);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -832,6 +832,7 @@ begin
|
|||||||
FIsEventRouting:=true;
|
FIsEventRouting:=true;
|
||||||
// debugln(Target.name+' -> '+targetControl.Name+'- is parent:'+dbgs(targetControl=Target.Parent)+' Point: '+dbgs(mp)+' Rect'+dbgs(rect));
|
// debugln(Target.name+' -> '+targetControl.Name+'- is parent:'+dbgs(targetControl=Target.Parent)+' Point: '+dbgs(mp)+' Rect'+dbgs(rect));
|
||||||
obj := GetNSObjectView(NSObject(targetControl.Handle));
|
obj := GetNSObjectView(NSObject(targetControl.Handle));
|
||||||
|
if obj = nil then Exit;
|
||||||
callback:=obj.lclGetCallback;
|
callback:=obj.lclGetCallback;
|
||||||
result:=callback.MouseMove(Event);
|
result:=callback.MouseMove(Event);
|
||||||
FIsEventRouting:=false;
|
FIsEventRouting:=false;
|
||||||
|
@ -156,9 +156,6 @@ type
|
|||||||
end;
|
end;
|
||||||
TLCLListBoxCallBackClass = class of TLCLListBoxCallBack;
|
TLCLListBoxCallBackClass = class of TLCLListBoxCallBack;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ TCocoaWSButton }
|
{ TCocoaWSButton }
|
||||||
|
|
||||||
TCocoaWSButton = class(TWSButton)
|
TCocoaWSButton = class(TWSButton)
|
||||||
@ -332,8 +329,6 @@ begin
|
|||||||
SendSimpleMessage(Target, LM_SELCHANGE);
|
SendSimpleMessage(Target, LM_SELCHANGE);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ TLCLCheckBoxCallback }
|
{ TLCLCheckBoxCallback }
|
||||||
|
|
||||||
procedure TLCLCheckBoxCallback.ButtonClick;
|
procedure TLCLCheckBoxCallback.ButtonClick;
|
||||||
|
Loading…
Reference in New Issue
Block a user