mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-03 20:43:49 +02:00
Qt, Gtk2: fixes checkbox state when doing Items.Move() from checklstbox.part of issue #20589
git-svn-id: trunk@33171 -
This commit is contained in:
parent
73f2164806
commit
b2cfc29c58
@ -51,7 +51,7 @@ uses
|
|||||||
LMessages, LCLProc, LCLIntf, LCLType, DynHashArray, GraphType, GraphMath,
|
LMessages, LCLProc, LCLIntf, LCLType, DynHashArray, GraphType, GraphMath,
|
||||||
Graphics, Menus, Themes, WSLCLClasses,
|
Graphics, Menus, Themes, WSLCLClasses,
|
||||||
|
|
||||||
Buttons, StdCtrls, PairSplitter,
|
Buttons, StdCtrls, CheckLst, PairSplitter,
|
||||||
ComCtrls, Calendar, Arrow, Spin,
|
ComCtrls, Calendar, Arrow, Spin,
|
||||||
ExtCtrls, FileCtrl, LResources,
|
ExtCtrls, FileCtrl, LResources,
|
||||||
|
|
||||||
@ -349,6 +349,7 @@ type
|
|||||||
function Find(const S: String; var Index: Integer): Boolean;
|
function Find(const S: String; var Index: Integer): Boolean;
|
||||||
function IndexOf(const S: String): Integer; override;
|
function IndexOf(const S: String): Integer; override;
|
||||||
procedure Insert(Index: Integer; const S: String); override;
|
procedure Insert(Index: Integer; const S: String); override;
|
||||||
|
procedure Move(CurIndex, NewIndex: Integer); override;
|
||||||
procedure Sort;
|
procedure Sort;
|
||||||
function IsEqual(List: TStrings): Boolean;
|
function IsEqual(List: TStrings): Boolean;
|
||||||
procedure BeginUpdate;
|
procedure BeginUpdate;
|
||||||
@ -378,6 +379,7 @@ uses
|
|||||||
Gtk2WSFactory,
|
Gtk2WSFactory,
|
||||||
Gtk2WSStdCtrls,
|
Gtk2WSStdCtrls,
|
||||||
Gtk2WSControls,
|
Gtk2WSControls,
|
||||||
|
Gtk2WSCheckLst,
|
||||||
Gtk2WSPrivate,
|
Gtk2WSPrivate,
|
||||||
Gtk2Themes,
|
Gtk2Themes,
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
@ -904,6 +906,21 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TGtkListStoreStringList.Move(CurIndex, NewIndex: Integer);
|
||||||
|
const
|
||||||
|
AState: Array[Boolean] of TCheckBoxState = (cbUnchecked, cbChecked);
|
||||||
|
var
|
||||||
|
AItemChecked: Boolean;
|
||||||
|
begin
|
||||||
|
if FOwner is TCheckListBox then
|
||||||
|
AItemChecked := TCheckListBox(FOwner).Checked[CurIndex];
|
||||||
|
inherited Move(CurIndex, NewIndex);
|
||||||
|
if FOwner is TCheckListBox then
|
||||||
|
TGtk2WSCustomCheckListBox.SetState(TCustomCheckListBox(FOwner),
|
||||||
|
NewIndex, AState[AItemChecked]);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
{$I gtk2listsl.inc}
|
{$I gtk2listsl.inc}
|
||||||
|
|
||||||
// Gtk2FileDialogUtils
|
// Gtk2FileDialogUtils
|
||||||
|
@ -76,6 +76,7 @@ type
|
|||||||
procedure Assign(Source: TPersistent); override;
|
procedure Assign(Source: TPersistent); override;
|
||||||
procedure Clear; override;
|
procedure Clear; override;
|
||||||
procedure Delete(Index: Integer); override;
|
procedure Delete(Index: Integer); override;
|
||||||
|
procedure Move(CurIndex, NewIndex: Integer); override;
|
||||||
procedure Sort; override;
|
procedure Sort; override;
|
||||||
procedure Exchange(AIndex1, AIndex2: Integer); override;
|
procedure Exchange(AIndex1, AIndex2: Integer); override;
|
||||||
public
|
public
|
||||||
@ -616,6 +617,33 @@ begin
|
|||||||
FOwner.removeItem(Index);
|
FOwner.removeItem(Index);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtListStrings.Move(CurIndex, NewIndex: Integer);
|
||||||
|
var
|
||||||
|
CheckState: QtCheckState;
|
||||||
|
Selected: Boolean;
|
||||||
|
begin
|
||||||
|
{move is calling delete, and then insert.
|
||||||
|
we must save our item checkstate and selection}
|
||||||
|
if Assigned(FWinControl) and (FWinControl.HandleAllocated) and
|
||||||
|
(FOwner is TQtCheckListBox) then
|
||||||
|
begin
|
||||||
|
CheckState := TQtCheckListBox(FOwner).ItemCheckState[CurIndex];
|
||||||
|
Selected := TQtCheckListBox(FOwner).Selected[CurIndex];
|
||||||
|
end;
|
||||||
|
|
||||||
|
inherited Move(CurIndex, NewIndex);
|
||||||
|
|
||||||
|
{return check state to newindex}
|
||||||
|
if Assigned(FWinControl) and (FWinControl.HandleAllocated) and
|
||||||
|
(FOwner is TQtCheckListBox) then
|
||||||
|
begin
|
||||||
|
FOwner.BeginUpdate;
|
||||||
|
TQtCheckListBox(FOwner).ItemCheckState[NewIndex] := CheckState;
|
||||||
|
FOwner.Selected[NewIndex] := Selected;
|
||||||
|
FOwner.EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtListStrings.Sort;
|
procedure TQtListStrings.Sort;
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: Integer;
|
||||||
|
@ -1109,7 +1109,9 @@ type
|
|||||||
FItemTextChangedHook: QListWidget_hookH;
|
FItemTextChangedHook: QListWidget_hookH;
|
||||||
FDontPassSelChange: Boolean;
|
FDontPassSelChange: Boolean;
|
||||||
function getItemCount: Integer;
|
function getItemCount: Integer;
|
||||||
|
function GetSelected(AIndex: Integer): Boolean;
|
||||||
procedure setItemCount(const AValue: Integer);
|
procedure setItemCount(const AValue: Integer);
|
||||||
|
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;
|
||||||
@ -1157,6 +1159,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 Selected[AIndex: Integer]: Boolean read GetSelected write SetSelected;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TQtCheckListBox }
|
{ TQtCheckListBox }
|
||||||
@ -1164,6 +1167,8 @@ type
|
|||||||
TQtCheckListBox = class (TQtListWidget)
|
TQtCheckListBox = class (TQtListWidget)
|
||||||
private
|
private
|
||||||
FItemChangedHook: QListWidget_hookH;
|
FItemChangedHook: QListWidget_hookH;
|
||||||
|
function GetItemCheckState(AIndex: Integer): QtCheckState;
|
||||||
|
procedure SetItemCheckState(AIndex: Integer; AValue: QtCheckState);
|
||||||
protected
|
protected
|
||||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||||
public
|
public
|
||||||
@ -1176,6 +1181,7 @@ type
|
|||||||
procedure signalItemClicked(item: QListWidgetItemH); cdecl; override;
|
procedure signalItemClicked(item: QListWidgetItemH); cdecl; override;
|
||||||
procedure signalSelectionChanged(); cdecl; override;
|
procedure signalSelectionChanged(); cdecl; override;
|
||||||
procedure signalItemChanged(item: QListWidgetItemH); cdecl;
|
procedure signalItemChanged(item: QListWidgetItemH); cdecl;
|
||||||
|
property ItemCheckState[AIndex: Integer]: QtCheckState read GetItemCheckState write SetItemCheckState;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TQtHeaderView }
|
{ TQtHeaderView }
|
||||||
@ -9058,6 +9064,16 @@ begin
|
|||||||
Result := QListWidget_count(QListWidgetH(Widget));
|
Result := QListWidget_count(QListWidgetH(Widget));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtListWidget.GetSelected(AIndex: Integer): Boolean;
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
AItem := getItem(AIndex);
|
||||||
|
if Assigned(AItem) then
|
||||||
|
Result := getItemSelected(AItem);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtListWidget.setItemCount(const AValue: Integer);
|
procedure TQtListWidget.setItemCount(const AValue: Integer);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -9080,6 +9096,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtListWidget.SetSelected(AIndex: Integer; AValue: Boolean);
|
||||||
|
begin
|
||||||
|
if (AIndex >= 0) and (AIndex < RowCount) then
|
||||||
|
setItemSelected(getItem(AIndex), AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
function TQtListWidget.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
function TQtListWidget.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
||||||
var
|
var
|
||||||
Parent: QWidgetH;
|
Parent: QWidgetH;
|
||||||
@ -9663,7 +9685,10 @@ end;
|
|||||||
|
|
||||||
function TQtListWidget.getItem(AIndex: Integer): QListWidgetItemH;
|
function TQtListWidget.getItem(AIndex: Integer): QListWidgetItemH;
|
||||||
begin
|
begin
|
||||||
Result := QListWidget_item(QListWidgetH(Widget), AIndex);
|
if (AIndex >= 0) and (AIndex < rowCount) then
|
||||||
|
Result := QListWidget_item(QListWidgetH(Widget), AIndex)
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TQtListWidget.getItemSelected(AItem: QListWidgetItemH): Boolean;
|
function TQtListWidget.getItemSelected(AItem: QListWidgetItemH): Boolean;
|
||||||
@ -10016,6 +10041,30 @@ begin
|
|||||||
DeliverMessage(Msg);
|
DeliverMessage(Msg);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TQtCheckListBox.GetItemCheckState(AIndex: Integer): QtCheckState;
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
Result := QtUnChecked;
|
||||||
|
if (AIndex >= 0) and (AIndex < rowCount) then
|
||||||
|
begin
|
||||||
|
AItem := QListWidget_item(QListWidgetH(Widget), AIndex);
|
||||||
|
Result := QListWidgetItem_checkState(AItem);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TQtCheckListBox.SetItemCheckState(AIndex: Integer;
|
||||||
|
AValue: QtCheckState);
|
||||||
|
var
|
||||||
|
AItem: QListWidgetItemH;
|
||||||
|
begin
|
||||||
|
if (AIndex >= 0) and (AIndex < rowCount) then
|
||||||
|
begin
|
||||||
|
AItem := QListWidget_item(QListWidgetH(Widget), AIndex);
|
||||||
|
QListWidgetItem_setCheckState(AItem, AValue);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TQtHeaderView }
|
{ TQtHeaderView }
|
||||||
|
|
||||||
function TQtHeaderView.getClickable: Boolean;
|
function TQtHeaderView.getClickable: Boolean;
|
||||||
|
Loading…
Reference in New Issue
Block a user