jvcllaz: Add settings dialog to JvTimeFrame demo, and store settings in ini file.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7107 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2019-08-09 15:29:17 +00:00
parent 96b36e176f
commit 4c9b7a668f
6 changed files with 510 additions and 169 deletions

View File

@ -48,7 +48,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item6> </Item6>
</RequiredPackages> </RequiredPackages>
<Units Count="6"> <Units Count="7">
<Unit0> <Unit0>
<Filename Value="JvTimeFrameDemo.lpr"/> <Filename Value="JvTimeFrameDemo.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -93,6 +93,14 @@
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="tfPrintProgress"/> <UnitName Value="tfPrintProgress"/>
</Unit5> </Unit5>
<Unit6>
<Filename Value="tfsettings.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SettingsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="tfSettings"/>
</Unit6>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>

View File

@ -9,7 +9,7 @@ uses
tfVisibleResources in 'VisibleResourcesUnit.pas' {VisibleResources}, tfVisibleResources in 'VisibleResourcesUnit.pas' {VisibleResources},
tfShare in 'ShareUnit.pas' {Share}, tfShare in 'ShareUnit.pas' {Share},
tfApptEdit in 'ApptEditUnit.pas' {ApptEdit}, tfApptEdit in 'ApptEditUnit.pas' {ApptEdit},
tfPrintProgress in 'PrintProgressUnit.pas' {PrintProgress}; tfPrintProgress in 'PrintProgressUnit.pas', tfSettings {PrintProgress};
{$R *.res} {$R *.res}
@ -30,5 +30,6 @@ begin
Application.CreateForm(TShare, Share); Application.CreateForm(TShare, Share);
Application.CreateForm(TApptEdit, ApptEdit); Application.CreateForm(TApptEdit, ApptEdit);
Application.CreateForm(TPrintProgress, PrintProgress); Application.CreateForm(TPrintProgress, PrintProgress);
Application.CreateForm(TSettingsForm, SettingsForm);
Application.Run; Application.Run;
end. end.

View File

@ -2,16 +2,17 @@ object MainForm: TMainForm
Left = 568 Left = 568
Height = 613 Height = 613
Top = 55 Top = 55
Width = 445 Width = 477
Caption = 'UTF Demo 1: PhotoOp' Caption = 'UTF Demo 1: PhotoOp'
ClientHeight = 613 ClientHeight = 613
ClientWidth = 445 ClientWidth = 477
Color = clBtnFace Color = clBtnFace
Constraints.MinHeight = 400 Constraints.MinHeight = 400
Constraints.MinWidth = 445 Constraints.MinWidth = 445
DefaultMonitor = dmDesktop DefaultMonitor = dmDesktop
Font.Color = clWindowText Font.Color = clWindowText
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '2.1.0.0' LCLVersion = '2.1.0.0'
@ -20,27 +21,27 @@ object MainForm: TMainForm
Left = 0 Left = 0
Height = 515 Height = 515
Top = 73 Top = 73
Width = 445 Width = 477
ActivePage = TabSheet1 ActivePage = TabSheet2
Align = alClient Align = alClient
TabIndex = 0 TabIndex = 1
TabOrder = 0 TabOrder = 0
object TabSheet1: TTabSheet object TabSheet1: TTabSheet
Caption = 'Day View' Caption = 'Day View'
ClientHeight = 487 ClientHeight = 487
ClientWidth = 437 ClientWidth = 469
object JvTFDays1: TJvTFDays object JvTFDays1: TJvTFDays
Left = 0 Left = 0
Height = 487 Height = 487
Top = 0 Top = 0
Width = 437 Width = 469
ScheduleManager = utfScheduleManager1 ScheduleManager = utfScheduleManager1
ColHdrHeight = 30 ColHdrHeight = 30
Cols = < Cols = <
item item
SchedDate = 0 SchedDate = 0
Title = ' - ' Title = ' - '
Width = 370 Width = 402
end> end>
Template.CompDate = 36406 Template.CompDate = 36406
Template.LinearDayCount = 1 Template.LinearDayCount = 1
@ -98,14 +99,14 @@ object MainForm: TMainForm
end end
object TabSheet2: TTabSheet object TabSheet2: TTabSheet
Caption = 'Week View' Caption = 'Week View'
ClientHeight = 420 ClientHeight = 487
ClientWidth = 437 ClientWidth = 469
ImageIndex = 1 ImageIndex = 1
object JvTFWeeks1: TJvTFWeeks object JvTFWeeks1: TJvTFWeeks
Left = 0 Left = 0
Height = 420 Height = 487
Top = 0 Top = 0
Width = 437 Width = 469
ScheduleManager = utfScheduleManager1 ScheduleManager = utfScheduleManager1
Cells = < Cells = <
item item
@ -495,13 +496,16 @@ object MainForm: TMainForm
Left = 0 Left = 0
Height = 73 Height = 73
Top = 0 Top = 0
Width = 445 Width = 477
Align = alTop Align = alTop
BevelOuter = bvNone
ClientHeight = 73 ClientHeight = 73
ClientWidth = 445 ClientWidth = 477
TabOrder = 1 TabOrder = 1
object ResourceCombo: TComboBox object ResourceCombo: TComboBox
Left = 198 AnchorSideLeft.Control = NewApptButton
AnchorSideTop.Control = ModeCombo
Left = 195
Height = 23 Height = 23
Hint = 'Display Resource' Hint = 'Display Resource'
Top = 40 Top = 40
@ -516,10 +520,10 @@ object MainForm: TMainForm
object PrevDateButton: TBitBtn object PrevDateButton: TBitBtn
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1 AnchorSideTop.Control = Panel1
Left = 9 Left = 8
Height = 24 Height = 24
Hint = 'Previous Day' Hint = 'Previous Day'
Top = 9 Top = 8
Width = 24 Width = 24
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 8 BorderSpacing.Top = 8
@ -537,10 +541,10 @@ object MainForm: TMainForm
AnchorSideTop.Control = PrevDateButton AnchorSideTop.Control = PrevDateButton
AnchorSideRight.Control = ModeCombo AnchorSideRight.Control = ModeCombo
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 148 Left = 147
Height = 24 Height = 24
Hint = 'Next Day' Hint = 'Next Day'
Top = 9 Top = 8
Width = 24 Width = 24
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
NumGlyphs = 2 NumGlyphs = 2
@ -554,11 +558,15 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object NewApptButton: TBitBtn object NewApptButton: TBitBtn
Left = 198 AnchorSideLeft.Control = NextDateButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = PrevDateButton
Left = 195
Height = 24 Height = 24
Hint = 'New Appointment' Hint = 'New Appointment'
Top = 7 Top = 8
Width = 24 Width = 24
BorderSpacing.Left = 24
NumGlyphs = 2 NumGlyphs = 2
Images = ImageList Images = ImageList
ImageIndex = 4 ImageIndex = 4
@ -570,11 +578,15 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object EditApptButton: TBitBtn object EditApptButton: TBitBtn
Left = 225 AnchorSideLeft.Control = NewApptButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = NewApptButton
Left = 221
Height = 24 Height = 24
Hint = 'Edit Appointment' Hint = 'Edit Appointment'
Top = 8 Top = 8
Width = 24 Width = 24
BorderSpacing.Left = 2
NumGlyphs = 2 NumGlyphs = 2
Images = ImageList Images = ImageList
ImageIndex = 5 ImageIndex = 5
@ -586,11 +598,15 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object DeleteApptButton: TBitBtn object DeleteApptButton: TBitBtn
Left = 252 AnchorSideLeft.Control = EditApptButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = NewApptButton
Left = 247
Height = 24 Height = 24
Hint = 'Delete Appointment' Hint = 'Delete Appointment'
Top = 8 Top = 8
Width = 24 Width = 24
BorderSpacing.Left = 2
NumGlyphs = 2 NumGlyphs = 2
Images = ImageList Images = ImageList
ImageIndex = 6 ImageIndex = 6
@ -602,10 +618,13 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object ViewSchedsButton: TBitBtn object ViewSchedsButton: TBitBtn
Left = 198 AnchorSideLeft.Control = NewApptButton
AnchorSideTop.Control = ResourceCombo
AnchorSideTop.Side = asrCenter
Left = 195
Height = 24 Height = 24
Hint = 'View Schedules (<Shift> + <Insert>)' Hint = 'View Schedules (<Shift> + <Insert>)'
Top = 40 Top = 39
Width = 24 Width = 24
Glyph.Data = { Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100 76010000424D7601000000000000760000002800000020000000100000000100
@ -630,10 +649,12 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object HideSchedButton: TBitBtn object HideSchedButton: TBitBtn
Left = 225 AnchorSideLeft.Control = EditApptButton
AnchorSideTop.Control = ViewSchedsButton
Left = 221
Height = 24 Height = 24
Hint = 'Hide Selected Schedule (<Shift> + <Delete>)' Hint = 'Hide Selected Schedule (<Shift> + <Delete>)'
Top = 40 Top = 39
Width = 24 Width = 24
Glyph.Data = { Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100 76010000424D7601000000000000760000002800000020000000100000000100
@ -658,10 +679,12 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object ShareButton: TBitBtn object ShareButton: TBitBtn
Left = 252 AnchorSideLeft.Control = DeleteApptButton
AnchorSideTop.Control = ViewSchedsButton
Left = 247
Height = 24 Height = 24
Hint = 'Share Appointment (<Ctrl> + Drag)' Hint = 'Share Appointment (<Ctrl> + Drag)'
Top = 40 Top = 39
Width = 24 Width = 24
NumGlyphs = 2 NumGlyphs = 2
Images = ImageList Images = ImageList
@ -674,11 +697,16 @@ object MainForm: TMainForm
TabStop = False TabStop = False
end end
object TimeIncCombo: TComboBox object TimeIncCombo: TComboBox
Left = 328 AnchorSideLeft.Control = SettingsButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = PrevDateButton
AnchorSideTop.Side = asrCenter
Left = 347
Height = 23 Height = 23
Hint = 'Time Increments' Hint = 'Time Increments'
Top = 8 Top = 9
Width = 105 Width = 105
BorderSpacing.Left = 24
DropDownCount = 12 DropDownCount = 12
ItemHeight = 15 ItemHeight = 15
Items.Strings = ( Items.Strings = (
@ -707,10 +735,10 @@ object MainForm: TMainForm
AnchorSideTop.Control = PrevDateButton AnchorSideTop.Control = PrevDateButton
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = NextDateButton AnchorSideRight.Control = NextDateButton
Left = 37 Left = 36
Height = 23 Height = 23
Hint = 'Current Day' Hint = 'Current Day'
Top = 10 Top = 9
Width = 107 Width = 107
CenturyFrom = 1941 CenturyFrom = 1941
MaxDate = 2958465 MaxDate = 2958465
@ -739,10 +767,10 @@ object MainForm: TMainForm
AnchorSideLeft.Control = PrevDateButton AnchorSideLeft.Control = PrevDateButton
AnchorSideTop.Control = PrevDateButton AnchorSideTop.Control = PrevDateButton
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 9 Left = 8
Height = 23 Height = 23
Hint = 'Display Mode' Hint = 'Display Mode'
Top = 41 Top = 40
Width = 163 Width = 163
BorderSpacing.Top = 8 BorderSpacing.Top = 8
ItemHeight = 15 ItemHeight = 15
@ -757,11 +785,16 @@ object MainForm: TMainForm
TabOrder = 9 TabOrder = 9
end end
object DaysCombo: TComboBox object DaysCombo: TComboBox
Left = 344 AnchorSideLeft.Control = TimeIncCombo
AnchorSideTop.Control = ResourceCombo
AnchorSideRight.Control = TimeIncCombo
AnchorSideRight.Side = asrBottom
Left = 347
Height = 23 Height = 23
Hint = 'Visible Days' Hint = 'Visible Days'
Top = 40 Top = 40
Width = 89 Width = 105
Anchors = [akTop, akLeft, akRight]
ItemHeight = 15 ItemHeight = 15
Items.Strings = ( Items.Strings = (
'31 days' '31 days'
@ -779,11 +812,15 @@ object MainForm: TMainForm
TabOrder = 12 TabOrder = 12
end end
object PrintButton: TBitBtn object PrintButton: TBitBtn
Left = 279 AnchorSideLeft.Control = DeleteApptButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = NewApptButton
Left = 273
Height = 24 Height = 24
Hint = 'Print' Hint = 'Print'
Top = 8 Top = 8
Width = 24 Width = 24
BorderSpacing.Left = 2
Glyph.Data = { Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100 76010000424D7601000000000000760000002800000020000000100000000100
0400000000000001000000000000000000001000000010000000000000000000 0400000000000001000000000000000000001000000010000000000000000000
@ -807,19 +844,52 @@ object MainForm: TMainForm
Spacing = 0 Spacing = 0
TabOrder = 13 TabOrder = 13
end end
object SettingsButton: TBitBtn
AnchorSideLeft.Control = PrintButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = NewApptButton
Left = 299
Height = 24
Hint = 'Settings'
Top = 8
Width = 24
BorderSpacing.Left = 2
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
0400000000000001000000000000000000001000000010000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00300000000000
0003377777777777777308888888888888807F33333333333337088888888888
88807FFFFFFFFFFFFFF7000000000000000077777777777777770F8F8F8F8F8F
8F807F333333333333F708F8F8F8F8F8F9F07F333333333337370F8F8F8F8F8F
8F807FFFFFFFFFFFFFF7000000000000000077777777777777773330FFFFFFFF
03333337F3FFFF3F7F333330F0000F0F03333337F77773737F333330FFFFFFFF
03333337F3FF3FFF7F333330F00F000003333337F773777773333330FFFF0FF0
33333337F3F37F3733333330F08F0F0333333337F7337F7333333330FFFF0033
33333337FFFF7733333333300000033333333337777773333333
}
NumGlyphs = 2
Images = ImageList
ImageIndex = 7
OnClick = SettingsButtonClick
ParentShowHint = False
ShowHint = True
Spacing = 0
TabOrder = 14
end
end end
object Panel2: TPanel object Panel2: TPanel
Left = 0 Left = 0
Height = 25 Height = 25
Top = 588 Top = 588
Width = 445 Width = 477
Align = alBottom Align = alBottom
AutoSize = True AutoSize = True
BevelInner = bvLowered BevelInner = bvLowered
BevelOuter = bvNone BevelOuter = bvNone
BorderWidth = 2 BorderWidth = 2
ClientHeight = 25 ClientHeight = 25
ClientWidth = 445 ClientWidth = 477
TabOrder = 2 TabOrder = 2
object IconsProvidedLabel: TLabel object IconsProvidedLabel: TLabel
AnchorSideLeft.Control = Panel2 AnchorSideLeft.Control = Panel2
@ -1147,7 +1217,7 @@ object MainForm: TMainForm
left = 112 left = 112
top = 192 top = 192
Bitmap = { Bitmap = {
4C69070000001000000010000000000000000000000000000000000000000000 4C69080000001000000010000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000005A3B261C0000 00000000000000000000000000000000000000000000000000005A3B261C0000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000885B3B4EB57C50B70000 00000000000000000000000000000000000000000000885B3B4EB57C50B70000
@ -1371,133 +1441,192 @@ object MainForm: TMainForm
B0F5C8BDB0F5C8BDB0F5C8BDB0F5C8BDB0F57470BBFA8282EEFF8F8FF7FF8F8F B0F5C8BDB0F5C8BDB0F5C8BDB0F5C8BDB0F57470BBFA8282EEFF8F8FF7FF8F8F
F7FF8F8FF7FF6968DBFE22226538000000000000000000000000000000000000 F7FF8F8FF7FF6968DBFE22226538000000000000000000000000000000000000
00000000000000000000000000000000000010102F043434967A5E5ED8DD6363 00000000000000000000000000000000000010102F043434967A5E5ED8DD6363
DCF55050D0BC2121643600000000 DCF55050D0BC21216436000000004C7047004C7047004C7047004C7047004C70
47004C7047006487531680A56B9080A56B90648753164C7047004C7047004C70
47004C7047004C7047004C7047004C7047004C7047004C7047004C7047004C70
47004C704700648A5763B9DCB4FFB9DCB4FF648A57634C7047004C7047004C70
47004C7047004C7047004C7047004C7047004C704700577B4E0862875432527A
4F01708C634791B681CCBDE0BAFFBDE0BAFF91B681CC50AC4346597E4A016287
5432577B4E084C7047004C7047004C7047004C7047007397617CAACEA1FB9BC0
8EEFACD0A4FBBDE0BAFFBDE0BAFFBDE0BAFFBDE0BAFFACD0A4FB9BC08FEFAACE
A1FB7398617C4C7047004C7047004C7047005589520292B883E4BDE0BAFFBDE0
BAFFBDE0BAFFB5D8AFFC9BBF8DE99ABF8EE9B5D8AFFDBDE0BAFFBDE0BAFFBDE0
BAFF92B883E4558952024C7047004C7047004C70470065915E319FC494EEBDE0
BAFFB8DBB3FF74986391597C4D02597E4A017499638FB8DBB4FFBDE0BAFFA0C4
94EE65915E314C7047004C7047004C7047004C7047004C70470094B984CCBDE0
BAFFA2C696F5638A500C4C7047004C7047005E83560DA2C697F5BDE0BAFF94B9
84CC4C7047004C7047004C7047004C7047004C7047004C70470091B681CDBDE0
BAFFA9CDA0F86388552B4C7047004C7047006388552CA9CDA0F9BDE0BAFF91B6
81CD4C7047004C7047004C7047004C7047004C70470074996482B1D5ABFCBDE0
BAFFBDE0BAFF90B580CE648956526489565290B581CDBDE0BAFFBDE0BAFFB1D5
ABFC749964824C7047004C7047004C704700597C4D0290B580D1BDE0BAFFBDE0
BAFFBDE0BAFFBDE0BAFFB5D8AFFFB5D8AFFFBDE0BAFFBDE0BAFFBDE0BAFFBDE0
BAFF90B580D1597C4D024C7047004C7047004C704700708C644591B581CF5FBC
4F8192B681D3B6D9B1FEBDE0BAFFBDE0BAFFB6D9B1FE92B681D35EBB4F8191B5
81CF6F8C63454C7047004C704700608651144C7047004C7047004C7047004C70
4700567A4B0561BD519ABDE0BAFFBDE0BAFF62BD529A567A4B054C7047004C70
47004C7047004C70470060865114779C5E664C7047004C7047004C7047004C70
47004C70470063895547A7CB9EFEA7CC9EFE648956474C7047004C7047004C70
47004C7047004C704700779C5E66779C5E664C7047004C7047004C7047004C70
47004C704700577C4D046186533361865333577C4D044C7047004C7047004C70
47004C7047004C704700779C5E66779C5E664C7047004C7047004C7047004C70
47004C7047004C7047004C7047004C7047004C7047004C7047004C7047004C70
47004C7047004C704700779C5E66799B6051779C5E66779C5E66779C5E66779C
5E66779C5E66779C5E66779C5E66779C5E66779C5E66779C5E66779C5E66779C
5E66779C5E66779C5E66799B6051
} }
BitmapAdv = { BitmapAdv = {
4C69010000004C7A070000002000000020000000510F00000000000078DAED9A 4C69010000004C7A080000002000000020000000B31200000000000078DAED9C
795093DB15C05FDBD76DFA66DA4EF769A77DD369A76FA6FDA3D37FDBCE38639F 77505B5B7AC05F362FD9949D4932BB69934CF22693CCBE99643399E4AF6C3619
CFE78A0BF6C963532480DB136509D9080828A0AC8A2C0990051114903D405040 CF38CFCFCFCF05179C672FCD1449B8178A3A0203361D818D2912A8610C36BD09
5156173645106471098B10B6B0E6F49E4F931730C1846CD5973B7326B9F9BEEF 10366063535D68CF05836D70115D34517572BE6BA477254B20A1B6F6EACE7C23
FCEE77CFB9E79EF37DF9E083F7B315FB6EFA751163DB17D66097D2ED3E2E61DB 9D5BBEDFB9E73BE73BDFA7AB733FFBECD3DC2A8377FC550573F777CE6057D3DD
F51532B6712DCD2E0CD8FA4909CB6EAC8CB36BD1D2FC42E6D67F95B2764C74A4 BEA8E2B8BD2C67EEE6399A5DCED8F56515DB6DB286BB7FC5D1FC72D6AE5F55B3
7C35D310E3366749BE84BDFDDFA5ACED8A4702DF85F1D248B0245FCAD9FDA584 F74EF7659D9A6F4BF65B74245FCED9F3DFD5EC3DEAA7E2E0E5A9EA38E448BE82
B543F158E40FC8B624BF32788F6729CB6EB63F8BAD665B8A5F19B4872BE1EC98 7BE0D772F65EF573692802B623F9F5110769D56CB78557F91C1DDB51FCFAF083
1EC8E62C635B825F19649F50C6DE39F33C27E80DB6B9F9D2A03D6269D0EE0959 3C3977EFDC5001578FED087E7DB87B5A0D67DFFCDBC2F00FD8F6E62BC20FCA14
DE49AD6C73F1AF73D77D58C1B5BF56196C3F31941FAA936D0E7E36D7FE2329D7 E107A695C5E78DB2EDC5BFC5DBF2791DCFFD667D84FBF448699449B63DF8053C
BEBA2AD4616CB4E8F4AA6C53F3915D1EB8ABFD46B8D34B7DD8A6E4E33E52C6D9 F79F2878EE8D0D518727C72B2EAECBB6351FD8B561FB7B6FC7784E98C3B6251F
D95D7BC6656CAC24422FB6A9F8C896B0773EBB13471B35846D6A7E739CC74B6B E6911AEEBEFEE678EFC9C9AA58B3D8B6E2035BCED9F7E67E0A65DC12B6ADF99D
F035E6BFF79615E67FA5FFD5463A8F5ADAFF34C740D6FEEDAAB0BDE3965E7FCB 29D40967F049ED3F78D709ED6FD8FF9AE3BCC61DDDFFC875C063FF5E43F4A129
E3CFEEEBD743F68E593AFE2C1B43F0EE2C69D0EA31D0DCFB4F4590BDB09CBB6B 478F3F7DFF73E0D6ADC843938EF63F7A75883890AF085FDF07DA7BFEA90B7797
CA1AFB8FC6DE7F52D71E68A9FC431ABC8761ADFC43633F76C131F45D6259858F D4F2F6CF3A63FE21CDFDE74DCD818E8A3F14110799CE8A3F48F3B137D4E1E535
AD9C63BFA3542307B434FFEBFC7BBBA233EDC4BC35F854BC66D8FD9DD862C21A B653F8B0D572DDF75693624047F37F88BFF7A89FE49C5B72069FF0D74CB77FC3
F5C78A1A68D45A7C6BD79FEF5D2D4FDFB6116D6A353E63AB2BD6D4E8DBD6E293 B6987646FE6190038D3B8BEFECFCF393CBE5E9BBB7834D9DC667EEF2819C1AFA
7A63A1846937836BDC1AFCBAA8FDA318DB30C649D8BBF658838F71F549261330 B6B3F838DF58AE62B9CDC3187706BF25D1771C7C1BF8383967FF4167F0C1AFBE
D6931AC8D51A7C14DCEB24EC1D8A8AA03D81D6E0A3E09E8F7B3FC90122ADC157 C86321F0F53807F271061F04E63A3967AFBA2EFC609833F82030E7C3DC8F6380
8D81E4417269F06E9135F8289803925C70928CA30873434BF351860BC2A02A74 3867F0B575C071904A117140EA0C3E08C48038169CC1F5A880D8D0D17C90D1B2
EF1819439539C6F0363E0AD60455610EE324276DC35AC1D27C14ACCF6E45BABC 68D410756812D7A1C11E75D8880F02394143F4E1291C93F640AEE0683E08E467
2463E828E46EFDB9A5F9AA31D447BB8D9571763CC53DD8D27C9534C579C849DD 77E3BC27701DFACA79BB7EE668BEB60EAD497E9335DCBDAF610E76345F2B1D29
2A33C5BEB5163E4A5BF2D18952B69DDCD83118C3975889DF1CEF2127317AC4D2 5415CE5B95B698B736C307E9C93C395DCD7153595B076BF87227F13B53A92AEC
F38FFED714EBFE92D8DEE2FE876C7C4E551EB8ABD3546C43E20F3E9FC3E72496 A3C71CDDFED0FF3AF80113D8F60EEF7FC086DFA96AC3F63FB115DB12FF03BFCF
8E3FC8BE1EBA771C9F4F9A9AADCFFE5319FC5F393E97B5F4FEF37AEF9B20FC0C C1EF248EF63FC0BE1575680A7E9FB435DB9CF9A73EE2FF54F0BBACA3E79FB5B9
ABE41F9C9D3352EE9E144BE71FCF5EE73EA4EE0FB674FE85B91FE69FD260FBE3 6F1AF3739D127F70F7CD2B7807B31C1D7FBC598B7D70DE1FE1E8F80B623F883F
96CE3F7B2F3228760577B7B3E5EB0FFB056417D1B7FFC72AF517739BC21AB5CF 1511EE671D1D7F0E5E6512EC3ADE012FC7E71FEECBC0AEA0EFF95FA7E45FACDD
FF43FDF94D6CE951EC58416CE0B029047519CA4F8B6167DCBE560893F2974609 6A67E43EBF09F9E76FE3264AE4F0C5FCB0515B08E8B2949F93CCC9BD77B31CCD
EA109D0BBE6C285F18CB4968AEAD00635B5BD34D1BDF407E2CD38BC68B0CE836 A826AC12D021BD1471DD52BE84CF4DEB6CAE43D66E3D1D775C7C0BF97C562045
153F3D9A3D803AF5E59F0B3C745914C30193DD7F1C1712B847F2576346D33D3F 10C7E8B7155F94C419029DE6F22F851DBB2E4DE6229BDD7F0A0FA5F14E94AEC7
8E0AA0D1CFD269DC58A6677B4E940F14C7FA40755A8851823A72A37D218EE5F5 4CA2D3BE486450E809740A8FCFA2F5162606A14A7E106ACC89B44A4047515230
107523E34C006D592C3DEBEFE118CF3E389D11C399C88CE34E12992E8DA0919C 4A61073E06DDC0886750F47C694228D5239573742E37993B9D97C29BC132571D
CE01EA62DC8D12D481BA50E76BDD93C88A617A1C54CF37E7D0839A5C1EB4555F 4BC131DD61D4921C6095800ED0053AD774CF002B99453DAA6B6FEEB1EF9B8A04
55CB8D243AB4261E06436B9E95D2C13B0635E7BC97E9AECD4F07C2EC51F1E3D8 A8A7B14427B733E8A83BFD38B234E731943EC169D474E98C9EEEE65211C2CC01
5EC3B78B8466E7DFB95D0E2D3505D028C90462E3194BF29BEAAF81E8254051EF 2D3F8513387AAF426277FEFD7BB5A8ABA90CB5CBF310B6F1BC23F91DAD379174
A055F8F76F1643DEC03054B5DED38B8FD798828F3A56DA5F1F7E435614D444B8 02A18AC161A7F01FDDA944C543A3A8A1FBA1597CB8C6167CD061687F73F86DF9
C248E1A935B3B12EBA79661FD48BC30CE6B75ECF81AA984350C2DC0EC58C6D6B 89A829D6078D955FD8341BF2A23BF14750AB2CDA627EF7AD42D4907C0C55B1F6
96EB515ED07AEDB2C17C95B4545C827B12F19A04AFD5A6D310BE39E4FF997FA7 A04AE6EE4DCBADC440D47DF3BAC57CAD74D55D430FE5B24D095C6B4CA7257C7B
3C0B72934F4372E8714808FECA2482BA7292C2A0A9ECD25BF97929E1101D4003 C86F32FF7E6D3E2ACABC8832A3CEA2B488533611D05598118D3A6AAE6DC82FCE
7EB81F14659C875A499651823AF8E1FE94CECB09216FE517A54751E766C406C2 8A41490C0A12C684A08ADCCBA8599E6F95800E614C28A1F37A5AE486FC0A5122
E3B63A181DE8304AFA3BEF40467C10A5339F1FA9951FCF39D4877B02B5EEAAF2 716E2E3F0C3DEF6941E3437D56C9AB27F7516E6A38A1B3541867949FCA3DF612
A0322B11F278916FF06B8AC47AC94AFE95E470A8C83C4FE946465DB108C81EF8 E60462DC3514A3FAFC74542C88FB80DF5421334B0CF9373263505DDE65423730
54CD677AD29342BCA70BC8F85472E9FC49686FAE8119F9B05A6E95E7E8259AD7 5A2AA508CF81AF757C168D9E117966AE0CD74F2BD72E9F47BD9D4D685E35AA93
3C6AA9874B64DE3575A784F94CC731BDCEAAF85C2EF743323F76F19CC31731F7 BBB5856609F99AA75DADE81A6E77B2EEACE8A0B91456608296CFE3F13EC7EDE3
413175FEA5D28B121D706037320DCD3F7B1EB6E825E6C87F6715335092CDD34B 96CA3D7E15621F105BC75F5ABD20490CFF03C0B434FE1C78DC6596D823FE5D50
F0DC773DFFB776FD65EDFAD3526DCBB1CFDE39E1A6B9FEC03FD9E5AF7E298E9F CFA3AA02815902E77EECF1BFB3F32F67E79F8EDA769EFEFAA3135E8ECF1F8466
FAF25D9C7D79CEBB7C792EFF3CC173F8031EF7B9E0F44BEA3772CC8FEFF48F0F 7AFF734896C757C1426FAF6081D7FE6081F77F9D131CFE7B381E74C5F32F887D
E0836F19CDCCB6FF5E40EA3E9740B16775A0F8A0ECCC55A6EC7C45D8586A4DDC F85888D0F3DF3F439FFD8ED5CC02F7DF67641FF10E93D11AC3644795F1252CE5
7CCAB5A8E9B8D2E091D3574EC8D842DA14F7E2C1D9A4CA08051E8BCC670EB345 E5BAE8C9ECA694A5AC9B897329D51163176F9C5372249459DED5A30B19F5B16A
1EED749EE39FD6C4E572BFCDE0EF7766093D06932A23A70BDAAF40E59372AD12 381657CA1AE548A9BD7481C73F6E8ACBE3FD8829F4F5624BA8C319F5717365BD
2F09860B15A741DA2359F6FBD5B62C206378CE48D9FB2B43D8F404879FB284EE 3750FD8B5AA3922A8F4057EA2E22C5805C6F7F494F3EC27578CBCC3AF49796B0
F5E72421E392AE429D5C94BCD62C08CFF503E99332ADC7C575494B4CA187585F E96987FF8C2D0968BD248F9C923F2B37C90529EECE4731452148F1A2C6E87159
B66F9AEB9F09FBC9A546FE82367DC50FF320FB8E0084B713E1623D8FBAF78C06 4BC62A4B429599CB0ECEF1F927CC7E71AD5DB86C4C5FE5E36254705F8C24F7D2
9EEE31F6965373A00F9BD8F9172C216D00E74D53470599577E4DCC0C37E3908C D1D5560171EFB96D02D3751CAC25DAC01C36B6F39FB32594216837B28E3ADCAE
2DF26C20FACED3F9FB4F3085EE411CB1E7939CFB19ABCE1127C36B461F3F6309 C2A6E4795EEE3125474A6BC3FA2ED385BEE758928070AE8CF6A2F051EEBA6DC4
6877B39A058B9AD75EB9275EE288BD640CC101B68FD0E9476FD82A7D1F53702B CD0D9C37A79FB1C59407F99DE215F2B5371ECA56B9B2402553ECCF099278FEF1
6151171BC71E28F65AA28BDC0EACC667A6BBB3D0CF34AF15DC4A54B044B496D5 07B6121D6189EFA6AD986243DDC36481AB74A99FFF7A7C9628800DFD8C7CADF8
FCC73FC9F9F741170F0D57F44AB4F2536FC442F2B533640E0E0EE1FAD4A6E358 6EBA9A2DA574ADD77F4233BCFE2EFCEAB1D1BA41B9517EF66D3ECABC198FDBE0
9AEB4F38224F59454FA9FABAACE6F4250E998F237147BEFFB6B96388DCFD4F5D E8088C4F633A4EE7F8FC29574A53D60D54EBAECBEF14AD72717B9C4839F1E38D
F191973E2A505F8FFE28BA7D01C8EF807A33EA531675F921B1E369328773AA6B DA8E290D08BD70234855FDB44C773DF447E9BD2B08EF47A037B7356BC5543FC4
255D45C0167B3EF5E539FC4C5FBF6508DD1CC85AEDC75870269F2923369B08C9 76BC88DB70517BADFC5905E2C868AF8305877F6A6EBF654AFC0EE3B1FA0A7C41
F29E2B7F5CA21E4FF0A523438C24C7DFACBC96F8FB8BA80236845D3E0E67F219 7C294B896D361D997F66B1F67995AE3E11D74E8C30333CFEDAF05ADCDFDF2596
10911BA060A4EE3FB096B881B11063A477B6FD0F892FB715767C1D37485C9A0B 7150F4F5B328BE9489628B186A66B6AFFF66FC06F842F091670ADCFF10F7E59E
48DF775433C630053469649EBFF26A5B36A00D8B1EE4622C51927B6945BB1813 F2BE1FFC06F64B8B0CD19193641FC312531471C5A19A929E020436ACF8BE087C
3BFD792E9BCF4942C755FC22B276C9FA6952CFBB80164A62CCAC8EB8B1C0167B 8906DF4B37D8C51ADF192AF0FEF6923C6A4ACBAFC063178F9F0E5DBB8B2951D8
488DE1A3EF10DF9769EA650B3D87705FE072D77D48D6F1329F5B2921D9C787E9 C72C98F01BCB1C1955610D1FFA0EEEFB4AB25E8E843602F3028FB7E5733C8EF5
A9FBFF68CC18D8428F07E5DDC56A9DC1994764DE02E7DFFAF11DFF12914797AD FA9CA144169C1DA567FBFE833575E048A8DFD7F657EA7446E49D509E117BFD4D
1637F8D5310A7F9ED317C6F039199E959A3E1079952EF3E139FDCDB2FC1CB54E 88D0E3E7B1C574E57A7E43D898AC0E15787E670D9F9B4BAB27F781B812BA3248
64225F35FF521D710325F4B2F790B9E61F8F0592F87DA1E294421B3BB3216581 E0F92F8EE517EA740213F8DAF65798F01B2051D7CF8CD8ABFDE15818F6DF57EA
25F2283397FFA9D79FD0BD3C22D75F994FD69FF4F5FA4B283FA5C4B8EB9F44FB 2EA88DB1F3DAB296D9526A8DBDFA9F6EFC49026A638B4235A578FC29D6C65F5A
B151EB2FD5752BEEE1BAD69F3AFE080E3C8F2AC4F873E255FCB94A57D045FB69 ED050DF8DDD00CCA9F5835FEB27D76C11C6E6AFCE9FC8FD8FF6D6239F89F73EF
6B61DA67DB7F2720C9F59313697B3FC1FC47D3F6FCEAB85966AADB61ADF1B756 FD4F095D4D97FA5236C3742F70FF5D4686CF97E7720E7D09F10FD9F6C2C69405
23FE7617517BB621F117E792957E20047D0A7D3C3C8F3EC1CDF052F2ABA2A91C 56B6DF71A3FEB799E47FFB2B8839DB12FF0B6DC916F947429F823E1E534C9FE6
808ABF99DAE32FC639322FB2F29E9265FB0FB1C15DCC39F5F4B382736521539A E5066A840D49440C40F8DF3CE3FE17FC1C6E1765ED4095DEFC836DF000624E33
F104ED99288D8098622EB5FF048A3C043AF78F74F700ADFB2F89E1DAC6BCD2CE FB59D9A59AC859B23F017BA62B625172258F987FC2A454B1C9F94314C0303AFF
E49EE5BAD6D1D97C26994FDA38E637BA74D09268DFA5F28FA6F437F20FCC7BC9 621F6EACCE8676C6F7AC32358E124A59B83D295310DF98D241C9A0FC1E117F74
5ECCE59EB7FF48EBBD93388DFB872EFEEB3CB4FDADB91FB137EEA12BF32F9C47 883E883F20EEC573318F77D9FD2746EF1DFB69983F4CF1D7E2D0DE0D633F6C6F
7E75AC827B91CABF9A48AE9088F917F1DB6076865726D1BDB05A1CC11C885CD7 98430DE32F684761235FCDBB4AC45F1D38564887F80BF7DB084E6E601ED6BDBC
A56FFE49FCB127B3913FA735FFECBCAACE3F31EFC4DC2FF26A00B5B674F1714D 9E1F8118085FF7CCDCF813F7C781BC76E1A2D1F8F349892EFE84B81362BFB812
73445EB5FAFA32FA234BE0713BBEF4E4B8664EA34B84B72E503996AEE3643F9F 0631B64CF1614C73A581CDE6F665E88F6C31F55E6AF5F929724C634A2477AF10
34349FC018C548DDE748FC6680F8F0547EBB6EFB62DD817996B82EF98D63171B 3196A9E3783E9FB1349E001FC5CC3EE281FBCD10EEC3B3A5BDA6ED0B7907C459
780B18CB30DEAFB5FEF24F75762471F43AC6526DF557588EEF0BE2BB4FB1560A B296CC0F8E5D6D132C832F037FBFD9FC2B34DBCB03FBD15BE04B8DE55FD185C1
C9F61EE35545CFA2E0FE8131DCD838AA19CFB1AEF44B71DA493EDDFC539C1D7D EF70DF7D0DB95264C199494143D20208CC1FE0C3ADF5A3647F0E79654896E73E
79AE1BE969AE1FABF371B25FF9A6B8EC453176EF32A7D8DAAB66BF533ABD6D6B FCE9179AE5E5112CF0D94ECFF1F942178FE3F92A38CBFB1088B573973DC5B5BD
ED922504592BF9DBB6DC5C3A7AB41F58AC61B30A32700C2BF93BED6A16F07874 DFDCF729E676EF6A5E758400CB90BF7BE79DD593275F21367BD4AE020CA88321
B4C2AC1214F4D2C6D7C2DFBAE5C6A28B4B277879F59A5590A18DEF774438723E 7F9F5BD3321C4F4A52DB55C2C3275C7C23FC5D3B6FAF787B3F41818183761560
BE05048201B34A62C203F03B9A3EB5922F8A0FEA79D6FF18CCDD4664CF009FC9 18E3879C908C5D4EED4262F1905D253DED7B147252346BC897A6860FBC79F51C
BE6BFCC58579504C8DC39C628AEA2B954B541F05BF63C363D8C773B12DCCCF52 D97B1B53BE41F09BECC7C65F595E42EAD929B4A89E25CA1ACD2A510681EFB0C1
FDF9D919A3F9D313A3D0D3560B83DDF7A8FED2E202D547410EB667BDAD547F72 3128C3B9B02D2F2D10E5A58579ABF973D3E368A0A7190DF73F24CAAB2BCB4419
4C46F5C764FD547F68B0CB68FE947C04FA3B9B4036D0F9FADEE6A83E0A7EC786 0438B0BD19EC26CA33934AA23CA97C459447869F59CD9F558DA1574F3A9072E8
C7B08FE762938F3CA3FAA3CF7BDF79FB5B9A3FF2BC87B21D7E5AC3FEC6F0BB7B C9DABD2D126510F80E1B1C83329C0B9B6AEC0D511E7F3BF8D1DBDFD1FCB1B703
EF42754B09A4149F82B08B5F4162C149A8BC9B0F7DB26EBDF98B8BF3945EE450 84EDE0D319F6B786DF3FF800357655A1ACCA0B28FAEA29945E761ED53F28452F
BCA545AAAF5A5B4AA592EAA3E0776CF3E47B696336901C94D4EE61406A59B87C 95FD66F357569608BDC02178AB2B44593BB6341A0D510681EFB02DE1EFD5ED05
57447D9E2F0B038ED00332A5099016C71E31B5FD717C71F98110914B273548AE 08C7A038778F46389745D71F4889CFCB35D1882BA1A23C451ACA49E18CD9DAFE
D6FCBCB4AB10A20B39C0E6BB2F616DB11A7F7C78909A4F952D6726C7A8BECA1E 50BF94D230145B44C7394891D1F8BCFA59394A2AE7228E306015728BF5F853A3
380FD847C1EF78DF9139F465BCBB2F9A6154310AAD43F797D7A1790C25A9830A C3447B6A6D393F334994B5F680768032087C87FB8E2BA4EBF11EBCEB44E3EA71
4C65FFFE175DD49CAFBCEF27F257EBFEE9E4E0B2DFCBBA8B8029709FF1E5396E D43DF2483F0F2D666A701E54662BFBBF7AF78C6873C3FB7EA17A3FEE5FCF0CEB
D4C5574CCBA97B57C5DBF93905D5C77950CD37F651AEDD2F84C4F2F037E65B17 EDAFE9AF402C71C07CB0C063BB29BE7A4E45DCBBD6DF2E2DAA8932B483B6BDA1
1F85D4690BA45E1599C2FEA9E551948FA9E61CB928F2D971EAF8E4DC84FA3795 0C72F351394AAF8DF9A0BD4DF141709EB68CF355A92DEC9F5D9B48F4316D9B03
2D2E35A5E11C749B821F71D90F9F0F507AD1DEABB58939F9EB6750B9E0CFDF37 1744B530451C9F599CD6EDD3DAE25A470EB441BF2DF8B1D743E0F701422FD87B
6B0A3EAF2C12447549945EBC3F9C6F14BC6FCA77E6A7D4BF3D1CE9A0CECBBE23 BD6D7A51B5F61B54110A151E59B0055F501387A42D19845EB83F686F10B86FA2
C4FBEFD5E4CB9EF6C03CB1B7A12269C882C40AC3ECCFAF8E51929AFA8A267F4C EF2CCDEAF63D1EEB23CE2BB82F81FB1F24F395AF07D012B6B7A5226FCB47E975
F6042686FB0C96F687351028F2A4D6B73E7C7C36456AE8697CA6AB7EDF1DC391 96D95FD898ACC139F50D327F52F9024D8FBEB4587A1F37A130298D18DFE6F0E1
3D7DDC063886B54886340E620B039771D016686FD59CABE45C7188922DF4B8B5 B7299C43CFC16FBABAE7DDC95CE5EBE73D08EAB019C955A4207E79981E076C01
EC7D7B0CBBC99877EC185331AEC5147195B8BEB53FFF29A5E2302375FFA25FCA F6D6B6B9562E55466A3812EA5DBDE7EDC99C0E6B9EB1834F05BF965CC1D3C0F8
97BF33750D893135206D7F26C616625FCAC7D0CFF113FB38E7E478A539D89ACD 36FEFB4F35E18799D9BE2B2159BFFE5B5BE790E0531939BE79E05BB07D893E06
37D9790BE12433D3DD1EE11A630A0EF430D2DD449AF6B6355BFD6FABBF6DF5BF FD1C3EA10C6D8E8FD7DB834DDE8233BD76624E264BE4F714C6184BEC3FC014F9
ADFEB7D5FFB6FADFE67FEF53FD6F0AFE5AEA7F3C465D43CE558D91BA6671FE9D 49C9F6766DAEFCDF957FBBF27F57FEEFCAFF5DF9BFABFF7D4AF9BF2DF89BC9FF
B3BFA1F5BFCA66D857D5C8D6F63F63F886D4FF2A7BE331ECE3B9EFDBFEF34DE0 E118710D3E575B47E29A95A58FCEFE96E6FF5A9B41599B233BBBFF59C3B724FF
AFB5FE37445E0E3DD5C95F6BFD6F88C887FBB5F28DADFFF5156468E71B57FF1B D7DA1B8E4119CEFDD4E69FDF06FE66F37F4B6462E4B549FE66F37F4B4435FACA
F47F7CC2B255BCB666ABFF6DF5B7ADFEB7D5FFB6FADF56FFDBFCEFFDA9FF5BEE 28DFDAFCDF5C018671BE75F9BF45FFC7C72C57C6EBDA5CF9BF2BFF76E5FFAEFC
0E4076F633F0F7BD0F7BBFA887E3C7EE82583C081D1D9366ADFFE766E72095DF DF95FFBBF27F57FFFB74F2FFAE0743A8A0E00D0A0D7E840E7DD78ACE9E7E8064
0B9B3737008DD605DEDE83D49E8B9FEEEE5DB0654B239C0E6B035ED44993BFFF B261D4D73763D7FC7F716111650B07D1B7DFB6210AE5193A7366989873E13320
5F5C5482A7672B3838B44268A85CEBDE131E3E49E27F07D86DAF5E5AB7EEBA49 E019DAB9B31D5D8CEE4182C4F3367FFEBFB2A241345A373A7CB81B4545A98CCE
DFFF27270F80A3E37DBDF64017E77BCA4D9B9A4DF6FEBFF3E11835E7BAEE7BA5 3D313133D8FFF721B73D8DAB5BB6DCB2E9F3FFCCCC21E4E1F1C8AC39D0DBEBA1
44444CC1E79F37CCAC5F7FCB24EFFF333307C9DEDA6D501E70F0E093854D9B1A 66C78E4E9B3DFF7FF27892687353F76D28B1B1B3E89B6FDAE6B76EBD6B93E7FF
4DF2FE3F20A093F231D49B9333078D8D0B3AA5B8789E3A8F4E97E11C98E4FDBF 7979C3786EEDB7280E387AF4C5F28E1DED3679FECF603C21FA18E82D2C5C44ED
93D33D60B34728BD7D7D4BAB9E2B932D51E7A1AD3EFDB4DE24EFFFFDFC1E828F EDCB26A5B27289388F4E57421BD8E4F9BFA7E743C4E18C117A5FBE5C5DF75CA5
CF334A2FDE5F4BCBA24E914A5FDD3F9339041B373698E4FD7F2ABFC760FB1F3E 7295380F6CF5D557AD3679FE1F12F2180505BD21F4C2FD7575AD981485E2FDFD
DC47D640A349DEFFD7DFEC22395D23B5BEF5619F3D3B4D6251F3F4FAF5B5267B B3582368FBF6369B3CFFCF160E586CFFE3C75FE231D06E93E7FFAD779EE198AE
FF1F12DC0A6E6EED7AF169EEEDCACD9B1B4DFAFE1F63EAF66D354B24BE29717D 9D18DFE6B01312E6B02FEA9CDBBAB5D966CFFF2323BA919F5FAF597C4A40AFE6
EBBA6F77F747B0E9F39B8BEBD6D599FC1D3CC6D40D1BEA3231B61C39D247F918 DB6FDB6DFAFC1F7CEA9EDD4DABD8BF69607C9BBAEF8080A768C7377756B66C69
FA397E621FE77CC386FA4A73B0351B896B5B3EFBAC2E998CE311AE31E2E73D1B B1F93378F0A9DBB6B5E4816F3971E225D1C7A09FC32794A1CDB76D6BADB7079B
36348834EDAD6AFF03880DBFF8 BC61BFB6F3EBAF5B32713D9EC218C3FD7C60DBB63629D9DED6ACFF87B550F42C
EFFF208BB9EBA36C2174A1F7FEF3F9A7A7122BB8A320F01DF6398ACF91D2F20B
D7FEEF44AC8D7A20837545F98EE35387C9EBAC15C4BA26EA90DDDFBBC0E3FD88
2EF071BF5018346AF8DF1AD807C76CF1AE05582FC310FBC5850ABCFF07D6A3BD
5FDB76E4971C096530A52A7C12D651195B5B05C7D852CA009CAB5B338475802E
4BD6E0604E83B089AF49AA0C1B8735F7B86DBB220B4E8F99FA5FA55E3DF03970
2EAC9B866B932B79E3C246BE06749AB57E5CE0BD35AE98316EF8AE03C3773AAC
27702EAC4F23EF8B2D614C80EE8DD66C42FB99739F8AC11A04EFA228EBBB417C
37A75DD812CA0030D65D7B28A1D60B9B52E6D67B8F43D6AD8419AE94FA962BA3
2938D2C07A8E84F616EF9B8563A6AE1334F1E740B7B63F6D5887DBC6EB9050CA
9E6489FC33C8FE0EFA19B62F3FA18C336974FD34BE1F73D8E43A30C5FE77E03F
9A643DB8BC8AD9B526DFDD20F657E477883406D72036D6652E5BB716584A89CD
6BCFD6E3C795324660CDB6A96B82B2BCFE15F7DD11BDF5D35807E8B278BDB88C
76D5F07D1A1179C747A0ADD75B97179E77428F0F3A4097E5EBC529FCFC4E911E
FFE28D2025798D9F31BF75B130586F9D37E8005D96F29962BF5CD9DA7F5A49EB
3B1739626A82499B890392F1394B06EF4F40A0CB22DB8B28F109159C29C3F104
7E25B2E0D41823DBCFFB83B5C7397EDF45E69F1EFFC017601DA00B749ACB4E2C
FF90FDC37FB72B11F8473CDFDE678AFC5920D8BE1DF125CCF11AD2FA7EC33A24
56702637AA038C693CBEC6E1BD1F1BFA333CDFC03A571063F391A1804ED0BD51
9CC4C8F10D489547A9CCF5F5E6CA2579D43443E21B60CE1C8FE7BBC737DEAF5B
5889C5E319F7AB717E55B86ABD77646805D6CEF3AB22546C31651CAE15DFBDBC
72FDBE04C6C063D06DDEFB0A8EFC922BA1B53272FCE9A1393EBF80988225F13D
CD931EC5FAD296EA8CCC85B04FDC7C6509CE618BFD4EC135E0AB4007E80A127A
FDA7B571C9B98C433FC336E4C79732270CF9B08F2BA626C33996EA0C157AFDCA
92F5D8D83EEFC8EF5982EFB0CF92D80B98C086D83D44E89961916F96D26AC96B
F3D7D6F55BF48E0C606A73074BF9D807FBE2F1BC24BA938640922AB94BCC1C3F
5F47F11962AF9F86647953C802FB1CC5B785B8F824BEC0AB0FCA0E15CC24F2E6
0CCA1F19E6D28E1260FF3F1AA00190
} }
end end
object JvTFDaysPrinter1: TJvTFDaysPrinter object JvTFDaysPrinter1: TJvTFDaysPrinter

View File

@ -51,6 +51,7 @@ type
IconsProvidedLabel: TLabel; IconsProvidedLabel: TLabel;
IconsLink: TLabel; IconsLink: TLabel;
Panel2: TPanel; Panel2: TPanel;
SettingsButton: TBitBtn;
PrintDialog: TPrintDialog; PrintDialog: TPrintDialog;
utfScheduleManager1: TJvTFScheduleManager; utfScheduleManager1: TJvTFScheduleManager;
StateImageList: TImageList; StateImageList: TImageList;
@ -87,11 +88,13 @@ type
dbUTF: TSQLite3Connection; dbUTF: TSQLite3Connection;
SQLTransaction: TSQLTransaction; SQLTransaction: TSQLTransaction;
procedure FormDestroy(Sender: TObject);
procedure IconsLinkClick(Sender: TObject); procedure IconsLinkClick(Sender: TObject);
procedure IconsLinkMouseEnter(Sender: TObject); procedure IconsLinkMouseEnter(Sender: TObject);
procedure IconsLinkMouseLeave(Sender: TObject); procedure IconsLinkMouseLeave(Sender: TObject);
procedure ModeComboChange(Sender: TObject); procedure ModeComboChange(Sender: TObject);
procedure SettingsButtonClick(Sender: TObject);
procedure ViewSchedsButtonClick(Sender: TObject); procedure ViewSchedsButtonClick(Sender: TObject);
procedure HideSchedButtonClick(Sender: TObject); procedure HideSchedButtonClick(Sender: TObject);
procedure ResourceComboChange(Sender: TObject); procedure ResourceComboChange(Sender: TObject);
@ -133,6 +136,10 @@ type
private private
{ Private declarations } { Private declarations }
procedure ApplySettings;
procedure ReadIni;
procedure WriteIni;
public public
{ Public declarations } { Public declarations }
end; end;
@ -143,10 +150,20 @@ var
implementation implementation
uses uses
tfVisibleResources, tfShare, tfApptEdit, tfPrintProgress; IniFiles,
tfVisibleResources, tfShare, tfApptEdit, tfPrintProgress, tfSettings;
{$R *.lfm} {$R *.lfm}
procedure TMainForm.ApplySettings;
begin
with GlobalSettings do begin
JvTFDays1.FancyRowHdrAttr.Hr2400 := Hr2400;
JvTFDays1.SelFancyRowHdrAttr.Hr2400 := Hr2400;
JvTFDaysPrinter1.FancyRowHdrAttr.Hr2400 := Hr2400;
end;
end;
procedure TMainForm.utfScheduleManager1PostAppt(Sender: TObject; procedure TMainForm.utfScheduleManager1PostAppt(Sender: TObject;
Appt: TJvTFAppt); Appt: TJvTFAppt);
var var
@ -338,6 +355,12 @@ begin
JvTFMonths1.Refresh; JvTFMonths1.Refresh;
end; end;
procedure TMainForm.SettingsButtonClick(Sender: TObject);
begin
if SettingsForm.ShowModal = mrOK then
ApplySettings;
end;
procedure TMainForm.DaysComboChange(Sender: TObject); procedure TMainForm.DaysComboChange(Sender: TObject);
begin begin
Case DaysCombo.ItemIndex of Case DaysCombo.ItemIndex of
@ -715,10 +738,42 @@ procedure TMainForm.FormCreate(Sender: TObject);
var var
fn: String; fn: String;
begin begin
ReadIni;
fn := Application.Location + 'data.sqlite'; fn := Application.Location + 'data.sqlite';
dbUTF.DatabaseName := fn; dbUTF.DatabaseName := fn;
dbUTF.Connected := FileExists(fn); dbUTF.Connected := FileExists(fn);
end; end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
WriteIni;
end;
procedure TMainForm.ReadIni;
var
ini: TCustomIniFile;
begin
ini := TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
GlobalSettings.Hr2400 := ini.ReadBool('Settings', 'Hr2400', GlobalSettings.Hr2400);
ApplySettings;
finally
ini.Free;
end;
end;
procedure TMainForm.WriteIni;
var
ini: TCustomIniFile;
begin
ini := TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
ini.WriteBool('Settings', 'Hr2400', GlobalSettings.Hr2400);
finally
ini.Free;
end;
end;
end. end.

View File

@ -0,0 +1,71 @@
object SettingsForm: TSettingsForm
Left = 548
Height = 299
Top = 283
Width = 403
Caption = 'SettingsForm'
ClientHeight = 299
ClientWidth = 403
OnClose = FormClose
OnShow = FormShow
LCLVersion = '2.1.0.0'
object ButtonPanel1: TButtonPanel
Left = 6
Height = 34
Top = 259
Width = 391
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
OKButton.OnClick = OKButtonClick
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 0
ShowButtons = [pbOK, pbCancel]
end
object Panel1: TPanel
Left = 0
Height = 253
Top = 0
Width = 403
Align = alClient
BevelOuter = bvNone
ClientHeight = 253
ClientWidth = 403
TabOrder = 1
object cbTimeFormat: TComboBox
AnchorSideTop.Control = Panel1
Left = 132
Height = 23
Top = 8
Width = 124
BorderSpacing.Top = 8
ItemHeight = 15
ItemIndex = 1
Items.Strings = (
'24 hours'
'12 hours am/pm'
)
Style = csDropDownList
TabOrder = 0
Text = '12 hours am/pm'
end
object lblTimeFormat: TLabel
AnchorSideTop.Control = cbTimeFormat
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = cbTimeFormat
Left = 59
Height = 15
Top = 12
Width = 65
Anchors = [akTop, akRight]
BorderSpacing.Right = 8
Caption = 'Time format'
FocusControl = cbTimeFormat
ParentColor = False
end
end
end

View File

@ -0,0 +1,77 @@
unit tfSettings;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls,
ExtCtrls, JvTFDays;
type
TGlobalSettings = record
Hr2400: Boolean;
end;
{ TSettingsForm }
TSettingsForm = class(TForm)
ButtonPanel1: TButtonPanel;
cbTimeFormat: TComboBox;
lblTimeFormat: TLabel;
Panel1: TPanel;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormShow(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
private
FOKPressed: Boolean;
procedure ControlsToSettings;
procedure SettingsToControls;
end;
var
SettingsForm: TSettingsForm;
GlobalSettings: TGlobalSettings = (
Hr2400: false
);
implementation
{$R *.lfm}
procedure TSettingsForm.ControlsToSettings;
begin
GlobalSettings.Hr2400 := cbTimeFormat.ItemIndex = 0;
end;
procedure TSettingsForm.SettingsToControls;
begin
if GlobalSettings.Hr2400 then
cbTimeFormat.ItemIndex := 0
else
cbTimeFormat.ItemIndex := 1;
end;
procedure TSettingsForm.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
if FOKPressed then
ControlsToSettings;
end;
procedure TSettingsForm.FormShow(Sender: TObject);
begin
FOKPressed := false;
SettingsToControls;
end;
procedure TSettingsForm.OKButtonClick(Sender: TObject);
begin
FOKPressed := true;
end;
end.