mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-07 10:16:09 +02:00
Qt: fixed tristate checkbox in TQtCheckListBox, also simplified some code.issue #20740
git-svn-id: trunk@33755 -
This commit is contained in:
parent
dfbf4c2aec
commit
12dba80ad6
@ -563,21 +563,52 @@ procedure TQtListStrings.Put(Index: Integer; const S: string);
|
|||||||
begin
|
begin
|
||||||
inherited Put(Index, S);
|
inherited Put(Index, S);
|
||||||
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
||||||
|
begin
|
||||||
FOwner.setItemText(Index, S);
|
FOwner.setItemText(Index, S);
|
||||||
|
if FOwner is TQtCheckListBox then
|
||||||
|
begin
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] or QtItemIsUserCheckable;
|
||||||
|
if TQtCheckListBox(FOwner).AllowGrayed then
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] or QtItemIsTristate
|
||||||
|
else
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] and not QtItemIsTristate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtListStrings.InsertItem(Index: Integer; const S: string);
|
procedure TQtListStrings.InsertItem(Index: Integer; const S: string);
|
||||||
begin
|
begin
|
||||||
inherited InsertItem(Index, S);
|
inherited InsertItem(Index, S);
|
||||||
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
||||||
|
begin
|
||||||
FOwner.insertItem(Index, S);
|
FOwner.insertItem(Index, S);
|
||||||
|
if FOwner is TQtCheckListBox then
|
||||||
|
begin
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] or QtItemIsUserCheckable;
|
||||||
|
if TQtCheckListBox(FOwner).AllowGrayed then
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] or QtItemIsTristate
|
||||||
|
else
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] and not QtItemIsTristate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtListStrings.InsertItem(Index: Integer; const S: string; O: TObject);
|
procedure TQtListStrings.InsertItem(Index: Integer; const S: string; O: TObject);
|
||||||
begin
|
begin
|
||||||
inherited InsertItem(Index, S, O);
|
inherited InsertItem(Index, S, O);
|
||||||
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
||||||
|
begin
|
||||||
FOwner.insertItem(Index, S);
|
FOwner.insertItem(Index, S);
|
||||||
|
|
||||||
|
if FOwner is TQtCheckListBox then
|
||||||
|
begin
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] or QtItemIsUserCheckable;
|
||||||
|
if TQtCheckListBox(FOwner).AllowGrayed then
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] or QtItemIsTristate
|
||||||
|
else
|
||||||
|
FOwner.ItemFlags[Index] := FOwner.ItemFlags[Index] and not QtItemIsTristate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TQtListStrings.Create(AWinControl: TWinControl;
|
constructor TQtListStrings.Create(AWinControl: TWinControl;
|
||||||
@ -589,11 +620,24 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TQtListStrings.Assign(Source: TPersistent);
|
procedure TQtListStrings.Assign(Source: TPersistent);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
if Assigned(FWinControl) and (FWinControl.HandleAllocated) then
|
||||||
begin
|
begin
|
||||||
FOwner.BeginUpdate;
|
FOwner.BeginUpdate;
|
||||||
inherited Assign(Source);
|
inherited Assign(Source);
|
||||||
|
if FOwner is TQtCheckListBox then
|
||||||
|
begin
|
||||||
|
for i := 0 to TQtCheckListBox(FOwner).ItemCount - 1 do
|
||||||
|
begin
|
||||||
|
FOwner.ItemFlags[i] := FOwner.ItemFlags[i] or QtItemIsUserCheckable;
|
||||||
|
if TQtCheckListBox(FOwner).AllowGrayed then
|
||||||
|
FOwner.ItemFlags[i] := FOwner.ItemFlags[i] or QtItemIsTristate
|
||||||
|
else
|
||||||
|
FOwner.ItemFlags[i] := FOwner.ItemFlags[i] and not QtItemIsTristate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
FOwner.EndUpdate;
|
FOwner.EndUpdate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -1040,6 +1040,7 @@ type
|
|||||||
|
|
||||||
TQtAbstractItemView = class(TQtAbstractScrollArea)
|
TQtAbstractItemView = class(TQtAbstractScrollArea)
|
||||||
private
|
private
|
||||||
|
FAllowGrayed: boolean;
|
||||||
FSavedEvent: QMouseEventH;
|
FSavedEvent: QMouseEventH;
|
||||||
FSavedEventTimer: QTimerH;
|
FSavedEventTimer: QTimerH;
|
||||||
FSavedEventTimerHook: QTimer_hookH;
|
FSavedEventTimerHook: QTimer_hookH;
|
||||||
@ -1062,6 +1063,8 @@ type
|
|||||||
procedure setIconSize(const AValue: TSize);
|
procedure setIconSize(const AValue: TSize);
|
||||||
procedure SetOwnerDrawn(const AValue: Boolean);
|
procedure SetOwnerDrawn(const AValue: Boolean);
|
||||||
protected
|
protected
|
||||||
|
function GetItemFlags(AIndex: Integer): QtItemFlags; virtual;
|
||||||
|
procedure SetItemFlags(AIndex: Integer; AValue: QtItemFlags); virtual;
|
||||||
procedure OwnerDataNeeded(ARect: TRect); virtual;
|
procedure OwnerDataNeeded(ARect: TRect); virtual;
|
||||||
procedure PostponedMouseRelease(AEvent: QEventH); virtual;
|
procedure PostponedMouseRelease(AEvent: QEventH); virtual;
|
||||||
procedure PostponedMouseReleaseTimerEvent(); cdecl; virtual;
|
procedure PostponedMouseReleaseTimerEvent(); cdecl; virtual;
|
||||||
@ -1092,9 +1095,11 @@ type
|
|||||||
procedure setSelectionMode(AMode: QAbstractItemViewSelectionMode);
|
procedure setSelectionMode(AMode: QAbstractItemViewSelectionMode);
|
||||||
procedure setSelectionBehavior(ABehavior: QAbstractItemViewSelectionBehavior);
|
procedure setSelectionBehavior(ABehavior: QAbstractItemViewSelectionBehavior);
|
||||||
procedure setWordWrap(const AValue: Boolean); virtual;
|
procedure setWordWrap(const AValue: Boolean); virtual;
|
||||||
|
property AllowGrayed: boolean read FAllowGrayed write FAllowGrayed;
|
||||||
property Checkable: boolean read FCheckable write FCheckable;
|
property Checkable: boolean read FCheckable write FCheckable;
|
||||||
property HideSelection: Boolean read FHideSelection write FHideSelection;
|
property HideSelection: Boolean read FHideSelection write FHideSelection;
|
||||||
property IconSize: TSize read getIconSize write setIconSize;
|
property IconSize: TSize read getIconSize write setIconSize;
|
||||||
|
property ItemFlags[AIndex: Integer]: QtItemFlags read GetItemFlags write SetItemFlags;
|
||||||
property OwnerDrawn: Boolean read GetOwnerDrawn write SetOwnerDrawn;
|
property OwnerDrawn: Boolean read GetOwnerDrawn write SetOwnerDrawn;
|
||||||
property OwnerData: Boolean read FOwnerData write FOwnerData;
|
property OwnerData: Boolean read FOwnerData write FOwnerData;
|
||||||
property SyncingItems: Boolean read FSyncingItems write FSyncingItems;
|
property SyncingItems: Boolean read FSyncingItems write FSyncingItems;
|
||||||
@ -1133,21 +1138,29 @@ type
|
|||||||
|
|
||||||
TQtListWidget = class(TQtListView)
|
TQtListWidget = class(TQtListView)
|
||||||
private
|
private
|
||||||
|
FCheckBoxClicked: Boolean;
|
||||||
FSavedSelection: TPtrIntArray;
|
FSavedSelection: TPtrIntArray;
|
||||||
FCurrentItemChangedHook: QListWidget_hookH;
|
FCurrentItemChangedHook: QListWidget_hookH;
|
||||||
FSelectionChangeHook: QListWidget_hookH;
|
FSelectionChangeHook: QListWidget_hookH;
|
||||||
FItemClickedHook: QListWidget_hookH;
|
FItemClickedHook: QListWidget_hookH;
|
||||||
FItemTextChangedHook: QListWidget_hookH;
|
FItemTextChangedHook: QListWidget_hookH;
|
||||||
FDontPassSelChange: Boolean;
|
FDontPassSelChange: Boolean;
|
||||||
|
function GetItemChecked(AIndex: Integer): Boolean;
|
||||||
function getItemCount: Integer;
|
function getItemCount: Integer;
|
||||||
function GetItemEnabled(AIndex: Integer): Boolean;
|
function GetItemEnabled(AIndex: Integer): Boolean;
|
||||||
function GetSelected(AIndex: Integer): Boolean;
|
function GetSelected(AIndex: Integer): Boolean;
|
||||||
|
procedure SetItemChecked(AIndex: Integer; AValue: Boolean);
|
||||||
procedure setItemCount(const AValue: Integer);
|
procedure setItemCount(const AValue: Integer);
|
||||||
procedure SetItemEnabled(AIndex: Integer; AValue: Boolean);
|
procedure SetItemEnabled(AIndex: Integer; AValue: Boolean);
|
||||||
procedure SetSelected(AIndex: Integer; AValue: Boolean);
|
procedure SetSelected(AIndex: Integer; AValue: Boolean);
|
||||||
protected
|
protected
|
||||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||||
procedure OwnerDataNeeded(ARect: TRect); override;
|
procedure OwnerDataNeeded(ARect: TRect); override;
|
||||||
|
function GetItemFlags(AIndex: Integer): QtItemFlags; override;
|
||||||
|
procedure SetItemFlags(AIndex: Integer; AValue: QtItemFlags); override;
|
||||||
|
function GetItemLastCheckState(AItem: QListWidgetItemH): QtCheckState;
|
||||||
|
procedure SetItemLastCheckState(AItem: QListWidgetItemH);
|
||||||
|
procedure SetNextStateMap(AItem: QListWidgetItemH); virtual;
|
||||||
public
|
public
|
||||||
FList: TStrings;
|
FList: TStrings;
|
||||||
public
|
public
|
||||||
@ -1192,6 +1205,7 @@ type
|
|||||||
procedure ExchangeItems(const AIndex1, AIndex2: Integer);
|
procedure ExchangeItems(const AIndex1, AIndex2: Integer);
|
||||||
procedure MoveItem(const AFromIndex, AToIndex: Integer);
|
procedure MoveItem(const AFromIndex, AToIndex: Integer);
|
||||||
property ItemCount: Integer read getItemCount write setItemCount;
|
property ItemCount: Integer read getItemCount write setItemCount;
|
||||||
|
property ItemChecked[AIndex: Integer]: Boolean read GetItemChecked write SetItemChecked;
|
||||||
property Enabled[AIndex: Integer]: Boolean read GetItemEnabled write SetItemEnabled;
|
property Enabled[AIndex: Integer]: Boolean read GetItemEnabled write SetItemEnabled;
|
||||||
property Selected[AIndex: Integer]: Boolean read GetSelected write SetSelected;
|
property Selected[AIndex: Integer]: Boolean read GetSelected write SetSelected;
|
||||||
end;
|
end;
|
||||||
@ -1205,6 +1219,7 @@ type
|
|||||||
procedure SetItemCheckState(AIndex: Integer; AValue: QtCheckState);
|
procedure SetItemCheckState(AIndex: Integer; AValue: QtCheckState);
|
||||||
protected
|
protected
|
||||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||||
|
procedure SetNextStateMap(AItem: QListWidgetItemH); override;
|
||||||
public
|
public
|
||||||
procedure AttachEvents; override;
|
procedure AttachEvents; override;
|
||||||
procedure DetachEvents; override;
|
procedure DetachEvents; override;
|
||||||
@ -1290,11 +1305,13 @@ type
|
|||||||
FSelectionChangedHook: QTreeWidget_hookH;
|
FSelectionChangedHook: QTreeWidget_hookH;
|
||||||
function getColCount: Integer;
|
function getColCount: Integer;
|
||||||
function getHeader: TQtHeaderView;
|
function getHeader: TQtHeaderView;
|
||||||
|
function GetItemChecked(AIndex: Integer): Boolean;
|
||||||
function getItemCount: Integer;
|
function getItemCount: Integer;
|
||||||
function getMaxColSize(ACol: Integer): Integer;
|
function getMaxColSize(ACol: Integer): Integer;
|
||||||
function getMinColSize(ACol: Integer): Integer;
|
function getMinColSize(ACol: Integer): Integer;
|
||||||
function getSortEnabled: Boolean;
|
function getSortEnabled: Boolean;
|
||||||
procedure setColCount(const AValue: Integer);
|
procedure setColCount(const AValue: Integer);
|
||||||
|
procedure SetItemChecked(AIndex: Integer; AValue: Boolean);
|
||||||
procedure setItemCount(const AValue: Integer);
|
procedure setItemCount(const AValue: Integer);
|
||||||
procedure setMaxColSize(ACol: Integer; const AValue: Integer);
|
procedure setMaxColSize(ACol: Integer; const AValue: Integer);
|
||||||
procedure setMinColSize(ACol: Integer; const AValue: Integer);
|
procedure setMinColSize(ACol: Integer; const AValue: Integer);
|
||||||
@ -1359,6 +1376,7 @@ type
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
property ColCount: Integer read getColCount write setColCount;
|
property ColCount: Integer read getColCount write setColCount;
|
||||||
property Header: TQtHeaderView read getHeader;
|
property Header: TQtHeaderView read getHeader;
|
||||||
|
property ItemChecked[AIndex: Integer]: Boolean read GetItemChecked write SetItemChecked;
|
||||||
property ItemCount: Integer read getItemCount write setItemCount;
|
property ItemCount: Integer read getItemCount write setItemCount;
|
||||||
property MaxColSize[ACol: Integer]: Integer read getMaxColSize write setMaxColSize;
|
property MaxColSize[ACol: Integer]: Integer read getMaxColSize write setMaxColSize;
|
||||||
property MinColSize[ACol: Integer]: Integer read getMinColSize write setMinColSize;
|
property MinColSize[ACol: Integer]: Integer read getMinColSize write setMinColSize;
|
||||||
@ -1720,6 +1738,8 @@ const
|
|||||||
{taCenter } QtAlignHCenter
|
{taCenter } QtAlignHCenter
|
||||||
);
|
);
|
||||||
|
|
||||||
|
QtCheckStateRole = Ord(QtUserRole) + 1;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -9384,6 +9404,16 @@ begin
|
|||||||
Result := QListWidget_count(QListWidgetH(Widget));
|
Result := QListWidget_count(QListWidgetH(Widget));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtListWidget.GetItemChecked(AIndex: Integer): Boolean;
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
AItem := getItem(AIndex);
|
||||||
|
if Assigned(AItem) then
|
||||||
|
Result := QListWidgetItem_checkState(AItem) = QtChecked;
|
||||||
|
end;
|
||||||
|
|
||||||
function TQtListWidget.GetItemEnabled(AIndex: Integer): Boolean;
|
function TQtListWidget.GetItemEnabled(AIndex: Integer): Boolean;
|
||||||
var
|
var
|
||||||
AItem: QListWidgetItemH;
|
AItem: QListWidgetItemH;
|
||||||
@ -9404,6 +9434,21 @@ begin
|
|||||||
Result := getItemSelected(AItem);
|
Result := getItemSelected(AItem);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtListWidget.SetItemChecked(AIndex: Integer; AValue: Boolean);
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
AItem := getItem(AIndex);
|
||||||
|
if Assigned(AItem) then
|
||||||
|
begin
|
||||||
|
if AValue then
|
||||||
|
QListWidgetItem_setCheckState(AItem, QtChecked)
|
||||||
|
else
|
||||||
|
QListWidgetItem_setCheckState(AItem, QtUnChecked);
|
||||||
|
SetItemLastCheckState(AItem);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtListWidget.setItemCount(const AValue: Integer);
|
procedure TQtListWidget.setItemCount(const AValue: Integer);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -9449,11 +9494,48 @@ begin
|
|||||||
setItemSelected(getItem(AIndex), AValue);
|
setItemSelected(getItem(AIndex), AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtListWidget.GetItemLastCheckState(AItem: QListWidgetItemH
|
||||||
|
): QtCheckState;
|
||||||
|
var
|
||||||
|
v: QVariantH;
|
||||||
|
ok: Boolean;
|
||||||
|
begin
|
||||||
|
Result := QtUnChecked;
|
||||||
|
if AItem = nil then
|
||||||
|
exit;
|
||||||
|
v := QVariant_create();
|
||||||
|
QListWidgetItem_data(AItem, v, QtCheckStateRole);
|
||||||
|
ok := False;
|
||||||
|
if QVariant_isValid(v) then
|
||||||
|
Result := QtCheckState(QVariant_toInt(v, @Ok));
|
||||||
|
QVariant_destroy(v);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TQtListWidget.SetItemLastCheckState(AItem: QListWidgetItemH);
|
||||||
|
var
|
||||||
|
v: QVariantH;
|
||||||
|
AState: QtCheckState;
|
||||||
|
begin
|
||||||
|
if AItem = nil then
|
||||||
|
exit;
|
||||||
|
AState := QListWidgetItem_checkState(AItem);
|
||||||
|
v := QVariant_create(Ord(AState));
|
||||||
|
QListWidgetItem_setData(AItem, QtCheckStateRole, v);
|
||||||
|
QVariant_destroy(v);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TQtListWidget.SetNextStateMap(AItem: QListWidgetItemH);
|
||||||
|
begin
|
||||||
|
// does the job only for TQtCheckListBox
|
||||||
|
end;
|
||||||
|
|
||||||
function TQtListWidget.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
function TQtListWidget.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
||||||
var
|
var
|
||||||
Parent: QWidgetH;
|
Parent: QWidgetH;
|
||||||
begin
|
begin
|
||||||
|
FCheckBoxClicked := False;
|
||||||
SetLength(FSavedSelection, 0);
|
SetLength(FSavedSelection, 0);
|
||||||
|
AllowGrayed := False;
|
||||||
FSavedEvent := nil;
|
FSavedEvent := nil;
|
||||||
FSavedEventTimer := nil;
|
FSavedEventTimer := nil;
|
||||||
FSavedEventTimerHook := nil;
|
FSavedEventTimerHook := nil;
|
||||||
@ -9549,6 +9631,26 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtListWidget.GetItemFlags(AIndex: Integer): QtItemFlags;
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
Result := inherited GetItemFlags(AIndex);
|
||||||
|
AItem := getItem(AIndex);
|
||||||
|
if Assigned(AItem) then
|
||||||
|
Result := QListWidgetItem_flags(AItem);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TQtListWidget.SetItemFlags(AIndex: Integer; AValue: QtItemFlags);
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
inherited SetItemFlags(AIndex, AValue);
|
||||||
|
AItem := getItem(AIndex);
|
||||||
|
if Assigned(AItem) then
|
||||||
|
QListWidgetItem_setFlags(AItem, AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtListWidget.AttachEvents;
|
procedure TQtListWidget.AttachEvents;
|
||||||
begin
|
begin
|
||||||
inherited AttachEvents;
|
inherited AttachEvents;
|
||||||
@ -9705,8 +9807,11 @@ begin
|
|||||||
x := QStyle_pixelMetric(QApplication_style(), QStylePM_IndicatorWidth,
|
x := QStyle_pixelMetric(QApplication_style(), QStylePM_IndicatorWidth,
|
||||||
nil, Widget);
|
nil, Widget);
|
||||||
if ((MousePos.X > 2) and (MousePos.X < (X + 2))) then
|
if ((MousePos.X > 2) and (MousePos.X < (X + 2))) then
|
||||||
|
begin
|
||||||
|
FCheckBoxClicked := True;
|
||||||
|
SetItemLastCheckState(Item);
|
||||||
{signalItemClicked() fires !}
|
{signalItemClicked() fires !}
|
||||||
else
|
end else
|
||||||
SendEventToParent;
|
SendEventToParent;
|
||||||
end else
|
end else
|
||||||
SendEventToParent;
|
SendEventToParent;
|
||||||
@ -10282,6 +10387,7 @@ function TQtCheckListBox.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
|||||||
var
|
var
|
||||||
Parent: QWidgetH;
|
Parent: QWidgetH;
|
||||||
begin
|
begin
|
||||||
|
FCheckBoxClicked := False;
|
||||||
FSavedEvent := nil;
|
FSavedEvent := nil;
|
||||||
FSavedEventTimer := nil;
|
FSavedEventTimer := nil;
|
||||||
FSavedEventTimerHook := nil;
|
FSavedEventTimerHook := nil;
|
||||||
@ -10299,6 +10405,22 @@ begin
|
|||||||
Result := QListWidget_create(Parent);
|
Result := QListWidget_create(Parent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtCheckListBox.SetNextStateMap(AItem: QListWidgetItemH);
|
||||||
|
var
|
||||||
|
ACurrState: QtCheckState;
|
||||||
|
begin
|
||||||
|
inherited SetNextStateMap(AItem);
|
||||||
|
if (AItem = nil) or not AllowGrayed then
|
||||||
|
exit;
|
||||||
|
ACurrState := GetItemLastCheckState(AItem);
|
||||||
|
|
||||||
|
case ACurrState of
|
||||||
|
QtUnchecked: ItemCheckState[GetRow(AItem)] := QtPartiallyChecked;
|
||||||
|
QtPartiallyChecked: ItemCheckState[GetRow(AItem)] := QtChecked;
|
||||||
|
QtChecked: ItemCheckState[GetRow(AItem)] := QtUnChecked;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtCheckListBox.AttachEvents;
|
procedure TQtCheckListBox.AttachEvents;
|
||||||
begin
|
begin
|
||||||
inherited AttachEvents;
|
inherited AttachEvents;
|
||||||
@ -10362,6 +10484,14 @@ begin
|
|||||||
QApplication_keyboardModifiers());
|
QApplication_keyboardModifiers());
|
||||||
SlotMouse(Widget, AMouseEvent);
|
SlotMouse(Widget, AMouseEvent);
|
||||||
QMouseEvent_destroy(AMouseEvent);
|
QMouseEvent_destroy(AMouseEvent);
|
||||||
|
{$note seem that we have qtbug with tristate listwidget items, so
|
||||||
|
we must handle statemap somehow}
|
||||||
|
//TODO try to fix nextstatemap
|
||||||
|
if FCheckBoxClicked then
|
||||||
|
begin
|
||||||
|
FCheckBoxClicked := False;
|
||||||
|
SetNextStateMap(item);
|
||||||
|
end;
|
||||||
|
|
||||||
AMouseEvent := QMouseEvent_create(QEventMouseButtonRelease, @APos,
|
AMouseEvent := QMouseEvent_create(QEventMouseButtonRelease, @APos,
|
||||||
@AGlobalPos, QtLeftButton, QtLeftButton,
|
@AGlobalPos, QtLeftButton, QtLeftButton,
|
||||||
@ -10409,6 +10539,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
AItem := QListWidget_item(QListWidgetH(Widget), AIndex);
|
AItem := QListWidget_item(QListWidgetH(Widget), AIndex);
|
||||||
QListWidgetItem_setCheckState(AItem, AValue);
|
QListWidgetItem_setCheckState(AItem, AValue);
|
||||||
|
SetItemLastCheckState(AItem);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -10670,6 +10801,7 @@ begin
|
|||||||
{$ifdef VerboseQt}
|
{$ifdef VerboseQt}
|
||||||
WriteLn('TQtTreeWidget.Create');
|
WriteLn('TQtTreeWidget.Create');
|
||||||
{$endif}
|
{$endif}
|
||||||
|
AllowGrayed := False;
|
||||||
FSelection := TFPList.Create;
|
FSelection := TFPList.Create;
|
||||||
FSavedEvent := nil;
|
FSavedEvent := nil;
|
||||||
FSavedEventTimer := nil;
|
FSavedEventTimer := nil;
|
||||||
@ -10885,6 +11017,16 @@ begin
|
|||||||
Result := FHeader;
|
Result := FHeader;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtTreeWidget.GetItemChecked(AIndex: Integer): Boolean;
|
||||||
|
var
|
||||||
|
AItem: QTreeWidgetItemH;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
AItem := topLevelItem(AIndex);
|
||||||
|
if AItem <> nil then
|
||||||
|
Result := QTreeWidgetItem_checkState(AItem, 0) = QtChecked;
|
||||||
|
end;
|
||||||
|
|
||||||
function TQtTreeWidget.getItemCount: Integer;
|
function TQtTreeWidget.getItemCount: Integer;
|
||||||
begin
|
begin
|
||||||
Result := QTreeWidget_topLevelItemCount(QTreeWidgetH(Widget));
|
Result := QTreeWidget_topLevelItemCount(QTreeWidgetH(Widget));
|
||||||
@ -10917,6 +11059,20 @@ begin
|
|||||||
QTreeWidget_setColumnCount(QTreeWidgetH(Widget), AValue);
|
QTreeWidget_setColumnCount(QTreeWidgetH(Widget), AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtTreeWidget.SetItemChecked(AIndex: Integer; AValue: Boolean);
|
||||||
|
var
|
||||||
|
AItem: QTreeWidgetItemH;
|
||||||
|
begin
|
||||||
|
AItem := topLevelItem(AIndex);
|
||||||
|
if AItem <> nil then
|
||||||
|
begin
|
||||||
|
if AValue then
|
||||||
|
QTreeWidgetItem_setCheckState(AItem, 0, QtChecked)
|
||||||
|
else
|
||||||
|
QTreeWidgetItem_setCheckState(AItem, 0, QtUnChecked);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtTreeWidget.setItemCount(const AValue: Integer);
|
procedure TQtTreeWidget.setItemCount(const AValue: Integer);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -13936,11 +14092,22 @@ begin
|
|||||||
QAbstractItemView_iconSize(QAbstractItemViewH(Widget), @Result);
|
QAbstractItemView_iconSize(QAbstractItemViewH(Widget), @Result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtAbstractItemView.GetItemFlags(AIndex: Integer): QtItemFlags;
|
||||||
|
begin
|
||||||
|
Result := QtNoItemFlags;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtAbstractItemView.setIconSize(const AValue: TSize);
|
procedure TQtAbstractItemView.setIconSize(const AValue: TSize);
|
||||||
begin
|
begin
|
||||||
QAbstractItemView_setIconSize(QAbstractItemViewH(Widget), @AValue);
|
QAbstractItemView_setIconSize(QAbstractItemViewH(Widget), @AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtAbstractItemView.SetItemFlags(AIndex: Integer; AValue: QtItemFlags
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
// must be overrided !
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtAbstractItemView.SetOwnerDrawn(const AValue: Boolean);
|
procedure TQtAbstractItemView.SetOwnerDrawn(const AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
if AValue and (FNewDelegate = nil) then
|
if AValue and (FNewDelegate = nil) then
|
||||||
|
@ -96,6 +96,7 @@ begin
|
|||||||
SelMode := QAbstractItemViewSingleSelection;
|
SelMode := QAbstractItemViewSingleSelection;
|
||||||
|
|
||||||
QtListWidget.setSelectionMode(SelMode);
|
QtListWidget.setSelectionMode(SelMode);
|
||||||
|
QtListWidget.AllowGrayed := TCustomCheckListBox(AWinControl).AllowGrayed;
|
||||||
|
|
||||||
QtListWidget.AttachEvents;
|
QtListWidget.AttachEvents;
|
||||||
|
|
||||||
@ -127,6 +128,7 @@ begin
|
|||||||
if not WSCheckHandleAllocated(ACheckListBox, 'GetState') then
|
if not WSCheckHandleAllocated(ACheckListBox, 'GetState') then
|
||||||
Exit;
|
Exit;
|
||||||
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
||||||
|
QtListWidget.AllowGrayed := ACheckListBox.AllowGrayed;
|
||||||
Result := QtCheckStateToLCLCheckStateMap[QtListWidget.ItemCheckState[AIndex]];
|
Result := QtCheckStateToLCLCheckStateMap[QtListWidget.ItemCheckState[AIndex]];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -151,6 +153,7 @@ begin
|
|||||||
if not WSCheckHandleAllocated(ACheckListBox, 'SetState') then
|
if not WSCheckHandleAllocated(ACheckListBox, 'SetState') then
|
||||||
Exit;
|
Exit;
|
||||||
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
||||||
|
QtListWidget.AllowGrayed := ACheckListBox.AllowGrayed;
|
||||||
QtListWidget.BeginUpdate;
|
QtListWidget.BeginUpdate;
|
||||||
QtListWidget.ItemCheckState[AIndex] := LCLCheckStateToQtCheckStateMap[AState];
|
QtListWidget.ItemCheckState[AIndex] := LCLCheckStateToQtCheckStateMap[AState];
|
||||||
QtListWidget.EndUpdate;
|
QtListWidget.EndUpdate;
|
||||||
|
@ -1310,9 +1310,7 @@ class procedure TQtWSCustomListView.ItemSetChecked(const ALV: TCustomListView;
|
|||||||
const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean);
|
const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean);
|
||||||
var
|
var
|
||||||
QtListWidget: TQtListWidget;
|
QtListWidget: TQtListWidget;
|
||||||
LWI: QListWidgetItemH;
|
|
||||||
QtTreeWidget: TQtTreeWidget;
|
QtTreeWidget: TQtTreeWidget;
|
||||||
TWI: QTreeWidgetItemH;
|
|
||||||
begin
|
begin
|
||||||
if not WSCheckHandleAllocated(ALV, 'ItemSetChecked') then
|
if not WSCheckHandleAllocated(ALV, 'ItemSetChecked') then
|
||||||
Exit;
|
Exit;
|
||||||
@ -1323,19 +1321,11 @@ begin
|
|||||||
if IsIconView(ALV) then
|
if IsIconView(ALV) then
|
||||||
begin
|
begin
|
||||||
QtListWidget := TQtListWidget(ALV.Handle);
|
QtListWidget := TQtListWidget(ALV.Handle);
|
||||||
LWI := QtListWidget.getItem(AIndex);
|
QtListWidget.ItemChecked[AIndex] := AChecked;
|
||||||
if AChecked then
|
|
||||||
QListWidgetItem_setCheckState(LWI, QtChecked)
|
|
||||||
else
|
|
||||||
QListWidgetItem_setCheckState(LWI, QtUnChecked);
|
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
QtTreeWidget := TQtTreeWidget(ALV.Handle);
|
||||||
TWI := QtTreeWidget.topLevelItem(AIndex);
|
QtTreeWidget.ItemChecked[AIndex] := AChecked;
|
||||||
if AChecked then
|
|
||||||
QTreeWidgetItem_setCheckState(TWI, 0, QtChecked)
|
|
||||||
else
|
|
||||||
QTreeWidgetItem_setCheckState(TWI, 0, QtUnChecked);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user