From 58d57194cad767f1f7924f9185df9daa44fd88fe Mon Sep 17 00:00:00 2001 From: zeljko Date: Sun, 22 Mar 2009 10:26:01 +0000 Subject: [PATCH] Qt: another fix for #13364, sync with LCL TListView was missing. git-svn-id: trunk@19060 - --- lcl/interfaces/qt/qtwidgets.pas | 85 ++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 34 deletions(-) diff --git a/lcl/interfaces/qt/qtwidgets.pas b/lcl/interfaces/qt/qtwidgets.pas index dcd52ab320..7a97a01b26 100644 --- a/lcl/interfaces/qt/qtwidgets.pas +++ b/lcl/interfaces/qt/qtwidgets.pas @@ -979,6 +979,7 @@ type TQtTreeWidget = class(TQtTreeView) private + FSyncingItems: Boolean; FHeader: TQtHeaderView; FSectionClicked: QHeaderView_hookH; FHeaderEventFilterHook: QObject_hookH; @@ -7360,6 +7361,7 @@ begin {$ifdef VerboseQt} WriteLn('TQtTreeWidget.Create'); {$endif} + FSyncingItems := False; Result := QTreeWidget_create(); FHeader := nil; QWidget_setAttribute(Result, QtWA_NoMousePropagation); @@ -7604,8 +7606,11 @@ begin NMLV.uNewState := LVIS_SELECTED; NMLV.uChanged := LVIF_STATE; Msg.NMHdr := @NMLV.hdr; - DeliverMessage(Msg); + QTreeWidget_setItemSelected(QTreeWidgetH(Widget), AItem, ASelect); + + if not FSyncingItems then + DeliverMessage(Msg); end; procedure TQtTreeWidget.sortItems(Acolumn: Integer; AOrder: QtSortOrder); @@ -7688,6 +7693,9 @@ var NMLV: TNMListView; R: TRect; Pt: TPoint; + Index: Integer; + AItem: QTreeWidgetItemH; + i: Integer; begin // we'll send also which item is clicked ... probably future // lcl implementation of OnItemClick. @@ -7716,6 +7724,10 @@ begin DeliverMessage(MsgN); + {sync LCL items for selected property} + if (LCLObject <> nil) and (LCLObject is TListView) then + for i := 0 to TListView(LCLObject).Items.Count - 1 do + TListView(LCLObject).Items[i].Selected; end; {------------------------------------------------------------------------------ @@ -7866,42 +7878,47 @@ begin Msg.NMHdr := @NMLV.hdr; - if Current <> nil then - begin - DeliverMessage(Msg); + FSyncingItems := True; + try + if Current <> nil then + begin + DeliverMessage(Msg); - FillChar(Msg, SizeOf(Msg), #0); - FillChar(NMLV, SizeOf(NMLV), #0); - Msg.Msg := CN_NOTIFY; + FillChar(Msg, SizeOf(Msg), #0); + FillChar(NMLV, SizeOf(NMLV), #0); + Msg.Msg := CN_NOTIFY; - NMLV.hdr.hwndfrom := LCLObject.Handle; - NMLV.hdr.code := LVN_ITEMCHANGED; - NMLV.iItem := AIndex; - NMLV.iSubItem := ASubIndex; - NMLV.uNewState := LVIS_SELECTED; - NMLV.uChanged := LVIF_STATE; - Msg.NMHdr := @NMLV.hdr; - DeliverMessage(Msg); - end; + NMLV.hdr.hwndfrom := LCLObject.Handle; + NMLV.hdr.code := LVN_ITEMCHANGED; + NMLV.iItem := AIndex; + NMLV.iSubItem := ASubIndex; + NMLV.uNewState := LVIS_SELECTED; + NMLV.uChanged := LVIF_STATE; + Msg.NMHdr := @NMLV.hdr; + DeliverMessage(Msg); + end; - if Previous <> nil then - begin - FillChar(Msg, SizeOf(Msg), #0); - FillChar(NMLV, SizeOf(NMLV), #0); - Msg.Msg := CN_NOTIFY; - NMLV.hdr.hwndfrom := LCLObject.Handle; - NMLV.hdr.code := LVN_ITEMCHANGED; - NMLV.iItem := QTreeWidget_indexOfTopLevelItem(QTreeWidgetH(Widget), Previous); - AParent := QTreeWidgetItem_parent(Previous); - if AParent <> nil then - ASubIndex := QTreeWidgetItem_indexOfChild(AParent, Previous) - else - ASubIndex := 0; - NMLV.iSubItem := ASubIndex; - NMLV.uOldState := LVIS_SELECTED; - NMLV.uChanged := LVIF_STATE; - Msg.NMHdr := @NMLV.hdr; - DeliverMessage(Msg); + if Previous <> nil then + begin + FillChar(Msg, SizeOf(Msg), #0); + FillChar(NMLV, SizeOf(NMLV), #0); + Msg.Msg := CN_NOTIFY; + NMLV.hdr.hwndfrom := LCLObject.Handle; + NMLV.hdr.code := LVN_ITEMCHANGED; + NMLV.iItem := QTreeWidget_indexOfTopLevelItem(QTreeWidgetH(Widget), Previous); + AParent := QTreeWidgetItem_parent(Previous); + if AParent <> nil then + ASubIndex := QTreeWidgetItem_indexOfChild(AParent, Previous) + else + ASubIndex := 0; + NMLV.iSubItem := ASubIndex; + NMLV.uOldState := LVIS_SELECTED; + NMLV.uChanged := LVIF_STATE; + Msg.NMHdr := @NMLV.hdr; + DeliverMessage(Msg); + end; + finally + FSyncingItems := False; end; end;