lcl-cocoa: Now TListView items are already showing

git-svn-id: trunk@44784 -
This commit is contained in:
sekelsenmat 2014-04-22 10:54:52 +00:00
parent d43df59082
commit 51218fc679
3 changed files with 96 additions and 19 deletions

View File

@ -5,7 +5,7 @@ interface
{$mode delphi}
{$modeswitch objectivec1}
{.$DEFINE COCOA_DEBUG_TABCONTROL}
{$DEFINE COCOA_DEBUG_TABCONTROL}
uses
// RTL, FCL, LCL
@ -168,7 +168,6 @@ type
callback: ICommonCallback;
ListView: TCustomListView;
// Owned Pascal classes which need to be released
Columns: TObjectList;// NSTableColumn;
Items: TStringList; // Object are TStringList for sub-items
//function lclGetCallback: ICommonCallback; override;
@ -212,6 +211,9 @@ end;
function TCocoaTableListView.numberOfRowsInTableView(tableView: NSTableView
): NSInteger;
begin
{$IFDEF COCOA_DEBUG_TABCONTROL}
WriteLn(Format('[TCocoaTableListView.numberOfRowsInTableView] Result=%d', [Items.Count]));
{$ENDIF}
Result := Items.Count;
end;
@ -219,11 +221,23 @@ 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('[TCocoaTableListView.tableView_objectValueForTableColumn_row]');
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(
@ -240,7 +254,23 @@ var
lStr: string;
begin
lStr := NSStringToString(AStr);
if col = 0 then Items.Strings[row] := lStr
{$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]);
@ -249,6 +279,16 @@ 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;
@ -419,7 +459,6 @@ begin
if Result <> 0 then
begin
//lTableLV.callback := TLCLCommonCallback.Create(lTableLV, AWinControl);
lTableLV.Columns := TObjectList.Create;
lTableLV.Items := TStringList.Create;
lTableLV.ListView := TCustomListView(AWinControl);
@ -438,10 +477,10 @@ begin
{$ENDIF}
if not Assigned(ALV) or not ALV.HandleAllocated then Exit;
lTableLV := TCocoaTableListView(ALV.Handle);
if (AIndex < 0) or (AIndex >= lTableLV.Columns.Count) then Exit;
lColumn := NSTableColumn(lTableLV.Columns.Items[AIndex]);
lTableLV.Columns.Remove(TObject(lColumn));
lColumn.release;
if (AIndex < 0) or (AIndex >= lTableLV.tableColumns.count()) then Exit;
lColumn := lTableLV.tableColumns.objectAtIndex(AIndex);
lTableLV.removeTableColumn(lColumn);
if lColumn <> nil then lColumn.release;
end;
class function TCocoaWSCustomListView.ColumnGetWidth(
@ -456,8 +495,8 @@ begin
{$ENDIF}
if not Assigned(ALV) or not ALV.HandleAllocated then Exit;
lTableLV := TCocoaTableListView(ALV.Handle);
if (AIndex < 0) or (AIndex >= lTableLV.Columns.Count) then Exit;
lColumn := NSTableColumn(lTableLV.Columns.Items[AIndex]);
if (AIndex < 0) or (AIndex >= lTableLV.tableColumns.count()) then Exit;
lColumn := lTableLV.tableColumns.objectAtIndex(AIndex);
Result := Round(lColumn.width());
end;
@ -469,14 +508,19 @@ var
lTitle: NSString;
begin
{$IFDEF COCOA_DEBUG_TABCONTROL}
WriteLn(Format('[TCocoaWSCustomListView.ColumnInsert] AIndex=%d', [AIndex]));
WriteLn(Format('[TCocoaWSCustomListView.ColumnInsert] ALV=%x AIndex=%d', [PtrInt(ALV), AIndex]));
{$ENDIF}
ALV.HandleNeeded();
if not Assigned(ALV) or not ALV.HandleAllocated then Exit;
lTableLV := TCocoaTableListView(ALV.Handle);
if (AIndex < 0) or (AIndex >= lTableLV.Columns.Count) then Exit;
{$IFDEF COCOA_DEBUG_TABCONTROL}
WriteLn(Format('[TCocoaWSCustomListView.ColumnInsert]=> tableColumns.count=%d', [lTableLV.tableColumns.count()]));
{$ENDIF}
if (AIndex < 0) or (AIndex >= lTableLV.tableColumns.count()+1) then Exit;
lTitle := NSStringUTF8(AColumn.Caption);
lColumn := NSTableColumn.alloc.initWithIdentifier(lTitle);
lTableLV.Columns.Insert(AIndex, TObject(lColumn));
lTableLV.addTableColumn(lColumn);
lTitle.release;
end;
class procedure TCocoaWSCustomListView.ColumnMove(const ALV: TCustomListView;
@ -592,14 +636,23 @@ begin
if not Assigned(ALV) or not ALV.HandleAllocated then Exit;
lTableLV := TCocoaTableListView(ALV.Handle);
lColumnCount := lTableLV.tableColumns.count();
{$IFDEF COCOA_DEBUG_TABCONTROL}
WriteLn(Format('[TCocoaWSCustomListView.ItemInsert]=> lColumnCount=%d', [lColumnCount]));
{$ENDIF}
for i := 0 to lColumnCount-1 do
begin
lColumn := lTableLV.tableColumns.objectAtIndex(i);
if i = 0 then lStr := AItem.Caption
else lStr := AItem.SubItems.Strings[i-1];
if i = 0 then
lStr := AItem.Caption
else if (i-1 < AItem.SubItems.Count) then
lStr := AItem.SubItems.Strings[i-1]
else
lStr := '';
lNSStr := NSStringUTF8(lStr);
lTableLV.setStringValue_forTableColumn_row(lNSStr, i, AIndex);
lNSStr.release;
end;
lTableLV.reloadData();
end;
class procedure TCocoaWSCustomListView.ItemSetText(const ALV: TCustomListView;

View File

@ -129,7 +129,7 @@ end;"/>
<License Value="modified LGPL-2
"/>
<Version Major="1" Minor="3"/>
<Files Count="429">
<Files Count="435">
<Item1>
<Filename Value="carbon/agl.pp"/>
<AddToUsesPkgSection Value="False"/>
@ -2135,6 +2135,30 @@ end;"/>
<AddToUsesPkgSection Value="False"/>
<UnitName Value="LazPangoCairo1"/>
</Item429>
<Item430>
<Filename Value="cocoa/cocoalclintf.inc"/>
<Type Value="Include"/>
</Item430>
<Item431>
<Filename Value="cocoa/cocoalclintfh.inc"/>
<Type Value="Include"/>
</Item431>
<Item432>
<Filename Value="cocoa/cocoaproc.pas"/>
<UnitName Value="CocoaProc"/>
</Item432>
<Item433>
<Filename Value="cocoa/cocoathemes.pas"/>
<UnitName Value="CocoaThemes"/>
</Item433>
<Item434>
<Filename Value="cocoa/cocoawscomctrls.pas"/>
<UnitName Value="CocoaWSComCtrls"/>
</Item434>
<Item435>
<Filename Value="cocoa/mackeycodes.inc"/>
<Type Value="Include"/>
</Item435>
</Files>
<LazDoc Paths="../../docs/xml/lcl"/>
<i18n>

View File

@ -7,7 +7,7 @@ unit LCL;
interface
uses
AllLCLIntfUnits, LazarusPackageIntf;
AllLCLIntfUnits, CocoaProc, CocoaThemes, CocoaWSComCtrls, LazarusPackageIntf;
implementation