mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-07 05:00:43 +02:00
Qt: TListView vsIcon rework, now we use QListWidget for IconView mode.
git-svn-id: trunk@24926 -
This commit is contained in:
parent
7a4507e5e8
commit
7e77c94cc6
@ -191,6 +191,7 @@ type
|
||||
function getClientBounds: TRect; virtual;
|
||||
function getClientOffset: TPoint; virtual;
|
||||
function getEnabled: Boolean;
|
||||
function getFont: QFontH;
|
||||
function getFocusPolicy: QtFocusPolicy;
|
||||
function getFrameGeometry: TRect;
|
||||
function getGeometry: TRect; virtual;
|
||||
@ -902,8 +903,10 @@ type
|
||||
TQtAbstractItemView = class(TQtAbstractScrollArea)
|
||||
private
|
||||
FCheckable: boolean;
|
||||
FHideSelection: Boolean;
|
||||
FOldDelegate: QAbstractItemDelegateH;
|
||||
FNewDelegate: QLCLItemDelegateH;
|
||||
FOwnerData: Boolean;
|
||||
FSignalActivated: QAbstractItemView_hookH;
|
||||
FSignalClicked: QAbstractItemView_hookH;
|
||||
FSignalDoubleClicked: QAbstractItemView_hookH;
|
||||
@ -911,6 +914,7 @@ type
|
||||
FSignalPressed: QAbstractItemView_hookH;
|
||||
FSignalViewportEntered: QAbstractItemView_hookH;
|
||||
FAbstractItemViewportEventHook: QObject_hookH;
|
||||
FViewStyle: Integer;
|
||||
function getIconSize: TSize;
|
||||
function GetOwnerDrawn: Boolean;
|
||||
procedure setIconSize(const AValue: TSize);
|
||||
@ -938,9 +942,13 @@ type
|
||||
procedure setEditTriggers(ATriggers: QAbstractItemViewEditTriggers);
|
||||
procedure setSelectionMode(AMode: QAbstractItemViewSelectionMode);
|
||||
procedure setSelectionBehavior(ABehavior: QAbstractItemViewSelectionBehavior);
|
||||
procedure setWordWrap(const AValue: Boolean); virtual;
|
||||
property Checkable: boolean read FCheckable write FCheckable;
|
||||
property HideSelection: Boolean read FHideSelection write FHideSelection;
|
||||
property IconSize: TSize read getIconSize write setIconSize;
|
||||
property OwnerDrawn: Boolean read GetOwnerDrawn write SetOwnerDrawn;
|
||||
property OwnerData: Boolean read FOwnerData write FOwnerData;
|
||||
property ViewStyle: Integer read FViewStyle write FViewStyle;
|
||||
public
|
||||
procedure ItemDelegateSizeHint(option: QStyleOptionViewItemH; index: QModelIndexH; Size: PSize); cdecl; virtual;
|
||||
procedure ItemDelegatePaint(painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; virtual;
|
||||
@ -949,7 +957,23 @@ type
|
||||
{ TQtListView }
|
||||
|
||||
TQtListView = class(TQtAbstractItemView)
|
||||
private
|
||||
function getGridSize: TSize;
|
||||
function getSpacing: Integer;
|
||||
procedure setSpacing(const AValue: integer);
|
||||
procedure setGridSize(const AValue: TSize);
|
||||
public
|
||||
procedure setLayoutMode(const ALayoutMode: QListViewLayoutMode);
|
||||
procedure setMovement(const AMovement: QListViewMovement);
|
||||
procedure setResizeMode(const AResizeMode: QListViewResizeMode);
|
||||
procedure setUniformItemSizes(const AEnable: Boolean);
|
||||
procedure setViewFlow(const AFlow: QListViewFlow);
|
||||
procedure setViewMode(const AMode: QListViewViewMode);
|
||||
procedure setWordWrap(const AValue: Boolean); override;
|
||||
procedure setWrapping(const AWrapping: Boolean);
|
||||
procedure LayoutItems;
|
||||
property GridSize: TSize read getGridSize write setGridSize;
|
||||
property Spacing: Integer read getSpacing write setSpacing;
|
||||
end;
|
||||
|
||||
{ TQtListWidget }
|
||||
@ -960,6 +984,8 @@ type
|
||||
FItemClickedHook: QListWidget_hookH;
|
||||
FItemTextChangedHook: QListWidget_hookH;
|
||||
FDontPassSelChange: Boolean;
|
||||
function getItemCount: Integer;
|
||||
procedure setItemCount(const AValue: Integer);
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
@ -977,20 +1003,30 @@ type
|
||||
public
|
||||
procedure ClearItems;
|
||||
function currentRow: Integer;
|
||||
function currentItem: QListWidgetItemH;
|
||||
function IndexAt(APoint: PQtPoint): Integer;
|
||||
procedure insertItem(AIndex: Integer; AText: String); overload;
|
||||
procedure insertItem(AIndex: Integer; AText: PWideString); overload;
|
||||
function itemAt(APoint: TPoint): QListWidgetItemH; overload;
|
||||
function itemAt(x: Integer; y: Integer): QListWidgetItemH; overload;
|
||||
function getItem(AIndex: Integer): QListWidgetItemH;
|
||||
function getItemSelected(AItem: QListWidgetItemH): Boolean;
|
||||
function getItemVisible(AItem: QListWidgetItemH): Boolean;
|
||||
function getRow(AItem: QListWidgetItemH): integer;
|
||||
function getSelCount: Integer;
|
||||
function getVisualItemRect(AItem: QListWidgetItemH): TRect;
|
||||
function selectedItems: TPtrIntArray;
|
||||
procedure setCurrentRow(row: Integer);
|
||||
procedure setItemText(AIndex: Integer; AText: String);
|
||||
procedure setCurrentItem(AItem: QListWidgetItemH);
|
||||
procedure setItemText(AIndex: Integer; AText: String); overload;
|
||||
procedure setItemText(AIndex: Integer; AText: String; AAlignment: Integer); overload;
|
||||
procedure setItemSelected(AItem: QListWidgetItemH; const ASelect: Boolean);
|
||||
procedure setItemVisible(AItem: QListWidgetItemH; Const AVisible: Boolean);
|
||||
procedure scrollToItem(row: integer; hint: QAbstractItemViewScrollHint);
|
||||
procedure removeItem(AIndex: Integer);
|
||||
function rowCount: integer;
|
||||
procedure exchangeItems(AIndex1, AIndex2: Integer);
|
||||
property ItemCount: Integer read getItemCount write setItemCount;
|
||||
end;
|
||||
|
||||
{ TQtHeaderView }
|
||||
@ -1038,7 +1074,7 @@ type
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
procedure setAllColumnsShowFocus(AValue: Boolean);
|
||||
procedure setWordWrap(AValue: Boolean);
|
||||
procedure setWordWrap(const AValue: Boolean); override;
|
||||
procedure setRootIsDecorated(AValue: Boolean);
|
||||
property ColWidth[AIndex: Integer]: Integer read getColWidth write setColWidth;
|
||||
property ColVisible[AIndex: Integer]: Boolean read getColVisible write setColVisible;
|
||||
@ -1049,8 +1085,6 @@ type
|
||||
|
||||
TQtTreeWidget = class(TQtTreeView)
|
||||
private
|
||||
FHideSelection: Boolean;
|
||||
FOwnerData: Boolean;
|
||||
FSyncingItems: Boolean;
|
||||
FSorting: Boolean;
|
||||
FHeader: TQtHeaderView;
|
||||
@ -1120,11 +1154,9 @@ type
|
||||
|
||||
property ColCount: Integer read getColCount write setColCount;
|
||||
property Header: TQtHeaderView read getHeader;
|
||||
property HideSelection: Boolean read FHideSelection write FHideSelection;
|
||||
property ItemCount: Integer read getItemCount write setItemCount;
|
||||
property MaxColSize[ACol: Integer]: Integer read getMaxColSize write setMaxColSize;
|
||||
property MinColSize[ACol: Integer]: Integer read getMinColSize write setMinColSize;
|
||||
property OwnerData: Boolean read FOwnerData write FOwnerData;
|
||||
property SortEnabled: Boolean read getSortEnabled write setSortEnabled;
|
||||
end;
|
||||
|
||||
@ -3168,6 +3200,11 @@ begin
|
||||
Result := QWidget_isEnabled(Widget);
|
||||
end;
|
||||
|
||||
function TQtWidget.getFont: QFontH;
|
||||
begin
|
||||
Result := QWidget_font(Widget);
|
||||
end;
|
||||
|
||||
function TQtWidget.getFocusPolicy: QtFocusPolicy;
|
||||
begin
|
||||
Result := QWidget_focusPolicy(Widget);
|
||||
@ -7566,10 +7603,107 @@ begin
|
||||
DeliverMessage(Msg);
|
||||
end;
|
||||
|
||||
{ TQtListView }
|
||||
|
||||
function TQtListView.getGridSize: TSize;
|
||||
begin
|
||||
QListView_gridSize(QListViewH(Widget), @Result);
|
||||
end;
|
||||
|
||||
function TQtListView.getSpacing: Integer;
|
||||
begin
|
||||
Result := QListView_spacing(QListViewH(Widget));
|
||||
end;
|
||||
|
||||
procedure TQtListView.setGridSize(const AValue: TSize);
|
||||
begin
|
||||
QListView_setGridSize(QListViewH(Widget), @AValue);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setLayoutMode(const ALayoutMode: QListViewLayoutMode);
|
||||
begin
|
||||
QListView_setLayoutMode(QListViewH(Widget), ALayoutMode);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setMovement(const AMovement: QListViewMovement);
|
||||
begin
|
||||
QListView_setMovement(QListViewH(Widget), AMovement);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setResizeMode(const AResizeMode: QListViewResizeMode);
|
||||
begin
|
||||
QListView_setResizeMode(QListViewH(Widget), AResizeMode);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setSpacing(const AValue: integer);
|
||||
begin
|
||||
QListView_setSpacing(QListViewH(Widget), AValue);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setUniformItemSizes(const AEnable: Boolean);
|
||||
begin
|
||||
QListView_setUniformItemSizes(QListViewH(Widget), AEnable);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setViewFlow(const AFlow: QListViewFlow);
|
||||
begin
|
||||
QListView_setFlow(QListViewH(Widget), AFlow);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setViewMode(const AMode: QListViewViewMode);
|
||||
begin
|
||||
QListView_setViewMode(QListViewH(Widget), AMode);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setWordWrap(const AValue: Boolean);
|
||||
begin
|
||||
QListView_setWordWrap(QListViewH(Widget), AValue);
|
||||
end;
|
||||
|
||||
procedure TQtListView.setWrapping(const AWrapping: Boolean);
|
||||
begin
|
||||
QListView_setWrapping(QListViewH(Widget), AWrapping);
|
||||
end;
|
||||
|
||||
procedure TQtListView.LayoutItems;
|
||||
begin
|
||||
QListView_doItemsLayout(QListViewH(Widget));
|
||||
end;
|
||||
|
||||
{ TQtListWidget }
|
||||
|
||||
function TQtListWidget.getItemCount: Integer;
|
||||
begin
|
||||
Result := QListWidget_count(QListWidgetH(Widget));
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.setItemCount(const AValue: Integer);
|
||||
var
|
||||
i: Integer;
|
||||
AList: QStringListH;
|
||||
WStr: WideString;
|
||||
begin
|
||||
if AValue = ItemCount then
|
||||
exit;
|
||||
BeginUpdate;
|
||||
try
|
||||
ClearItems;
|
||||
AList := QStringList_create();
|
||||
WStr := '';
|
||||
for i := 0 to AValue do
|
||||
QStringList_append(AList, @WStr);
|
||||
QListWidget_addItems(QListWidgetH(Widget), AList);
|
||||
QStringList_destroy(AList);
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TQtListWidget.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
||||
var
|
||||
Parent: QWidgetH;
|
||||
begin
|
||||
FViewStyle := 0;
|
||||
FCheckable := False;
|
||||
FDontPassSelChange := False;
|
||||
if AParams.WndParent <> 0 then
|
||||
@ -7670,7 +7804,7 @@ begin
|
||||
(QMouseEvent_button(QMouseEventH(Event)) = QtLeftButton) then
|
||||
begin
|
||||
MousePos := QMouseEvent_pos(QMouseEventH(Event))^;
|
||||
Item := QListWidget_itemAt(QListWidgetH(Widget), @MousePos);
|
||||
Item := itemAt(MousePos.x, MousePos.y);
|
||||
if (Item <> nil) and
|
||||
((QListWidgetItem_flags(Item) and QtItemIsUserCheckable) <> 0) then
|
||||
begin
|
||||
@ -7811,6 +7945,11 @@ begin
|
||||
Result := QListWidget_currentRow(QListWidgetH(Widget));
|
||||
end;
|
||||
|
||||
function TQtListWidget.currentItem: QListWidgetItemH;
|
||||
begin
|
||||
Result := QListWidget_currentItem(QListWidgetH(Widget));
|
||||
end;
|
||||
|
||||
function TQtListWidget.IndexAt(APoint: PQtPoint): Integer;
|
||||
var
|
||||
AModelIndex: QModelIndexH;
|
||||
@ -7839,6 +7978,16 @@ begin
|
||||
QListWidget_insertItem(QListWidgetH(Widget), AIndex, Item);
|
||||
end;
|
||||
|
||||
function TQtListWidget.itemAt(APoint: TPoint): QListWidgetItemH;
|
||||
begin
|
||||
Result := ItemAt(APoint.X, APoint.Y);
|
||||
end;
|
||||
|
||||
function TQtListWidget.itemAt(x: Integer; y: Integer): QListWidgetItemH;
|
||||
begin
|
||||
Result := QListWidget_itemAt(QListWidgetH(Widget), x, y);
|
||||
end;
|
||||
|
||||
function TQtListWidget.getItem(AIndex: Integer): QListWidgetItemH;
|
||||
begin
|
||||
Result := QListWidget_item(QListWidgetH(Widget), AIndex);
|
||||
@ -7852,12 +8001,25 @@ begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function TQtListWidget.getSelCount: Integer;
|
||||
var
|
||||
SItems: TPtrIntArray;
|
||||
function TQtListWidget.getItemVisible(AItem: QListWidgetItemH): Boolean;
|
||||
begin
|
||||
QListWidget_selectedItems(QListWidgetH(Widget), @SItems);
|
||||
Result := length(SItems);
|
||||
if AItem = nil then
|
||||
Result := False
|
||||
else
|
||||
Result := not QListWidget_isItemHidden(QListWidgetH(AItem), AItem);
|
||||
end;
|
||||
|
||||
function TQtListWidget.getRow(AItem: QListWidgetItemH): integer;
|
||||
begin
|
||||
if AItem = nil then
|
||||
Result := -1
|
||||
else
|
||||
Result := QListWidget_row(QListWidgetH(Widget), AItem);
|
||||
end;
|
||||
|
||||
function TQtListWidget.getSelCount: Integer;
|
||||
begin
|
||||
Result := length(selectedItems);
|
||||
end;
|
||||
|
||||
function TQtListWidget.getVisualItemRect(AItem: QListWidgetItemH): TRect;
|
||||
@ -7867,6 +8029,11 @@ begin
|
||||
QListWidget_visualItemRect(QListWidgetH(Widget), @Result, AItem);
|
||||
end;
|
||||
|
||||
function TQtListWidget.selectedItems: TPtrIntArray;
|
||||
begin
|
||||
QListWidget_selectedItems(QListWidgetH(Widget), @Result);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: TQtListWidget.setCurrentRow
|
||||
Params: None
|
||||
@ -7884,6 +8051,11 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.setCurrentItem(AItem: QListWidgetItemH);
|
||||
begin
|
||||
QListWidget_setCurrentItem(QListWidgetH(Widget), AItem);
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.setItemText(AIndex: Integer; AText: String);
|
||||
var
|
||||
Item: QListWidgetItemH;
|
||||
@ -7905,6 +8077,29 @@ begin
|
||||
insertItem(AIndex, @Str);
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.setItemText(AIndex: Integer; AText: String;
|
||||
AAlignment: Integer);
|
||||
var
|
||||
Item: QListWidgetItemH;
|
||||
Str: WideString;
|
||||
R: TRect;
|
||||
begin
|
||||
Str := GetUTF8String(AText);
|
||||
if (AIndex >= 0) and (AIndex < rowCount) then
|
||||
begin
|
||||
Item := getItem(AIndex);
|
||||
QListWidgetItem_setText(Item, @Str);
|
||||
QListWidgetItem_setTextAlignment(Item, AAlignment);
|
||||
{we must update our custom delegate}
|
||||
if OwnerDrawn then
|
||||
begin
|
||||
R := getVisualItemRect(Item);
|
||||
Update(@R);
|
||||
end;
|
||||
end else
|
||||
insertItem(AIndex, @Str);
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.setItemSelected(AItem: QListWidgetItemH;
|
||||
const ASelect: Boolean);
|
||||
begin
|
||||
@ -7912,6 +8107,13 @@ begin
|
||||
QListWidget_setItemSelected(QListWidgetH(Widget), AItem, ASelect);
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.setItemVisible(AItem: QListWidgetItemH;
|
||||
const AVisible: Boolean);
|
||||
begin
|
||||
if AItem <> nil then
|
||||
QListWidget_setItemHidden(QListWidgetH(Widget), AItem, not AVisible);
|
||||
end;
|
||||
|
||||
procedure TQtListWidget.scrollToItem(row: integer;
|
||||
hint: QAbstractItemViewScrollHint);
|
||||
var
|
||||
@ -8162,7 +8364,7 @@ begin
|
||||
QTreeView_setUniformRowHeights(QTreeViewH(Widget), AValue);
|
||||
end;
|
||||
|
||||
procedure TQtTreeView.setWordWrap(AValue: Boolean);
|
||||
procedure TQtTreeView.setWordWrap(const AValue: Boolean);
|
||||
begin
|
||||
QTreeView_setWordWrap(QTreeViewH(Widget), AValue);
|
||||
end;
|
||||
@ -8212,6 +8414,7 @@ begin
|
||||
{$ifdef VerboseQt}
|
||||
WriteLn('TQtTreeWidget.Create');
|
||||
{$endif}
|
||||
FViewStyle := 0;
|
||||
FCheckable := False;
|
||||
FHideSelection := False;
|
||||
FOwnerData := False;
|
||||
@ -8551,7 +8754,7 @@ end;
|
||||
|
||||
function TQtTreeWidget.itemAt(APoint: TPoint): QTreeWidgetItemH;
|
||||
begin
|
||||
Result := QTreeWidget_itemAt(QTreeWidgetH(Widget), APoint.x, APoint.y);
|
||||
Result := itemAt(APoint.X, APoint.Y);
|
||||
end;
|
||||
|
||||
function TQtTreeWidget.itemAt(x: Integer; y: Integer): QTreeWidgetItemH;
|
||||
@ -8608,11 +8811,8 @@ begin
|
||||
end;
|
||||
|
||||
function TQtTreeWidget.selCount: Integer;
|
||||
var
|
||||
FPInts: TPtrIntArray;
|
||||
begin
|
||||
QTreeWidget_selectedItems(QTreeWidgetH(Widget), @FPInts);
|
||||
Result := length(FPInts);
|
||||
Result := length(selectedItems);
|
||||
end;
|
||||
|
||||
function TQtTreeWidget.selectedItems: TPtrIntArray;
|
||||
@ -10883,6 +11083,11 @@ begin
|
||||
QAbstractItemView_setSelectionBehavior(QAbstractItemViewH(Widget), ABehavior);
|
||||
end;
|
||||
|
||||
procedure TQtAbstractItemView.setWordWrap(const AValue: Boolean);
|
||||
begin
|
||||
// override
|
||||
end;
|
||||
|
||||
procedure TQtAbstractItemView.ItemDelegateSizeHint(
|
||||
option: QStyleOptionViewItemH; index: QModelIndexH; Size: PSize); cdecl;
|
||||
var
|
||||
|
@ -70,6 +70,8 @@ type
|
||||
{ TQtWSCustomListView }
|
||||
|
||||
TQtWSCustomListView = class(TWSCustomListView)
|
||||
protected
|
||||
class function IsIconView(const AList: TCustomListView): boolean;
|
||||
published
|
||||
class function CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
@ -113,6 +115,7 @@ type
|
||||
class function GetBoundingRect(const ALV: TCustomListView): TRect; override;
|
||||
|
||||
class procedure SetAllocBy(const ALV: TCustomListView; const AValue: Integer); override;
|
||||
class procedure SetIconArrangement(const ALV: TCustomListView; const AValue: TIconArrangement); override;
|
||||
class procedure SetItemsCount(const ALV: TCustomListView; const Avalue: Integer); override;
|
||||
class procedure SetOwnerData(const ALV: TCustomListView; const AValue: Boolean); override;
|
||||
|
||||
@ -248,6 +251,14 @@ const
|
||||
{taCenter } QtAlignCenter
|
||||
);
|
||||
|
||||
IconArngToQListFlow: array[TIconArrangement] of QListViewFlow =
|
||||
(
|
||||
{iaTop} QListViewTopToBottom,
|
||||
{iaLeft} QListViewLeftToRight
|
||||
);
|
||||
|
||||
IconAutoArToQtResizeMode: array[Boolean] of QListViewResizeMode =
|
||||
(QListViewFixed, QListViewAdjust);
|
||||
|
||||
{ TQtWSToolButton }
|
||||
|
||||
@ -607,15 +618,46 @@ end;
|
||||
Params: None
|
||||
Returns: Nothing
|
||||
------------------------------------------------------------------------------}
|
||||
|
||||
class function TQtWSCustomListView.IsIconView(const AList: TCustomListView): boolean;
|
||||
begin
|
||||
Result := TListView(AList).ViewStyle = vsIcon;
|
||||
end;
|
||||
|
||||
class function TQtWSCustomListView.CreateHandle(const AWinControl: TWinControl;
|
||||
const AParams: TCreateParams): TLCLIntfHandle;
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
QtListWidget: TQtListWidget;
|
||||
begin
|
||||
if IsIconView(TCustomListView(AWinControl)) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget.Create(AWinControl, AParams);
|
||||
QtListWidget.ViewStyle := Ord(vsIcon);
|
||||
QtListWidget.setViewMode(QListViewIconMode);
|
||||
// emabarcadero docs says
|
||||
// vsIcon
|
||||
// Each item appears as a full-sized icon with a label below it.
|
||||
// The user can drag the items to any location in the list view window.
|
||||
QtListWidget.setResizeMode(QListViewAdjust);
|
||||
QtListWidget.setMovement(QListViewFree);
|
||||
QtListWidget.Checkable := TCustomListView(AWinControl).Checkboxes;
|
||||
with TCustomListView(AWinControl) do
|
||||
begin
|
||||
QtListWidget.setWrapping(IconOptions.AutoArrange);
|
||||
QtListWidget.setViewFlow(IconArngToQListFlow[IconOptions.Arrangement]);
|
||||
QtListWidget.setWordWrap(IconOptions.WrapText);
|
||||
end;
|
||||
QtListWidget.AttachEvents;
|
||||
Result := TLCLIntfHandle(QtListWidget);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget.Create(AWinControl, AParams);
|
||||
QtTreeWidget.ViewStyle := Ord(TListView(AWinControl).ViewStyle);
|
||||
QtTreeWidget.setRootIsDecorated(False);
|
||||
QtTreeWidget.AttachEvents;
|
||||
Result := TLCLIntfHandle(QtTreeWidget);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -631,6 +673,11 @@ var
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnDelete') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.headerItem;
|
||||
QTreeWidgetItem_takeChild(TWI, AIndex);
|
||||
@ -652,6 +699,10 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnInsert') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
|
||||
if QtTreeWidget.ColCount <> TListView(ALV).Columns.Count then
|
||||
@ -686,6 +737,10 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnGetWidth') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
Result := QtTreeWidget.ColWidth[AIndex];
|
||||
end;
|
||||
@ -706,6 +761,10 @@ begin
|
||||
if (csDesigning in ALV.ComponentState) then
|
||||
exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.Header.moveSection(AOldIndex, ANewIndex);
|
||||
end;
|
||||
@ -725,6 +784,10 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetAlignment') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.headerItem;
|
||||
QTreeWidgetItem_setTextAlignment(TWI, AIndex,
|
||||
@ -757,6 +820,10 @@ begin
|
||||
if (csDesigning in ALV.ComponentState) then
|
||||
exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
if AAutoSize then
|
||||
QtTreeWidget.Header.setResizeMode(AIndex, QHeaderViewResizeToContents)
|
||||
@ -779,6 +846,10 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetCaption') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.headerItem;
|
||||
if TWI <> NiL then
|
||||
@ -803,6 +874,11 @@ var
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetImage') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.headerItem;
|
||||
if TWI <> NiL then
|
||||
@ -846,6 +922,11 @@ var
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetMinWidth') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.MinColSize[AIndex] := AMinWidth;
|
||||
end;
|
||||
@ -863,6 +944,10 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetWidth') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.ColWidth[AIndex] := AWidth;
|
||||
end;
|
||||
@ -880,6 +965,10 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ColumnSetVisible') then
|
||||
Exit;
|
||||
|
||||
// TODO: columns in vsIcon mode
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.ColVisible[AIndex] := AVisible;
|
||||
end;
|
||||
@ -896,8 +985,13 @@ var
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemDelete') then
|
||||
Exit;
|
||||
if IsIconView(ALV) then
|
||||
TQtListWidget(ALV.Handle).removeItem(AIndex)
|
||||
else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.DeleteItem(AIndex);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -910,6 +1004,7 @@ class function TQtWSCustomListView.ItemGetChecked(const ALV: TCustomListView;
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
LWI: QListWidgetItemH;
|
||||
AState: QtCheckState;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemGetChecked') then
|
||||
@ -919,10 +1014,20 @@ begin
|
||||
if not Result then
|
||||
exit;
|
||||
|
||||
AState := QtUnChecked;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
LWI := TQtListWidget(ALV.Handle).getItem(AIndex);
|
||||
if LWI <> nil then
|
||||
AState := QListWidgetItem_checkState(LWI);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
|
||||
if TWI <> nil then
|
||||
AState := QTreeWidgetItem_checkState(TWI, 0);
|
||||
end;
|
||||
Result := AState = QtChecked;
|
||||
end;
|
||||
|
||||
@ -934,6 +1039,8 @@ end;
|
||||
class function TQtWSCustomListView.ItemGetPosition(const ALV: TCustomListView;
|
||||
const AIndex: Integer): TPoint;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
R: TRect;
|
||||
@ -941,12 +1048,19 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemGetPosition') then
|
||||
Exit;
|
||||
|
||||
R := Rect(0, 0, 0, 0);
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
R := QtListWidget.getVisualItemRect(QtListWidget.getItem(AIndex));
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
R := QtTreeWidget.visualItemRect(TWI);
|
||||
end;
|
||||
Result.X := R.Left;
|
||||
Result.Y := R.Top;
|
||||
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -958,20 +1072,34 @@ class function TQtWSCustomListView.ItemGetState(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem;
|
||||
const AState: TListItemState; out AIsSet: Boolean): Boolean;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemGetState') then
|
||||
Exit;
|
||||
|
||||
AIsSet := False;
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.getItem(AIndex);
|
||||
if LWI <> nil then
|
||||
case AState of
|
||||
lisFocused: AIsSet := LWI = QtListWidget.currentItem;
|
||||
lisSelected: AIsSet := QtListWidget.getItemSelected(LWI);
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
AIsSet := False;
|
||||
if TWI <> nil then
|
||||
case AState of
|
||||
lisFocused: AIsSet := TWI = QtTreeWidget.currentItem;
|
||||
lisSelected: AIsSet := QTreeWidgetItem_isSelected(TWI);
|
||||
end;
|
||||
end;
|
||||
Result := True;
|
||||
|
||||
end;
|
||||
@ -980,6 +1108,8 @@ class procedure TQtWSCustomListView.ItemSetImage(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem; const ASubIndex,
|
||||
AImageIndex: Integer);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
Bmp: TBitmap;
|
||||
@ -991,10 +1121,18 @@ begin
|
||||
if not Assigned(TListView(ALV).LargeImages) and not
|
||||
Assigned(TListView(ALV).SmallImages) then
|
||||
exit;
|
||||
|
||||
TWI := nil;
|
||||
LWI := nil;
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.getItem(AIndex);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
if (TWI <> nil) then
|
||||
end;
|
||||
if (TWI <> nil) or (LWI <> nil) then
|
||||
begin
|
||||
ImgList := TImageList.Create(nil);
|
||||
try
|
||||
@ -1012,6 +1150,9 @@ begin
|
||||
Bmp := TBitmap.Create;
|
||||
try
|
||||
ImgList.GetBitmap(AImageIndex, Bmp);
|
||||
if LWI <> nil then
|
||||
QListWidgetItem_setIcon(LWI, TQtImage(Bmp.Handle).AsIcon)
|
||||
else
|
||||
QTreeWidgetItem_setIcon(TWI, ASubIndex, TQtImage(Bmp.Handle).AsIcon);
|
||||
finally
|
||||
Bmp.Free;
|
||||
@ -1031,6 +1172,8 @@ end;
|
||||
class procedure TQtWSCustomListView.ItemSetChecked(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
begin
|
||||
@ -1040,12 +1183,23 @@ begin
|
||||
if not ALV.CheckBoxes then
|
||||
exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.getItem(AIndex);
|
||||
if AChecked then
|
||||
QListWidgetItem_setCheckState(LWI, QtChecked)
|
||||
else
|
||||
QListWidgetItem_setCheckState(LWI, QtUnChecked);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
if AChecked then
|
||||
QTreeWidgetItem_setCheckState(TWI, 0, QtChecked)
|
||||
else
|
||||
QTreeWidgetItem_setCheckState(TWI, 0, QtUnChecked);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -1057,18 +1211,30 @@ class procedure TQtWSCustomListView.ItemSetState(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem;
|
||||
const AState: TListItemState; const AIsSet: Boolean);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemSetState') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.getItem(AIndex);
|
||||
case AState of
|
||||
lisFocused: QtListWidget.setCurrentItem(LWI);
|
||||
lisSelected: QtListWidget.setItemSelected(LWI, AIsSet);
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
case AState of
|
||||
lisFocused: QtTreeWidget.setCurrentItem(TWI);
|
||||
lisSelected: QtTreeWidget.setItemSelected(TWI, AIsSet);
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
@ -1080,6 +1246,8 @@ end;
|
||||
class procedure TQtWSCustomListView.ItemInsert(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
Str: WideString;
|
||||
@ -1089,6 +1257,13 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemInsert') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
QtListWidget.Checkable := ALV.Checkboxes;
|
||||
QtListWidget.insertItem(AIndex, AItem.Caption);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QTreeWidgetItem_create(QTreeWidgetH(QtTreeWidget.Widget), 0);
|
||||
if AItem.Caption <> '' then
|
||||
@ -1123,9 +1298,9 @@ begin
|
||||
end;
|
||||
end;
|
||||
QtTreeWidget.insertTopLevelItem(AIndex, TWI);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Method: TQtWSCustomListView.ItemSetText
|
||||
Params: None
|
||||
@ -1135,6 +1310,8 @@ class procedure TQtWSCustomListView.ItemSetText(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem; const ASubIndex: Integer;
|
||||
const AText: String);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
Str: WideString;
|
||||
@ -1143,6 +1320,15 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemSetText') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
AAlignment := QtAlignLeft;
|
||||
if (TListView(ALV).Columns.Count > 0) and (ASubIndex < TListView(ALV).Columns.Count) then
|
||||
AAlignment := AlignmentToQtAlignmentMap[ALV.Column[ASubIndex].Alignment];
|
||||
QtListWidget.setItemText(AIndex, AText, AAlignment);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
Str := GetUtf8String(AText);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
@ -1153,6 +1339,7 @@ begin
|
||||
AAlignment := AlignmentToQtAlignmentMap[ALV.Column[ASubIndex].Alignment];
|
||||
QtTreeWidget.setItemText(TWI, ASubIndex, Str, AAlignment);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -1163,15 +1350,24 @@ end;
|
||||
class procedure TQtWSCustomListView.ItemShow(const ALV: TCustomListView;
|
||||
const AIndex: Integer; const AItem: TListItem; const PartialOK: Boolean);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemShow') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.getItem(AIndex);
|
||||
QtListWidget.setItemVisible(LWI, True);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
QtTreeWidget.setItemVisible(TWI, True);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
@ -1183,43 +1379,53 @@ end;
|
||||
class function TQtWSCustomListView.ItemDisplayRect(const ALV: TCustomListView;
|
||||
const AIndex, ASubItem: Integer; ACode: TDisplayCode): TRect;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'ItemDisplayRect') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.getItem(AIndex);
|
||||
Result := QtListWidget.getVisualItemRect(LWI);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
||||
if QTreeWidgetItem_childCount(TWI) > 0 then
|
||||
Result := QtTreeWidget.visualItemRect(QTreeWidgetItem_child(TWI, ASubItem))
|
||||
else
|
||||
Result := QtTreeWidget.visualItemRect(TWI);
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.BeginUpdate(const ALV: TCustomListView);
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
QtWidget: TQtWidget;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'BeginUpdate') then
|
||||
Exit;
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.BeginUpdate;
|
||||
QtTreeWidget.setUpdatesEnabled(False);
|
||||
QtWidget := TQtWidget(ALV.Handle);
|
||||
QtWidget.BeginUpdate;
|
||||
QtWidget.setUpdatesEnabled(False);
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.EndUpdate(const ALV: TCustomListView);
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
QtWidget: TQtWidget;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'EndUpdate') then
|
||||
Exit;
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.EndUpdate;
|
||||
if not QtTreeWidget.InUpdate then
|
||||
QtWidget := TQtWidget(ALV.Handle);
|
||||
QtWidget.EndUpdate;
|
||||
if not QtWidget.InUpdate then
|
||||
begin
|
||||
QtTreeWidget.setUpdatesEnabled(True);
|
||||
QtTreeWidget.Update(nil);
|
||||
QtWidget.setUpdatesEnabled(True);
|
||||
QtWidget.Update(nil);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1230,6 +1436,8 @@ end;
|
||||
------------------------------------------------------------------------------}
|
||||
class function TQtWSCustomListView.GetFocused(const ALV: TCustomListView): Integer;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
i: Integer;
|
||||
@ -1237,6 +1445,16 @@ begin
|
||||
if not WSCheckHandleAllocated(ALV, 'GetFocused') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.currentItem;
|
||||
if QtListWidget.getItemSelected(LWI) then
|
||||
Result := QtListWidget.getRow(LWI)
|
||||
else
|
||||
Result := -1;
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.currentItem;
|
||||
i := QtTreeWidget.indexOfTopLevelItem(TWI);
|
||||
@ -1244,6 +1462,7 @@ begin
|
||||
Result := i
|
||||
else
|
||||
Result := -1;
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -1253,14 +1472,24 @@ end;
|
||||
------------------------------------------------------------------------------}
|
||||
class function TQtWSCustomListView.GetItemAt(const ALV: TCustomListView; x,y: integer): Integer;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TWI: QTreeWidgetItemH;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'GetItemAt') then
|
||||
Exit;
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
LWI := QtListWidget.itemAt(x, y);
|
||||
Result := QtListWidget.getRow(LWI);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TWI := QtTreeWidget.itemAt(x, y);
|
||||
Result := QtTreeWidget.indexOfTopLevelItem(TWI);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -1269,14 +1498,13 @@ end;
|
||||
Returns: Nothing
|
||||
------------------------------------------------------------------------------}
|
||||
class function TQtWSCustomListView.GetSelCount(const ALV: TCustomListView): Integer;
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'GetSelCount') then
|
||||
Exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
Result := QtTreeWidget.selCount;
|
||||
if IsIconView(ALV) then
|
||||
Result := TQtListWidget(ALV.Handle).getSelCount
|
||||
else
|
||||
Result := TQtTreeWidget(ALV.Handle).selCount;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -1286,15 +1514,22 @@ end;
|
||||
------------------------------------------------------------------------------}
|
||||
class function TQtWSCustomListView.GetSelection(const ALV: TCustomListView): Integer;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
FPInts: TPtrIntArray;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'GetSelection') then
|
||||
Exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
FPInts := QtListWidget.selectedItems;
|
||||
end else
|
||||
begin
|
||||
{implement selection event so we can return Alv.Selected.Index}
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
FPInts := QtTreeWidget.selectedItems;
|
||||
end;
|
||||
if Length(FPInts)>0 then
|
||||
Result := FPInts[0]
|
||||
else
|
||||
@ -1317,6 +1552,9 @@ begin
|
||||
if (csDesigning in ALV.ComponentState) then
|
||||
exit;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
exit;
|
||||
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
|
||||
if AType = stNone then
|
||||
@ -1342,7 +1580,7 @@ class function TQtWSCustomListView.GetBoundingRect(const ALV: TCustomListView):
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'GetBoundingRect') then
|
||||
Exit;
|
||||
Result := TQtTreeWidget(ALV.Handle).getFrameGeometry;
|
||||
Result := TQtWidget(ALV.Handle).getFrameGeometry;
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.SetAllocBy(const ALV: TCustomListView;
|
||||
@ -1356,26 +1594,52 @@ begin
|
||||
// QtTreeWidget.ItemCount := AValue;
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.SetIconArrangement(
|
||||
const ALV: TCustomListView; const AValue: TIconArrangement);
|
||||
var
|
||||
QtList: TQtListWidget;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'SetIconArrangement') then
|
||||
Exit;
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
// hm...seem that QListView have bug, doesn't want to rearrange items
|
||||
// in any case when iaTop and AutoArrange=True (then it looks same as
|
||||
// iaLeft without arrange, so we must set GridSize in that case
|
||||
{$note set workaround for QListView bug via QtList.GridSize}
|
||||
QtList := TQtListWidget(ALV.Handle);
|
||||
QtList.setViewFlow(IconArngToQListFlow[AValue]);
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.SetItemsCount(const ALV: TCustomListView;
|
||||
const Avalue: Integer);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'SetItemsCount') then
|
||||
Exit;
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
QtListWidget.ItemCount := AValue;
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.ItemCount := AValue;
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.SetOwnerData(const ALV: TCustomListView;
|
||||
const AValue: Boolean);
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
QtItemView: TQtAbstractItemView;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'SetOwnerData') then
|
||||
Exit;
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtTreeWidget.OwnerData := AValue;
|
||||
QtItemView := TQtAbstractItemView(ALV.Handle);
|
||||
QtItemView.OwnerData := AValue;
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.SetProperty(const ALV: TCustomListView;
|
||||
@ -1399,39 +1663,45 @@ const
|
||||
var
|
||||
SavedCheckable: Boolean;
|
||||
i: Integer;
|
||||
Item: QTreeWidgetItemH;
|
||||
NewItem: QTreeWidgetItemH;
|
||||
ItemFlags: QtItemFlags;
|
||||
QtItemView: TQtAbstractItemView;
|
||||
Parent: QWidgetH;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'SetProperty')
|
||||
then Exit;
|
||||
QtItemView := TQtAbstractItemView(ALV.Handle);
|
||||
case AProp of
|
||||
lvpAutoArrange:
|
||||
begin
|
||||
if IsIconView(ALV) then
|
||||
TQtListWidget(ALV.Handle).setWrapping(AIsSet);
|
||||
end;
|
||||
lvpCheckboxes:
|
||||
begin
|
||||
SavedCheckable := TQtTreeWidget(ALV.Handle).Checkable;
|
||||
TQtTreeWidget(ALV.Handle).Checkable := AIsSet;
|
||||
SavedCheckable := QtItemView.Checkable;
|
||||
QtItemView.Checkable := AIsSet;
|
||||
if SavedCheckable <> AIsSet then
|
||||
RecreateWnd(ALV);
|
||||
end;
|
||||
lvpMultiSelect:
|
||||
begin
|
||||
if (TQtTreeWidget(ALV.Handle).getSelectionMode <> QAbstractItemViewNoSelection) then
|
||||
TQtTreeWidget(ALV.Handle).setSelectionMode(BoolToSelectionMode[AIsSet]);
|
||||
if (QtItemView.getSelectionMode <> QAbstractItemViewNoSelection) then
|
||||
QtItemView.setSelectionMode(BoolToSelectionMode[AIsSet]);
|
||||
end;
|
||||
lvpShowColumnHeaders:
|
||||
begin
|
||||
if not IsIconView(ALV) then
|
||||
with TQtTreeWidget(ALV.Handle) do
|
||||
setHeaderVisible(AIsSet and (TListView(ALV).ViewStyle = vsReport));
|
||||
end;
|
||||
lvpReadOnly: TQtTreeWidget(ALV.Handle).setEditTriggers(BoolToEditTriggers[AIsSet]);
|
||||
lvpReadOnly: QtItemView.setEditTriggers(BoolToEditTriggers[AIsSet]);
|
||||
lvpRowSelect:
|
||||
begin
|
||||
if not IsIconView(ALV) then
|
||||
TQtTreeWidget(ALV.Handle).setAllColumnsShowFocus(AIsSet);
|
||||
TQtTreeWidget(ALV.Handle).setSelectionBehavior(BoolToSelectionBehavior[AIsSet]);
|
||||
QtItemView.setSelectionBehavior(BoolToSelectionBehavior[AIsSet]);
|
||||
end;
|
||||
lvpWrapText: TQtTreeWidget(ALV.Handle).setWordWrap(AIsSet);
|
||||
lvpHideSelection: TQtTreeWidget(ALV.Handle).HideSelection := AIsSet;
|
||||
lvpWrapText: QtItemView.setWordWrap(AIsSet);
|
||||
lvpHideSelection: QtItemView.HideSelection := AIsSet;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1449,22 +1719,25 @@ end;
|
||||
class procedure TQtWSCustomListView.SetScrollBars(const ALV: TCustomListView;
|
||||
const AValue: TScrollStyle);
|
||||
var
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
QtItemView: TQtAbstractItemView;
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'SetScrollBars') then
|
||||
Exit;
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
QtItemView := TQtAbstractItemView(ALV.Handle);
|
||||
{always reset before applying new TScrollStyle}
|
||||
QtTreeWidget.setScrollStyle(ssNone);
|
||||
QtItemView.setScrollStyle(ssNone);
|
||||
if AValue <> ssNone then
|
||||
QtTreeWidget.setScrollStyle(AValue);
|
||||
QtItemView.setScrollStyle(AValue);
|
||||
end;
|
||||
|
||||
class procedure TQtWSCustomListView.SetViewStyle(const ALV: TCustomListView;
|
||||
const Avalue: TViewStyle);
|
||||
const AValue: TViewStyle);
|
||||
var
|
||||
QtItemView: TQtAbstractItemView;
|
||||
QtListWidget: TQtListWidget;
|
||||
LWI: QListWidgetItemH;
|
||||
QtTreeWidget: TQtTreeWidget;
|
||||
TreeWidget: QTreeWidgetH;
|
||||
ItemViewWidget: QAbstractItemViewH;
|
||||
Item: QTreeWidgetItemH;
|
||||
Size: TSize;
|
||||
x: Integer;
|
||||
@ -1472,15 +1745,31 @@ var
|
||||
begin
|
||||
if not WSCheckHandleAllocated(ALV, 'SetViewStyle') then
|
||||
Exit;
|
||||
QtItemView := TQtAbstractItemView(ALV.Handle);
|
||||
|
||||
if ((QtItemView.ViewStyle = Ord(vsIcon)) or (AValue = vsIcon))
|
||||
and (QtItemView.ViewStyle <> Ord(AValue)) then
|
||||
begin
|
||||
RecreateWnd(ALV);
|
||||
exit;
|
||||
end;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ALV.Handle);
|
||||
ItemViewWidget := QListWidgetH(QtListWidget.Widget);
|
||||
end else
|
||||
begin
|
||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||
TreeWidget := QTreeWidgetH(QtTreeWidget.Widget);
|
||||
ItemViewWidget := QTreeWidgetH(QtTreeWidget.Widget);
|
||||
with QtTreeWidget do
|
||||
setHeaderVisible(TListView(ALV).ShowColumnHeaders and (AValue = vsReport));
|
||||
end;
|
||||
case AValue of
|
||||
vsIcon:
|
||||
begin
|
||||
x := QStyle_pixelMetric(QApplication_style(), QStylePM_IconViewIconSize,
|
||||
nil, TreeWidget);
|
||||
nil, ItemViewWidget);
|
||||
Size.cx := x;
|
||||
Size.cy := x;
|
||||
if Assigned(TListView(ALV).LargeImages) then
|
||||
@ -1492,7 +1781,7 @@ begin
|
||||
vsSmallIcon:
|
||||
begin
|
||||
x := QStyle_pixelMetric(QApplication_style(), QStylePM_ListViewIconSize,
|
||||
nil, TreeWidget);
|
||||
nil, ItemViewWidget);
|
||||
Size.cx := x;
|
||||
Size.cy := x;
|
||||
if Assigned(TListView(ALV).SmallImages) then
|
||||
@ -1504,14 +1793,26 @@ begin
|
||||
vsList, vsReport:
|
||||
begin
|
||||
x := QStyle_pixelMetric(QApplication_style(), QStylePM_ListViewIconSize,
|
||||
nil, TreeWidget);
|
||||
nil, ItemViewWidget);
|
||||
Size.cx := x;
|
||||
Size.cy := x;
|
||||
end;
|
||||
end;
|
||||
|
||||
QtTreeWidget.IconSize := Size;
|
||||
TQtAbstractItemView(ALV.Handle).IconSize := Size;
|
||||
|
||||
if IsIconView(ALV) then
|
||||
begin
|
||||
LWI := QtListWidget.getItem(0);
|
||||
if LWI <> nil then
|
||||
begin
|
||||
X := Size.CY;
|
||||
QListWidgetItem_sizeHint(LWI, @Size);
|
||||
Size.Cy := X;
|
||||
QListWidgetItem_setSizeHint(LWI, @Size);
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
Item := QtTreeWidget.topLevelItem(0);
|
||||
if Item <> nil then
|
||||
begin
|
||||
@ -1527,6 +1828,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
QtTreeWidget.UniformRowHeights := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user