@@ -22,6 +22,8 @@ interface
22
22
FMX.Types; // for RegisterFmxClasses
23
23
24
24
const
25
+ { $region 'Defaults'}
26
+
25
27
DEFAULT_SHOW_ONLY_VISIBLE = true;
26
28
DEFAULT_SHOW_ONLY_NAMED = true;
27
29
DEFAULT_SHOW_NAMES = false;
@@ -32,6 +34,8 @@ interface
32
34
DEFAULT_DRAGDROP_REPARENT = false; // acting as structure viewer, not editor by default
33
35
DEFAULT_DRAGDROP_SELECTTARGET = true; // on drop, target is selected
34
36
37
+ { $endregion}
38
+
35
39
type
36
40
// TClassList = TList<TClass>; //using old-style (non Generic) "TClassList" from System.Contnrs instead
37
41
@@ -80,6 +84,9 @@ TStructureView = class(TFrame)
80
84
{ DragDropXX}
81
85
procedure SetDragDropReorder (const Value : Boolean); virtual ;
82
86
procedure SetDragDropReparent (const Value : Boolean); virtual ;
87
+ { SelectedItem}
88
+ function GetSelectedObject : TObject; virtual ;
89
+ procedure SetSelectedObject (const Value : TObject); virtual ;
83
90
84
91
public
85
92
constructor Create(AOwner: TComponent); override;
@@ -98,6 +105,7 @@ TStructureView = class(TFrame)
98
105
property DragDropReorder: Boolean read FDragDropReorder write SetDragDropReorder default DEFAULT_DRAGDROP_REORDER;
99
106
property DragDropReparent: Boolean read FDragDropReparent write SetDragDropReparent default DEFAULT_DRAGDROP_REPARENT;
100
107
property DragDropSelectTarget: Boolean read FDragDropSelectTarget write FDragDropSelectTarget default DEFAULT_DRAGDROP_SELECTTARGET;
108
+ property SelectedObject: TObject read GetSelectedObject write SetSelectedObject; // default nil
101
109
// Events//
102
110
property OnSelection: TSelectionEvent read FOnSelection write FOnSelection;
103
111
property OnRestructuring: TRestructuringEvent read FOnRestructuring write FOnRestructuring;
@@ -113,7 +121,8 @@ implementation
113
121
System.Rtti, // for TValue
114
122
FMX.Dialogs, // for ShowMessage
115
123
Zoomicon.Helpers.RTL.ClassListHelpers, // for TClassList.FindClassOf
116
- Zoomicon.Helpers.FMX.ImgList.ImageListHelpers; // for TImageListAddBitmapHelper
124
+ Zoomicon.Helpers.FMX.ImgList.ImageListHelpers, // for TImageListAddBitmapHelper
125
+ Zoomicon.Helpers.FMX.TreeView.TreeViewHelpers; // for TTreeViewItemSearchHelper
117
126
118
127
{ $R *.fmx}
119
128
@@ -151,68 +160,6 @@ destructor TStructureView.Destroy;
151
160
152
161
{ $region 'Properties' ---------------------------------------------------}
153
162
154
- { $region 'DragDropXX'}
155
-
156
- procedure TStructureView.SetDragDropReorder (const Value : Boolean);
157
- begin
158
- FDragDropReorder := Value ;
159
- TreeView.AllowDrag := FDragDropReorder or FDragDropReparent;
160
- end ;
161
-
162
- procedure TStructureView.SetDragDropReparent (const Value : Boolean);
163
- begin
164
- FDragDropReparent := Value ;
165
- TreeView.AllowDrag := FDragDropReorder or FDragDropReparent;
166
- end ;
167
-
168
- { $endregion}
169
-
170
- { $region 'ShowXX'}
171
-
172
- procedure TStructureView.SetShowOnlyClasses (const Value : TClassList);
173
- begin
174
- FShowOnlyClasses := Value ;
175
- LoadTreeView;
176
- end ;
177
-
178
- procedure TStructureView.SetShowOnlyVisible (const Value : Boolean);
179
- begin
180
- FShowOnlyVisible := Value ;
181
- LoadTreeView;
182
- end ;
183
-
184
- procedure TStructureView.SetShowOnlyNamed (const Value : Boolean);
185
- begin
186
- FShowOnlyNamed := Value ;
187
- LoadTreeView;
188
- end ;
189
-
190
- procedure TStructureView.SetShowNames (const Value : Boolean);
191
- begin
192
- FShowNames := Value ;
193
- LoadTreeView;
194
- end ;
195
-
196
- procedure TStructureView.SetShowTypes (const Value : Boolean);
197
- begin
198
- FShowTypes := Value ;
199
- LoadTreeView;
200
- end ;
201
-
202
- procedure TStructureView.SetShowHintNames (const Value : Boolean);
203
- begin
204
- FShowHintNames := Value ;
205
- LoadTreeView;
206
- end ;
207
-
208
- procedure TStructureView.SetShowHintTypes (const Value : Boolean);
209
- begin
210
- FShowHintTypes := Value ;
211
- LoadTreeView;
212
- end ;
213
-
214
- { $endregion}
215
-
216
163
{ $region 'GUIRoot'}
217
164
218
165
procedure TStructureView.SetGUIRoot (const Value : TControl);
@@ -283,14 +230,101 @@ procedure TStructureView.LoadTreeView;
283
230
284
231
{ $endregion}
285
232
233
+ { $region 'ShowXX'}
234
+
235
+ procedure TStructureView.SetShowOnlyClasses (const Value : TClassList);
236
+ begin
237
+ FShowOnlyClasses := Value ;
238
+ LoadTreeView;
239
+ end ;
240
+
241
+ procedure TStructureView.SetShowOnlyVisible (const Value : Boolean);
242
+ begin
243
+ FShowOnlyVisible := Value ;
244
+ LoadTreeView;
245
+ end ;
246
+
247
+ procedure TStructureView.SetShowOnlyNamed (const Value : Boolean);
248
+ begin
249
+ FShowOnlyNamed := Value ;
250
+ LoadTreeView;
251
+ end ;
252
+
253
+ procedure TStructureView.SetShowNames (const Value : Boolean);
254
+ begin
255
+ FShowNames := Value ;
256
+ LoadTreeView;
257
+ end ;
258
+
259
+ procedure TStructureView.SetShowTypes (const Value : Boolean);
260
+ begin
261
+ FShowTypes := Value ;
262
+ LoadTreeView;
263
+ end ;
264
+
265
+ procedure TStructureView.SetShowHintNames (const Value : Boolean);
266
+ begin
267
+ FShowHintNames := Value ;
268
+ LoadTreeView;
269
+ end ;
270
+
271
+ procedure TStructureView.SetShowHintTypes (const Value : Boolean);
272
+ begin
273
+ FShowHintTypes := Value ;
274
+ LoadTreeView;
275
+ end ;
276
+
277
+ { $endregion}
278
+
279
+ { $region 'DragDropXX'}
280
+
281
+ procedure TStructureView.SetDragDropReorder (const Value : Boolean);
282
+ begin
283
+ FDragDropReorder := Value ;
284
+ TreeView.AllowDrag := FDragDropReorder or FDragDropReparent;
285
+ end ;
286
+
287
+ procedure TStructureView.SetDragDropReparent (const Value : Boolean);
288
+ begin
289
+ FDragDropReparent := Value ;
290
+ TreeView.AllowDrag := FDragDropReorder or FDragDropReparent;
291
+ end ;
292
+
293
+ { $endregion}
294
+
295
+ { $region 'SelectedObject'}
296
+
297
+ function TStructureView.GetSelectedObject : TObject;
298
+ begin
299
+ var selectedItem := TreeView.Selected;
300
+ if Assigned(selectedItem) then
301
+ result := selectedItem.TagObject
302
+ else
303
+ result := nil ;
304
+ end ;
305
+
306
+ procedure TStructureView.SetSelectedObject (const Value : TObject);
307
+ begin
308
+ if Assigned(Value ) then
309
+ TreeView.Selected := TreeView.FindObject(Value )
310
+ else
311
+ TreeView.Selected := nil ; // clear selection (instead of searching for "TagObject = nil" at the tree items
312
+ end ;
313
+
314
+ { $endregion}
315
+
286
316
{ $endregion .............................................................}
287
317
288
318
{ $region 'Events' -------------------------------------------------------}
289
319
290
320
procedure TStructureView.TreeViewChange (Sender: TObject);
291
321
begin
292
322
if Assigned(FOnSelection) then
293
- FOnSelection(Self, TreeView.Selected.TagObject);
323
+ begin
324
+ var selectedItem := TreeView.Selected;
325
+ if Assigned(selectedItem) then
326
+ FOnSelection(Self, selectedItem.TagObject);
327
+ end ;
294
328
end ;
295
329
296
330
procedure TStructureView.TreeViewDragChange (SourceItem, DestItem: TTreeViewItem; var Allow: Boolean);
0 commit comments