jvcllaz: Add missing required units for JvPageComps

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6271 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-03-23 19:49:55 +00:00
parent 43965baf70
commit ee873d3378
4 changed files with 2120 additions and 0 deletions

View File

@ -0,0 +1,545 @@
object frmPageListEditor: TfrmPageListEditor
Left = 446
Top = 114
ClientWidth = 150
ClientHeight = 247
Caption = 'PageList Editor'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Shell Dlg 2'
Font.Style = []
OldCreateOrder = False
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 150
Height = 23
AutoSize = True
ButtonHeight = 23
Caption = 'ToolBar1'
EdgeInner = esNone
EdgeOuter = esNone
Flat = True
Images = ilButtons
ParentShowHint = False
ShowHint = True
TabOrder = 0
object btnAdd: TToolButton
Left = 0
Top = 0
Hint = 'Add page'
Action = acAdd
end
object btnDelete: TToolButton
Left = 23
Top = 0
Hint = 'Delete page'
Action = acDelete
end
object ToolButton1: TToolButton
Left = 46
Top = 0
Width = 8
Caption = 'ToolButton1'
ImageIndex = 3
Style = tbsSeparator
end
object tbMoveUp: TToolButton
Left = 54
Top = 0
Action = acMoveUp
end
object tbMoveDown: TToolButton
Left = 77
Top = 0
Action = acMoveDown
end
end
object lbPages: TListBox
Left = 0
Top = 23
Width = 150
Height = 207
Align = alClient
ItemHeight = 13
PopupMenu = popEditor
TabOrder = 1
OnClick = lbPagesClick
OnKeyPress = lbPagesKeyPress
end
object StatusBar1: TStatusBar
Left = 0
Top = 230
Width = 150
Height = 19
Panels = <>
end
object alEditor: TActionList
Images = ilButtons
OnUpdate = alEditorUpdate
Left = 86
Top = 34
object acAdd: TAction
Caption = 'Add'
Hint = 'Add Welcome page'
ImageIndex = 0
ShortCut = 45
OnExecute = acAddExecute
end
object acDelete: TAction
Caption = 'Delete'
Hint = 'Delete selected page(s)'
ImageIndex = 1
ShortCut = 46
OnExecute = acDeleteExecute
OnUpdate = acDeleteUpdate
end
object acMoveUp: TAction
Caption = 'Move Up'
Hint = 'Move Up'
ImageIndex = 2
ShortCut = 16422
OnExecute = acMoveUpExecute
end
object acMoveDown: TAction
Caption = 'Move Down'
Hint = 'Move Down'
ImageIndex = 3
ShortCut = 16424
OnExecute = acMoveDownExecute
end
end
object ilButtons: TImageList
Left = 20
Top = 30
Bitmap = {
494C010104000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000003000000001002000000000000030
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000848484008484
8400848484008484840084848400848484008484840084848400848484008484
8400848484008484840084848400848484000000000000000000848484008484
8400848484008484840084848400848484008484840084848400848484008484
8400848484008484840084848400848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000
0000FFFFFF0000FFFF0000000000848484000000000000000000FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000
0000FFFFFF0000FFFF0000000000848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000C6C6
C60000000000FFFFFF000000000084848400848484000000000000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000C6C6
C60000000000FFFFFF0000000000848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000FF
FF00C6C6C6000000000000000000848484000000840000000000FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000FF
FF00C6C6C6000000000000000000848484000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000848400000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000
000000000000000000000000000084848400000084000000840000FFFF00FFFF
FF0000FFFF00FFFFFF00848484000000840000FFFF00FFFFFF00000000000000
0000000000000000000000000000848484000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000FFFFFF008484
840000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00000000008484840084848400000084008484840000FF
FF00FFFFFF00848484000000840084848400FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF0000000000848484000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000008484000084840000848400008484000084840000000000000000
0000000000000000000000000000000000008484840000FFFF0000FFFF008484
8400FFFFFF0000FFFF008484840000FFFF00FFFFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000000000848484000000000000008400000084008484
840000FFFF000000840000008400FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000000000848484000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000848400008484000084840000848400008484000084840000848400000000
0000000000000000000000000000000000000000000084848400FFFFFF008484
840000FFFF008484840000FFFF00FFFFFF0000FFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF0000000000848484000000000084848400000084000000
84000000840000008400FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF0000000000848484000000000000000000000000000000
0000848400008484000084840000848400008484000084840000848400000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
000000000000000000000000000000000000848484008484840084848400FFFF
FF0084848400FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000000000848484000000000084848400000084000000
840000008400FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000000000848484000000000000000000000000000000
0000000000008484000084840000848400008484000084840000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
000000000000000000000000000000000000FFFFFF0000FFFF008484840000FF
FF00FFFFFF008484840084848400848484008484840000000000000000000000
0000000000000000000000000000000000008484840000008400000084000000
8400000084008484840000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
000000000000000000000000000000000000000000008484840000FFFF008484
840000FFFF008484840000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000840000008400848484000000
0000000084000000840084848400000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000848400000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000084840000848400008484000000000000000000000000
0000000000000000000000000000000000008484840000FFFF00000000008484
8400FFFFFF00000000008484840000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000840000008400848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000000000000000008484
840000FFFF000000000000000000848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000008400000084008484840000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008484
8400FFFFFF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000300000000100010000000000800100000000000000000000
000000000000000000000000FFFFFF0000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000FFFFFFFFFFFFFFFFC000C000FFFFFFFF
80008000FFFFFFFF80008000FFFFFFFF80000000F83FFEFF80000000F83FFC7F
80000000F83FF83F00000000F83FF01F00008000C007E00F80008000E00FC007
00008000F01FF83F00010001F83FF83F81FF11FFFC7FF83F24FFF8FFFEFFF83F
66FFFC7FFFFFFFFFE7FFFFFFFFFFFFFF00000000000000000000000000000000
000000000000}
end
object popEditor: TPopupMenu
Images = ilButtons
Left = 54
Top = 120
object Add1: TMenuItem
Action = acAdd
end
object Delete1: TMenuItem
Action = acDelete
end
object N1: TMenuItem
Caption = '-'
end
object MoveUp1: TMenuItem
Action = acMoveUp
end
object MoveDown1: TMenuItem
Action = acMoveDown
end
end
end

View File

@ -0,0 +1,334 @@
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvPageListEditorForm.PAS, released on 2004-03-28.
The Initial Developer of the Original Code is Peter Thornqvist <peter3 at sourceforge dot net>
Portions created by Peter Thornqvist are Copyright (C) 2004 Peter Thornqvist.
All Rights Reserved.
Contributor(s):
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.delphi-jedi.org
Known Issues:
-----------------------------------------------------------------------------}
// $Id$
unit JvPageListEditorForm;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, ImgList, ComCtrls, StdCtrls, ToolWin, Menus,
JvPageList;
type
TfrmPageListEditor = class(TForm) //class(TDesignWindow)
ToolBar1: TToolBar;
btnAdd: TToolButton;
btnDelete: TToolButton;
ToolButton1: TToolButton;
tbMoveUp: TToolButton;
tbMoveDown: TToolButton;
lbPages: TListBox;
alEditor: TActionList;
acAdd: TAction;
acDelete: TAction;
acMoveUp: TAction;
acMoveDown: TAction;
ilButtons: TImageList;
StatusBar1: TStatusBar;
popEditor: TPopupMenu;
Add1: TMenuItem;
Delete1: TMenuItem;
N1: TMenuItem;
MoveUp1: TMenuItem;
MoveDown1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure acAddExecute(Sender: TObject);
procedure acDeleteExecute(Sender: TObject);
procedure acMoveUpExecute(Sender: TObject);
procedure acMoveDownExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var AAction: TCloseAction);
procedure acDeleteUpdate(Sender: TObject);
procedure lbPagesClick(Sender: TObject);
procedure alEditorUpdate(AAction: TBasicAction; var Handled: Boolean);
procedure lbPagesKeyPress(Sender: TObject; var Key: Char);
private
FPageList: TJvCustomPageList;
procedure SetPageList(const Value: TJvCustomPageList);
procedure UpdateList(ItemIndex: Integer);
procedure SelectPage(const Index: Integer);
procedure Add(Page: TJvCustomPage);
public
property PageList:TJvCustomPageList read FPageList write SetPageList;
(*
procedure Activated; override;
procedure ItemDeleted(const ADesigner: IDesigner; Item: TPersistent); override;
procedure DesignerClosed(const Designer: IDesigner; AGoingDormant: Boolean); override;
procedure ItemsModified(const Designer: IDesigner); override;
function GetEditState: TEditState; override;
*)
end;
procedure ShowPageListEditor(Designer: IDesigner; APageList: TJvCustomPageList);
implementation
uses
JvDsgnConsts;
{$R *.lfm}
procedure ShowPageListEditor(Designer: IDesigner; APageList: TJvCustomPageList);
var
I: Integer;
APageListEditor: TfrmPageListEditor;
begin
APageListEditor := nil;
for I := 0 to Screen.FormCount - 1 do
if Screen.Forms[I] is TfrmPageListEditor then
if TfrmPageListEditor(Screen.Forms[I]).PageList = APageList then
begin
APageListEditor := TfrmPageListEditor(Screen.Forms[I]);
Break;
end;
// Show the editor
if Assigned(APageListEditor) then
begin
APageListEditor.Show;
if APageListEditor.WindowState = wsMinimized then
APageListEditor.WindowState := wsNormal;
end
else
begin
APageListEditor := TfrmPageListEditor.Create(Application);
try
APageListEditor.Designer := Designer;
APageListEditor.PageList := APageList;
APageListEditor.Show;
except
APageListEditor.Free;
raise;
end;
end;
if APageListEditor <> nil then
APageListEditor.Caption := Format(RsFmtCaption,[APageList.Name]);
end;
type
TJvCustomPageAccess = class(TJvCustomPage);
procedure TfrmPageListEditor.acAddExecute(Sender: TObject);
var
APage: TJvCustomPage;
begin
APage := PageList.GetPageClass.Create(Designer.GetRoot);
try
APage.Name := UniqueName(APage);
Add(APage);
except
APage.Free;
raise;
end;
end;
procedure TfrmPageListEditor.acDeleteExecute(Sender: TObject);
var
I: Integer;
begin
if Assigned(PageList.ActivePage) then
begin
I := lbPages.ItemIndex;
if lbPages.ItemIndex >= 0 then
lbPages.Items.Delete(TJvCustomPageAccess(PageList.ActivePage).PageIndex);
Designer.SelectComponent(PageList);
PageList.ActivePage.Free;
if I >= lbPages.Items.Count then
Dec(I);
if (I >= 0) and (I < lbPages.Items.Count) then
begin
lbPages.ItemIndex := I;
SelectPage(I);
end
else
Designer.Modified;
end;
end;
procedure TfrmPageListEditor.acMoveUpExecute(Sender: TObject);
var
I: Integer;
begin
I := lbPages.ItemIndex;
lbPages.Items.Move(I, I-1);
if Assigned(PageList) then
begin
TJvCustomPageAccess(PageList.Pages[I]).PageIndex := I - 1;
lbPages.ItemIndex := I - 1;
end;
end;
procedure TfrmPageListEditor.acMoveDownExecute(Sender: TObject);
var
I: Integer;
begin
I := lbPages.ItemIndex;
lbPages.Items.Move(I, I+1);
if Assigned(PageList) then
begin
TJvCustomPageAccess(PageList.Pages[I]).PageIndex := I + 1;
lbPages.ItemIndex := I + 1;
end;
end;
(*
procedure TfrmPageListEditor.Activated;
begin
if (lbPages.ItemIndex < 0) and (lbPages.Items.Count > 0) then
lbPages.ItemIndex := 0;
if Assigned(FPageList) and Assigned(FPageList.ActivePage) and
(TJvCustomPageAccess(FPageList.ActivePage).PageIndex <> lbPages.ItemIndex) then
lbPages.ItemIndex := TJvCustomPageAccess(FPageList.ActivePage).PageIndex;
SelectPage(lbPages.ItemIndex);
end;
procedure TfrmPageListEditor.DesignerClosed(const Designer: IDesigner;
AGoingDormant: Boolean);
begin
if Designer = Self.Designer then
Close;
end;
procedure TfrmPageListEditor.ItemDeleted(const ADesigner: IDesigner;
Item: TPersistent);
begin
if Item = FPageList then
begin
FPageList := nil;
Close;
end;
end;
procedure TfrmPageListEditor.ItemsModified(const Designer: IDesigner);
begin
if not (csDestroying in ComponentState) then
UpdateList(lbPages.ItemIndex);
end;
function TfrmPageListEditor.GetEditState: TEditState;
begin
Result := [];
end; *)
procedure TfrmPageListEditor.SetPageList(const Value: TJvCustomPageList);
begin
if FPageList <> Value then
begin
FPageList := Value;
UpdateList(0);
end;
end;
procedure TfrmPageListEditor.Add(Page: TJvCustomPage);
begin
Page.Parent := PageList;
Page.PageList := PageList;
PageList.ActivePage := Page;
Designer.SelectComponent(Page);
//Designer.Modified;
lbPages.ItemIndex := lbPages.Items.Add(Page.Name);
end;
procedure TfrmPageListEditor.SelectPage(const Index: Integer);
var
Page: TJvCustomPageAccess;
begin
if Assigned(FPageList) and Active then
begin
Page := nil;
if (Index >= 0) and (Index < FPageList.PageCount) then
Page := TJvCustomPageAccess(FPageList.Pages[Index]);
PageList.ActivePage := Page;
Designer.SelectComponent(Page);
Designer.Modified;
end;
end;
procedure TfrmPageListEditor.UpdateList(ItemIndex: Integer);
var
I: Integer;
begin
if Assigned(FPageList) then
begin
lbPages.Items.BeginUpdate;
try
lbPages.Items.Clear;
for I := 0 to FPageList.PageCount - 1 do
lbPages.Items.Add(TJvCustomPageAccess(FPageList.Pages[I]).Name);
if (ItemIndex >= 0) and (ItemIndex < lbPages.Items.Count) then
lbPages.ItemIndex := ItemIndex
else
lbPages.ItemIndex := -1;
finally
lbPages.Items.EndUpdate;
end;
end;
end;
procedure TfrmPageListEditor.FormClose(Sender: TObject;
var AAction: TCloseAction);
begin
AAction := caFree;
end;
procedure TfrmPageListEditor.acDeleteUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled :=
(lbPages.Items.Count > 0) and (lbPages.ItemIndex >= 0);
end;
procedure TfrmPageListEditor.lbPagesClick(Sender: TObject);
begin
SelectPage(lbPages.ItemIndex);
end;
procedure TfrmPageListEditor.alEditorUpdate(AAction: TBasicAction;
var Handled: Boolean);
begin
acMoveUp.Enabled := lbPages.ItemIndex > 0;
acMoveDown.Enabled :=
(lbPages.ItemIndex <> -1) and
(lbPages.ItemIndex < lbPages.Items.Count - 1);
end;
procedure TfrmPageListEditor.lbPagesKeyPress(Sender: TObject;
var Key: Char);
begin
if lbPages.ItemIndex <> -1 then
begin
SelectPage(lbPages.ItemIndex);
ActivateInspector(Key);
Key := #0;
end;
end;
procedure TfrmPageListEditor.FormCreate(Sender: TObject);
begin
{$IFDEF COMPILER9_UP}
FormStyle := fsStayOnTop;
{$ENDIF COMPILER9_UP}
end;
end.

View File

@ -0,0 +1,411 @@
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvPageListEditors.PAS, released on 2004-03-31.
The Initial Developer of the Original Code is Peter Th�rnqvist [peter3 at sourceforge dot net] .
Portions created by Peter Th�rnqvist are Copyright (C) 2003 Peter Th�rnqvist.
All Rights Reserved.
Contributor(s):
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.delphi-jedi.org
Known Issues:
-----------------------------------------------------------------------------}
// $Id$
unit JvPageListEditors;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Classes, ImgList, Menus,
PropEdits, GraphPropEdits, ComponentEditors,
JvPageList; //, JvDsgnEditors;
type
(*
{ a property editor for the ActivePage property of TJvPageList }
TJvActivePageProperty = class(TComponentProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
end;
*)
TJvShowDesignCaptionProperty = class(TEnumProperty)
function GetAttributes: TPropertyAttributes; override;
end;
{ a component editor for the TJvPageList }
// adapted from TUntabbedNotebookComponentEditor)
TJvCustomPageListEditor = class(TDefaultComponentEditor)
protected
procedure AddNewPageToDesigner(Index: integer); virtual;
procedure DoAddPage; virtual;
procedure DoDeletePage; virtual;
procedure AddMenuItemsForPages(ParentMenuItem: TMenuItem); virtual;
procedure ShowPageMenuItemClick(Sender: TObject);
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
procedure PrepareItem(Index: Integer; const AnItem: TMenuItem); override;
function PageList: TJvCustomPageList; virtual;
end;
TJvCustomPageEditor = class(TJvCustomPageListEditor)
public
function PageList: TJvCustomPageList; override;
function Page: TJvCustomPage; virtual;
end;
(*
TJvCustomPageEditor = class(TComponentEditor)
private
procedure InsertPage;
procedure PrevPage;
procedure NextPage;
procedure RemovePage;
function GetPageControl: TJvCustomPageList;
public
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
procedure ExecuteVerb(Index: Integer); override;
procedure Edit; override;
end; *)
TJvSettingsTreeImagesProperty = class(TImageIndexPropertyEditor)
protected
function GetImageList: TCustomImageList; override;
end;
implementation
uses
LazLogger,
TypInfo,
JvDsgnConsts, JvPageListTreeView; //, JvPageListEditorForm;
type
THackPageList = class(TJvPageList);
THackTreeView = class(TJvCustomPageListTreeView);
const
cShowEditor = 0;
cDash = 1;
cNewPage = 2;
cNextPage = 3;
cPrevPage = 4;
cDelPage = 5;
cElementCount = 6;
const
unbvAddPage = 0;
unbvDeletePage = 1;
unbvShowPage = 2;
{ TJvCustomPageListEditor }
{ adapted from TUntabbedNotebookComponentEditor for LCL's Notebook
originally named "TJvCustomPageEditor" }
function TJvCustomPageListEditor.PageList: TJvCustomPageList;
begin
Result := TJvCustomPageList(GetComponent);
end;
procedure TJvCustomPageListEditor.AddNewPageToDesigner(Index: integer);
var
Hook: TPropertyEditorHook;
newPage: TJvCustomPage;
newName: string;
begin
Hook := nil;
if not GetHook(Hook) then exit;
DebugLn('GetHook ' + Hook.ClassName);
newPage := PageList.Pages[Index];
newName := GetDesigner.CreateUniqueComponentName(newPage.ClassName);
newPage.Caption := newName;
newPage.Name := newName;
PageList.ActivePageIndex := Index;
Hook.PersistentAdded(newPage, true);
Modified;
end;
procedure TJvCustomPageListEditor.DoAddPage;
begin
DebugLn('DoAddPage: ENTER');
if not HasHook then exit;
DebugLn('DoAddPage');
THackPageList(PageList).AddPage('');
DebugLn('DoAddPage: PageCount=' + IntToStr(PageList.pageCount));
AddNewPageToDesigner(PageList.PageCount-1);
DebugLn('DoAddPage: EXIT');
end;
procedure TJvCustomPageListEditor.DoDeletePage;
var
Hook: TPropertyEditorHook;
OldIndex: integer;
PageComponent: TPersistent;
begin
OldIndex := PageList.ActivePageIndex;
if (OldIndex >= 0) and (OldIndex < PageList.PageCount) then
begin
if not GetHook(Hook) then exit;
PageComponent := TPersistent(PageList.Pages[OldIndex]);
Hook.DeletePersistent(PageComponent);
end;
end;
procedure TJvCustomPageListEditor.AddMenuItemsForPages(ParentMenuItem: TMenuItem);
var
n: Integer;
i: integer;
NewMenuItem: TMenuItem;
begin
n := PageList.PageCount;
ParentMenuItem.Enabled := n > 0;
for i := 0 to n - 1 do
begin
NewMenuItem := TMenuItem.Create(ParentMenuItem);
NewMenuItem.Name := 'ShowPage' + IntToStr(i);
NewMenuItem.Caption := PageList.Pages[i].Name + ' "' + PageList.Pages[i].Caption + '"';
NewMenuItem.OnClick := @ShowPageMenuItemClick;
ParentMenuItem.Add(NewMenuItem);
end;
end;
procedure TJvCustomPageListEditor.ShowPageMenuItemClick(Sender: TObject);
var
AMenuItem: TMenuItem;
NewPageIndex: integer;
begin
AMenuItem := TMenuItem(Sender);
if (AMenuItem = nil) or (not (AMenuItem is TMenuItem)) then exit;
NewPageIndex := AMenuItem.MenuIndex;
if (NewPageIndex < 0) or (NewPageIndex >= PageList.PageCount) then exit;
PageList.ActivePageIndex := NewPageIndex;
GetDesigner.SelectOnlyThisComponent(PageList.Pages[NewPageIndex]);
end;
procedure TJvCustomPageListEditor.ExecuteVerb(Index: Integer);
begin
case Index of
unbvAddPage : DoAddPage;
unbvDeletePage : DoDeletePage; // beware: this can free the editor itself
end;
end;
function TJvCustomPageListEditor.GetVerb(Index: Integer): string;
begin
case Index of
unbvAddPage : Result := RsNewPage;
unbvDeletePage : Result := RsDelPage;
unbvShowPage : Result := RsShowPage;
else
Result := '';
end;
end;
function TJvCustomPageListEditor.GetVerbCount: Integer;
begin
Result := 3;
end;
procedure TJvCustomPageListEditor.PrepareItem(Index: Integer;
const AnItem: TMenuItem);
begin
inherited PrepareItem(Index, AnItem);
case Index of
unbvAddPage : ;
unbvDeletePage : AnItem.Enabled := PageList.ActivePageIndex >= 0;
unbvShowPage : AddMenuItemsForPages(AnItem);
end;
end;
{ TJvCustomPageEditor }
{ adapted from TUNBPageComponentEditor for LCL's Notebook pages }
function TJvCustomPageEditor.PageList: TJvCustomPageList;
var
lPage: TJvCustomPage;
begin
lPage := Page;
if (lPage.Parent <> nil) and (lPage.Parent is TJvCustomPageList) then
Result := TJvCustomPageList(lPage.Parent)
else
Result := nil;
end;
function TJvCustomPageEditor.Page: TJvCustomPage;
begin
Result := TJvCustomPage(GetComponent);
end;
(*
procedure TJvCustomPageEditor.Edit;
begin
ExecuteVerb(cShowEditor);
end;
procedure TJvCustomPageEditor.ExecuteVerb(Index: Integer);
begin
case Index of
cShowEditor:
ShowMessage('NOT IMPLEMENTED');
// ShowPageListEditor(Designer, GetPageControl);
cNextPage:
NextPage;
cPrevPage:
PrevPage;
cNewPage:
InsertPage;
cDelPage:
RemovePage;
end;
end;
function TJvCustomPageEditor.GetPageControl: TJvCustomPageList;
begin
if Component is TJvCustomPageList then
Result := TJvCustomPageList(Component)
else
Result := TJvCustomPageList(TJvCustomPage(Component).PageList);
end;
function TJvCustomPageEditor.GetVerb(Index: Integer): string;
begin
case Index of
cShowEditor:
Result := RsPageListEditorEllipsis;
cDash:
Result := '-';
cNewPage:
Result := RsNewPage;
cNextPage:
Result := RsNextPageAmp;
cPrevPage:
Result := RsPrevPage;
cDelPage:
Result := RsDelPage;
end;
end;
function TJvCustomPageEditor.GetVerbCount: Integer;
begin
Result := cElementCount; // list, div, new, next, previous, delete
end;
procedure TJvCustomPageEditor.InsertPage;
var
P: TJvCustomPage;
C: TJvCustomPageList;
begin
C := GetPageControl;
P := C.GetPageClass.Create(Designer.LookupRoot);
try
P.Parent := C;
P.Name := Designer.UniqueName(C.GetPageClass.ClassName);
P.PageList := C;
C.ActivePage := P;
except
P.Free;
raise;
end;
end;
procedure TJvCustomPageEditor.NextPage;
begin
GetPageControl.NextPage;
end;
procedure TJvCustomPageEditor.PrevPage;
begin
GetPageControl.PrevPage;
end;
procedure TJvCustomPageEditor.RemovePage;
var
AList: TJvCustomPageList;
APage: TJvCustomPage;
begin
AList := GetPageControl;
if (AList <> nil) and (AList.ActivePage <> nil) then
begin
APage := AList.ActivePage;
// Designer.SelectComponent(APage);
Designer.SelectOnlyThisComponent(APage);
APage.PageList := nil;
APage.Free;
Designer.Modified;
end;
end;
*)
//=== { TJvActivePageProperty } ==============================================
(*
function TJvActivePageProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList];
end;
procedure TJvActivePageProperty.GetValues(Proc: TGetStrProc);
var
I: Integer;
Component: TComponent;
begin
for I := 0 to Designer.GetRoot.ComponentCount - 1 do
begin
Component := Designer.GetRoot.Components[I];
if (Component.Name <> '') and (Component is TJvCustomPage) and
(TJvCustomPage(Component).PageList = GetComponent(0)) then
Proc(Component.Name);
end;
end;
*)
//=== { TJvSettingsTreeImagesProperty } ======================================
function TJvSettingsTreeImagesProperty.GetImageList: TCustomImageList;
var
T: TJvCustomPageListTreeView;
begin
if (GetComponent(0) is TJvSettingsTreeImages) and
(TJvSettingsTreeImages(GetComponent(0)).TreeView <> nil) then
begin
T := TJvSettingsTreeImages(GetComponent(0)).TreeView;
Result := THackTreeView(T).Images;
end
else
Result := nil;
end;
//=== { TJvShowDesignCaptionProperty } =======================================
function TJvShowDesignCaptionProperty.GetAttributes: TPropertyAttributes;
begin
// we don't want sorting for this property
Result := [paMultiSelect, paValueList, paRevertable];
end;
end.

View File

@ -0,0 +1,830 @@
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvPageListTreeView.PAS, released on 2003-01-22.
The Initial Developer of the Original Code is Peter Thörnqvist [peter3 at sourceforge dot net] .
Portions created by Peter Thörnqvist are Copyright (C) 2003 Peter Thörnqvist.
All Rights Reserved.
Contributor(s):
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.delphi-jedi.org
Changes:
2002-10-22:
Changed TJvPageIndexNode.SetPageIndex to only set the parent PageIndex if the Treeview is a
TJvCustomSettingsTreeView since this is the first class implementing this behaviour
Known Issues:
-----------------------------------------------------------------------------}
// $Id$
unit JvPageListTreeView;
{$mode objfpc}{$H+}
interface
uses
LCLIntf,
SysUtils, Classes,
Graphics, Controls, ImgList, ComCtrls,
JvPageList; //, JvExComCtrls;
type
TJvCustomPageListTreeView = class;
TJvPageIndexNode = class(TTreeNode)
private
FPageIndex: Integer;
procedure SetPageIndex(const Value: Integer);
published
procedure Assign(Source: TPersistent); override;
property PageIndex: Integer read FPageIndex write SetPageIndex;
end;
TJvPageIndexNodes = class(TTreeNodes)
private
procedure ReadData(Stream: TStream);
procedure WriteData(Stream: TStream);
protected
procedure DefineProperties(Filer: TFiler); override;
end;
// this is a "fake" class so we have something to anchor the design-time editor with
TJvPageLinks = class(TPersistent)
private
FTreeView: TJvCustomPageListTreeView;
public
property TreeView: TJvCustomPageListTreeView read FTreeView;
end;
{ TJvCustomPageListTreeView is a base treeview class that can be hooked up with an IPageList
implementor. When the selected tree node is changed, the associated page in the IPageList is changed too as
determined by the TJvPageIndexNode.PageIndex property
Properties:
* PageDefault is the default PageIndex to assign to new nodes
* PageLinks is the property used att design time to set up a Nodes PageIndex. At run-time, use
TJvPageIndexNode(Node).PageIndex := Value;
* PageList is the IPageList implementor that is attached to this control
* CanChange calls IPageList.CanChange method and Change calls IPageList.SetActivePageIndex
* IPageList.getPageCaption is only used by the design-time editor for the PageLinks property
}
TJvCustomPageListTreeView = class(TCustomTreeView) //(TJvExCustomTreeView)
private
FItems: TJvPageIndexNodes;
FPageList: IPageList;
FPageDefault: Integer;
FLinks: TJvPageLinks;
FMemStream: TMemoryStream;
procedure SetPageDefault(const Value: Integer);
procedure SetLinks(const Value: TJvPageLinks);
procedure SetPageList(const Value: IPageList);
function GetItems: TJvPageIndexNodes;
procedure SetItems(const Value: TJvPageIndexNodes);
protected
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function CreateNode: TTreeNode; override;
function CreateNodes: TTreeNodes; override;
function CanChange(Node: TTreeNode): Boolean; override;
procedure Change(Node: TTreeNode); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property PageDefault: Integer read FPageDefault write SetPageDefault;
property PageLinks: TJvPageLinks read FLinks write SetLinks;
property PageList: IPageList read FPageList write SetPageList;
protected
property AutoExpand default True;
property ShowButtons default False;
property ShowLines default False;
property ReadOnly default True;
property Items: TJvPageIndexNodes read GetItems write SetItems;
end;
{ TJvSettingsTreeImages is a property class that describes the images used in a
TJvCustomSettingsTreeView as the usage of images in this control differs from the normal
TreeView
}
TJvSettingsTreeImages = class(TPersistent)
private
FSelectedIndex: TImageIndex;
FCollapsedIndex: TImageIndex;
FImageIndex: TImageIndex;
FExpandedIndex: TImageIndex;
FTreeView: TJvCustomPageListTreeView;
public
constructor Create;
property TreeView: TJvCustomPageListTreeView read FTreeView write FTreeView;
published
property CollapsedIndex: TImageIndex read FCollapsedIndex write FCollapsedIndex default 0;
property ExpandedIndex: TImageIndex read FExpandedIndex write FExpandedIndex default 1;
property SelectedIndex: TImageIndex read FSelectedIndex write FSelectedIndex default 2;
property ImageIndex: TImageIndex read FImageIndex write FImageIndex default -1;
end;
{ TJvCustomSettingsTreeView is a base class for treeviews that behave like the
treeview in the Settings Dialog in Visual Studio: When a node in the treeview
is selected, a new page of settings is shown on a panel to the right.
Specifically, the following is True:
* The normal ImageIndex/SelectedIndex is ignored for nodes - use PageNodeImages instead. You still
need to assign a TImageList to the Images property
* When a node is expanded, it is assigned the expanded image until it is collapsed, regardless
whether it's selected or not
* When a parent folder is selected, the first non-folder child has it's
normal image set as the selected image
* By default, AutoExpand and ReadOnly is True, ShowButtons and ShowLines are False
Other than that, it should work like a normal TreeView. Note that the treeview was designed with AutoExpand = True
in mind but should work with AutoExpand = False
To get the VS look , Images should contain:
Image 0: Closed Folder
Image 1: Open Folder
Image 2: Right-pointing teal-colored arrow
PageNodeImages should then be set to (the defaults):
ClosedFolder = 0;
ImageIndex = -1; (no image)
OpenFolder = 1;
SelectedIndex = 2;
}
TJvCustomSettingsTreeView = class(TJvCustomPageListTreeView)
private
FNodeImages: TJvSettingsTreeImages;
FOnGetImageIndex: TTVExpandedEvent;
FOnGetSelectedIndex: TTVExpandedEvent;
procedure SetImageSelection(const Value: TJvSettingsTreeImages);
protected
FLastSelected: TTreeNode;
procedure Delete(Node: TTreeNode); override;
procedure DoGetImageIndex(Sender: TObject; Node: TTreeNode);
procedure DoGetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure GetSelectedIndex(Node: TTreeNode); override;
procedure GetImageIndex(Node: TTreeNode); override;
function CanChange(Node: TTreeNode): Boolean; override;
procedure Change(Node: TTreeNode); override;
procedure ResetPreviousNode(NewNode: TTreeNode); virtual;
procedure SetPreviousNode(NewNode: TTreeNode); virtual;
procedure Loaded; override;
procedure Expand(Node: TTreeNode); override;
procedure Collapse(Node: TTreeNode); override;
property PageNodeImages: TJvSettingsTreeImages read FNodeImages write SetImageSelection;
property OnGetImageIndex: TTVExpandedEvent read FOnGetImageIndex write FOnGetImageIndex;
property OnGetSelectedIndex: TTVExpandedEvent read FOnGetSelectedIndex write FOnGetSelectedIndex;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
{$IFDEF RTL230_UP}
[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
{$ENDIF RTL230_UP}
TJvPageListTreeView = class(TJvCustomPageListTreeView)
published
property AutoExpand;
property ShowButtons;
property ShowLines;
property ReadOnly;
property PageDefault;
property PageLinks;
property PageList;
property OnMouseEnter;
property OnMouseLeave;
// property OnParentColorChange;
property Align;
property Anchors;
// property BevelEdges;
// property BevelInner;
// property BevelOuter;
// property BevelKind default bkNone;
// property BevelWidth;
property BiDiMode;
property DragKind;
property DragCursor;
property ParentBiDiMode;
property OnEndDock;
property OnStartDock;
property BorderWidth;
// property ChangeDelay;
property HideSelection;
property HotTrack;
property MultiSelect;
property MultiSelectStyle;
property StateImages;
property ToolTips;
property OnAdvancedCustomDraw;
property OnAdvancedCustomDrawItem;
property ShowRoot;
property RightClickSelect;
property BorderStyle;
property Color;
property Constraints;
property DragMode;
property Enabled;
property Font;
property Images;
property Indent;
property ParentColor default False;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property RowSelect;
property ShowHint;
property SortType;
property TabOrder;
property TabStop default True;
property Visible;
property OnChange;
property OnChanging;
property OnClick;
property OnCollapsed;
property OnCollapsing;
property OnContextPopup;
property OnCompare;
property OnAddition;
property OnCreateNodeClass;
property OnCustomDraw;
property OnCustomDrawItem;
property OnDblClick;
property OnDeletion;
property OnDragDrop;
property OnDragOver;
property OnEdited;
property OnEditing;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnExpanding;
property OnExpanded;
property OnGetImageIndex;
property OnGetSelectedIndex;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property Items;
end;
{$IFDEF RTL230_UP}
[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
{$ENDIF RTL230_UP}
TJvSettingsTreeView = class(TJvCustomSettingsTreeView)
published
property AutoExpand;
property ShowButtons;
property ShowLines;
property ReadOnly;
property PageDefault;
property PageNodeImages;
property PageLinks;
property PageList;
property OnMouseEnter;
property OnMouseLeave;
// property OnParentColorChange;
property Align;
property Anchors;
// property BevelEdges;
// property BevelInner;
// property BevelOuter;
// property BevelKind default bkNone;
// property BevelWidth;
property BiDiMode;
property BorderWidth;
// property ChangeDelay;
property DragKind;
property DragCursor;
property HideSelection;
property HotTrack;
property ParentBiDiMode;
property OnAddition;
property OnCreateNodeClass;
property OnCustomDraw;
property OnEndDock;
property OnStartDock;
property OnAdvancedCustomDraw;
property OnAdvancedCustomDrawItem;
property OnCompare;
property RightClickSelect;
property ShowRoot;
property StateImages;
property ToolTips;
property BorderStyle;
property Color;
property Constraints;
property DragMode;
property Enabled;
property Font;
property Images;
property Indent;
// don't use!
// property MultiSelect;
// property MultiSelectStyle;
property ParentColor default False;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property RowSelect;
property ShowHint;
property SortType;
property TabOrder;
property TabStop default True;
property Visible;
property OnChange;
property OnChanging;
property OnClick;
property OnCollapsed;
property OnCollapsing;
property OnContextPopup;
property OnCustomDrawItem;
property OnDblClick;
property OnDeletion;
property OnDragDrop;
property OnDragOver;
property OnEdited;
property OnEditing;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnExpanding;
property OnExpanded;
property OnGetImageIndex;
property OnGetSelectedIndex;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property Items;
end;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$URL$';
Revision: '$Revision$';
Date: '$Date$';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
Forms;
procedure ResetSiblingFolders(Node: TTreeNode; ImageIndex, SelectedIndex: Integer; Recurse: Boolean = False);
var
N: TTreeNode;
begin
N := Node.getPrevSibling;
while Assigned(N) do
begin
if N.HasChildren then
begin
N.ImageIndex := ImageIndex;
N.SelectedIndex := SelectedIndex;
if Recurse then
ResetSiblingFolders(N.getFirstChild, ImageIndex, SelectedIndex, Recurse);
end;
N := N.getPrevSibling;
end;
N := Node.getNextSibling;
while Assigned(N) do
begin
if N.HasChildren then
begin
N.ImageIndex := ImageIndex;
N.SelectedIndex := SelectedIndex;
if Recurse then
ResetSiblingFolders(N.getFirstChild, ImageIndex, SelectedIndex, Recurse);
end;
N := N.getNextSibling;
end;
end;
//=== { TJvCustomPageListTreeView } ==========================================
constructor TJvCustomPageListTreeView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLinks := TJvPageLinks.Create;
FLinks.FTreeView := Self;
ReadOnly := True;
ShowLines := False;
AutoExpand := True;
ShowButtons := False;
end;
destructor TJvCustomPageListTreeView.Destroy;
begin
FLinks.Free;
FMemStream.Free;
inherited Destroy;
end;
function TJvCustomPageListTreeView.CanChange(Node: TTreeNode): Boolean;
begin
Result := inherited CanChange(Node);
if Result and Assigned(Node) and Assigned(FPageList) then
Result := FPageList.CanChange(TJvPageIndexNode(Node).PageIndex);
end;
procedure TJvCustomPageListTreeView.Change(Node: TTreeNode);
var
I: Integer;
begin
inherited Change(Node);
if Assigned(FPageList) and Assigned(Node) then
begin
I := TJvPageIndexNode(Node).PageIndex;
if (I >= 0) and (I < FPageList.GetPageCount) then
FPageList.SetActivePageIndex(I)
else
if (PageDefault >= 0) and (PageDefault < FPageList.GetPageCount) then
FPageList.SetActivePageIndex(PageDefault)
else
FPageList.SetActivePageIndex(-1);
end;
end;
function TJvCustomPageListTreeView.CreateNode: TTreeNode;
begin
Result := TJvPageIndexNode.Create(Items);
TJvPageIndexNode(Result).PageIndex := PageDefault;
end;
function TJvCustomPageListTreeView.CreateNodes: TTreeNodes;
begin
if (FItems = nil) and not (csDestroying in ComponentState) then
FItems := TJvPageIndexNodes.Create(Self);
Result := FItems;
end;
procedure TJvCustomPageListTreeView.CreateWnd;
begin
inherited CreateWnd;
if FMemStream <> nil then
begin
Items.BeginUpdate;
try
Items.ReadData(FMemStream);
FreeAndNil(FMemStream);
finally
Items.EndUpdate;
end;
end;
end;
procedure TJvCustomPageListTreeView.DestroyWnd;
begin
(*
if CreateWndRestores and
{$IFDEF COMPILER10_UP}
(csRecreating in ControlState) and
{$ENDIF COMPILER10_UP}
(Items.Count > 0) then
begin
FMemStream := TMemoryStream.Create;
Items.WriteData(FMemStream);
FMemStream.Position := 0;
end;
*)
inherited DestroyWnd;
end;
procedure TJvCustomPageListTreeView.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
if AComponent.IsImplementorOf(PageList) then
PageList := nil;
end;
end;
procedure TJvCustomPageListTreeView.SetPageDefault(const Value: Integer);
var
N: TTreeNode;
begin
if FPageDefault <> Value then
begin
N := Items.GetFirstNode;
while Assigned(N) do
begin
if TJvPageIndexNode(N).PageIndex = FPageDefault then
TJvPageIndexNode(N).PageIndex := Value;
N := N.GetNext;
end;
FPageDefault := Value;
end;
end;
procedure TJvCustomPageListTreeView.SetLinks(const Value: TJvPageLinks);
begin
FLinks.Assign(Value);
end;
procedure TJvCustomPageListTreeView.SetPageList(const Value: IPageList);
begin
if FPageList <> Value then
begin
ReferenceInterface(FPageList, opRemove);
FPageList := Value;
ReferenceInterface(FPageList, opInsert);
end;
end;
function TJvCustomPageListTreeView.GetItems: TJvPageIndexNodes;
begin
Result := TJvPageIndexNodes(CreateNodes);
end;
procedure TJvCustomPageListTreeView.SetItems(const Value: TJvPageIndexNodes);
begin
inherited Items := Value;
end;
//=== { TJvPageIndexNode } ===================================================
procedure TJvPageIndexNode.Assign(Source: TPersistent);
begin
inherited Assign(Source);
if Source is TJvPageIndexNode then
PageIndex := TJvPageIndexNode(Source).PageIndex;
end;
procedure TJvPageIndexNode.SetPageIndex(const Value: Integer);
begin
if FPageIndex <> Value then
begin
FPageIndex := Value;
if (TreeView is TJvCustomSettingsTreeView) and (Parent <> nil) and
(Parent.getFirstChild = Self) and not HasChildren then
TJvPageIndexNode(Parent).PageIndex := Value;
end;
end;
//=== { TJvPageIndexNodes } ==================================================
procedure TJvPageIndexNodes.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('Links', @ReadData, @WriteData, True);
end;
procedure TJvPageIndexNodes.ReadData(Stream: TStream);
var
APageIndex, ACount: Integer;
LNode: TTreeNode;
LHandleAllocated: Boolean;
begin
LHandleAllocated := Owner.HandleAllocated;
if LHandleAllocated then
BeginUpdate;
try
Stream.Read(ACount, SizeOf(ACount));
if ACount > 0 then
begin
LNode := GetFirstNode;
while Assigned(LNode) and (ACount > 0) do
begin
Stream.Read(APageIndex, SizeOf(APageIndex));
TJvPageIndexNode(LNode).PageIndex := APageIndex;
LNode := LNode.GetNext;
Dec(ACount);
end;
// read any "left-overs" (should never happen)
while ACount > 0 do
begin
Stream.Read(APageIndex, SizeOf(APageIndex));
Dec(ACount);
end;
end;
finally
if LHandleAllocated then
EndUpdate;
end;
end;
procedure TJvPageIndexNodes.WriteData(Stream: TStream);
var
Node: TTreeNode;
APageIndex: Integer;
ACount: Integer;
begin
ACount := Count;
Stream.Write(ACount, SizeOf(Count));
if ACount > 0 then
begin
Node := GetFirstNode;
while (Node <> nil) do
begin
APageIndex := TJvPageIndexNode(Node).PageIndex;
Stream.Write(APageIndex, SizeOf(APageIndex));
Node := Node.GetNext;
end;
end;
end;
//=== { TJvSettingsTreeImages } ==============================================
constructor TJvSettingsTreeImages.Create;
begin
inherited Create;
FCollapsedIndex := 0;
FExpandedIndex := 1;
FSelectedIndex := 2;
FImageIndex := -1;
end;
//=== { TJvCustomSettingsTreeView } ==========================================
constructor TJvCustomSettingsTreeView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FNodeImages := TJvSettingsTreeImages.Create;
FNodeImages.TreeView := Self;
AutoExpand := True;
ShowButtons := False;
ReadOnly := True;
ShowLines := False;
// we need to assign to these since the TTreeView checks if they are assigned
// and won't call GetImageIndex without them
inherited OnGetImageIndex := @DoGetImageIndex;
inherited OnGetSelectedIndex := @DoGetSelectedIndex;
end;
destructor TJvCustomSettingsTreeView.Destroy;
begin
FNodeImages.TreeView := nil;
FNodeImages.Free;
inherited Destroy;
end;
function TJvCustomSettingsTreeView.CanChange(Node: TTreeNode): Boolean;
begin
Result := inherited CanChange(Node);
if Result and (Selected <> nil) and not Selected.HasChildren then // Selected is the previous selected node
begin
Selected.ImageIndex := FNodeImages.ImageIndex;
Selected.SelectedIndex := FNodeImages.ImageIndex;
end;
end;
procedure TJvCustomSettingsTreeView.Change(Node: TTreeNode);
begin
inherited Change(Node);
if not AutoExpand and Node.Expanded then
Node.Expand(False); // refresh node and children
end;
procedure TJvCustomSettingsTreeView.Collapse(Node: TTreeNode);
begin
inherited Collapse(Node);
if Node.HasChildren then
begin
Node.ImageIndex := FNodeImages.CollapsedIndex;
Node.SelectedIndex := FNodeImages.CollapsedIndex;
end;
end;
procedure TJvCustomSettingsTreeView.Delete(Node: TTreeNode);
begin
inherited Delete(Node);
if Node = FLastSelected then
FLastSelected := nil;
end;
procedure TJvCustomSettingsTreeView.DoGetImageIndex(Sender: TObject;
Node: TTreeNode);
begin
if Assigned(FOnGetImageIndex) then
FOnGetImageIndex(Sender, Node)
else
GetImageIndex(Node);
end;
procedure TJvCustomSettingsTreeView.DoGetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
if Assigned(FOnGetSelectedIndex) then
FOnGetSelectedIndex(Sender, Node)
else
GetSelectedIndex(Node);
end;
procedure TJvCustomSettingsTreeView.Expand(Node: TTreeNode);
var
N: TTreeNode;
R: TRect;
begin
if Node.HasChildren then
begin
if AutoExpand then
ResetSiblingFolders(Node, FNodeImages.CollapsedIndex, FNodeImages.CollapsedIndex, True);
Node.ImageIndex := FNodeImages.ExpandedIndex;
Node.SelectedIndex := FNodeImages.ExpandedIndex;
N := Node.getFirstChild;
if (N <> nil) and not N.HasChildren then
begin
ResetPreviousNode(N);
N.ImageIndex := FNodeImages.SelectedIndex;
N.SelectedIndex := FNodeImages.SelectedIndex;
R := N.DisplayRect(False);
InvalidateRect(Handle, @R, True);
SetPreviousNode(N);
end;
end;
inherited Expand(Node);
end;
procedure TJvCustomSettingsTreeView.GetImageIndex(Node: TTreeNode);
begin
if Node.HasChildren then
begin
if Node.Expanded then
Node.ImageIndex := FNodeImages.ExpandedIndex
else
Node.ImageIndex := FNodeImages.CollapsedIndex;
end
else
if Node.Selected or
((Node.Parent <> nil) and Node.Parent.Selected and
(Node.Parent.getFirstChild = Node)) then
begin
ResetPreviousNode(Node);
Node.ImageIndex := FNodeImages.SelectedIndex;
SetPreviousNode(Node);
end
else
Node.ImageIndex := FNodeImages.ImageIndex;
Node.SelectedIndex := Node.ImageIndex;
end;
procedure TJvCustomSettingsTreeView.GetSelectedIndex(Node: TTreeNode);
begin
GetImageIndex(Node);
end;
procedure TJvCustomSettingsTreeView.Loaded;
begin
inherited Loaded;
if Items.Count > 0 then
begin
ResetSiblingFolders(Items[0], FNodeImages.CollapsedIndex, FNodeImages.CollapsedIndex, True);
Items[0].MakeVisible;
end;
end;
procedure TJvCustomSettingsTreeView.ResetPreviousNode(NewNode: TTreeNode);
var
R: TRect;
begin
if (FLastSelected <> nil) and (FLastSelected <> NewNode) and
(NewNode <> nil) and not NewNode.HasChildren then
begin
FLastSelected.ImageIndex := FNodeImages.ImageIndex;
FLastSelected.SelectedIndex := FNodeImages.ImageIndex;
R := FLastSelected.DisplayRect(False);
InvalidateRect(Handle, @R, True);
end;
end;
procedure TJvCustomSettingsTreeView.SetImageSelection(const Value: TJvSettingsTreeImages);
begin
// FNodeImages := Value;
end;
procedure TJvCustomSettingsTreeView.SetPreviousNode(NewNode: TTreeNode);
begin
FLastSelected := NewNode;
end;
end.