diff --git a/components/jvcllaz/design/JvPageComps/JvPageListEditorForm.lfm b/components/jvcllaz/design/JvPageComps/JvPageListEditorForm.lfm new file mode 100644 index 000000000..33944ef4c --- /dev/null +++ b/components/jvcllaz/design/JvPageComps/JvPageListEditorForm.lfm @@ -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 diff --git a/components/jvcllaz/design/JvPageComps/JvPageListEditorForm.pas b/components/jvcllaz/design/JvPageComps/JvPageListEditorForm.pas new file mode 100644 index 000000000..b0d712bb4 --- /dev/null +++ b/components/jvcllaz/design/JvPageComps/JvPageListEditorForm.pas @@ -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 +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. diff --git a/components/jvcllaz/design/JvPageComps/JvPageListEditors.pas b/components/jvcllaz/design/JvPageComps/JvPageListEditors.pas new file mode 100644 index 000000000..56c8c0f17 --- /dev/null +++ b/components/jvcllaz/design/JvPageComps/JvPageListEditors.pas @@ -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. diff --git a/components/jvcllaz/run/JvPageComps/JvPageListTreeView.pas b/components/jvcllaz/run/JvPageComps/JvPageListTreeView.pas new file mode 100644 index 000000000..648acdd35 --- /dev/null +++ b/components/jvcllaz/run/JvPageComps/JvPageListTreeView.pas @@ -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.