mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-02 08:20:19 +02:00
Qt: introduced new class TQtCheckListBox which is handle for TCheckListBox, now all mouse events are ok.
git-svn-id: trunk@26523 -
This commit is contained in:
parent
7088a19867
commit
60513eeef8
@ -1053,10 +1053,10 @@ type
|
||||
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||
function itemViewViewportEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||
|
||||
procedure signalCurrentItemChanged(current: QListWidgetItemH; previous: QListWidgetItemH); cdecl;
|
||||
procedure signalItemTextChanged(ANewText: PWideString); cdecl;
|
||||
procedure signalItemClicked(item: QListWidgetItemH); cdecl;
|
||||
procedure signalSelectionChanged(); cdecl;
|
||||
procedure signalCurrentItemChanged(current: QListWidgetItemH; previous: QListWidgetItemH); cdecl; virtual;
|
||||
procedure signalItemTextChanged(ANewText: PWideString); cdecl; virtual;
|
||||
procedure signalItemClicked(item: QListWidgetItemH); cdecl; virtual;
|
||||
procedure signalSelectionChanged(); cdecl; virtual;
|
||||
procedure ItemDelegatePaint(painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; override;
|
||||
public
|
||||
procedure ClearItems;
|
||||
@ -1088,7 +1088,21 @@ type
|
||||
procedure exchangeItems(AIndex1, AIndex2: Integer);
|
||||
property ItemCount: Integer read getItemCount write setItemCount;
|
||||
end;
|
||||
|
||||
|
||||
{ TQtCheckListBox }
|
||||
|
||||
TQtCheckListBox = class (TQtListWidget)
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||
function itemViewViewportEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||
|
||||
procedure signalCurrentItemChanged(current: QListWidgetItemH; previous: QListWidgetItemH); cdecl; override;
|
||||
procedure signalItemClicked(item: QListWidgetItemH); cdecl; override;
|
||||
procedure signalSelectionChanged(); cdecl; override;
|
||||
end;
|
||||
|
||||
{ TQtHeaderView }
|
||||
|
||||
TQtHeaderView = class (TQtAbstractItemView)
|
||||
@ -8858,14 +8872,117 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TQtHeaderView }
|
||||
{ TQtCheckListBox }
|
||||
|
||||
function TQtCheckListBox.CreateWidget(const AParams: TCreateParams): QWidgetH;
|
||||
var
|
||||
Parent: QWidgetH;
|
||||
begin
|
||||
FSavedEvent := nil;
|
||||
FSavedEventTimer := nil;
|
||||
FSavedEventTimerHook := nil;
|
||||
|
||||
FViewStyle := -1;
|
||||
FSyncingItems := False;
|
||||
FDontPassSelChange := False;
|
||||
FOwnerData := False;
|
||||
|
||||
FCheckable := True;
|
||||
if AParams.WndParent <> 0 then
|
||||
Parent := TQtWidget(AParams.WndParent).GetContainerWidget
|
||||
else
|
||||
Parent := nil;
|
||||
Result := QListWidget_create(Parent);
|
||||
QWidget_setAttribute(Result, QtWA_NoMousePropagation);
|
||||
end;
|
||||
|
||||
function TQtCheckListBox.EventFilter(Sender: QObjectH; Event: QEventH
|
||||
): Boolean; cdecl;
|
||||
var
|
||||
MousePos: TQtPoint;
|
||||
Item: QListWidgetItemH;
|
||||
x: Integer;
|
||||
Msg: TLMessage;
|
||||
begin
|
||||
if (QEvent_type(Event) = QEventMouseButtonPress) or
|
||||
(QEvent_type(Event) = QEventMouseButtonRelease) then
|
||||
begin
|
||||
SlotMouse(Sender, Event);
|
||||
if (QEvent_type(Event) = QEventMouseButtonPress) and
|
||||
(QMouseEvent_button(QMouseEventH(Event)) = QtLeftButton) then
|
||||
begin
|
||||
MousePos := QMouseEvent_pos(QMouseEventH(Event))^;
|
||||
Item := itemAt(MousePos.x, MousePos.y);
|
||||
if (Item <> nil) and
|
||||
((QListWidgetItem_flags(Item) and QtItemIsUserCheckable) <> 0) then
|
||||
begin
|
||||
x := QStyle_pixelMetric(QApplication_style(), QStylePM_IndicatorWidth,
|
||||
nil, Widget);
|
||||
if ((MousePos.X > 2) and (MousePos.X < (X + 2))) then
|
||||
begin
|
||||
if QListWidgetItem_checkState(Item) = QtUnChecked then
|
||||
QListWidgetItem_setCheckState(Item, QtChecked)
|
||||
else
|
||||
QListWidgetItem_setCheckState(Item, QtUnChecked);
|
||||
FillChar(Msg, SizeOf(Msg), #0);
|
||||
Msg.Msg := LM_CHANGED;
|
||||
Msg.WParam := QListWidget_row(QListWidgetH(Widget), Item);
|
||||
DeliverMessage(Msg);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end else
|
||||
Result := inherited EventFilter(Sender, Event);
|
||||
end;
|
||||
|
||||
function TQtCheckListBox.itemViewViewportEventFilter(Sender: QObjectH;
|
||||
Event: QEventH): Boolean; cdecl;
|
||||
begin
|
||||
Result := False;
|
||||
QEvent_accept(Event);
|
||||
if (LCLObject <> nil) then
|
||||
begin
|
||||
case QEvent_type(Event) of
|
||||
QEventMouseButtonRelease,
|
||||
QEventMouseButtonPress,
|
||||
QEventMouseButtonDblClick: QEvent_ignore(Event);
|
||||
else
|
||||
begin
|
||||
{do not change selection if mousepressed and mouse moved}
|
||||
Result := (QEvent_type(Event) = QEventMouseMove) and
|
||||
hasFocus and (QApplication_mouseButtons() > 0);
|
||||
QEvent_ignore(Event);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQtCheckListBox.signalCurrentItemChanged(current: QListWidgetItemH;
|
||||
previous: QListWidgetItemH); cdecl;
|
||||
begin
|
||||
// Do nothing
|
||||
// inherited signalCurrentItemChanged(current, previous);
|
||||
end;
|
||||
|
||||
procedure TQtCheckListBox.signalItemClicked(item: QListWidgetItemH); cdecl;
|
||||
begin
|
||||
// DO NOTHING
|
||||
//inherited signalItemClicked(item);
|
||||
end;
|
||||
|
||||
procedure TQtCheckListBox.signalSelectionChanged(); cdecl;
|
||||
begin
|
||||
// DO NOTHING
|
||||
// inherited signalSelectionChanged;
|
||||
end;
|
||||
|
||||
{ TQtHeaderView }
|
||||
|
||||
function TQtHeaderView.getClickable: Boolean;
|
||||
begin
|
||||
Result := QHeaderView_isClickable(QHeaderViewH(Widget));
|
||||
end;
|
||||
|
||||
|
||||
function TQtHeaderView.getMinSectionSize: Integer;
|
||||
begin
|
||||
Result := QHeaderView_minimumSectionSize(QHeaderViewH(Widget));
|
||||
|
@ -79,10 +79,10 @@ class function TQtWSCustomCheckListBox.CreateHandle(
|
||||
const AWinControl: TWinControl; const AParams: TCreateParams
|
||||
): TLCLIntfHandle;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtListWidget: TQtCheckListBox;
|
||||
SelMode: QAbstractItemViewSelectionMode;
|
||||
begin
|
||||
QtListWidget := TQtListWidget.Create(AWinControl, AParams);
|
||||
QtListWidget := TQtCheckListBox.Create(AWinControl, AParams);
|
||||
|
||||
QtListWidget.Checkable := True;
|
||||
|
||||
@ -109,11 +109,11 @@ end;
|
||||
class function TQtWSCustomCheckListBox.GetItemEnabled(
|
||||
const ACheckListBox: TCustomCheckListBox; const AIndex: integer): Boolean;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtListWidget: TQtCheckListBox;
|
||||
AListWidget: QListWidgetH;
|
||||
AItem: QListWidgetItemH;
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ACheckListBox.Handle);
|
||||
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
||||
AListWidget := QListWidgetH(QtListWidget.Widget);
|
||||
AItem := QListWidget_item(AListWidget, AIndex);
|
||||
Result := (QListWidgetItem_flags(AItem) and QtItemIsEnabled) <> 0;
|
||||
@ -123,11 +123,11 @@ class function TQtWSCustomCheckListBox.GetState(
|
||||
const ACheckListBox: TCustomCheckListBox; const AIndex: integer
|
||||
): TCheckBoxState;
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtListWidget: TQtCheckListBox;
|
||||
AListWidget: QListWidgetH;
|
||||
AItem: QListWidgetItemH;
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ACheckListBox.Handle);
|
||||
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
||||
AListWidget := QListWidgetH(QtListWidget.Widget);
|
||||
AItem := QListWidget_item(AListWidget, AIndex);
|
||||
Result := QtCheckStateToLCLCheckStateMap[QListWidgetItem_checkState(AItem)];
|
||||
@ -137,12 +137,12 @@ class procedure TQtWSCustomCheckListBox.SetItemEnabled(
|
||||
const ACheckListBox: TCustomCheckListBox; const AIndex: integer;
|
||||
const AEnabled: Boolean);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtListWidget: TQtCheckListBox;
|
||||
AListWidget: QListWidgetH;
|
||||
AItem: QListWidgetItemH;
|
||||
Flags: QtItemFlags;
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ACheckListBox.Handle);
|
||||
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
||||
AListWidget := QListWidgetH(QtListWidget.Widget);
|
||||
AItem := QListWidget_item(AListWidget, AIndex);
|
||||
Flags := QListWidgetItem_flags(AItem);
|
||||
@ -157,11 +157,11 @@ class procedure TQtWSCustomCheckListBox.SetState(
|
||||
const ACheckListBox: TCustomCheckListBox; const AIndex: integer;
|
||||
const AState: TCheckBoxState);
|
||||
var
|
||||
QtListWidget: TQtListWidget;
|
||||
QtListWidget: TQtCheckListBox;
|
||||
AListWidget: QListWidgetH;
|
||||
AItem: QListWidgetItemH;
|
||||
begin
|
||||
QtListWidget := TQtListWidget(ACheckListBox.Handle);
|
||||
QtListWidget := TQtCheckListBox(ACheckListBox.Handle);
|
||||
AListWidget := QListWidgetH(QtListWidget.Widget);
|
||||
AItem := QListWidget_item(AListWidget, AIndex);
|
||||
QListWidgetItem_setCheckState(AItem, LCLCheckStateToQtCheckStateMap[AState]);
|
||||
|
Loading…
Reference in New Issue
Block a user