* Skip animation in Gtk due to poor timeGetTime implementation

* Dont cancel edit in WMKeydown under gtk1 (LCL bug 8865)
* Cleanup of objects and minimal demos

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@164 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
blikblum
2007-05-14 12:18:53 +00:00
parent 2843f3cd0c
commit 2411bee5e1
15 changed files with 433 additions and 417 deletions

View File

@@ -16475,6 +16475,7 @@ begin
end
else
DoStateChange([tsIncrementalSearchPending]);
VK_ESCAPE: // cancel actions currently in progress
begin
if IsMouseSelecting then
@@ -16482,9 +16483,12 @@ begin
DoStateChange([], [tsDrawSelecting, tsDrawSelPending]);
Invalidate;
end
//gtk1 does not like to free a component in KeyDown
{$ifndef LCLGtk}
else
if IsEditing then
CancelEditNode;
{$endif}
end;
VK_SPACE:
if (toCheckSupport in FOptions.FMiscOptions) and Assigned(FFocusedNode) and
@@ -17505,6 +17509,10 @@ var
CurrentTime: Cardinal;
begin
{$ifndef Windows}
//Is necessary to properly implement timeGetTime in non Windows
Exit;
{$endif}
if not (tsInAnimation in FStates) and (Duration > 0) then
begin
DoStateChange([tsInAnimation]);
@@ -18338,6 +18346,7 @@ begin
if (ClientHeight - FOffsetY < Integer(FRangeY)) and (Y > ClientHeight - Integer(FDefaultNodeHeight)) then
Include(Result, sdDown);
//todo: probably the code below is bug due to poor timeGetTime implementation
// Since scrolling during dragging is not handled via the timer we do a check here whether the auto
// scroll timeout already has elapsed or not.
if (Result <> []) and

View File

@@ -1,30 +1,31 @@
object MainForm: TMainForm
Left = 437
Height = 481
Top = 278
Width = 425
HorzScrollBar.Page = 424
VertScrollBar.Page = 480
Left = 340
Height = 486
Top = 147
Width = 427
HorzScrollBar.Page = 426
VertScrollBar.Page = 485
ActiveControl = VST
Caption = 'Simple Virtual Treeview demo'
ClientHeight = 486
ClientWidth = 427
Font.Height = -11
Font.Name = 'MS Sans Serif'
OnCreate = FormCreate
object Label1: TLabel
Left = 12
Height = 14
Top = 12
Width = 152
Left = 10
Height = 17
Top = 8
Width = 171
Caption = 'Last operation duration:'
Color = clNone
ParentColor = False
end
object VST: TVirtualStringTree
Left = 8
Height = 318
Top = 36
Width = 397
Anchors = [akTop, akLeft, akRight, akBottom]
Left = 10
Height = 360
Top = 24
Width = 410
BorderStyle = bsSingle
Colors.BorderColor = clWindowText
Colors.HotColor = clBlack
@@ -51,31 +52,28 @@ object MainForm: TMainForm
object ClearButton: TButton
Left = 97
Height = 25
Top = 421
Width = 129
Anchors = [akLeft, akBottom]
Top = 452
Width = 183
BorderSpacing.InnerBorder = 4
Caption = 'Clear tree'
OnClick = ClearButtonClick
TabOrder = 1
end
object AddOneButton: TButton
Left = 96
Left = 97
Height = 25
Top = 361
Width = 130
Anchors = [akLeft, akBottom]
Top = 392
Width = 183
BorderSpacing.InnerBorder = 4
Caption = 'Add node(s) to root'
OnClick = AddButtonClick
TabOrder = 2
end
object Edit1: TEdit
Left = 8
Left = 10
Height = 21
Top = 377
Width = 81
Anchors = [akLeft, akBottom]
Top = 392
Width = 79
TabOrder = 3
Text = '1'
end
@@ -83,20 +81,18 @@ object MainForm: TMainForm
Tag = 1
Left = 96
Height = 25
Top = 389
Width = 130
Anchors = [akLeft, akBottom]
Top = 422
Width = 184
BorderSpacing.InnerBorder = 4
Caption = 'Add node(s) as children'
OnClick = AddButtonClick
TabOrder = 4
end
object CloseButton: TButton
Left = 330
Left = 345
Height = 25
Top = 421
Top = 452
Width = 75
Anchors = [akRight, akBottom]
BorderSpacing.InnerBorder = 4
Caption = 'Close'
OnClick = CloseButtonClick

View File

@@ -1,41 +1,38 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TMainForm','FORMDATA',[
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3#181#1#6'Height'#3#225#1#3'Top'#3#22
+#1#5'Width'#3#169#1#18'HorzScrollBar.Page'#3#168#1#18'VertScrollBar.Page'#3
+#224#1#13'ActiveControl'#7#3'VST'#7'Caption'#6#28'Simple Virtual Treeview de'
+'mo'#11'Font.Height'#2#245#9'Font.Name'#6#13'MS Sans Serif'#8'OnCreate'#7#10
+'FormCreate'#0#6'TLabel'#6'Label1'#4'Left'#2#12#6'Height'#2#14#3'Top'#2#12#5
+'Width'#3#152#0#7'Caption'#6#24'Last operation duration:'#5'Color'#7#6'clNon'
+'e'#11'ParentColor'#8#0#0#18'TVirtualStringTree'#3'VST'#4'Left'#2#8#6'Height'
+#3'>'#1#3'Top'#2'$'#5'Width'#3#141#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRi'
+'ght'#8'akBottom'#0#11'BorderStyle'#7#8'bsSingle'#18'Colors.BorderColor'#7#12
+'clWindowText'#15'Colors.HotColor'#7#7'clBlack'#5'Ctl3D'#9#20'Header.AutoSiz'
+'eIndex'#2#255#18'Header.Font.Height'#2#245#16'Header.Font.Name'#6#13'MS San'
+'s Serif'#17'Header.MainColumn'#2#255#14'Header.Options'#11#14'hoColumnResiz'
+'e'#6'hoDrag'#0#13'HintAnimation'#7#7'hatNone'#17'IncrementalSearch'#7#5'isA'
+'ll'#13'RootNodeCount'#2'd'#8'TabOrder'#2#0#28'TreeOptions.AnimationOptions'
+#11#16'toAnimatedToggle'#0#23'TreeOptions.AutoOptions'#11#16'toAutoDropExpan'
+'d'#22'toAutoTristateTracking'#0#23'TreeOptions.MiscOptions'#11#10'toEditabl'
+'e'#12'toInitOnSave'#18'toToggleOnDblClick'#14'toWheelPanning'#0#24'TreeOpti'
+'ons.PaintOptions'#11#13'toShowButtons'#10'toShowRoot'#15'toShowTreeLines'#12
+'toThemeAware'#18'toUseBlendedImages'#0#28'TreeOptions.SelectionOptions'#11
+#13'toMultiSelect'#22'toCenterScrollIntoView'#0#10'OnFreeNode'#7#11'VSTFreeN'
+'ode'#9'OnGetText'#7#10'VSTGetText'#10'OnInitNode'#7#11'VSTInitNode'#7'Colum'
+'ns'#14#0#0#0#7'TButton'#11'ClearButton'#4'Left'#2'a'#6'Height'#2#25#3'Top'#3
+#165#1#5'Width'#3#129#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpaci'
+'ng.InnerBorder'#2#4#7'Caption'#6#10'Clear tree'#7'OnClick'#7#16'ClearButton'
+'Click'#8'TabOrder'#2#1#0#0#7'TButton'#12'AddOneButton'#4'Left'#2'`'#6'Heigh'
+'t'#2#25#3'Top'#3'i'#1#5'Width'#3#130#0#7'Anchors'#11#6'akLeft'#8'akBottom'#0
+#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#19'Add node(s) to root'#7'On'
+'Click'#7#14'AddButtonClick'#8'TabOrder'#2#2#0#0#5'TEdit'#5'Edit1'#4'Left'#2
+#8#6'Height'#2#21#3'Top'#3'y'#1#5'Width'#2'Q'#7'Anchors'#11#6'akLeft'#8'akBo'
+'ttom'#0#8'TabOrder'#2#3#4'Text'#6#1'1'#0#0#7'TButton'#7'Button1'#3'Tag'#2#1
+#4'Left'#2'`'#6'Height'#2#25#3'Top'#3#133#1#5'Width'#3#130#0#7'Anchors'#11#6
+'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#23'Add'
+' node(s) as children'#7'OnClick'#7#14'AddButtonClick'#8'TabOrder'#2#4#0#0#7
+'TButton'#11'CloseButton'#4'Left'#3'J'#1#6'Height'#2#25#3'Top'#3#165#1#5'Wid'
+'th'#2'K'#7'Anchors'#11#7'akRight'#8'akBottom'#0#25'BorderSpacing.InnerBorde'
+'r'#2#4#7'Caption'#6#5'Close'#7'OnClick'#7#16'CloseButtonClick'#8'TabOrder'#2
+#5#0#0#0
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#3'T'#1#6'Height'#3#230#1#3'Top'#3#147
+#0#5'Width'#3#171#1#18'HorzScrollBar.Page'#3#170#1#18'VertScrollBar.Page'#3
+#229#1#13'ActiveControl'#7#3'VST'#7'Caption'#6#28'Simple Virtual Treeview de'
+'mo'#12'ClientHeight'#3#230#1#11'ClientWidth'#3#171#1#11'Font.Height'#2#245#9
+'Font.Name'#6#13'MS Sans Serif'#8'OnCreate'#7#10'FormCreate'#0#6'TLabel'#6'L'
+'abel1'#4'Left'#2#10#6'Height'#2#17#3'Top'#2#8#5'Width'#3#171#0#7'Caption'#6
+#24'Last operation duration:'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#18
+'TVirtualStringTree'#3'VST'#4'Left'#2#10#6'Height'#3'h'#1#3'Top'#2#24#5'Widt'
+'h'#3#154#1#11'BorderStyle'#7#8'bsSingle'#18'Colors.BorderColor'#7#12'clWind'
+'owText'#15'Colors.HotColor'#7#7'clBlack'#5'Ctl3D'#9#20'Header.AutoSizeIndex'
+#2#255#18'Header.Font.Height'#2#245#16'Header.Font.Name'#6#13'MS Sans Serif'
+#17'Header.MainColumn'#2#255#14'Header.Options'#11#14'hoColumnResize'#6'hoDr'
+'ag'#0#13'HintAnimation'#7#7'hatNone'#17'IncrementalSearch'#7#5'isAll'#13'Ro'
+'otNodeCount'#2'd'#8'TabOrder'#2#0#28'TreeOptions.AnimationOptions'#11#16'to'
+'AnimatedToggle'#0#23'TreeOptions.AutoOptions'#11#16'toAutoDropExpand'#22'to'
+'AutoTristateTracking'#0#23'TreeOptions.MiscOptions'#11#10'toEditable'#12'to'
+'InitOnSave'#18'toToggleOnDblClick'#14'toWheelPanning'#0#24'TreeOptions.Pain'
+'tOptions'#11#13'toShowButtons'#10'toShowRoot'#15'toShowTreeLines'#12'toThem'
+'eAware'#18'toUseBlendedImages'#0#28'TreeOptions.SelectionOptions'#11#13'toM'
+'ultiSelect'#22'toCenterScrollIntoView'#0#10'OnFreeNode'#7#11'VSTFreeNode'#9
+'OnGetText'#7#10'VSTGetText'#10'OnInitNode'#7#11'VSTInitNode'#7'Columns'#14#0
+#0#0#7'TButton'#11'ClearButton'#4'Left'#2'a'#6'Height'#2#25#3'Top'#3#196#1#5
+'Width'#3#183#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#10'Clear tree'
+#7'OnClick'#7#16'ClearButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'#12'AddOneB'
+'utton'#4'Left'#2'a'#6'Height'#2#25#3'Top'#3#136#1#5'Width'#3#183#0#25'Borde'
+'rSpacing.InnerBorder'#2#4#7'Caption'#6#19'Add node(s) to root'#7'OnClick'#7
+#14'AddButtonClick'#8'TabOrder'#2#2#0#0#5'TEdit'#5'Edit1'#4'Left'#2#10#6'Hei'
+'ght'#2#21#3'Top'#3#136#1#5'Width'#2'O'#8'TabOrder'#2#3#4'Text'#6#1'1'#0#0#7
+'TButton'#7'Button1'#3'Tag'#2#1#4'Left'#2'`'#6'Height'#2#25#3'Top'#3#166#1#5
+'Width'#3#184#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#23'Add node(s'
+') as children'#7'OnClick'#7#14'AddButtonClick'#8'TabOrder'#2#4#0#0#7'TButto'
+'n'#11'CloseButton'#4'Left'#3'Y'#1#6'Height'#2#25#3'Top'#3#196#1#5'Width'#2
+'K'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#5'Close'#7'OnClick'#7#16
+'CloseButtonClick'#8'TabOrder'#2#5#0#0#0
]);

View File

@@ -12,7 +12,7 @@ uses
{$ifdef DEBUG}
vtlogger, ipcchannel,
{$endif}
LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
LCLIntf, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
VirtualTrees, StdCtrls, ExtCtrls, LResources, Buttons;
type

View File

@@ -34,32 +34,20 @@
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="4">
<Units Count="2">
<Unit0>
<Filename Value="minimal_lcl.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="minimal_lcl"/>
</Unit0>
<Unit1>
<Filename Value="fmain.pas"/>
<ComponentName Value="Form1"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="fmain.lrs"/>
<UnitName Value="fmain"/>
</Unit1>
<Unit2>
<Filename Value="Main.pas"/>
<ComponentName Value="MainForm"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="Main.lrs"/>
<UnitName Value="Main"/>
</Unit2>
<Unit3>
<Filename Value="../../units/gtk/mmsystem.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="mmsystem"/>
</Unit3>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
@@ -70,11 +58,6 @@
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Linking>
<Debugging>
<UseLineInfoUnit Value="False"/>
</Debugging>
</Linking>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>

View File

@@ -8,12 +8,11 @@ uses
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ add your units here }, Main, virtualtreeview_package,
mmsystem;
{ add your units here }, Main;
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TMainForm,MainForm);
Application.Run;
end.

View File

@@ -1,66 +1,70 @@
object fmMVCDemo: TfmMVCDemo
Left = 258
Height = 480
Top = 174
Width = 709
HorzScrollBar.Page = 708
VertScrollBar.Page = 479
Left = 165
Height = 518
Top = 154
Width = 742
HorzScrollBar.Page = 741
VertScrollBar.Page = 517
ActiveControl = edCaption
Caption = 'Virtual Tree - MVC Demo written by Marian Aldenhövel'
ClientHeight = 518
ClientWidth = 742
Font.Height = -11
Font.Name = 'MS Sans Serif'
OnCreate = FormCreate
object pnlControls: TPanel
Height = 84
Top = 396
Width = 709
Height = 118
Top = 400
Width = 742
Align = alBottom
BevelInner = bvLowered
BevelOuter = bvNone
Caption = ' '
ClientHeight = 118
ClientWidth = 742
TabOrder = 0
object Label1: TLabel
Left = 51
Height = 14
Top = 8
Width = 42
Left = 72
Height = 17
Top = 7
Width = 61
Alignment = taRightJustify
Caption = 'Caption:'
Color = clNone
ParentColor = False
end
object Label3: TLabel
Left = 33
Height = 14
Left = 47
Height = 17
Top = 31
Width = 58
Width = 86
Alignment = taRightJustify
Caption = 'Subcaption:'
Color = clNone
ParentColor = False
end
object Label4: TLabel
Left = 7
Height = 14
Top = 56
Width = 88
Left = 8
Height = 17
Top = 55
Width = 125
Alignment = taRightJustify
Caption = 'Incidence (0..63):'
Color = clNone
ParentColor = False
end
object Label2: TLabel
Left = 212
Height = 92
Top = 4
Width = 186
Caption = 'Edit the current node.'#13#10#13#10'Note that you are setting data in a structure without referring to a visual component except for the information about what node currently has the focus.'
Left = 256
Height = 97
Top = 5
Width = 296
Caption = 'Edit the current node.'#10'Note that you are setting data in a structure without referring to a visual component except for the information about what node currently has the focus.'
Color = clNone
ParentColor = False
WordWrap = True
end
object edCaption: TEdit
Left = 92
Left = 136
Height = 21
Top = 5
Width = 112
@@ -69,7 +73,7 @@ object fmMVCDemo: TfmMVCDemo
Text = 'edCaption'
end
object edSubcaption: TEdit
Left = 92
Left = 136
Height = 21
Top = 29
Width = 112
@@ -78,10 +82,10 @@ object fmMVCDemo: TfmMVCDemo
Text = 'edCaption'
end
object edIncidence: TEdit
Left = 92
Left = 136
Height = 21
Top = 53
Width = 59
Width = 51
OnChange = edIncidenceChange
OnKeyDown = nil
OnKeyPress = edIncidenceKeyPress
@@ -89,7 +93,7 @@ object fmMVCDemo: TfmMVCDemo
Text = '0'
end
object UpDown1: TUpDown
Left = 151
Left = 187
Height = 21
Top = 53
Width = 15
@@ -98,30 +102,30 @@ object fmMVCDemo: TfmMVCDemo
TabOrder = 3
end
object btnAdd: TButton
Left = 429
Left = 560
Height = 25
Top = 4
Width = 75
Top = 8
Width = 112
BorderSpacing.InnerBorder = 4
Caption = '+ Add a child'
OnClick = btnAddClick
TabOrder = 4
end
object btnDelete: TButton
Left = 429
Left = 560
Height = 25
Top = 32
Width = 75
Top = 40
Width = 112
BorderSpacing.InnerBorder = 4
Caption = '- delete node'
Caption = '- Delete node'
OnClick = btnDeleteClick
TabOrder = 5
end
object cbLive: TCheckBox
Left = 618
Height = 13
Top = 9
Width = 48
Left = 680
Height = 24
Top = 8
Width = 58
Caption = 'Live!'
Font.Height = -11
Font.Name = 'MS Sans Serif'

View File

@@ -1,77 +1,78 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TfmMVCDemo','FORMDATA',[
'TPF0'#10'TfmMVCDemo'#9'fmMVCDemo'#4'Left'#3#2#1#6'Height'#3#224#1#3'Top'#3
+#174#0#5'Width'#3#197#2#18'HorzScrollBar.Page'#3#196#2#18'VertScrollBar.Page'
+#3#223#1#13'ActiveControl'#7#9'edCaption'#7'Caption'#6'5Virtual Tree - MVC D'
+'emo written by Marian Aldenh'#195#182'vel'#11'Font.Height'#2#245#9'Font.Nam'
+'e'#6#13'MS Sans Serif'#8'OnCreate'#7#10'FormCreate'#0#6'TPanel'#11'pnlContr'
+'ols'#6'Height'#2'T'#3'Top'#3#140#1#5'Width'#3#197#2#5'Align'#7#8'alBottom'
+#10'BevelInner'#7#9'bvLowered'#10'BevelOuter'#7#6'bvNone'#7'Caption'#6#1' '#8
+'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2'3'#6'Height'#2#14#3'Top'#2#8#5
+'Width'#2'*'#9'Alignment'#7#14'taRightJustify'#7'Caption'#6#8'Caption:'#5'Co'
+'lor'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2'!'#6'H'
+'eight'#2#14#3'Top'#2#31#5'Width'#2':'#9'Alignment'#7#14'taRightJustify'#7'C'
+'aption'#6#11'Subcaption:'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLab'
+'el'#6'Label4'#4'Left'#2#7#6'Height'#2#14#3'Top'#2'8'#5'Width'#2'X'#9'Alignm'
+'ent'#7#14'taRightJustify'#7'Caption'#6#18'Incidence (0..63):'#5'Color'#7#6
+'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#212#0#6'Height'
+#2'\'#3'Top'#2#4#5'Width'#3#186#0#7'Caption'#6#179'Edit the current node.'#13
+#10#13#10'Note that you are setting data in a structure without referring to'
'TPF0'#10'TfmMVCDemo'#9'fmMVCDemo'#4'Left'#3#165#0#6'Height'#3#6#2#3'Top'#3
+#154#0#5'Width'#3#230#2#18'HorzScrollBar.Page'#3#229#2#18'VertScrollBar.Page'
+#3#5#2#13'ActiveControl'#7#9'edCaption'#7'Caption'#6'5Virtual Tree - MVC Dem'
+'o written by Marian Aldenh'#195#182'vel'#12'ClientHeight'#3#6#2#11'ClientWi'
+'dth'#3#230#2#11'Font.Height'#2#245#9'Font.Name'#6#13'MS Sans Serif'#8'OnCre'
+'ate'#7#10'FormCreate'#0#6'TPanel'#11'pnlControls'#6'Height'#2'v'#3'Top'#3
+#144#1#5'Width'#3#230#2#5'Align'#7#8'alBottom'#10'BevelInner'#7#9'bvLowered'
+#10'BevelOuter'#7#6'bvNone'#7'Caption'#6#1' '#12'ClientHeight'#2'v'#11'Clien'
+'tWidth'#3#230#2#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2'H'#6'Height'
+#2#17#3'Top'#2#7#5'Width'#2'='#9'Alignment'#7#14'taRightJustify'#7'Caption'#6
+#8'Caption:'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4
+'Left'#2'/'#6'Height'#2#17#3'Top'#2#31#5'Width'#2'V'#9'Alignment'#7#14'taRig'
+'htJustify'#7'Caption'#6#11'Subcaption:'#5'Color'#7#6'clNone'#11'ParentColor'
+#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#8#6'Height'#2#17#3'Top'#2'7'#5'Width'#2
+'}'#9'Alignment'#7#14'taRightJustify'#7'Caption'#6#18'Incidence (0..63):'#5
+'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#0#1#6
+'Height'#2'a'#3'Top'#2#5#5'Width'#3'('#1#7'Caption'#6#176'Edit the current n'
+'ode.'#10'Note that you are setting data in a structure without referring to'
+' a visual component except for the information about what node currently ha'
+'s the focus.'#5'Color'#7#6'clNone'#11'ParentColor'#8#8'WordWrap'#9#0#0#5'TE'
+'dit'#9'edCaption'#4'Left'#2'\'#6'Height'#2#21#3'Top'#2#5#5'Width'#2'p'#8'On'
+'Change'#7#15'edCaptionChange'#8'TabOrder'#2#0#4'Text'#6#9'edCaption'#0#0#5
+'TEdit'#12'edSubcaption'#4'Left'#2'\'#6'Height'#2#21#3'Top'#2#29#5'Width'#2
+'p'#8'OnChange'#7#18'edSubcaptionChange'#8'TabOrder'#2#1#4'Text'#6#9'edCapti'
+'on'#0#0#5'TEdit'#11'edIncidence'#4'Left'#2'\'#6'Height'#2#21#3'Top'#2'5'#5
+'Width'#2';'#8'OnChange'#7#17'edIncidenceChange'#9'OnKeyDown'#13#10'OnKeyPre'
+'ss'#7#19'edIncidenceKeyPress'#8'TabOrder'#2#2#4'Text'#6#1'0'#0#0#7'TUpDown'
+#7'UpDown1'#4'Left'#3#151#0#6'Height'#2#21#3'Top'#2'5'#5'Width'#2#15#9'Assoc'
+'iate'#7#11'edIncidence'#3'Max'#2'?'#8'TabOrder'#2#3#0#0#7'TButton'#6'btnAdd'
+#4'Left'#3#173#1#6'Height'#2#25#3'Top'#2#4#5'Width'#2'K'#25'BorderSpacing.In'
+'nerBorder'#2#4#7'Caption'#6#13'+ Add a child'#7'OnClick'#7#11'btnAddClick'#8
+'TabOrder'#2#4#0#0#7'TButton'#9'btnDelete'#4'Left'#3#173#1#6'Height'#2#25#3
+'Top'#2' '#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#13'-'
+' delete node'#7'OnClick'#7#14'btnDeleteClick'#8'TabOrder'#2#5#0#0#9'TCheckB'
+'ox'#6'cbLive'#4'Left'#3'j'#2#6'Height'#2#13#3'Top'#2#9#5'Width'#2'0'#7'Capt'
+'ion'#6#5'Live!'#11'Font.Height'#2#245#9'Font.Name'#6#13'MS Sans Serif'#10'F'
+'ont.Style'#11#6'fsBold'#0#7'OnClick'#7#11'cbLiveClick'#8'TabOrder'#2#6#0#0#0
+#10'TImageList'#10'ImageList1'#4'left'#2'x'#3'top'#3#143#0#6'Bitmap'#10'.'#8
+#0#0'li'#5#0#0#0#16#0#0#0#16#0#0#0#156#1#0#0'/* XPM */'#10'static char *grap'
+'hic[] = {'#10'"16 16 3 1",'#10'". c None",'#10'", c #000000",'#10'"- c #FFF'
+'FFF",'#10'"................",'#10'"................",'#10'".........,,.....'
+'",'#10'"........,--,....",'#10'"........,---,...",'#10'"........,---,...",'
+#10'"........,---,...",'#10'"........,--,....",'#10'"........,--,....",'#10
+'"........,--,....",'#10'"........,,,,....",'#10'"........,--,....",'#10'"..'
+'......,--,....",'#10'"........,,,,....",'#10'"................",'#10'".....'
+'..........."}'#10#156#1#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"1'
+'6 16 3 1",'#10'". c None",'#10'", c #000000",'#10'"- c #00C0C0",'#10'".....'
+'...........",'#10'"................",'#10'".........,,.....",'#10'"........'
+',--,....",'#10'"........,---,...",'#10'"........,---,...",'#10'"........,--'
+'-,...",'#10'"........,--,....",'#10'"........,--,....",'#10'"........,--,..'
+'..",'#10'"........,,,,....",'#10'"........,--,....",'#10'"........,--,...."'
+','#10'"........,,,,....",'#10'"................",'#10'"................"}'
+#10#156#1#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 3 1",'#10
+'". c None",'#10'", c #000000",'#10'"- c #00C000",'#10'"................",'
+#10'"................",'#10'".........,,.....",'#10'"........,--,....",'#10
+'"........,---,...",'#10'"........,---,...",'#10'"........,---,...",'#10'"..'
+'......,--,....",'#10'"........,--,....",'#10'"........,--,....",'#10'".....'
+'...,,,,....",'#10'"........,--,....",'#10'"........,--,....",'#10'"........'
+',,,,....",'#10'"................",'#10'"................"}'#10#156#1#0#0'/*'
+' XPM */'#10'static char *graphic[] = {'#10'"16 16 3 1",'#10'". c None",'#10
+'", c #000000",'#10'"- c #FF0000",'#10'"................",'#10'"............'
+'....",'#10'".........,,.....",'#10'"........,--,....",'#10'"........,---,..'
+'.",'#10'"........,---,...",'#10'"........,---,...",'#10'"........,--,....",'
+#10'"........,--,....",'#10'"........,--,....",'#10'"........,,,,....",'#10
+'"........,--,....",'#10'"........,--,....",'#10'"........,,,,....",'#10'"..'
,'..............",'#10'"................"}'#10#156#1#0#0'/* XPM */'#10'static'
+' char *graphic[] = {'#10'"16 16 3 1",'#10'". c None",'#10'", c #000000",'#10
+'"- c #FFFF00",'#10'"................",'#10'"................",'#10'".......'
+'..,,.....",'#10'"........,--,....",'#10'"........,---,...",'#10'"........,-'
+'--,...",'#10'"........,---,...",'#10'"........,--,....",'#10'"........,--,.'
+'...",'#10'"........,--,....",'#10'"........,,,,....",'#10'"........,--,....'
+'",'#10'"........,--,....",'#10'"........,,,,....",'#10'"................",'
+#10'"................"}'#10#0#0#6'TTimer'#7'timLive'#7'Enabled'#8#8'Interval'
+#2'd'#7'OnTimer'#7#12'timLiveTimer'#4'left'#2'x'#3'top'#3#172#0#0#0#0
+'dit'#9'edCaption'#4'Left'#3#136#0#6'Height'#2#21#3'Top'#2#5#5'Width'#2'p'#8
+'OnChange'#7#15'edCaptionChange'#8'TabOrder'#2#0#4'Text'#6#9'edCaption'#0#0#5
+'TEdit'#12'edSubcaption'#4'Left'#3#136#0#6'Height'#2#21#3'Top'#2#29#5'Width'
+#2'p'#8'OnChange'#7#18'edSubcaptionChange'#8'TabOrder'#2#1#4'Text'#6#9'edCap'
+'tion'#0#0#5'TEdit'#11'edIncidence'#4'Left'#3#136#0#6'Height'#2#21#3'Top'#2
+'5'#5'Width'#2'3'#8'OnChange'#7#17'edIncidenceChange'#9'OnKeyDown'#13#10'OnK'
+'eyPress'#7#19'edIncidenceKeyPress'#8'TabOrder'#2#2#4'Text'#6#1'0'#0#0#7'TUp'
+'Down'#7'UpDown1'#4'Left'#3#187#0#6'Height'#2#21#3'Top'#2'5'#5'Width'#2#15#9
+'Associate'#7#11'edIncidence'#3'Max'#2'?'#8'TabOrder'#2#3#0#0#7'TButton'#6'b'
+'tnAdd'#4'Left'#3'0'#2#6'Height'#2#25#3'Top'#2#8#5'Width'#2'p'#25'BorderSpac'
+'ing.InnerBorder'#2#4#7'Caption'#6#13'+ Add a child'#7'OnClick'#7#11'btnAddC'
+'lick'#8'TabOrder'#2#4#0#0#7'TButton'#9'btnDelete'#4'Left'#3'0'#2#6'Height'#2
+#25#3'Top'#2'('#5'Width'#2'p'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6
+#13'- Delete node'#7'OnClick'#7#14'btnDeleteClick'#8'TabOrder'#2#5#0#0#9'TCh'
+'eckBox'#6'cbLive'#4'Left'#3#168#2#6'Height'#2#24#3'Top'#2#8#5'Width'#2':'#7
+'Caption'#6#5'Live!'#11'Font.Height'#2#245#9'Font.Name'#6#13'MS Sans Serif'
+#10'Font.Style'#11#6'fsBold'#0#7'OnClick'#7#11'cbLiveClick'#8'TabOrder'#2#6#0
+#0#0#10'TImageList'#10'ImageList1'#4'left'#2'x'#3'top'#3#143#0#6'Bitmap'#10
+'.'#8#0#0'li'#5#0#0#0#16#0#0#0#16#0#0#0#156#1#0#0'/* XPM */'#10'static char '
+'*graphic[] = {'#10'"16 16 3 1",'#10'". c None",'#10'", c #000000",'#10'"- c'
+' #FFFFFF",'#10'"................",'#10'"................",'#10'".........,,'
+'.....",'#10'"........,--,....",'#10'"........,---,...",'#10'"........,---,.'
+'..",'#10'"........,---,...",'#10'"........,--,....",'#10'"........,--,...."'
+','#10'"........,--,....",'#10'"........,,,,....",'#10'"........,--,....",'
+#10'"........,--,....",'#10'"........,,,,....",'#10'"................",'#10
+'"................"}'#10#156#1#0#0'/* XPM */'#10'static char *graphic[] = {'
+#10'"16 16 3 1",'#10'". c None",'#10'", c #000000",'#10'"- c #00C0C0",'#10'"'
+'................",'#10'"................",'#10'".........,,.....",'#10'"...'
+'.....,--,....",'#10'"........,---,...",'#10'"........,---,...",'#10'"......'
+'..,---,...",'#10'"........,--,....",'#10'"........,--,....",'#10'"........,'
+'--,....",'#10'"........,,,,....",'#10'"........,--,....",'#10'"........,--,'
+'....",'#10'"........,,,,....",'#10'"................",'#10'"...............'
+'."}'#10#156#1#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 3 1",'
+#10'". c None",'#10'", c #000000",'#10'"- c #00C000",'#10'"................"'
+','#10'"................",'#10'".........,,.....",'#10'"........,--,....",'
+#10'"........,---,...",'#10'"........,---,...",'#10'"........,---,...",'#10
+'"........,--,....",'#10'"........,--,....",'#10'"........,--,....",'#10'"..'
+'......,,,,....",'#10'"........,--,....",'#10'"........,--,....",'#10'".....'
+'...,,,,....",'#10'"................",'#10'"................"}'#10#156#1#0#0
+'/* XPM */'#10'static char *graphic[] = {'#10'"16 16 3 1",'#10'". c None",'
+#10'", c #000000",'#10'"- c #FF0000",'#10'"................",'#10'".........'
+'.......",'#10'".........,,.....",'#10'"........,--,....",'#10'"........,---'
+',...",'#10'"........,---,...",'#10'"........,---,...",'#10'"........,--,...'
+'.",'#10'"........,--,....",'#10'"........,--,....",'#10'"........,,,,....",'
,#10'"........,--,....",'#10'"........,--,....",'#10'"........,,,,....",'#10
+'"................",'#10'"................"}'#10#156#1#0#0'/* XPM */'#10'sta'
+'tic char *graphic[] = {'#10'"16 16 3 1",'#10'". c None",'#10'", c #000000",'
+#10'"- c #FFFF00",'#10'"................",'#10'"................",'#10'"....'
+'.....,,.....",'#10'"........,--,....",'#10'"........,---,...",'#10'".......'
+'.,---,...",'#10'"........,---,...",'#10'"........,--,....",'#10'"........,-'
+'-,....",'#10'"........,--,....",'#10'"........,,,,....",'#10'"........,--,.'
+'...",'#10'"........,--,....",'#10'"........,,,,....",'#10'"................'
+'",'#10'"................"}'#10#0#0#6'TTimer'#7'timLive'#7'Enabled'#8#8'Inte'
+'rval'#2'd'#7'OnTimer'#7#12'timLiveTimer'#4'left'#2'x'#3'top'#3#172#0#0#0#0
]);

View File

@@ -15,11 +15,13 @@ unit MVCDemoMain;
interface
uses LCLIntf,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
MVCTypes,MVCPanel,StdCtrls,ExtCtrls,ImgList,VirtualTrees,ComCtrls,
uses
LCLIntf, SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
MVCTypes,MVCPanel,StdCtrls,ExtCtrls,VirtualTrees,ComCtrls,
Buttons, LResources, vtlogger,ipcchannel;
type TfmMVCDemo=class(TForm)
type
TfmMVCDemo=class(TForm)
pnlControls:TPanel;
ImageList1:TImageList;
edCaption:TEdit;
@@ -52,7 +54,8 @@ type TfmMVCDemo=class(TForm)
function CreateDefaultTree:TMVCTree;
end;
var fmMVCDemo:TfmMVCDemo;
var
fmMVCDemo:TfmMVCDemo;
implementation

View File

@@ -25,8 +25,9 @@ unit MVCPanel;
interface
uses LCLIntf,Controls,Graphics,SysUtils,Classes,ExtCtrls,StdCtrls,
MVCTypes,VirtualTrees;
uses
LCLIntf, Controls, Graphics, SysUtils, Classes, ExtCtrls, StdCtrls,
MVCTypes, VirtualTrees;
type TMVCPanel=class(TCustomPanel)
private

View File

@@ -56,8 +56,9 @@ unit MVCTypes;
interface
uses LCLIntf, Types, Messages,SysUtils,Graphics,VirtualTrees,Classes,StdCtrls,
Controls,Forms,ImgList,LCLType, DelphiCompat, vtlogger, LMessages;
uses
LCLIntf, Types, SysUtils, Graphics, VirtualTrees, Classes, StdCtrls,
Controls, Forms, ImgList, LCLType, DelphiCompat, vtlogger, LMessages;
type { TMVCNode is the encapsulation of a single Node in the structure.
This implementation is a bit bloated because in my project
@@ -65,13 +66,13 @@ type { TMVCNode is the encapsulation of a single Node in the structure.
In such an implementation there is not much "virtual" about the
tree anymore - still it's of incredible usefulness as you will
see. }
TMVCNode=class(TObject)
TMVCNode = class(TObject)
private
{ Here's the data associated with a single Node in the
tree. This structure defines a caption and a subcaption, add
whatever defines your data completely. }
FParent:TMVCNode;
FChildren:TList;
FChildren:TFpList;
FCheckState:TCheckState;
FCaption,FSubCaption:string;
{ The FIncidence-Field is special in the way that it's
@@ -261,6 +262,10 @@ type { TMVCNode is the encapsulation of a single Node in the structure.
procedure WMMove(var Message: TLMMove); message LM_MOVE;
procedure WMChar(var Message: TWMChar); message WM_CHAR;
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
//gtk1 has problems freeing a control inside keydow
{$ifdef LCLGtk}
procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
{$endif}
procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS;
protected
procedure AutoAdjustSize;
@@ -300,7 +305,7 @@ implementation
constructor TMVCNode.Create;
begin
inherited Create;
FChildren:=TList.Create;
FChildren:=TFpList.Create;
end;
destructor TMVCNode.Destroy;
@@ -956,8 +961,10 @@ begin
VK_UP,
VK_DOWN:
FLink.FTree.WndProc(TMessage(Message));
{$ifndef LCLGtk}
VK_RETURN:
FLink.FTree.DoEndEdit;
{$endif}
// standard clipboard actions,
// Caution: to make these work you must not use default TAction classes like TEditPaste etc. in the application!
Ord('C'):
@@ -986,6 +993,14 @@ begin
Logger.ExitMethod([lcEditLink],'TMVCEdit.WMKeyDown');
end;
{$ifdef LCLGtk}
procedure TMVCEdit.WMKeyUp(var Message: TWMKeyUp);
begin
if Message.CharCode = VK_RETURN then
FLink.FTree.DoEndEdit;
end;
{$endif}
procedure TMVCEdit.WMKillFocus(var Msg: TWMKillFocus);
begin
Logger.EnterMethod([lcEditLink],'TMVCEdit.WMKillFocus');
@@ -1018,7 +1033,7 @@ end;
procedure TMVCEdit.CreateParams(var Params:TCreateParams);
begin
//todo: propbably remove this since CTL3D does nothing in LCL
//todo: probably remove this since CTL3D does nothing in LCL
Ctl3D := False;
inherited;
end;

View File

@@ -65,6 +65,9 @@
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<SearchPaths>
<LCLWidgetType Value="gtk2"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>

View File

@@ -26,8 +26,12 @@ begin
end;
function timeGetTime: DWORD;
var
ATime: TSystemTime;
begin
//todo: properly implement
GetLocalTime(ATime);
Result := ATime.MilliSecond;
end;
end.

View File

@@ -26,8 +26,12 @@ begin
end;
function timeGetTime: DWORD;
var
ATime: TSystemTime;
begin
//todo: properly implement
GetLocalTime(ATime);
Result := ATime.MilliSecond;
end;
end.

View File

@@ -1,14 +1,12 @@
<?xml version="1.0"?>
<CONFIG>
<Package Version="2">
<PathDelim Value="\"/>
<Name Value="virtualtreeview_package"/>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<SearchPaths>
<OtherUnitFiles Value="units\$(LCLWidgetType)\"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
<OtherUnitFiles Value="units/$(LCLWidgetType)/"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
@@ -53,11 +51,10 @@
</Item3>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)\"/>
<UnitPath Value="$(PkgOutDir)/"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
<DestinationDirectory Value="$(TestDir)\publishedpackage\"/>
<IgnoreBinaries Value="False"/>
</PublishOptions>
</Package>