2
*****************************************************************************
3
* CustomDrawnWSComCtrls.pas *
7
*****************************************************************************
9
*****************************************************************************
11
* This file is part of the Lazarus Component Library (LCL) *
13
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
14
* for details about the copyright. *
16
* This program is distributed in the hope that it will be useful, *
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
20
*****************************************************************************
22
unit CustomDrawnWSComCtrls;
32
SysUtils, Classes, Types, ComCtrls, Controls, LCLType, Graphics, StdCtrls,
33
LCLProc, LCLIntf, Forms, ImgList,
34
customdrawncontrols, customdrawn_common,
36
WSProc, WSComCtrls, WSLCLClasses,
38
customdrawnproc, customdrawnwscontrols, customdrawnprivate;
43
TCDWSCustomPage = class(TWSCustomPage)
45
{ class function CreateHandle(const AWinControl: TWinControl;
46
const AParams: TCreateParams): TLCLIntfHandle; override;
47
class procedure UpdateProperties(const ACustomPage: TCustomPage); override;}
50
{ TCDWSCustomTabControl }
52
TCDWSCustomTabControl = class(TWSCustomTabControl)
54
class procedure CreateCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
56
class function CreateHandle(const AWinControl: TWinControl;
57
const AParams: TCreateParams): TLCLIntfHandle; override;
58
class procedure ShowHide(const AWinControl: TWinControl); override;
60
class procedure AddPage(const ATabControl: TCustomTabControl;
61
const AChild: TCustomPage; const AIndex: integer); override;
62
class procedure MovePage(const ATabControl: TCustomTabControl;
63
const AChild: TCustomPage; const NewIndex: integer); override;
64
class procedure RemovePage(const ATabControl: TCustomTabControl;
65
const AIndex: integer); override;
67
class function GetCapabilities: TCTabControlCapabilities; override;
68
class function GetDesignInteractive(const AWinControl: TWinControl; AClientPos: TPoint): Boolean; override;
69
class function GetTabIndexAtPos(const ATabControl: TCustomTabControl; const AClientPos: TPoint): integer; override;
70
class function GetTabRect(const ATabControl: TCustomTabControl; const AIndex: Integer): TRect; override;
71
class procedure SetPageIndex(const ATabControl: TCustomTabControl; const AIndex: integer); override;
72
class procedure SetTabCaption(const ATabControl: TCustomTabControl; const AChild: TCustomPage; const AText: string); override;
73
class procedure SetTabPosition(const ATabControl: TCustomTabControl; const ATabPosition: TTabPosition); override;
74
class procedure ShowTabs(const ATabControl: TCustomTabControl; AShowTabs: boolean); override;
75
class procedure UpdateProperties(const ATabControl: TCustomTabControl); override;
80
TCDWSStatusBar = class(TWSStatusBar)
82
{ class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
83
class procedure DestroyHandle(const AWinControl: TWinControl); override;
84
class procedure PanelUpdate(const AStatusBar: TStatusBar; PanelIndex: integer); override;
85
class procedure SetPanelText(const AStatusBar: TStatusBar; PanelIndex: integer); override;
86
class procedure SetSizeGrip(const AStatusBar: TStatusBar; SizeGrip: Boolean); override;
87
class procedure Update(const AStatusBar: TStatusBar); override;}
92
TCDWSTabSheet = class(TWSTabSheet)
98
TCDWSPageControl = class(TWSPageControl)
102
{ TCDWSCustomListView }
104
TCDWSCustomListView = class(TWSCustomListView)
106
{ class function CreateHandle(const AWinControl: TWinControl;
107
const AParams: TCreateParams): TLCLIntfHandle; override;
108
class procedure ColumnDelete(const ALV: TCustomListView; const AIndex: Integer); override;
109
class procedure ColumnInsert(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn); override;
110
class function ColumnGetWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn): Integer; override;
111
class procedure ColumnSetWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AWidth: Integer); override;
112
class procedure ColumnSetVisible(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AVisible: Boolean); override;
113
class procedure ColumnSetAlignment(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AAlignment: TAlignment); override;
114
class procedure ColumnSetAutoSize(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AAutoSize: Boolean); override;
115
class procedure ColumnSetCaption(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const ACaption: String); override;
116
class procedure ColumnSetImage(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AImageIndex: Integer); override;
118
class procedure ColumnSetMinWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AMinWidth: integer); override;
119
class procedure ColumnMove(const ALV: TCustomListView; const AOldIndex, ANewIndex: Integer; const AColumn: TListColumn); override;
123
class procedure ItemInsert(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem); override;
124
class procedure ItemDelete(const ALV: TCustomListView; const AIndex: Integer); override;
125
class procedure ItemExchange(const ALV: TCustomListView; AItem: TListItem; const AIndex1, AIndex2: Integer); override;
126
class procedure ItemMove(const ALV: TCustomListView; AItem: TListItem; const AFromIndex, AToIndex: Integer); override;
127
class function ItemGetChecked(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem): Boolean; override;
128
class procedure ItemSetChecked(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean); override;
129
class function ItemGetPosition(const ALV: TCustomListView; const AIndex: Integer): TPoint; override;
130
class function ItemGetState(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const AState: TListItemState; out AIsSet: Boolean): Boolean; override; // returns True if supported
131
class procedure ItemSetImage(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const ASubIndex, AImageIndex: Integer); override;
132
class procedure ItemSetState(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const AState: TListItemState; const AIsSet: Boolean); override;
133
class procedure ItemSetText(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const ASubIndex: Integer; const AText: String); override;
134
class procedure ItemShow(const ALV: TCustomListView; const AIndex: Integer; const AItem: TListItem; const PartialOK: Boolean); override;
135
class function ItemDisplayRect(const ALV: TCustomListView; const AIndex, ASubItem: Integer; ACode: TDisplayCode): TRect; override;
138
class procedure BeginUpdate(const ALV: TCustomListView); override;
139
class procedure EndUpdate(const ALV: TCustomListView); override;
141
class function GetFocused(const ALV: TCustomListView): Integer; override;
142
class function GetItemAt(const ALV: TCustomListView; x,y: integer): Integer; override;
143
class function GetSelCount(const ALV: TCustomListView): Integer; override;
144
class function GetSelection(const ALV: TCustomListView): Integer; override;
145
class function GetTopItem(const ALV: TCustomListView): Integer; override;
146
class procedure SetSort(const ALV: TCustomListView; const AType: TSortType; const AColumn: Integer;
147
const ASortDirection: TSortDirection); override;
149
class function GetBoundingRect(const ALV: TCustomListView): TRect; override;
150
class function GetViewOrigin(const ALV: TCustomListView): TPoint; override;
151
class function GetVisibleRowCount(const ALV: TCustomListView): Integer; override;
153
class procedure SetAllocBy(const ALV: TCustomListView; const AValue: Integer); override;
154
class procedure SetIconArrangement(const ALV: TCustomListView; const AValue: TIconArrangement); override;
155
class procedure SetItemsCount(const ALV: TCustomListView; const Avalue: Integer); override;
156
class procedure SetOwnerData(const ALV: TCustomListView; const AValue: Boolean); override;
158
class procedure SetProperty(const ALV: TCustomListView; const AProp: TListViewProperty; const AIsSet: Boolean); override;
159
class procedure SetProperties(const ALV: TCustomListView; const AProps: TListViewProperties); override;
161
class procedure SetScrollBars(const ALV: TCustomListView; const AValue: TScrollStyle); override;
162
class procedure SetViewStyle(const ALV: TCustomListView; const Avalue: TViewStyle); override;
167
class procedure ColumnSetMaxWidth(const ALV: TCustomListView; const AIndex: Integer; const AColumn: TListColumn; const AMaxWidth: Integer); override;
171
class function ItemSetPosition(const ALV: TCustomListView; const AIndex: Integer; const ANewPosition: TPoint): Boolean; virtual;
175
class function GetDropTarget(const ALV: TCustomListView): Integer; virtual;
177
class function GetHoverTime(const ALV: TCustomListView): Integer; virtual;
178
class function GetViewOrigin(const ALV: TCustomListView): TPoint; virtual;
180
class procedure SetDefaultItemHeight(const ALV: TCustomListView; const AValue: Integer); virtual;
181
class procedure SetHotTrackStyles(const ALV: TCustomListView; const AValue: TListHotTrackStyles); virtual;
182
class procedure SetHoverTime(const ALV: TCustomListView; const AValue: Integer); virtual;
183
class procedure SetImageList(const ALV: TCustomListView; const AList: TListViewImageList; const AValue: TCustomImageList); virtual;
185
class procedure SetViewOrigin(const ALV: TCustomListView; const AValue: TPoint); virtual;
191
TCDWSListView = class(TWSListView)
197
TCDWSProgressBar = class(TWSProgressBar)
199
class procedure CreateCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
201
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
202
class procedure ShowHide(const AWinControl: TWinControl); override;
203
class procedure ApplyChanges(const AProgressBar: TCustomProgressBar); override;
204
class procedure SetPosition(const AProgressBar: TCustomProgressBar; const NewPosition: integer); override;
205
// class procedure SetStyle(const AProgressBar: TCustomProgressBar; const NewStyle: TProgressBarStyle); override;
208
{ TCDWSCustomUpDown }
210
TCDWSCustomUpDown = class(TWSCustomUpDown)
216
TCDWSUpDown = class(TWSUpDown)
222
TCDWSToolButton = class(TWSToolButton)
228
TCDWSToolBar = class(TWSToolBar)
230
// class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
235
TCDWSTrackBar = class(TWSTrackBar)
237
class procedure CreateCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
239
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
240
class procedure ShowHide(const AWinControl: TWinControl); override;
241
class procedure ApplyChanges(const ATrackBar: TCustomTrackBar); override;
242
class function GetPosition(const ATrackBar: TCustomTrackBar): integer; override;
243
class procedure SetPosition(const ATrackBar: TCustomTrackBar; const NewPosition: integer); override;
244
class procedure SetOrientation(const ATrackBar: TCustomTrackBar; const AOrientation: TTrackBarOrientation); override;
247
{ TCDWSCustomTreeView }
249
TCDWSCustomTreeView = class(TWSCustomTreeView)
255
TCDWSTreeView = class(TWSTreeView)
262
{ TCDWSCustomTabControl }
264
class procedure TCDWSCustomTabControl.CreateCDControl(
265
const AWinControl: TWinControl; var ACDControlField: TCDControl);
267
ACDControlField := TCDIntfPageControl.Create(AWinControl);
268
TCDIntfPageControl(ACDControlField).LCLControl := TCustomTabControl(AWinControl);
269
ACDControlField.Parent := AWinControl;
270
ACDControlField.Align := alClient;
273
class function TCDWSCustomTabControl.CreateHandle(
274
const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
276
lCDWinControl: TCDWinControl;
278
Result := TCDWSWinControl.CreateHandle(AWinControl, AParams);
279
lCDWinControl := TCDWinControl(Result);
282
class procedure TCDWSCustomTabControl.ShowHide(const AWinControl: TWinControl);
284
lCDWinControl: TCDWinControl;
286
lCDWinControl := TCDWinControl(AWinControl.Handle);
288
TCDWSWinControl.ShowHide(AWinControl);
290
if lCDWinControl.CDControl = nil then
291
CreateCDControl(AWinControl, lCDWinControl.CDControl);
294
class procedure TCDWSCustomTabControl.AddPage(
295
const ATabControl: TCustomTabControl; const AChild: TCustomPage;
296
const AIndex: integer);
298
lCDWinControl: TCDWinControl;
300
lCDWinControl := TCDWinControl(ATabControl.Handle);
302
if lCDWinControl.CDControl = nil then
303
CreateCDControl(ATabControl, lCDWinControl.CDControl);
305
TCDPageControl(lCDWinControl.CDControl).InsertPage(AIndex, AChild.Caption);
308
class procedure TCDWSCustomTabControl.MovePage(
309
const ATabControl: TCustomTabControl; const AChild: TCustomPage;
310
const NewIndex: integer);
312
inherited MovePage(ATabControl, AChild, NewIndex);
315
class procedure TCDWSCustomTabControl.RemovePage(
316
const ATabControl: TCustomTabControl; const AIndex: integer);
318
inherited RemovePage(ATabControl, AIndex);
321
class function TCDWSCustomTabControl.GetCapabilities: TCTabControlCapabilities;
323
Result:=inherited GetCapabilities;
326
class function TCDWSCustomTabControl.GetDesignInteractive(
327
const AWinControl: TWinControl; AClientPos: TPoint): Boolean;
329
Result:=inherited GetDesignInteractive(AWinControl, AClientPos);
332
class function TCDWSCustomTabControl.GetTabIndexAtPos(
333
const ATabControl: TCustomTabControl; const AClientPos: TPoint): integer;
335
Result:=inherited GetTabIndexAtPos(ATabControl, AClientPos);
338
class function TCDWSCustomTabControl.GetTabRect(
339
const ATabControl: TCustomTabControl; const AIndex: Integer): TRect;
341
Result:=inherited GetTabRect(ATabControl, AIndex);
344
class procedure TCDWSCustomTabControl.SetPageIndex(
345
const ATabControl: TCustomTabControl; const AIndex: integer);
347
inherited SetPageIndex(ATabControl, AIndex);
350
class procedure TCDWSCustomTabControl.SetTabCaption(
351
const ATabControl: TCustomTabControl; const AChild: TCustomPage;
352
const AText: string);
354
inherited SetTabCaption(ATabControl, AChild, AText);
357
class procedure TCDWSCustomTabControl.SetTabPosition(
358
const ATabControl: TCustomTabControl; const ATabPosition: TTabPosition);
360
inherited SetTabPosition(ATabControl, ATabPosition);
363
class procedure TCDWSCustomTabControl.ShowTabs(
364
const ATabControl: TCustomTabControl; AShowTabs: boolean);
366
inherited ShowTabs(ATabControl, AShowTabs);
369
class procedure TCDWSCustomTabControl.UpdateProperties(
370
const ATabControl: TCustomTabControl);
372
inherited UpdateProperties(ATabControl);
377
class function TCDWSToolBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
379
QtToolBar: TQtCustomControl;
381
{$note TToolBar implementation under LCL is wrong. TToolBar isn't
382
TCustomControl but TWinControl.
383
To avoid theoretical crashes we use TQtCustomControl here, but indeed it
384
should be TQtWidget - so no viewport.}
385
QtToolBar := TQtCustomControl.Create(AWinControl, AParams);
386
QtToolBar.setFrameShape(QFrameNoFrame);
387
QtToolBar.viewportNeeded;
388
QtToolBar.setFocusPolicy(QtTabFocus);
389
QtToolBar.AttachEvents;
390
Result := TLCLIntfHandle(QtToolBar);
395
class procedure TCDWSTrackBar.CreateCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
397
ACDControlField := TCDIntfTrackBar.Create(AWinControl);
398
TCDIntfTrackBar(ACDControlField).LCLControl := TCustomTrackBar(AWinControl);
399
ACDControlField.Parent := AWinControl;
400
ACDControlField.Align := alClient;
403
class function TCDWSTrackBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
405
lCDWinControl: TCDWinControl;
407
Result := TCDWSWinControl.CreateHandle(AWinControl, AParams);
408
lCDWinControl := TCDWinControl(Result);
411
class procedure TCDWSTrackBar.ShowHide(const AWinControl: TWinControl);
413
lCDWinControl: TCDWinControl;
415
lCDWinControl := TCDWinControl(AWinControl.Handle);
417
TCDWSWinControl.ShowHide(AWinControl);
419
if lCDWinControl.CDControl = nil then
420
CreateCDControl(AWinControl, lCDWinControl.CDControl);
423
class procedure TCDWSTrackBar.ApplyChanges(const ATrackBar: TCustomTrackBar);
425
lCDWinControl: TCDWinControl;
427
lCDWinControl := TCDWinControl(ATrackBar.Handle);
429
if lCDWinControl.CDControl = nil then
430
CreateCDControl(ATrackBar, lCDWinControl.CDControl);
432
TCDTrackBar(lCDWinControl.CDControl).Position := ATrackBar.Position;
434
{ QtTrackBar.BeginUpdate;
436
QtTrackBar.setRange(ATrackBar.Min, ATrackBar.Max);
438
if ATrackBar.TickStyle = tsNone then
439
QtTrackBar.SetTickPosition(QSliderNoTicks)
441
QtTrackBar.SetTickPosition(TickMarkToQtSliderTickPositionMap[ATrackBar.TickMarks]);
443
if QtTrackBar.getPageStep <> ATrackBar.PageSize then
444
QtTrackBar.setPageStep(ATrackBar.PageSize);
445
if QtTrackBar.getTickInterval <> ATrackBar.Frequency then
446
QtTrackBar.setTickInterval(ATrackBar.Frequency);
447
if QtTrackBar.getSliderPosition <> ATrackBar.Position then
448
QtTrackBar.setSliderPosition(ATrackBar.Position);
450
if (QtTrackBar.getOrientation <>
451
TrackBarOrientationToQtOrientationMap[ATrackBar.Orientation])
452
or TrackBarReversed(ATrackBar, QtTrackBar) then
455
QtTrackBar.setOrientation(TrackBarOrientationToQtOrientationMap[ATrackBar.Orientation]);
456
if ATrackBar.Orientation = trHorizontal then
457
QtTrackBar.setInvertedAppereance(ATrackBar.Reversed)
459
{make it delphi and msdn compatibile when vertical then 0 = top}
460
QtTrackBar.setInvertedAppereance(not ATrackBar.Reversed);
461
QtTrackBar.setInvertedControls(False);
465
QtTrackBar.EndUpdate;
469
class function TCDWSTrackBar.GetPosition(const ATrackBar: TCustomTrackBar): integer;
471
lCDWinControl: TCDWinControl;
473
lCDWinControl := TCDWinControl(ATrackBar.Handle);
475
if lCDWinControl.CDControl = nil then
476
CreateCDControl(ATrackBar, lCDWinControl.CDControl);
478
Result := TCDTrackBar(lCDWinControl.CDControl).Position;
481
class procedure TCDWSTrackBar.SetPosition(const ATrackBar: TCustomTrackBar; const NewPosition: integer);
483
lCDWinControl: TCDWinControl;
485
lCDWinControl := TCDWinControl(ATrackBar.Handle);
487
if lCDWinControl.CDControl = nil then
488
CreateCDControl(ATrackBar, lCDWinControl.CDControl);
490
TCDTrackBar(lCDWinControl.CDControl).Position := NewPosition;
493
class procedure TCDWSTrackBar.SetOrientation(const ATrackBar: TCustomTrackBar;
494
const AOrientation: TTrackBarOrientation);
496
{ if not WSCheckHandleAllocated(ATrackBar, 'SetOrientation') then
498
QtTrackBar := TQtTrackBar(ATrackBar.Handle);
499
QtTrackBar.BeginUpdate;
501
if (QtTrackBar.getOrientation <>
502
TrackBarOrientationToQtOrientationMap[ATrackBar.Orientation])
503
or TrackBarReversed(ATrackBar, QtTrackBar) then
506
QtTrackBar.setOrientation(TrackBarOrientationToQtOrientationMap[ATrackBar.Orientation]);
507
if ATrackBar.Orientation = trHorizontal then
508
QtTrackBar.setInvertedAppereance(ATrackBar.Reversed)
510
{make it delphi and msdn compatibile when vertical then 0 = top}
511
QtTrackBar.setInvertedAppereance(not ATrackBar.Reversed);
512
QtTrackBar.setInvertedControls(False);
516
QtTrackBar.EndUpdate;
522
class procedure TCDWSProgressBar.CreateCDControl(const AWinControl: TWinControl; var ACDControlField: TCDControl);
524
ACDControlField := TCDIntfProgressBar.Create(AWinControl);
525
TCDIntfProgressBar(ACDControlField).LCLControl := TCustomProgressBar(AWinControl);
526
ACDControlField.Parent := AWinControl;
527
ACDControlField.Align := alClient;
530
class function TCDWSProgressBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
532
lCDWinControl: TCDWinControl;
534
Result := TCDWSWinControl.CreateHandle(AWinControl, AParams);
535
lCDWinControl := TCDWinControl(Result);
538
class procedure TCDWSProgressBar.ShowHide(const AWinControl: TWinControl);
540
lCDWinControl: TCDWinControl;
542
lCDWinControl := TCDWinControl(AWinControl.Handle);
544
TCDWSWinControl.ShowHide(AWinControl);
546
if lCDWinControl.CDControl = nil then
547
CreateCDControl(AWinControl, lCDWinControl.CDControl);
550
class procedure TCDWSProgressBar.ApplyChanges(const AProgressBar: TCustomProgressBar);
552
lCDWinControl: TCDWinControl;
554
lCDWinControl := TCDWinControl(AProgressBar.Handle);
556
if lCDWinControl.CDControl = nil then
557
CreateCDControl(AProgressBar, lCDWinControl.CDControl);
559
TCDProgressBar(lCDWinControl.CDControl).Position := AProgressBar.Position;
561
{ // AProgressBar.Smooth is not supported by qt
563
case AProgressBar.Orientation of
566
QtProgressBar.setOrientation(QtVertical);
567
QtProgressBar.setInvertedAppearance(False);
571
QtProgressBar.setOrientation(QtHorizontal);
572
QtProgressBar.setInvertedAppearance(True);
576
QtProgressBar.setOrientation(QtVertical);
577
QtProgressBar.setInvertedAppearance(True);
579
else { pbHorizontal is default }
581
QtProgressBar.setOrientation(QtHorizontal);
582
QtProgressBar.setInvertedAppearance(False);
586
QtProgressBar.setTextVisible(AProgressBar.BarShowText);
588
// The position, minumum and maximum values
589
SetRangeStyle(QtProgressBar, AProgressBar.Style,
590
AProgressBar.Min, AProgressBar.Max,
591
csDesigning in AProgressBar.ComponentState);
592
QtProgressBar.BeginUpdate;
593
QtProgressBar.setValue(AProgressBar.Position);
594
QtProgressBar.EndUpdate;}
597
class procedure TCDWSProgressBar.SetPosition(const AProgressBar: TCustomProgressBar; const NewPosition: integer);
599
lCDWinControl: TCDWinControl;
601
lCDWinControl := TCDWinControl(AProgressBar.Handle);
603
if lCDWinControl.CDControl = nil then
604
CreateCDControl(AProgressBar, lCDWinControl.CDControl);
606
TCDProgressBar(lCDWinControl.CDControl).Position := NewPosition;
609
(*class procedure TCDWSProgressBar.SetStyle(
610
const AProgressBar: TCustomProgressBar; const NewStyle: TProgressBarStyle);
612
QProgressBar: TQtProgressBar;
614
if not WSCheckHandleAllocated(AProgressBar, 'SetStyle') then
616
QProgressBar := TQtProgressBar(AProgressBar.Handle);
618
SetRangeStyle(QProgressBar, NewStyle, AProgressBar.Min, AProgressBar.Max,
619
csDesigning in AProgressBar.ComponentState);
620
if NewStyle = pbstNormal then
621
QProgressBar.setValue(AProgressBar.Position);
626
class procedure TCDWSStatusBar.ClearPanels(const Widget: TQtStatusBar);
630
if length(Widget.Panels) > 0 then
632
Widget.setUpdatesEnabled(False);
633
for i := High(Widget.Panels) downto 0 do
635
Widget.removeWidget(Widget.Panels[i].Widget);
636
Widget.Panels[i].DetachEvents;
637
QLabel_destroy(QLabelH(Widget.Panels[i].Widget));
638
Widget.Panels[i].Widget := nil;
639
Widget.Panels[i].Free;
641
Widget.setUpdatesEnabled(True);
642
SetLength(Widget.Panels, 0);
646
class procedure TCDWSStatusBar.RecreatePanels(const AStatusBar: TStatusBar;
647
const Widget: TQtStatusBar);
653
//clean up. http://bugs.freepascal.org/view.php?id=18683
654
Widget.showMessage(@Str);
656
if AStatusBar.SimplePanel then
658
Str := GetUtf8String(AStatusBar.SimpleText);
659
Widget.showMessage(@Str);
661
if AStatusBar.Panels.Count > 0 then
663
Widget.setUpdatesEnabled(False);
664
SetLength(Widget.Panels, AStatusBar.Panels.Count);
665
for i := 0 to AStatusBar.Panels.Count - 1 do
667
Str := GetUtf8String(AStatusBar.Panels[i].Text);
668
Widget.Panels[i] := TQtStatusBarPanel.CreateFrom(AStatusBar,
669
QLabel_create(@Str, Widget.Widget));
670
Widget.Panels[i].HasPaint := AStatusBar.Panels[i].Style = psOwnerDraw;
671
Widget.Panels[i].ID := AStatusBar.Panels[i].ID;
672
QLabel_setText(QLabelH(Widget.Panels[i].Widget), @Str);
673
QLabel_setAlignment(QLabelH(Widget.Panels[i].Widget),
674
AlignmentToQtAlignmentMap[AStatusBar.Panels[i].Alignment]);
675
QWidget_setMinimumWidth(Widget.Panels[i].Widget, AStatusBar.Panels[i].Width);
676
Widget.Panels[i].AttachEvents;
677
Widget.addWidget(Widget.Panels[i].Widget, ord(i = AStatusBar.Panels.Count - 1));
679
Widget.setUpdatesEnabled(True);
683
class function TCDWSStatusBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
685
QtStatusBar: TQtStatusBar;
687
QtStatusBar := TQtStatusBar.Create(AWinControl, AParams);
688
QtStatusBar.setSizeGripEnabled(TStatusBar(AWinControl).SizeGrip and
689
TStatusBar(AWinControl).SizeGripEnabled);
691
RecreatePanels(TStatusBar(AWinControl), QtStatusBar);
693
QtStatusBar.AttachEvents;
697
Result := TLCLIntfHandle(QtStatusBar);
700
class procedure TCDWSStatusBar.DestroyHandle(const AWinControl: TWinControl);
702
QtStatusBar: TQtStatusBar;
704
QtStatusBar := TQtStatusBar(AWinControl.Handle);
705
ClearPanels(QtStatusBar);
709
class procedure TCDWSStatusBar.PanelUpdate(const AStatusBar: TStatusBar; PanelIndex: integer);
711
QtStatusBar: TQtStatusBar;
714
QtStatusBar := TQtStatusBar(AStatusBar.Handle);
715
if AStatusBar.SimplePanel then
717
ClearPanels(QtStatusBar);
718
Str := GetUtf8String(AStatusBar.SimpleText);
719
QtStatusBar.showMessage(@Str);
721
if AStatusBar.Panels.Count > 0 then
723
QStatusBar_clearMessage(QStatusBarH(QtStatusBar.Widget));
725
if (PanelIndex >= Low(QtStatusBar.Panels)) and
726
(PanelIndex <= High(QtStatusBar.Panels)) then
728
Str := GetUtf8String(AStatusBar.Panels[PanelIndex].Text);
729
QLabel_setText(QLabelH(QtStatusBar.Panels[PanelIndex].Widget), @Str);
730
QLabel_setAlignment(QLabelH(QtStatusBar.Panels[PanelIndex].Widget),
731
AlignmentToQtAlignmentMap[AStatusBar.Panels[PanelIndex].Alignment]);
732
QWidget_setMinimumWidth(QtStatusBar.Panels[PanelIndex].Widget,
733
AStatusBar.Panels[PanelIndex].Width);
738
class procedure TCDWSStatusBar.SetPanelText(const AStatusBar: TStatusBar; PanelIndex: integer);
740
QtStatusBar: TQtStatusBar;
743
QtStatusBar := TQtStatusBar(AStatusBar.Handle);
744
if AStatusBar.SimplePanel then
746
Str := GetUtf8String(AStatusBar.SimpleText);
747
QtStatusBar.showMessage(@Str);
750
if (PanelIndex >= Low(QtStatusBar.Panels)) and
751
(PanelIndex <= High(QtStatusBar.Panels)) then
753
Str := GetUtf8String(AStatusBar.Panels[PanelIndex].Text);
754
QLabel_setText(QLabelH(QtStatusBar.Panels[PanelIndex].Widget), @Str);
759
class procedure TCDWSStatusBar.SetSizeGrip(const AStatusBar: TStatusBar;
762
QtStatusBar: TQtStatusBar;
764
if not WSCheckHandleAllocated(AStatusBar, 'SetSizeGrip') then
766
QtStatusBar := TQtStatusBar(AStatusBar.Handle);
767
QtStatusBar.setSizeGripEnabled(SizeGrip and AStatusBar.SizeGripEnabled);
770
class procedure TCDWSStatusBar.Update(const AStatusBar: TStatusBar);
772
QtStatusBar: TQtStatusBar;
774
QtStatusBar := TQtStatusBar(AStatusBar.Handle);
775
RecreatePanels(AStatusBar, QtStatusBar);
778
{ TCDWSCustomListView }
780
{------------------------------------------------------------------------------
781
Method: TCDWSCustomListView.CreateHandle
784
------------------------------------------------------------------------------}
786
class function TCDWSCustomListView.IsIconView(const AList: TCustomListView): boolean;
788
Result := TListView(AList).ViewStyle <> vsReport;
791
class function TCDWSCustomListView.CreateHandle(const AWinControl: TWinControl;
792
const AParams: TCreateParams): TLCLIntfHandle;
794
QtTreeWidget: TQtTreeWidget;
795
QtListWidget: TQtListWidget;
797
if IsIconView(TCustomListView(AWinControl)) then
799
QtListWidget := TQtListWidget.Create(AWinControl, AParams);
800
QtListWidget.ViewStyle := Ord(TListView(AWinControl).ViewStyle);
801
if TListView(AWinControl).ViewStyle in [vsIcon, vsSmallIcon] then
803
// emabarcadero docs says
804
// vsIcon, vsSmallIcon
805
// Each item appears as a full-sized icon with a label below it.
806
// The user can drag the items to any location in the list view window.
807
QtListWidget.setViewMode(QListViewIconMode);
808
QtListWidget.setResizeMode(QListViewAdjust);
809
QtListWidget.setMovement(QListViewFree);
811
with TCustomListView(AWinControl) do
813
QtListWidget.setWrapping(IconOptions.AutoArrange);
814
QtListWidget.setViewFlow(IconArngToQListFlow[IconOptions.Arrangement]);
815
QtListWidget.setWordWrap(IconOptions.WrapText);
819
QtListWidget.setViewMode(QListViewListMode);
821
QtListWidget.Checkable := TCustomListView(AWinControl).Checkboxes;
822
QtListWidget.AttachEvents;
823
Result := TLCLIntfHandle(QtListWidget);
826
QtTreeWidget := TQtTreeWidget.Create(AWinControl, AParams);
827
QtTreeWidget.ViewStyle := Ord(TListView(AWinControl).ViewStyle);
828
QtTreeWidget.setStretchLastSection(False);
829
QtTreeWidget.setRootIsDecorated(False);
830
QtTreeWidget.AttachEvents;
831
Result := TLCLIntfHandle(QtTreeWidget);
835
{------------------------------------------------------------------------------
836
Method: TCDWSCustomListView.ColumnDelete
839
------------------------------------------------------------------------------}
840
class procedure TCDWSCustomListView.ColumnDelete(const ALV: TCustomListView;
841
const AIndex: Integer);
843
if not WSCheckHandleAllocated(ALV, 'ColumnDelete') then
846
// TODO: columns in vsIcon mode
847
if IsIconView(ALV) then
850
// we must recreate handle since there's no column removal support
851
// in our bindings (protected methods in qt).
855
{------------------------------------------------------------------------------
856
Method: TCDWSCustomListView.ColumnInsert
859
------------------------------------------------------------------------------}
860
class procedure TCDWSCustomListView.ColumnInsert(const ALV: TCustomListView;
861
const AIndex: Integer; const AColumn: TListColumn);
863
QtTreeWidget: TQtTreeWidget;
864
TWI: QTreeWidgetItemH;
865
TWIChild: QTreeWidgetItemH;
868
if not WSCheckHandleAllocated(ALV, 'ColumnInsert') then
871
// TODO: columns in vsIcon mode
872
if IsIconView(ALV) then
875
QtTreeWidget := TQtTreeWidget(ALV.Handle);
877
if QtTreeWidget.ColCount <> TListView(ALV).Columns.Count then
878
QtTreeWidget.ColCount := TListView(ALV).Columns.Count;
880
if (QtTreeWidget.ColCount <= 1) and TListView(ALV).ShowColumnHeaders then
881
QtTreeWidget.setHeaderVisible(True);
883
TWI := QtTreeWidget.headerItem;
885
if QTreeWidgetItem_childCount(TWI) < (AIndex + 1) then
887
TWIChild := QTreeWidgetItem_create(0);
888
QTreeWidgetItem_setFlags(TWIChild, QtItemIsEnabled);
889
QTreeWidgetItem_addChild(TWI, TWIChild);
890
Str := GetUtf8String(ALV.Column[AIndex].Caption);
891
QTreeWidgetItem_setText(TWI, AIndex, @Str);
894
if (csDesigning in ALV.ComponentState) then
897
QtTreeWidget.Header.Clickable := TListView(ALV).ColumnClick;
900
{------------------------------------------------------------------------------
901
Method: TCDWSCustomListView.ColumnGetWidth
904
------------------------------------------------------------------------------}
905
class function TCDWSCustomListView.ColumnGetWidth(const ALV: TCustomListView;
906
const AIndex: Integer; const AColumn: TListColumn): Integer;
908
QtTreeWidget: TQtTreeWidget;
910
if not WSCheckHandleAllocated(ALV, 'ColumnGetWidth') then
913
// TODO: columns in vsIcon mode
914
if IsIconView(ALV) then
917
QtTreeWidget := TQtTreeWidget(ALV.Handle);
918
Result := QtTreeWidget.ColWidth[AIndex];
921
{------------------------------------------------------------------------------
922
Method: TCDWSCustomListView.ColumnMove
925
------------------------------------------------------------------------------}
926
class procedure TCDWSCustomListView.ColumnMove(const ALV: TCustomListView;
927
const AOldIndex, ANewIndex: Integer; const AColumn: TListColumn);
929
QtTreeWidget: TQtTreeWidget;
931
if not WSCheckHandleAllocated(ALV, 'ColumnMove') then
934
if (csDesigning in ALV.ComponentState) then
937
// TODO: columns in vsIcon mode
938
if IsIconView(ALV) then
941
QtTreeWidget := TQtTreeWidget(ALV.Handle);
942
QtTreeWidget.Header.moveSection(AOldIndex, ANewIndex);
945
{------------------------------------------------------------------------------
946
Method: TCDWSCustomListView.ColumnSetAlignment
949
------------------------------------------------------------------------------}
950
class procedure TCDWSCustomListView.ColumnSetAlignment(const ALV: TCustomListView;
951
const AIndex: Integer; const AColumn: TListColumn; const AAlignment: TAlignment);
953
QtTreeWidget: TQtTreeWidget;
954
TWI: QTreeWidgetItemH;
957
if not WSCheckHandleAllocated(ALV, 'ColumnSetAlignment') then
960
// TODO: columns in vsIcon mode
961
if IsIconView(ALV) then
964
QtTreeWidget := TQtTreeWidget(ALV.Handle);
965
TWI := QtTreeWidget.headerItem;
966
QTreeWidgetItem_setTextAlignment(TWI, AIndex,
967
AlignmentToQtAlignmentMap[AAlignment]);
970
if not (csLoading in ALV.ComponentState) then
971
for i := 0 to QtTreeWidget.ItemCount - 1 do
973
TWI := QtTreeWidget.topLevelItem(i);
975
QTreeWidgetItem_setTextAlignment(TWI, AIndex,
976
AlignmentToQtAlignmentMap[AAlignment]);
980
{------------------------------------------------------------------------------
981
Method: TCDWSCustomListView.ColumnSetAutoSize
984
------------------------------------------------------------------------------}
985
class procedure TCDWSCustomListView.ColumnSetAutoSize(const ALV: TCustomListView;
986
const AIndex: Integer; const AColumn: TListColumn; const AAutoSize: Boolean);
988
QtTreeWidget: TQtTreeWidget;
990
if not WSCheckHandleAllocated(ALV, 'ColumnSetAutoSize') then
993
if (csDesigning in ALV.ComponentState) then
996
// TODO: columns in vsIcon mode
997
if IsIconView(ALV) then
1000
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1002
QtTreeWidget.Header.setResizeMode(AIndex, QHeaderViewResizeToContents)
1004
QtTreeWidget.Header.setResizeMode(AIndex, QHeaderViewInteractive);
1007
{------------------------------------------------------------------------------
1008
Method: TCDWSCustomListView.ColumnSetCaption
1011
------------------------------------------------------------------------------}
1012
class procedure TCDWSCustomListView.ColumnSetCaption(const ALV: TCustomListView;
1013
const AIndex: Integer; const AColumn: TListColumn; const ACaption: String);
1016
QtTreeWidget: TQtTreeWidget;
1017
TWI: QTreeWidgetItemH;
1019
if not WSCheckHandleAllocated(ALV, 'ColumnSetCaption') then
1022
// TODO: columns in vsIcon mode
1023
if IsIconView(ALV) then
1026
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1027
TWI := QtTreeWidget.headerItem;
1030
Str := GetUtf8String(ACaption);
1031
QTreeWidgetItem_setText(TWI, AIndex, @Str);
1035
{------------------------------------------------------------------------------
1036
Method: TCDWSCustomListView.ColumnSetImage
1039
------------------------------------------------------------------------------}
1040
class procedure TCDWSCustomListView.ColumnSetImage(const ALV: TCustomListView;
1041
const AIndex: Integer; const AColumn: TListColumn; const AImageIndex: Integer);
1043
QtTreeWidget: TQtTreeWidget;
1044
TWI: QTreeWidgetItemH;
1046
ImgList: TImageList;
1048
if not WSCheckHandleAllocated(ALV, 'ColumnSetImage') then
1051
// TODO: columns in vsIcon mode
1052
if IsIconView(ALV) then
1055
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1056
TWI := QtTreeWidget.headerItem;
1059
ImgList := TImageList.Create(nil);
1061
if (TListView(ALV).ViewStyle = vsIcon) and
1062
Assigned(TListView(ALV).LargeImages) then
1063
ImgList.Assign(TListView(ALV).LargeImages);
1065
if (TListView(ALV).ViewStyle in [vsSmallIcon, vsReport, vsList]) and
1066
Assigned(TListView(ALV).SmallImages) then
1067
ImgList.Assign(TListView(ALV).SmallImages);
1069
if (ImgList.Count > 0) and
1070
((AImageIndex >= 0) and (AImageIndex < ImgList.Count)) then
1072
Bmp := TBitmap.Create;
1074
ImgList.GetBitmap(AImageIndex, Bmp);
1075
QTreeWidgetItem_setIcon(TWI, AIndex, TQtImage(Bmp.Handle).AsIcon);
1086
{------------------------------------------------------------------------------
1087
Method: TCDWSCustomListView.ColumnSetMinWidth
1090
------------------------------------------------------------------------------}
1091
class procedure TCDWSCustomListView.ColumnSetMinWidth(const ALV: TCustomListView;
1092
const AIndex: Integer; const AColumn: TListColumn; const AMinWidth: integer);
1094
QtTreeWidget: TQtTreeWidget;
1096
if not WSCheckHandleAllocated(ALV, 'ColumnSetMinWidth') then
1099
// TODO: columns in vsIcon mode
1100
if IsIconView(ALV) then
1103
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1104
QtTreeWidget.MinColSize[AIndex] := AMinWidth;
1107
{------------------------------------------------------------------------------
1108
Method: TCDWSCustomListView.ColumnSetWidth
1111
------------------------------------------------------------------------------}
1112
class procedure TCDWSCustomListView.ColumnSetWidth(const ALV: TCustomListView;
1113
const AIndex: Integer; const AColumn: TListColumn; const AWidth: Integer);
1115
QtTreeWidget: TQtTreeWidget;
1117
if not WSCheckHandleAllocated(ALV, 'ColumnSetWidth') then
1120
// TODO: columns in vsIcon mode
1121
if IsIconView(ALV) then
1124
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1125
QtTreeWidget.ColWidth[AIndex] := AWidth;
1128
{------------------------------------------------------------------------------
1129
Method: TCDWSCustomListView.ColumnSetVisible
1132
------------------------------------------------------------------------------}
1133
class procedure TCDWSCustomListView.ColumnSetVisible(const ALV: TCustomListView;
1134
const AIndex: Integer; const AColumn: TListColumn; const AVisible: Boolean);
1136
QtTreeWidget: TQtTreeWidget;
1138
if not WSCheckHandleAllocated(ALV, 'ColumnSetVisible') then
1141
// TODO: columns in vsIcon mode
1142
if IsIconView(ALV) then
1145
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1146
QtTreeWidget.ColVisible[AIndex] := AVisible;
1149
{------------------------------------------------------------------------------
1150
Method: TCDWSCustomListView.ItemDelete
1153
------------------------------------------------------------------------------}
1154
class procedure TCDWSCustomListView.ItemDelete(const ALV: TCustomListView;
1155
const AIndex: Integer);
1157
QtTreeWidget: TQtTreeWidget;
1159
if not WSCheckHandleAllocated(ALV, 'ItemDelete') then
1161
if IsIconView(ALV) then
1162
TQtListWidget(ALV.Handle).removeItem(AIndex)
1165
TQtListWidget(ALV.Handle).BeginUpdate;
1167
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1168
QtTreeWidget.DeleteItem(AIndex);
1170
TQtListWidget(ALV.Handle).EndUpdate;
1175
class procedure TCDWSCustomListView.ItemExchange(const ALV: TCustomListView;
1176
AItem: TListItem; const AIndex1, AIndex2: Integer);
1178
QtTreeWidget: TQtTreeWidget;
1179
QtListWidget: TQtListWidget;
1181
if not WSCheckHandleAllocated(ALV, 'ItemExchange') then
1183
if IsIconView(ALV) then
1185
QtListWidget := TQtListWidget(ALV.Handle);
1186
QtListWidget.BeginUpdate;
1187
QtListWidget.ExchangeItems(AIndex1, AIndex2);
1188
QtListWidget.EndUpdate;
1191
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1192
QtTreeWidget.BeginUpdate;
1193
QtTreeWidget.ExchangeItems(AIndex1, AIndex2);
1194
QtTreeWidget.EndUpdate;
1198
class procedure TCDWSCustomListView.ItemMove(const ALV: TCustomListView;
1199
AItem: TListItem; const AFromIndex, AToIndex: Integer);
1201
QtTreeWidget: TQtTreeWidget;
1202
QtListWidget: TQtListWidget;
1204
if not WSCheckHandleAllocated(ALV, 'ItemMove') then
1206
if IsIconView(ALV) then
1208
QtListWidget := TQtListWidget(ALV.Handle);
1209
QtListWidget.BeginUpdate;
1210
QtListWidget.MoveItem(AFromIndex, AToIndex);
1211
QtListWidget.EndUpdate;
1214
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1215
QtTreeWidget.BeginUpdate;
1216
QtTreeWidget.MoveItem(AFromIndex, AToIndex);
1217
QtTreeWidget.EndUpdate;
1221
{------------------------------------------------------------------------------
1222
Method: TCDWSCustomListView.ItemGetChecked
1225
------------------------------------------------------------------------------}
1226
class function TCDWSCustomListView.ItemGetChecked(const ALV: TCustomListView;
1227
const AIndex: Integer; const AItem: TListItem): Boolean;
1229
QtTreeWidget: TQtTreeWidget;
1230
TWI: QTreeWidgetItemH;
1231
LWI: QListWidgetItemH;
1232
AState: QtCheckState;
1234
if not WSCheckHandleAllocated(ALV, 'ItemGetChecked') then
1237
Result := ALV.CheckBoxes;
1241
AState := QtUnChecked;
1243
if IsIconView(ALV) then
1245
LWI := TQtListWidget(ALV.Handle).getItem(AIndex);
1247
AState := QListWidgetItem_checkState(LWI);
1250
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1251
TWI := QtTreeWidget.topLevelItem(AIndex);
1253
AState := QTreeWidgetItem_checkState(TWI, 0);
1255
Result := AState = QtChecked;
1258
{------------------------------------------------------------------------------
1259
Method: TCDWSCustomListView.ItemGetPosition
1262
------------------------------------------------------------------------------}
1263
class function TCDWSCustomListView.ItemGetPosition(const ALV: TCustomListView;
1264
const AIndex: Integer): TPoint;
1266
QtListWidget: TQtListWidget;
1267
QtTreeWidget: TQtTreeWidget;
1268
TWI: QTreeWidgetItemH;
1271
if not WSCheckHandleAllocated(ALV, 'ItemGetPosition') then
1274
R := Rect(0, 0, 0, 0);
1275
if IsIconView(ALV) then
1277
QtListWidget := TQtListWidget(ALV.Handle);
1278
R := QtListWidget.getVisualItemRect(QtListWidget.getItem(AIndex));
1281
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1282
TWI := QtTreeWidget.topLevelItem(AIndex);
1283
R := QtTreeWidget.visualItemRect(TWI);
1289
{------------------------------------------------------------------------------
1290
Method: TCDWSCustomListView.ItemGetState
1293
------------------------------------------------------------------------------}
1294
class function TCDWSCustomListView.ItemGetState(const ALV: TCustomListView;
1295
const AIndex: Integer; const AItem: TListItem;
1296
const AState: TListItemState; out AIsSet: Boolean): Boolean;
1298
QtListWidget: TQtListWidget;
1299
LWI: QListWidgetItemH;
1300
QtTreeWidget: TQtTreeWidget;
1301
TWI: QTreeWidgetItemH;
1305
if not WSCheckHandleAllocated(ALV, 'ItemGetState') then
1309
if IsIconView(ALV) then
1311
QtListWidget := TQtListWidget(ALV.Handle);
1312
LWI := QtListWidget.getItem(AIndex);
1315
lisFocused: AIsSet := LWI = QtListWidget.currentItem;
1316
lisSelected: AIsSet := QtListWidget.getItemSelected(LWI);
1320
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1321
TWI := QtTreeWidget.topLevelItem(AIndex);
1325
lisFocused: AIsSet := TWI = QtTreeWidget.currentItem;
1328
Arr := QtTreeWidget.selectedItems;
1329
for i := 0 to High(Arr) do
1331
TWI := QTreeWidgetItemH(Arr[i]);
1332
if AIndex = QtTreeWidget.getRow(TWI) then
1346
class procedure TCDWSCustomListView.ItemSetImage(const ALV: TCustomListView;
1347
const AIndex: Integer; const AItem: TListItem; const ASubIndex,
1348
AImageIndex: Integer);
1350
QtListWidget: TQtListWidget;
1351
LWI: QListWidgetItemH;
1352
QtTreeWidget: TQtTreeWidget;
1353
TWI: QTreeWidgetItemH;
1355
ImgList: TImageList;
1357
if not WSCheckHandleAllocated(ALV, 'ItemSetImage') then
1360
if not Assigned(TListView(ALV).LargeImages) and not
1361
Assigned(TListView(ALV).SmallImages) then
1365
if IsIconView(ALV) then
1367
QtListWidget := TQtListWidget(ALV.Handle);
1368
LWI := QtListWidget.getItem(AIndex);
1371
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1372
TWI := QtTreeWidget.topLevelItem(AIndex);
1374
if (TWI <> nil) or (LWI <> nil) then
1376
ImgList := TImageList.Create(nil);
1378
if (TListView(ALV).ViewStyle = vsIcon) and
1379
Assigned(TListView(ALV).LargeImages) then
1380
ImgList.Assign(TListView(ALV).LargeImages);
1382
if (TListView(ALV).ViewStyle in [vsSmallIcon, vsReport, vsList]) and
1383
Assigned(TListView(ALV).SmallImages) then
1384
ImgList.Assign(TListView(ALV).SmallImages);
1386
if (ImgList.Count > 0) and
1387
((AImageIndex >= 0) and (AImageIndex < ImgList.Count)) then
1389
Bmp := TBitmap.Create;
1391
ImgList.GetBitmap(AImageIndex, Bmp);
1393
QListWidgetItem_setIcon(LWI, TQtImage(Bmp.Handle).AsIcon)
1395
QTreeWidgetItem_setIcon(TWI, ASubIndex, TQtImage(Bmp.Handle).AsIcon);
1406
{------------------------------------------------------------------------------
1407
Method: TCDWSCustomListView.ItemSetChecked
1410
------------------------------------------------------------------------------}
1411
class procedure TCDWSCustomListView.ItemSetChecked(const ALV: TCustomListView;
1412
const AIndex: Integer; const AItem: TListItem; const AChecked: Boolean);
1414
QtListWidget: TQtListWidget;
1415
QtTreeWidget: TQtTreeWidget;
1417
if not WSCheckHandleAllocated(ALV, 'ItemSetChecked') then
1420
if not ALV.CheckBoxes then
1423
if IsIconView(ALV) then
1425
QtListWidget := TQtListWidget(ALV.Handle);
1426
QtListWidget.ItemChecked[AIndex] := AChecked;
1429
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1430
QtTreeWidget.ItemChecked[AIndex] := AChecked;
1434
{------------------------------------------------------------------------------
1435
Method: TCDWSCustomListView.ItemSetState
1438
------------------------------------------------------------------------------}
1439
class procedure TCDWSCustomListView.ItemSetState(const ALV: TCustomListView;
1440
const AIndex: Integer; const AItem: TListItem;
1441
const AState: TListItemState; const AIsSet: Boolean);
1443
QtListWidget: TQtListWidget;
1444
LWI: QListWidgetItemH;
1445
QtTreeWidget: TQtTreeWidget;
1446
TWI: QTreeWidgetItemH;
1448
if not WSCheckHandleAllocated(ALV, 'ItemSetState') then
1450
if IsIconView(ALV) then
1452
QtListWidget := TQtListWidget(ALV.Handle);
1453
LWI := QtListWidget.getItem(AIndex);
1454
QtListWidget.BeginUpdate;
1456
lisFocused: QtListWidget.setCurrentItem(LWI);
1459
if AIsSet and not ALV.MultiSelect then
1460
QtListWidget.setCurrentItem(LWI);
1461
QtListWidget.setItemSelected(LWI, AIsSet);
1464
QtListWidget.EndUpdate;
1467
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1468
TWI := QtTreeWidget.topLevelItem(AIndex);
1469
QtTreeWidget.BeginUpdate;
1471
lisFocused: QtTreeWidget.setCurrentItem(TWI);
1474
if ALV.RowSelect and AIsSet and not ALV.MultiSelect then
1475
QtTreeWidget.setCurrentItem(TWI);
1476
QtTreeWidget.setItemSelected(TWI, AIsSet);
1479
QtTreeWidget.EndUpdate;
1483
{------------------------------------------------------------------------------
1484
Method: TCDWSCustomListView.ItemInsert
1487
------------------------------------------------------------------------------}
1488
class procedure TCDWSCustomListView.ItemInsert(const ALV: TCustomListView;
1489
const AIndex: Integer; const AItem: TListItem);
1491
QtListWidget: TQtListWidget;
1492
QtTreeWidget: TQtTreeWidget;
1493
TWI: QTreeWidgetItemH;
1496
AAlignment: QtAlignment;
1498
if not WSCheckHandleAllocated(ALV, 'ItemInsert') then
1501
if IsIconView(ALV) then
1503
QtListWidget := TQtListWidget(ALV.Handle);
1504
QtListWidget.Checkable := ALV.Checkboxes;
1505
QtListWidget.insertItem(AIndex, AItem.Caption);
1508
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1509
TWI := QTreeWidgetItem_create(Integer(0));
1510
if AItem.Caption <> '' then
1511
Str := GetUtf8String(AItem.Caption)
1515
if ALV.CheckBoxes then
1517
if AItem.Checked then
1518
QTreeWidgetItem_setCheckState(TWI, 0, QtChecked)
1520
QTreeWidgetItem_setCheckState(TWI, 0, QtUnchecked);
1523
AAlignment := QtAlignLeft;
1524
if TListView(ALV).Columns.Count > 0 then
1525
AAlignment := AlignmentToQtAlignmentMap[ALV.Column[0].Alignment];
1528
QtTreeWidget.setItemText(TWI, 0, Str, AAlignment);
1530
QtTreeWidget.setItemData(TWI, 0, AItem);
1532
for i := 0 to AItem.SubItems.Count - 1 do
1534
AAlignment := QtAlignLeft;
1535
if (TListView(ALV).Columns.Count > 0) and (i + 1 < TListView(ALV).Columns.Count) then
1536
AAlignment := AlignmentToQtAlignmentMap[ALV.Column[i + 1].Alignment];
1537
if AItem.Subitems.Strings[i] <> '' then
1539
Str := GetUtf8String(AItem.Subitems.Strings[i]);
1540
QtTreeWidget.setItemText(TWI, i + 1, Str, AAlignment);
1541
QtTreeWidget.setItemData(TWI, i + 1, AItem);
1544
QtTreeWidget.insertTopLevelItem(AIndex, TWI);
1548
{------------------------------------------------------------------------------
1549
Method: TCDWSCustomListView.ItemSetText
1552
------------------------------------------------------------------------------}
1553
class procedure TCDWSCustomListView.ItemSetText(const ALV: TCustomListView;
1554
const AIndex: Integer; const AItem: TListItem; const ASubIndex: Integer;
1555
const AText: String);
1557
QtListWidget: TQtListWidget;
1558
QtTreeWidget: TQtTreeWidget;
1559
TWI: QTreeWidgetItemH;
1561
AAlignment: QtAlignment;
1563
if not WSCheckHandleAllocated(ALV, 'ItemSetText') then
1566
if IsIconView(ALV) then
1568
QtListWidget := TQtListWidget(ALV.Handle);
1569
AAlignment := QtAlignLeft;
1570
if (TListView(ALV).Columns.Count > 0) and (ASubIndex < TListView(ALV).Columns.Count) then
1571
AAlignment := AlignmentToQtAlignmentMap[ALV.Column[ASubIndex].Alignment];
1572
QtListWidget.setItemText(AIndex, AText, AAlignment);
1575
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1576
Str := GetUtf8String(AText);
1577
TWI := QtTreeWidget.topLevelItem(AIndex);
1580
AAlignment := QtAlignLeft;
1581
if (TListView(ALV).Columns.Count > 0) and (ASubIndex < TListView(ALV).Columns.Count) then
1582
AAlignment := AlignmentToQtAlignmentMap[ALV.Column[ASubIndex].Alignment];
1583
QtTreeWidget.setItemText(TWI, ASubIndex, Str, AAlignment);
1588
{------------------------------------------------------------------------------
1589
Method: TCDWSCustomListView.ItemShow
1592
------------------------------------------------------------------------------}
1593
class procedure TCDWSCustomListView.ItemShow(const ALV: TCustomListView;
1594
const AIndex: Integer; const AItem: TListItem; const PartialOK: Boolean);
1596
QtListWidget: TQtListWidget;
1597
LWI: QListWidgetItemH;
1598
QtTreeWidget: TQtTreeWidget;
1599
TWI: QTreeWidgetItemH;
1601
if not WSCheckHandleAllocated(ALV, 'ItemShow') then
1603
if IsIconView(ALV) then
1605
QtListWidget := TQtListWidget(ALV.Handle);
1606
LWI := QtListWidget.getItem(AIndex);
1607
QtListWidget.setItemVisible(LWI, True);
1610
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1611
TWI := QtTreeWidget.topLevelItem(AIndex);
1612
QtTreeWidget.setItemVisible(TWI, True);
1617
{------------------------------------------------------------------------------
1618
Method: TCDWSCustomListView.ItemDisplayRect
1621
------------------------------------------------------------------------------}
1622
class function TCDWSCustomListView.ItemDisplayRect(const ALV: TCustomListView;
1623
const AIndex, ASubItem: Integer; ACode: TDisplayCode): TRect;
1625
QtListWidget: TQtListWidget;
1626
LWI: QListWidgetItemH;
1627
QtTreeWidget: TQtTreeWidget;
1628
TWI: QTreeWidgetItemH;
1630
if not WSCheckHandleAllocated(ALV, 'ItemDisplayRect') then
1633
if IsIconView(ALV) then
1635
QtListWidget := TQtListWidget(ALV.Handle);
1636
LWI := QtListWidget.getItem(AIndex);
1637
Result := QtListWidget.getVisualItemRect(LWI);
1640
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1641
TWI := QtTreeWidget.topLevelItem(AIndex);
1642
if QTreeWidgetItem_childCount(TWI) > 0 then
1643
Result := QtTreeWidget.visualItemRect(QTreeWidgetItem_child(TWI, ASubItem))
1645
Result := QtTreeWidget.visualItemRect(TWI);
1649
class procedure TCDWSCustomListView.BeginUpdate(const ALV: TCustomListView);
1651
QtWidget: TQtWidget;
1653
if not WSCheckHandleAllocated(ALV, 'BeginUpdate') then
1655
QtWidget := TQtWidget(ALV.Handle);
1656
if not QtWidget.InUpdate then
1657
QtWidget.setUpdatesEnabled(False);
1658
QtWidget.BeginUpdate;
1661
class procedure TCDWSCustomListView.EndUpdate(const ALV: TCustomListView);
1663
QtWidget: TQtWidget;
1665
if not WSCheckHandleAllocated(ALV, 'EndUpdate') then
1667
QtWidget := TQtWidget(ALV.Handle);
1669
if not QtWidget.InUpdate then
1670
QtWidget.setUpdatesEnabled(True);
1673
{------------------------------------------------------------------------------
1674
Method: TCDWSCustomListView.GetFocused
1677
------------------------------------------------------------------------------}
1678
class function TCDWSCustomListView.GetFocused(const ALV: TCustomListView): Integer;
1680
QtListWidget: TQtListWidget;
1681
LWI: QListWidgetItemH;
1682
QtTreeWidget: TQtTreeWidget;
1683
TWI: QTreeWidgetItemH;
1686
if not WSCheckHandleAllocated(ALV, 'GetFocused') then
1689
if IsIconView(ALV) then
1691
QtListWidget := TQtListWidget(ALV.Handle);
1692
LWI := QtListWidget.currentItem;
1693
if QtListWidget.getItemSelected(LWI) then
1694
Result := QtListWidget.getRow(LWI)
1699
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1700
TWI := QtTreeWidget.currentItem;
1701
i := QtTreeWidget.getRow(TWI);
1702
if QTreeWidgetItem_isSelected(TWI) then
1709
{------------------------------------------------------------------------------
1710
Method: TCDWSCustomListView.GetItemAt
1713
------------------------------------------------------------------------------}
1714
class function TCDWSCustomListView.GetItemAt(const ALV: TCustomListView; x,y: integer): Integer;
1716
QtListWidget: TQtListWidget;
1717
LWI: QListWidgetItemH;
1718
QtTreeWidget: TQtTreeWidget;
1719
TWI: QTreeWidgetItemH;
1720
AOrientation: QtOrientation;
1721
HeaderOffset: Integer;
1723
if not WSCheckHandleAllocated(ALV, 'GetItemAt') then
1725
if IsIconView(ALV) then
1727
QtListWidget := TQtListWidget(ALV.Handle);
1728
LWI := QtListWidget.itemAt(x, y);
1729
Result := QtListWidget.getRow(LWI);
1732
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1733
HeaderOffset := QtTreeWidget.getHeaderHeight(AOrientation);
1735
HeaderOffset := y - HeaderOffset;
1736
if HeaderOffset < 0 then
1738
TWI := QtTreeWidget.itemAt(x, HeaderOffset);
1739
Result := QtTreeWidget.getRow(TWI);
1743
{------------------------------------------------------------------------------
1744
Method: TCDWSCustomListView.GetSelCount
1747
------------------------------------------------------------------------------}
1748
class function TCDWSCustomListView.GetSelCount(const ALV: TCustomListView): Integer;
1750
if not WSCheckHandleAllocated(ALV, 'GetSelCount') then
1752
if IsIconView(ALV) then
1753
Result := TQtListWidget(ALV.Handle).getSelCount
1755
Result := TQtTreeWidget(ALV.Handle).selCount;
1758
{------------------------------------------------------------------------------
1759
Method: TCDWSCustomListView.GetSelection
1762
------------------------------------------------------------------------------}
1763
class function TCDWSCustomListView.GetSelection(const ALV: TCustomListView): Integer;
1765
QtListWidget: TQtListWidget;
1766
QtTreeWidget: TQtTreeWidget;
1767
FPInts: TPtrIntArray;
1769
if not WSCheckHandleAllocated(ALV, 'GetSelection') then
1771
if IsIconView(ALV) then
1773
QtListWidget := TQtListWidget(ALV.Handle);
1774
FPInts := QtListWidget.selectedItems;
1777
{implement selection event so we can return Alv.Selected.Index}
1778
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1779
FPInts := QtTreeWidget.selectedItems;
1781
if Length(FPInts)>0 then
1787
class function TCDWSCustomListView.GetTopItem(const ALV: TCustomListView
1790
QtItemView: TQtAbstractItemView;
1793
if not WSCheckHandleAllocated(ALV, 'GetTopItem') then
1795
// according to embarcadero docs this should return
1796
// only for vsList and vsReport
1797
if not (TListView(ALV).ViewStyle in [vsList, vsReport]) then
1799
QtItemView := TQtAbstractItemView(ALV.Handle);
1800
Result := QtItemView.getTopItem;
1804
{------------------------------------------------------------------------------
1805
Method: TCDWSCustomListView.InternalUpdateItems
1806
Params: TCustomListView
1808
Sync TCustomListView with QTreeWidget items.
1809
------------------------------------------------------------------------------}
1810
class procedure TCDWSCustomListView.InternalUpdateItems(
1811
const AList: TCustomListView);
1813
QtTreeWidget: TQtTreeWidget;
1818
Item: QTreeWidgetItemH;
1819
AAlignment: QtAlignment;
1820
ImgList: TImageList;
1823
QtTreeWidget := TQtTreeWidget(AList.Handle);
1824
ImgList := TImageList.Create(nil);
1826
if (TListView(AList).ViewStyle = vsIcon) and
1827
Assigned(TListView(AList).LargeImages) then
1828
ImgList.Assign(TListView(AList).LargeImages);
1830
if (TListView(AList).ViewStyle in [vsSmallIcon, vsReport, vsList]) and
1831
Assigned(TListView(AList).SmallImages) then
1832
ImgList.Assign(TListView(AList).SmallImages);
1836
for i := 0 to AList.Items.Count - 1 do
1838
AItem := AList.Items[i];
1839
WStr := GetUTF8String(AItem.Caption);
1840
Item := QtTreeWidget.topLevelItem(i);
1841
QtTreeWidget.setItemText(Item, 0, WStr, AlignmentToQtAlignmentMap[AList.Column[0].Alignment]);
1842
QtTreeWidget.setItemData(Item, 0, AItem);
1843
if AList.Checkboxes then
1845
if AItem.Checked then
1846
QTreeWidgetItem_setCheckState(Item, 0, QtChecked)
1848
QTreeWidgetItem_setCheckState(Item, 0, QtUnChecked);
1851
if (ImgList.Count > 0) and
1852
((AItem.ImageIndex >= 0) and (AItem.ImageIndex < ImgList.Count)) then
1854
Bmp := TBitmap.Create;
1856
ImgList.GetBitmap(AItem.ImageIndex, Bmp);
1857
QTreeWidgetItem_setIcon(Item, 0, TQtImage(Bmp.Handle).AsIcon);
1864
for j := 0 to AItem.SubItems.Count - 1 do
1866
AAlignment := QtAlignLeft;
1867
if (TListView(AList).Columns.Count > 0) and (j + 1 < TListView(AList).Columns.Count) then
1868
AAlignment := AlignmentToQtAlignmentMap[TListView(AList).Column[j + 1].Alignment];
1869
WStr := GetUtf8String(AItem.Subitems.Strings[j]);
1870
QtTreeWidget.setItemText(Item, j + 1, WStr, AAlignment);
1871
QtTreeWidget.setItemData(Item, j + 1, AItem);
1881
{------------------------------------------------------------------------------
1882
Method: TCDWSCustomListView.SetSort
1885
------------------------------------------------------------------------------}
1886
class procedure TCDWSCustomListView.SetSort(const ALV: TCustomListView;
1887
const AType: TSortType; const AColumn: Integer; const ASortDirection: TSortDirection);
1889
QtTreeWidget: TQtTreeWidget;
1890
{$IFDEF TEST_QT_SORTING}
1891
StdModel: QStandardItemModelH;
1896
if not WSCheckHandleAllocated(ALV, 'SetSort') then
1899
if (csDesigning in ALV.ComponentState) then
1902
if IsIconView(ALV) then
1905
QtTreeWidget := TQtTreeWidget(ALV.Handle);
1907
if AType = stNone then
1908
QtTreeWidget.Header.SetSortIndicatorVisible(False)
1911
{$IFDEF TEST_QT_SORTING}
1912
// QTreeWidget crashes sometimes on changing sort role (possible qt bug).
1913
// need deeper investigation.
1914
if QtTreeWidget.ItemCount > 0 then
1916
StdModel := QStandardItemModelH(QtTreeWidget.getModel);
1917
if QStandardItemModel_sortRole(StdModel) <> Ord(QtUserRole) then
1918
QStandardItemModel_setSortRole(StdModel, Ord(QtUserRole));
1921
with QtTreeWidget do
1923
CanSort := ItemCount > 0;
1924
Header.SetSortIndicatorVisible(True);
1925
if (AColumn >= 0) and (AColumn < ColCount) and
1928
Header.SetSortIndicator(AColumn, QtSortOrder(Ord(ASortDirection)));
1929
InternalUpdateItems(ALV);
1937
{------------------------------------------------------------------------------
1938
Method: TCDWSCustomListView.GetBoundingRect
1941
------------------------------------------------------------------------------}
1942
class function TCDWSCustomListView.GetBoundingRect(const ALV: TCustomListView): TRect;
1944
if not WSCheckHandleAllocated(ALV, 'GetBoundingRect') then
1946
Result := TQtWidget(ALV.Handle).getFrameGeometry;
1949
class function TCDWSCustomListView.GetViewOrigin(const ALV: TCustomListView
1952
QtItemView: TQtAbstractItemView;
1954
Result := Point(0, 0);
1955
if not WSCheckHandleAllocated(ALV, 'GetViewOrigin') then
1957
QtItemView := TQtAbstractItemView(ALV.Handle);
1958
Result := QtItemView.getViewOrigin;
1961
class function TCDWSCustomListView.GetVisibleRowCount(const ALV: TCustomListView
1965
if not WSCheckHandleAllocated(ALV, 'GetVisibleRowCount') then
1967
Result := TQtAbstractItemView(ALV.Handle).getVisibleRowCount;
1970
class procedure TCDWSCustomListView.SetAllocBy(const ALV: TCustomListView;
1971
const AValue: Integer);
1973
QtList: TQtListWidget;
1976
if not WSCheckHandleAllocated(ALV, 'SetAllocBy') then
1978
if TListView(ALV).ViewStyle <> vsReport then
1981
if NewValue < 0 then
1983
QtList := TQtListWidget(ALV.Handle);
1984
if NewValue > 0 then
1986
QtList.setLayoutMode(QListViewBatched);
1987
QtList.BatchSize := NewValue;
1989
QtList.setLayoutMode(QListViewSinglePass);
1993
class procedure TCDWSCustomListView.SetIconArrangement(
1994
const ALV: TCustomListView; const AValue: TIconArrangement);
1996
QtList: TQtListWidget;
1998
if not WSCheckHandleAllocated(ALV, 'SetIconArrangement') then
2000
if IsIconView(ALV) then
2002
// hm...seem that QListView have bug, doesn't want to rearrange items
2003
// in any case when iaTop and AutoArrange=True (then it looks same as
2004
// iaLeft without arrange, so we must set GridSize in that case
2005
// update: bug is fixed in Qt-4.6.2
2006
{$note set workaround for QListView bug via QtList.GridSize}
2007
QtList := TQtListWidget(ALV.Handle);
2008
if QtList.ViewStyle <> Ord(vsList) then
2009
QtList.setViewFlow(IconArngToQListFlow[AValue]);
2013
class procedure TCDWSCustomListView.SetItemsCount(const ALV: TCustomListView;
2014
const Avalue: Integer);
2016
QtListWidget: TQtListWidget;
2017
QtTreeWidget: TQtTreeWidget;
2019
if not WSCheckHandleAllocated(ALV, 'SetItemsCount') then
2021
if IsIconView(ALV) then
2023
QtListWidget := TQtListWidget(ALV.Handle);
2024
QtListWidget.ItemCount := AValue;
2027
QtTreeWidget := TQtTreeWidget(ALV.Handle);
2028
QtTreeWidget.ItemCount := AValue;
2032
class procedure TCDWSCustomListView.SetOwnerData(const ALV: TCustomListView;
2033
const AValue: Boolean);
2035
QtItemView: TQtAbstractItemView;
2037
if not WSCheckHandleAllocated(ALV, 'SetOwnerData') then
2039
QtItemView := TQtAbstractItemView(ALV.Handle);
2040
QtItemView.OwnerData := AValue;
2043
class procedure TCDWSCustomListView.SetProperty(const ALV: TCustomListView;
2044
const AProp: TListViewProperty; const AIsSet: Boolean);
2046
BoolToSelectionMode: array[Boolean] of QAbstractItemViewSelectionMode =
2048
QAbstractItemViewSingleSelection,
2049
QAbstractItemViewExtendedSelection
2051
BoolToSelectionBehavior: array[Boolean] of QAbstractItemViewSelectionBehavior =
2053
QAbstractItemViewSelectItems,
2054
QAbstractItemViewSelectRows
2056
BoolToEditTriggers: array[Boolean] of QAbstractItemViewEditTriggers =
2058
QAbstractItemViewSelectedClicked,
2059
QAbstractItemViewNoEditTriggers
2062
SavedCheckable: Boolean;
2063
QtItemView: TQtAbstractItemView;
2065
if not WSCheckHandleAllocated(ALV, 'SetProperty')
2067
QtItemView := TQtAbstractItemView(ALV.Handle);
2071
if IsIconView(ALV) and
2072
(TQtListWidget(ALV.Handle).ViewStyle <> Ord(vsList)) then
2073
TQtListWidget(ALV.Handle).setWrapping(AIsSet);
2077
SavedCheckable := QtItemView.Checkable;
2078
QtItemView.Checkable := AIsSet;
2079
if SavedCheckable <> AIsSet then
2084
if (QtItemView.getSelectionMode <> QAbstractItemViewNoSelection) then
2085
QtItemView.setSelectionMode(BoolToSelectionMode[AIsSet]);
2087
lvpShowColumnHeaders:
2089
if not IsIconView(ALV) then
2090
with TQtTreeWidget(ALV.Handle) do
2091
setHeaderVisible(AIsSet and (TListView(ALV).ViewStyle = vsReport)
2092
and (TListView(ALV).Columns.Count > 0) );
2094
lvpReadOnly: QtItemView.setEditTriggers(BoolToEditTriggers[AIsSet]);
2097
if not IsIconView(ALV) then
2098
TQtTreeWidget(ALV.Handle).setAllColumnsShowFocus(AIsSet);
2099
QtItemView.setSelectionBehavior(BoolToSelectionBehavior[AIsSet]);
2101
lvpWrapText: QtItemView.setWordWrap(AIsSet);
2102
lvpHideSelection: QtItemView.HideSelection := AIsSet;
2106
class procedure TCDWSCustomListView.SetProperties(const ALV: TCustomListView;
2107
const AProps: TListViewProperties);
2109
i: TListViewProperty;
2111
if not WSCheckHandleAllocated(ALV, 'SetProperties')
2113
for i := Low(TListViewProperty) to High(TListViewProperty) do
2114
SetProperty(ALV, i, i in AProps);
2117
class procedure TCDWSCustomListView.SetScrollBars(const ALV: TCustomListView;
2118
const AValue: TScrollStyle);
2120
QtItemView: TQtAbstractItemView;
2122
if not WSCheckHandleAllocated(ALV, 'SetScrollBars') then
2124
QtItemView := TQtAbstractItemView(ALV.Handle);
2125
{always reset before applying new TScrollStyle}
2126
QtItemView.setScrollStyle(ssNone);
2127
if AValue <> ssNone then
2128
QtItemView.setScrollStyle(AValue);
2131
class procedure TCDWSCustomListView.SetViewStyle(const ALV: TCustomListView;
2132
const AValue: TViewStyle);
2134
QtItemView: TQtAbstractItemView;
2135
QtListWidget: TQtListWidget;
2136
LWI: QListWidgetItemH;
2137
QtTreeWidget: TQtTreeWidget;
2138
ItemViewWidget: QAbstractItemViewH;
2139
Item: QTreeWidgetItemH;
2144
if not WSCheckHandleAllocated(ALV, 'SetViewStyle') then
2146
QtItemView := TQtAbstractItemView(ALV.Handle);
2148
if (QtItemView.ViewStyle <> Ord(AValue)) then
2154
if IsIconView(ALV) then
2156
QtListWidget := TQtListWidget(ALV.Handle);
2157
ItemViewWidget := QListWidgetH(QtListWidget.Widget);
2160
QtTreeWidget := TQtTreeWidget(ALV.Handle);
2161
ItemViewWidget := QTreeWidgetH(QtTreeWidget.Widget);
2162
with QtTreeWidget do
2163
setHeaderVisible(TListView(ALV).ShowColumnHeaders and (AValue = vsReport)
2164
and (TListView(ALV).Columns.Count > 0) );
2169
x := QStyle_pixelMetric(QApplication_style(), QStylePM_IconViewIconSize,
2170
nil, ItemViewWidget);
2173
if Assigned(TListView(ALV).LargeImages) then
2175
Size.cy := TListView(ALV).LargeImages.Height;
2176
Size.cx := TListView(ALV).LargeImages.Width;
2181
x := QStyle_pixelMetric(QApplication_style(), QStylePM_ListViewIconSize,
2182
nil, ItemViewWidget);
2185
if Assigned(TListView(ALV).SmallImages) then
2187
Size.cy := TListView(ALV).SmallImages.Height;
2188
Size.cx := TListView(ALV).SmallImages.Width;
2193
x := QStyle_pixelMetric(QApplication_style(), QStylePM_ListViewIconSize,
2194
nil, ItemViewWidget);
2200
TQtAbstractItemView(ALV.Handle).IconSize := Size;
2202
if IsIconView(ALV) then
2204
LWI := QtListWidget.getItem(0);
2208
QListWidgetItem_sizeHint(LWI, @Size);
2210
QListWidgetItem_setSizeHint(LWI, @Size);
2214
Item := QtTreeWidget.topLevelItem(0);
2218
QTreeWidgetItem_sizeHint(Item, @Size, 0);
2220
QTreeWidgetItem_setSizeHint(Item, 0, @Size);
2222
for j := 0 to QtTreeWidget.ColCount - 1 do
2224
Item := QtTreeWidget.itemAt(j, 0);
2225
QTreeWidgetItem_setSizeHint(Item, j, @Size);
2228
QtTreeWidget.UniformRowHeights := True;