Qt: Bugfix for #11790, TQtTreeWidget & TQtWSCustomListView reorganized, added new routines.

git-svn-id: trunk@15952 -
This commit is contained in:
zeljko 2008-08-04 16:33:12 +00:00
parent a075323c38
commit cd6969584e
2 changed files with 425 additions and 155 deletions

View File

@ -861,6 +861,10 @@ type
TQtHeaderView = class (TQtAbstractItemView)
private
FSelectionClicked: QHeaderView_hookH;
function getClickable: Boolean;
function getMinSectionSize: Integer;
procedure setClickable(const AValue: Boolean);
procedure setMinSectionSize(const AValue: Integer);
protected
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
public
@ -868,27 +872,38 @@ type
procedure DetachEvents; override;
procedure SignalSectionClicked(logicalIndex: Integer) cdecl;
function getResizeMode(AIndex: Integer): QHeaderViewResizeMode;
procedure setResizeMode(AResizeMode: QHeaderViewResizeMode);
procedure setResizeMode(AResizeMode: QHeaderViewResizeMode); overload;
procedure setResizeMode(AIndex: Integer; AResizeMode: QHeaderViewResizeMode); overload;
procedure moveSection(AFromIndex: Integer; AToIndex: Integer);
procedure resizeSection(ASection: Integer; ASize: Integer);
procedure setHighlightSections(AValue: Boolean);
procedure setDefaultSectionSize(AValue: Integer);
procedure setStretchLastSection(AValue: Boolean);
function sortIndicatorOrder: QtSortOrder;
property Clickable: Boolean read getClickable write setClickable;
property MinSectionSize: Integer read getMinSectionSize write setMinSectionSize;
end;
{ TQtTreeView }
TQtTreeView = class (TQtAbstractItemView)
private
function getColVisible(AIndex: Integer): Boolean;
function getColWidth(AIndex: Integer): Integer;
procedure setColVisible(AIndex: Integer; const AValue: Boolean);
procedure setColWidth(AIndex: Integer; const AValue: Integer);
protected
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
public
property ColWidth[AIndex: Integer]: Integer read getColWidth write setColWidth;
property ColVisible[AIndex: Integer]: Boolean read getColVisible write setColVisible;
end;
{ TQtTreeWidget }
TQtTreeWidget = class(TQtTreeView)
private
Header: TQtHeaderView;
FHeader: TQtHeaderView;
FCurrentItemChangedHook: QTreeWidget_hookH;
FItemDoubleClickedHook: QTreeWidget_hookH;
FItemClickedHook: QTreeWidget_hookH;
@ -897,13 +912,37 @@ type
FItemSelectionChangedHook: QTreeWidget_hookH;
FItemPressedHook: QTreeWidget_hookH;
FItemEnteredHook: QTreeWidget_hookH;
function getColCount: Integer;
function getHeader: TQtHeaderView;
function getMaxColSize(ACol: Integer): Integer;
function getMinColSize(ACol: Integer): Integer;
function getSortEnabled: Boolean;
procedure setColCount(const AValue: Integer);
procedure setMaxColSize(ACol: Integer; const AValue: Integer);
procedure setMinColSize(ACol: Integer; const AValue: Integer);
procedure setSortEnabled(const AValue: Boolean);
protected
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
public
destructor Destroy; override;
function currentRow: Integer;
procedure setCurrentRow(row: Integer);
function currentItem: QTreeWidgetItemH;
procedure setCurrentItem(AItem: QTreeWidgetItemH);
function headerItem: QTreeWidgetItemH;
function itemAt(APoint: TPoint): QTreeWidgetItemH; overload;
function itemAt(x: Integer; y: Integer): QTreeWidgetItemH; overload;
function indexOfTopLevelItem(AItem: QTreeWidgetItemH): Integer;
procedure insertTopLevelItem(AIndex: Integer; AItem: QTreeWidgetItemH);
function takeTopLevelItem(AIndex: Integer): QTreeWidgetItemH;
function topLevelItem(AIndex: Integer): QTreeWidgetItemH;
function visualItemRect(AItem: QTreeWidgetItemH): TRect;
function getItemVisible(AItem: QTreeWidgetItemH): Boolean;
procedure setItemVisible(AItem: QTreeWidgetItemH; Const AVisible: Boolean);
function selCount: Integer;
function selectedItems: TIntArray;
procedure setItemSelected(AItem: QTreeWidgetItemH; ASelect: Boolean);
procedure sortItems(Acolumn: Integer; AOrder: QtSortOrder);
public
procedure AttachEvents; override;
procedure DetachEvents; override;
@ -918,6 +957,12 @@ type
procedure SignalItemCollapsed(item: QTreeWidgetItemH) cdecl;
procedure SignalCurrentItemChanged(current: QTreeWidgetItemH; previous: QTreeWidgetItemH) cdecl;
procedure SignalItemSelectionChanged; cdecl;
property ColCount: Integer read getColCount write setColCount;
property Header: TQtHeaderView read getHeader;
property MaxColSize[ACol: Integer]: Integer read getMaxColSize write setMaxColSize;
property MinColSize[ACol: Integer]: Integer read getMinColSize write setMinColSize;
property SortEnabled: Boolean read getSortEnabled write setSortEnabled;
end;
{TQtTableView}
@ -6295,6 +6340,27 @@ end;
{ TQtHeaderView }
function TQtHeaderView.getClickable: Boolean;
begin
Result := QHeaderView_isClickable(QHeaderViewH(Widget));
end;
function TQtHeaderView.getMinSectionSize: Integer;
begin
Result := QHeaderView_minimumSectionSize(QHeaderViewH(Widget));
end;
procedure TQtHeaderView.setClickable(const AValue: Boolean);
begin
QHeaderView_setClickable(QHeaderViewH(Widget), AValue);
end;
procedure TQtHeaderView.setMinSectionSize(const AValue: Integer);
begin
QHeaderView_setMinimumSectionSize(QHeaderViewH(Widget), AValue);
end;
{------------------------------------------------------------------------------
Function: TQtHeaderView.CreateWidget
Params: None
@ -6315,7 +6381,6 @@ var
begin
inherited AttachEvents;
FSelectionClicked := QHeaderView_hook_create(Widget);
QHeaderView_sectionClicked_Event(Method) := @SignalSectionClicked;
QHeaderView_hook_hook_sectionClicked(FSelectionClicked, Method);
end;
@ -6336,7 +6401,6 @@ var
Msg: TLMNotify;
NMLV: TNMListView;
begin
FillChar(Msg, SizeOf(Msg), #0);
FillChar(NMLV, SizeOf(NMLV), #0);
@ -6362,6 +6426,12 @@ begin
QHeaderView_setResizeMode(QHeaderViewH(Widget), AResizeMode);
end;
procedure TQtHeaderView.setResizeMode(AIndex: Integer;
AResizeMode: QHeaderViewResizeMode);
begin
QHeaderView_setResizeMode(QHeaderViewH(Widget), AIndex, AResizeMode);
end;
procedure TQtHeaderView.moveSection(AFromIndex: Integer; AToIndex: Integer);
begin
QHeaderView_moveSection(QHeaderViewH(Widget), AFromIndex, AToIndex);
@ -6387,8 +6457,33 @@ begin
QHeaderView_setStretchLastSection(QHeaderViewH(Widget), AValue);
end;
function TQtHeaderView.sortIndicatorOrder: QtSortOrder;
begin
Result := QHeaderView_sortIndicatorOrder(QHeaderViewH(Widget));
end;
{ TQtTreeView }
function TQtTreeView.getColVisible(AIndex: Integer): Boolean;
begin
Result := not QTreeView_isColumnHidden(QTreeViewH(Widget), AIndex);
end;
function TQtTreeView.getColWidth(AIndex: Integer): Integer;
begin
Result := QTreeView_columnWidth(QTreeViewH(Widget), AIndex);
end;
procedure TQtTreeView.setColVisible(AIndex: Integer; const AValue: Boolean);
begin
QTreeView_setColumnHidden(QTreeViewH(Widget), AIndex, not AValue);
end;
procedure TQtTreeView.setColWidth(AIndex: Integer; const AValue: Integer);
begin
QTreeView_setColumnWidth(QTreeViewH(Widget), AIndex, AValue);
end;
{------------------------------------------------------------------------------
Function: TQtTreeView.CreateWidget
Params: None
@ -6417,11 +6512,7 @@ begin
WriteLn('TQtTreeWidget.Create');
{$endif}
Result := QTreeWidget_create();
Header := TQtHeaderView.Create(LCLObject, AParams);
Header.AttachEvents;
QTreeView_setHeader(QTreeViewH(Result), QHeaderViewH(Header.Widget));
FHeader := nil;
end;
{------------------------------------------------------------------------------
@ -6435,12 +6526,77 @@ begin
WriteLn('TQtTreeWidget.Destroy');
{$endif}
if Assigned(Header) then
Header.Free;
if Assigned(FHeader) then
FHeader.Free;
inherited Destroy;
end;
function TQtTreeWidget.getHeader: TQtHeaderView;
var
AParams: TCreateParams;
begin
{while designing TQtHeaderView is a no-no}
if not (csDesigning in LCLObject.ComponentState) and (FHeader = nil) then
begin
FHeader := TQtHeaderView.CreateFrom(LCLObject, QTreeView_header(QTreeViewH(Widget)));
FHeader.AttachEvents;
QTreeView_setHeader(QTreeViewH(Widget), QHeaderViewH(FHeader.Widget));
end;
Result := FHeader;
end;
function TQtTreeWidget.getMaxColSize(ACol: Integer): Integer;
var
Size: TSize;
begin
{$note QSizeH implementation missing for this}
Result := MAXINT -1;
end;
function TQtTreeWidget.getMinColSize(ACol: Integer): Integer;
begin
{$note QSizeH implementation missing for this}
Result := 0;
end;
function TQtTreeWidget.getSortEnabled: Boolean;
begin
Result := QTreeWidget_isSortingEnabled(QTreeWidgetH(Widget));
end;
function TQtTreeWidget.getColCount: Integer;
begin
Result := QTreeWidget_columnCount(QTreeWidgetH(Widget));
end;
procedure TQtTreeWidget.setColCount(const AValue: Integer);
begin
QTreeWidget_setColumnCount(QTreeWidgetH(Widget), AValue);
end;
procedure TQtTreeWidget.setMaxColSize(ACol: Integer; const AValue: Integer);
begin
{$note QSizeH implementation missing for this}
end;
procedure TQtTreeWidget.setMinColSize(ACol: Integer; const AValue: Integer);
begin
// QTreeWidgetItem_setSizeHint(headerItem, @Size, ACol);
{$note QSizeH implementation missing for this}
end;
{------------------------------------------------------------------------------
Function: TQtTreeWidget.setSortEnabled
Params: Boolean
Returns: Nothing
Enables sorting of items.
------------------------------------------------------------------------------}
procedure TQtTreeWidget.setSortEnabled(const AValue: Boolean);
begin
QTreeWidget_setSortingEnabled(QTreeWidgetH(Widget), AValue);
end;
{------------------------------------------------------------------------------
Function: TQtTreeWidget.CurrentRow
Params: None
@ -6467,6 +6623,95 @@ begin
QTreeWidget_setCurrentItem(QTreeWidgetH(Widget), TWI);
end;
function TQtTreeWidget.currentItem: QTreeWidgetItemH;
begin
Result := QTreeWidget_currentItem(QTreeWidgetH(Widget));
end;
procedure TQtTreeWidget.setCurrentItem(AItem: QTreeWidgetItemH);
begin
QTreeWidget_setCurrentItem(QTreeWidgetH(Widget), AItem);
end;
function TQtTreeWidget.headerItem: QTreeWidgetItemH;
begin
Result := QTreeWidget_headerItem(QTreeWidgetH(Widget));
end;
function TQtTreeWidget.itemAt(APoint: TPoint): QTreeWidgetItemH;
begin
Result := QTreeWidget_itemAt(QTreeWidgetH(Widget), APoint.x, APoint.y);
end;
function TQtTreeWidget.itemAt(x: Integer; y: Integer): QTreeWidgetItemH;
begin
Result := QTreeWidget_itemAt(QTreeWidgetH(Widget), x, y);
end;
function TQtTreeWidget.indexOfTopLevelItem(AItem: QTreeWidgetItemH): Integer;
begin
Result := QTreeWidget_indexOfTopLevelItem(QTreeWidgetH(Widget), AItem);
end;
procedure TQtTreeWidget.insertTopLevelItem(AIndex: Integer;
AItem: QTreeWidgetItemH);
begin
QTreeWidget_insertTopLevelItem(QTreeWidgetH(Widget), AIndex, AItem);
end;
function TQtTreeWidget.takeTopLevelItem(AIndex: Integer): QTreeWidgetItemH;
begin
Result := QTreeWidget_takeTopLevelItem(QTreeWidgetH(Widget), AIndex);
end;
function TQtTreeWidget.topLevelItem(AIndex: Integer): QTreeWidgetItemH;
begin
Result := QTreeWidget_topLevelItem(QTreeWidgetH(Widget), AIndex);
end;
function TQtTreeWidget.visualItemRect(AItem: QTreeWidgetItemH): TRect;
var
ItemRect: TRect;
begin
QTreeWidget_visualItemRect(QTreeWidgetH(Widget), @ItemRect, AItem);
Result := ItemRect;
end;
function TQtTreeWidget.getItemVisible(AItem: QTreeWidgetItemH): Boolean;
begin
Result := not QTreeWidget_isItemHidden(QTreeWidgetH(Widget), AItem);
end;
procedure TQtTreeWidget.setItemVisible(AItem: QTreeWidgetItemH;
const AVisible: Boolean);
begin
QTreeWidget_setItemHidden(QTreeWidgetH(Widget), AItem, not AVisible);
end;
function TQtTreeWidget.selCount: Integer;
var
FPInts: TIntArray;
begin
QTreeWidget_selectedItems(QTreeWidgetH(Widget), @FPInts);
Result := length(FPInts);
end;
function TQtTreeWidget.selectedItems: TIntArray;
begin
QTreeWidget_selectedItems(QTreeWidgetH(Widget), @Result);
end;
procedure TQtTreeWidget.setItemSelected(AItem: QTreeWidgetItemH;
ASelect: Boolean);
begin
QTreeWidget_setItemSelected(QTreeWidgetH(Widget), AItem, ASelect);
end;
procedure TQtTreeWidget.sortItems(Acolumn: Integer; AOrder: QtSortOrder);
begin
QTreeWidget_sortItems(QTreeWidgetH(Widget), AColumn, AOrder);
end;
procedure TQtTreeWidget.AttachEvents;
var
Method: TMethod;

View File

@ -115,6 +115,7 @@ type
class function GetBoundingRect(const ALV: TCustomListView): TRect; override;
(*
// Column
@ -611,7 +612,8 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class function TQtWSCustomListView.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
class function TQtWSCustomListView.CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): TLCLIntfHandle;
var
QtTreeWidget: TQtTreeWidget;
begin
@ -625,16 +627,16 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnDelete(const ALV: TCustomListView; const AIndex: Integer);
class procedure TQtWSCustomListView.ColumnDelete(const ALV: TCustomListView;
const AIndex: Integer);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnDelete') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_headerItem(TW);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.headerItem;
QTreeWidgetItem_takeChild(TWI, AIndex);
end;
@ -643,24 +645,23 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnInsert(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn);
class procedure TQtWSCustomListView.ColumnInsert(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
TWIChild: QTreeWidgetItemH;
HV: QHeaderViewH;
Str: WideString;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnInsert') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
if QtTreeWidget.ColCount <> TListView(ALV).Columns.Count then
QtTreeWidget.ColCount := TListView(ALV).Columns.Count;
if QTreeWidget_columnCount(TW) <> TListView(ALV).Columns.Count then
QTreeWidget_setColumnCount(TW, TListView(ALV).Columns.Count);
TWI := QTreeWidget_headerItem(TW);
TWI := QtTreeWidget.headerItem;
if QTreeWidgetItem_childCount(TWI) < (AIndex + 1) then
begin
@ -671,11 +672,9 @@ begin
QTreeWidgetItem_setText(TWI, AIndex, @Str);
end;
HV := QTreeView_header(TW);
if not QHeaderView_isClickable(HV) then
QHeaderView_setClickable(HV, True);
if (csDesigning in ALV.ComponentState) then
exit;
QtTreeWidget.Header.Clickable := TListView(ALV).ColumnClick;
end;
{------------------------------------------------------------------------------
@ -683,15 +682,16 @@ end;
Params: None
Returns: Integer
------------------------------------------------------------------------------}
class function TQtWSCustomListView.ColumnGetWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn): Integer;
class function TQtWSCustomListView.ColumnGetWidth(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn): Integer;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnGetWidth') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
Result := QTreeView_columnWidth(QTreeViewH(TW), AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
Result := QtTreeWidget.ColWidth[AIndex];
end;
{------------------------------------------------------------------------------
@ -699,17 +699,19 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnMove(const ALV: TCustomListView; const AOldIndex, ANewIndex: Integer; const AColumn: TListColumn);
class procedure TQtWSCustomListView.ColumnMove(const ALV: TCustomListView;
const AOldIndex, ANewIndex: Integer; const AColumn: TListColumn);
var
TW: QTreeWidgetH;
HV: QHeaderViewH;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnMove') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
HV := QTreeView_header(TW);
QHeaderView_moveSection(HV, AOldIndex, ANewIndex);
if (csDesigning in ALV.ComponentState) then
exit;
QtTreeWidget := TQtTreeWidget(ALV.Handle);
QtTreeWidget.Header.moveSection(AOldIndex, ANewIndex);
end;
{------------------------------------------------------------------------------
@ -717,17 +719,17 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetAlignment(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AAlignment: TAlignment);
class procedure TQtWSCustomListView.ColumnSetAlignment(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const AAlignment: TAlignment);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnSetAlignment') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_headerItem(TW);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.headerItem;
QTreeWidgetItem_setTextAlignment(TWI, AIndex, AlignmentToQtAlignmentMap[AAlignment]);
end;
@ -736,20 +738,22 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetAutoSize(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AAutoSize: Boolean);
class procedure TQtWSCustomListView.ColumnSetAutoSize(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const AAutoSize: Boolean);
var
TW: QTreeWidgetH;
HV: QHeaderViewH;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnSetAutoSize') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
HV := QTreeView_header(TW);
if (csDesigning in ALV.ComponentState) then
exit;
QtTreeWidget := TQtTreeWidget(ALV.Handle);
if AAutoSize then
QHeaderView_setResizeMode(HV, AIndex, QHeaderViewResizeToContents)
QtTreeWidget.Header.setResizeMode(AIndex, QHeaderViewResizeToContents)
else
QHeaderView_setResizeMode(HV, AIndex, QHeaderViewInteractive);
QtTreeWidget.Header.setResizeMode(AIndex, QHeaderViewInteractive);
end;
{------------------------------------------------------------------------------
@ -757,17 +761,18 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetCaption(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const ACaption: String);
class procedure TQtWSCustomListView.ColumnSetCaption(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const ACaption: String);
var
Str: WideString;
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnSetAutoSize') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_headerItem(TW);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.headerItem;
if TWI <> NiL then
begin
Str := GetUtf8String(ACaption);
@ -780,7 +785,8 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetImage(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AImageIndex: Integer);
class procedure TQtWSCustomListView.ColumnSetImage(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const AImageIndex: Integer);
{var
TW: QTreeWidgetH;
TWI: QTreeWidgetItemH;}
@ -802,17 +808,15 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetMinWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AMinWidth: integer);
class procedure TQtWSCustomListView.ColumnSetMinWidth(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const AMinWidth: integer);
var
TW: QTreeWidgetH;
HV: QHeaderViewH;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnSetMinWidth') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
HV := QTreeView_header(TW);
QHeaderView_setMinimumSectionSize(HV, AMinWidth);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
QtTreeWidget.MinColSize[AIndex] := AMinWidth;
end;
{------------------------------------------------------------------------------
@ -820,15 +824,16 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AWidth: Integer);
class procedure TQtWSCustomListView.ColumnSetWidth(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const AWidth: Integer);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnSetWidth') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QTreeView_setColumnWidth(QTreeViewH(TW), AIndex, AWidth);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
QtTreeWidget.ColWidth[AIndex] := AWidth;
end;
{------------------------------------------------------------------------------
@ -836,15 +841,16 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ColumnSetVisible(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AVisible: Boolean);
class procedure TQtWSCustomListView.ColumnSetVisible(const ALV: TCustomListView;
const AIndex: Integer; const AColumn: TListColumn; const AVisible: Boolean);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'ColumnSetVisible') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QTreeView_setColumnHidden(QTreeViewH(TW), AIndex, not AVisible);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
QtTreeWidget.ColVisible[AIndex] := AVisible;
end;
{------------------------------------------------------------------------------
@ -852,28 +858,29 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ItemDelete(const ALV: TCustomListView; const AIndex: Integer);
class procedure TQtWSCustomListView.ItemDelete(const ALV: TCustomListView;
const AIndex: Integer);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
QtItem: QTreeWidgetItemH;
Item: TListItem;
begin
if not WSCheckHandleAllocated(ALV, 'ItemDelete') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QTreeWidget_takeTopLevelItem(TW, AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
QtTreeWidget.takeTopLevelItem(AIndex);
{$note FIXME workaround issue #9746}
{workaround for ListOutOfBounds in some cases. Described with issue #9746}
QtItem := QTreeWidget_currentItem(TW);
QtItem := QtTreeWidget.currentItem;
if QtItem <> nil then
begin
Item := ALV.Selected;
if Assigned(Item) then
begin
if Item.Index <> QTreeWidget_indexOfTopLevelItem(TW, QtItem) then
TListView(ALV).Items[QTreeWidget_indexOfTopLevelItem(TW, QtItem)].Selected := True;
if Item.Index <> QtTreeWidget.indexOfTopLevelItem(QtItem) then
TListView(ALV).Items[QtTreeWidget.indexOfTopLevelItem(QtItem)].Selected := True;
end;
end;
@ -884,9 +891,10 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class function TQtWSCustomListView.ItemGetChecked(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem): Boolean;
class function TQtWSCustomListView.ItemGetChecked(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem): Boolean;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
AState: QtCheckState;
begin
@ -897,8 +905,8 @@ begin
if not Result then
exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
AState := QTreeWidgetItem_checkState(TWI, 0);
if AState = QtChecked then
Result := True
@ -909,19 +917,19 @@ end;
Params: None
Returns: TPoint
------------------------------------------------------------------------------}
class function TQtWSCustomListView.ItemGetPosition(const ALV: TCustomListView; const AIndex: Integer): TPoint;
class function TQtWSCustomListView.ItemGetPosition(const ALV: TCustomListView;
const AIndex: Integer): TPoint;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
R: TRect;
begin
if not WSCheckHandleAllocated(ALV, 'ItemGetPosition') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QTreeWidget_visualItemRect(TW, @R, TWI);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
R := QtTreeWidget.visualItemRect(TWI);
Result.X := R.Left;
Result.Y := R.Top;
@ -932,19 +940,21 @@ end;
Params: None
Returns: TPoint
------------------------------------------------------------------------------}
class function TQtWSCustomListView.ItemGetState(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const AState: TListItemState; out AIsSet: Boolean): Boolean;
class function TQtWSCustomListView.ItemGetState(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem;
const AState: TListItemState; out AIsSet: Boolean): Boolean;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ItemGetState') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
case AState of
lisFocused: AIsSet := TWI = QTreeWidget_currentItem(TW);
lisFocused: AIsSet := TWI = QtTreeWidget.currentItem;
lisSelected: AIsSet := QTreeWidgetItem_isSelected(TWI);
else
AIsSet := False;
@ -959,9 +969,10 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ItemSetChecked(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean);
class procedure TQtWSCustomListView.ItemSetChecked(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ItemSetChecked') then
@ -970,8 +981,8 @@ begin
if not ALV.CheckBoxes then
exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
if AChecked then
QTreeWidgetItem_setCheckState(TWI, 0, QtChecked)
else
@ -983,20 +994,21 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ItemSetState(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const AState: TListItemState; const AIsSet: Boolean);
class procedure TQtWSCustomListView.ItemSetState(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem;
const AState: TListItemState; const AIsSet: Boolean);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ItemSetState') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
case AState of
lisFocused: QTreeWidget_setCurrentItem(TW, TWI);
lisSelected: QTreeWidgetItem_setSelected(TWI, AIsSet);
lisFocused: QtTreeWidget.setCurrentItem(TWI);
lisSelected: QtTreeWidget.setItemSelected(TWI, AIsSet);
end;
end;
@ -1006,9 +1018,10 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ItemInsert(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem);
class procedure TQtWSCustomListView.ItemInsert(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
Str: WideString;
i: Integer;
@ -1016,8 +1029,8 @@ begin
if not WSCheckHandleAllocated(ALV, 'ItemInsert') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidgetItem_create(TW, 0);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QTreeWidgetItem_create(QTreeWidgetH(QtTreeWidget.Widget), 0);
Str := GetUtf8String(AItem.Caption);
if ALV.CheckBoxes then
@ -1034,8 +1047,7 @@ begin
Str := GetUtf8String(AItem.Subitems.Strings[i]);
QTreeWidgetItem_setText(TWI, i+1, @Str);
end;
QTreeWidget_insertTopLevelItem(TW, AIndex, TWI);
QtTreeWidget.insertTopLevelItem(AIndex, TWI);
end;
@ -1044,18 +1056,22 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ItemSetText(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const ASubIndex: Integer; const AText: String);
class procedure TQtWSCustomListView.ItemSetText(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem; const ASubIndex: Integer;
const AText: String);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
Str: WideString;
begin
writeln('TQtWSCustomListView.ItemSetText() AIndex=',AIndex,' ASubIndex=',ASubIndex,
' Text=',AText,' SubItemsCount=',AItem.SubItems.Count);
if not WSCheckHandleAllocated(ALV, 'ItemSetText') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
Str := GetUtf8String(AText);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
TWI := QtTreeWidget.topLevelItem(AIndex);
if TWI <> NiL then
QTreeWidgetItem_setText(TWI, ASubIndex, @Str);
end;
@ -1065,17 +1081,18 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.ItemShow(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const PartialOK: Boolean);
class procedure TQtWSCustomListView.ItemShow(const ALV: TCustomListView;
const AIndex: Integer; const AItem: TListItem; const PartialOK: Boolean);
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ItemShow') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QTreeWidget_setItemHidden(TW, TWI, False);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
QtTreeWidget.setItemVisible(TWI, True);
end;
@ -1084,20 +1101,21 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class function TQtWSCustomListView.ItemDisplayRect(const ALV: TCustomListView; const AIndex, ASubItem: Integer; ACode: TDisplayCode): TRect;
class function TQtWSCustomListView.ItemDisplayRect(const ALV: TCustomListView;
const AIndex, ASubItem: Integer; ACode: TDisplayCode): TRect;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'ItemDisplayRect') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_topLevelItem(TW, AIndex);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.topLevelItem(AIndex);
if QTreeWidgetItem_childCount(TWI) > 0 then
QTreeWidget_visualItemRect(TW, @Result, QTreeWidgetItem_child(TWI, ASubItem))
Result := QtTreeWidget.visualItemRect(QTreeWidgetItem_child(TWI, ASubItem))
else
QTreeWidget_visualItemRect(TW, @Result, TWI);
Result := QtTreeWidget.visualItemRect(TWI);
end;
{------------------------------------------------------------------------------
@ -1107,16 +1125,16 @@ end;
------------------------------------------------------------------------------}
class function TQtWSCustomListView.GetFocused(const ALV: TCustomListView): Integer;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
i: Integer;
begin
if not WSCheckHandleAllocated(ALV, 'GetFocused') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_currentItem(TW);
i := QTreeWidget_indexOfTopLevelItem(TW, TWI);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.currentItem;
i := QtTreeWidget.indexOfTopLevelItem(TWI);
if QTreeWidgetItem_isSelected(TWI) then
Result := i
else
@ -1130,15 +1148,14 @@ end;
------------------------------------------------------------------------------}
class function TQtWSCustomListView.GetItemAt(const ALV: TCustomListView; x,y: integer): Integer;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
begin
if not WSCheckHandleAllocated(ALV, 'GetItemAt') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
TWI := QTreeWidget_itemAt(TW, x, y);
Result := QTreeWidget_indexOfTopLevelItem(TW, TWI);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
TWI := QtTreeWidget.itemAt(x, y);
Result := QtTreeWidget.indexOfTopLevelItem(TWI);
end;
{------------------------------------------------------------------------------
@ -1148,15 +1165,13 @@ end;
------------------------------------------------------------------------------}
class function TQtWSCustomListView.GetSelCount(const ALV: TCustomListView): Integer;
var
TW: QTreeWidgetH;
FPInts: TIntArray;
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'GetSelCount') then
Exit;
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QTreeWidget_selectedItems(TW, @FPInts);
Result := length(FPInts);
QtTreeWidget := TQtTreeWidget(ALV.Handle);
Result := QtTreeWidget.selCount;
end;
{------------------------------------------------------------------------------
@ -1166,15 +1181,15 @@ end;
------------------------------------------------------------------------------}
class function TQtWSCustomListView.GetSelection(const ALV: TCustomListView): Integer;
var
TW: QTreeWidgetH;
QtTreeWidget: TQtTreeWidget;
FPInts: TIntArray;
begin
if not WSCheckHandleAllocated(ALV, 'GetSelection') then
Exit;
{implement selection event so we can return Alv.Selected.Index}
TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);
QTreeWidget_selectedItems(TW, @FPInts);
{implement selection event so we can return Alv.Selected.Index}
QtTreeWidget := TQtTreeWidget(ALV.Handle);
FPInts := QtTreeWidget.selectedItems;
if Length(FPInts)>0 then
Result := FPInts[0]
else
@ -1186,20 +1201,31 @@ end;
Params: None
Returns: Nothing
------------------------------------------------------------------------------}
class procedure TQtWSCustomListView.SetSort(const ALV: TCustomListView; const AType: TSortType; const AColumn: Integer);
{var
TW: QTreeWidgetH;}
class procedure TQtWSCustomListView.SetSort(const ALV: TCustomListView;
const AType: TSortType; const AColumn: Integer);
var
QtTreeWidget: TQtTreeWidget;
begin
if not WSCheckHandleAllocated(ALV, 'SetSort') then
Exit;
{TW := QTreeWidgetH(TQtTreeWidget(ALV.Handle).Widget);}
if (csDesigning in ALV.ComponentState) then
exit;
QtTreeWidget := TQtTreeWidget(ALV.Handle);
if AType <> stNone then
begin
{$note implement}
// QTreeWidget_setSortingEnabled(TW, True);
// QTreeView_sortByColumn(QTreeViewH(TW), AColumn);
QtTreeWidget.SortEnabled := True;
{$note for proper implementation of all TSortType
we have to implement item sorting roles.
if QtTreeWidget.Header.sortIndicatorOrder = QtDescendingOrder then
QtTreeWidget.sortItems(AColumn, QtAscendingOrder)
else
QtTreeWidget.sortItems(AColumn, QtDescendingOrder);
}
end;
end;
{------------------------------------------------------------------------------
@ -1211,8 +1237,7 @@ class function TQtWSCustomListView.GetBoundingRect(const ALV: TCustomListView):
begin
if not WSCheckHandleAllocated(ALV, 'GetBoundingRect') then
Exit;
Result := TQtWidget(ALV.Handle).getFrameGeometry;
Result := TQtTreeWidget(ALV.Handle).getFrameGeometry;
end;
initialization