You've already forked lazarus-ccr
jvcllaz: Add component editor for TJvOutlookBar (still some issues...)
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6349 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -549,7 +549,7 @@ resourcestring
|
|||||||
|
|
||||||
//=== JvOutlookBarEditors.pas ================================================
|
//=== JvOutlookBarEditors.pas ================================================
|
||||||
resourcestring
|
resourcestring
|
||||||
RsOLEditor = 'OutlookBar Editor...';
|
RsOLBditor = 'OutlookBar Editor...';
|
||||||
|
|
||||||
//=== JvOutlookBarForm.pas ===================================================
|
//=== JvOutlookBarForm.pas ===================================================
|
||||||
resourcestring
|
resourcestring
|
||||||
|
@ -35,19 +35,20 @@ begin
|
|||||||
RegisterComponentEditor(TJvCustomTimeLine, TJvTimeLineEditor);
|
RegisterComponentEditor(TJvCustomTimeLine, TJvTimeLineEditor);
|
||||||
RegisterPropertyEditor(TypeInfo(TDate), TJvTimeLine, 'FirstVisibledate', TDatePropertyEditor);
|
RegisterPropertyEditor(TypeInfo(TDate), TJvTimeLine, 'FirstVisibledate', TDatePropertyEditor);
|
||||||
|
|
||||||
// Outlookbar
|
// OutlookBar
|
||||||
(*
|
{RegisterPropertyEditor(TypeInfo(TJvOutlookBarPages), TJvCustomOutlookBar,
|
||||||
RegisterPropertyEditor(TypeInfo(TJvOutlookBarPages), TJvCustomOutlookBar,
|
'', TJvOutlookBarPagesProperty);}
|
||||||
'', TJvOutlookBarPagesProperty);
|
|
||||||
RegisterPropertyEditor(TypeInfo(TJvOutlookBarButtons), TJvOutlookBarPage,
|
|
||||||
'', TJvOutlookBarPagesProperty);
|
|
||||||
*)
|
|
||||||
RegisterPropertyEditor(TypeInfo(Integer), TJvCustomOutlookBar,
|
RegisterPropertyEditor(TypeInfo(Integer), TJvCustomOutlookBar,
|
||||||
'ActivePageIndex', TJvOutlookBarActivePageProperty);
|
'ActivePageIndex', TJvOutlookBarActivePageProperty);
|
||||||
RegisterPropertyEditor(TypeInfo(TImageIndex), TJvOutlookBarButton,
|
RegisterPropertyEditor(TypeInfo(TImageIndex), TJvOutlookBarButton,
|
||||||
'ImageIndex', TJvOutlookBarButtonImageIndexProperty);
|
'ImageIndex', TJvOutlookBarButtonImageIndexProperty);
|
||||||
RegisterPropertyEditor(TypeInfo(TImageIndex), TJvOutlookBarPage,
|
RegisterPropertyEditor(TypeInfo(TImageIndex), TJvOutlookBarPage,
|
||||||
'ImageIndex', TJvOutlookBarPageImageIndexProperty);
|
'ImageIndex', TJvOutlookBarPageImageIndexProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(TCaption), TJvOutlookBarPage,
|
||||||
|
'Caption', TJvOutlookBarCaptionProperty);
|
||||||
|
RegisterPropertyEditor(TypeInfo(TCaption), TJvOutlookBarButton,
|
||||||
|
'Caption', TJvOutlookBarCaptionProperty);
|
||||||
|
RegisterComponentEditor(TJvCustomOutlookBar, TJvOutlookBarEditor);
|
||||||
|
|
||||||
// Thumbnails
|
// Thumbnails
|
||||||
RegisterPropertyToSkip(TJvThumbnail, 'ClientWidth', 'Redundant', '');
|
RegisterPropertyToSkip(TJvThumbnail, 'ClientWidth', 'Redundant', '');
|
||||||
|
@ -30,29 +30,31 @@ unit JvOutlookBarEditors;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
SysUtils, Classes,
|
// LazLogger,
|
||||||
Controls, Forms, ToolWin,
|
SysUtils, Classes, Controls, Forms, ToolWin, Menus, ActnList, ComCtrls, ImgList,
|
||||||
Menus, ActnList, ComCtrls, ImgList,
|
|
||||||
PropEdits, GraphPropEdits, ComponentEditors,
|
PropEdits, GraphPropEdits, ComponentEditors,
|
||||||
// DesignEditors, DesignIntf, DesignMenus, DesignWindows,
|
|
||||||
//JvDsgnEditors,
|
|
||||||
JvOutlookBar;
|
JvOutlookBar;
|
||||||
|
|
||||||
type
|
type
|
||||||
TJvOutlookBarActivePageProperty = class(TIntegerProperty)
|
TJvOutlookBarActivePageProperty = class(TIntegerProperty)
|
||||||
private
|
private
|
||||||
function GetOL: TJvCustomOutlookBar;
|
function GetOutlookBar: TJvCustomOutlookBar;
|
||||||
protected
|
|
||||||
property OL: TJvCustomOutlookBar read GetOL;
|
|
||||||
public
|
public
|
||||||
procedure Edit; override;
|
|
||||||
function GetAttributes: TPropertyAttributes; override;
|
function GetAttributes: TPropertyAttributes; override;
|
||||||
function GetValue: string; override;
|
function GetValue: string; override;
|
||||||
procedure SetValue(const Value: string); override;
|
procedure SetValue(const Value: string); override;
|
||||||
procedure GetValues(Proc: TGetStrProc); override;
|
procedure GetValues(Proc: TGetStrProc); override;
|
||||||
end;
|
end;
|
||||||
(*
|
|
||||||
|
TJvOutlookBarCaptionProperty = class(TStringProperty)
|
||||||
|
public
|
||||||
|
procedure SetValue(const Value: string); override;
|
||||||
|
end;
|
||||||
|
|
||||||
TJvOutlookBarEditor = class(TComponentEditor)
|
TJvOutlookBarEditor = class(TComponentEditor)
|
||||||
|
protected
|
||||||
|
function GetOutlookBar: TJvCustomOutlookBar;
|
||||||
|
procedure OpenEditor;
|
||||||
public
|
public
|
||||||
procedure ExecuteVerb(Index: Integer); override;
|
procedure ExecuteVerb(Index: Integer); override;
|
||||||
function GetVerb(Index: Integer): string; override;
|
function GetVerb(Index: Integer): string; override;
|
||||||
@ -66,16 +68,18 @@ type
|
|||||||
procedure Edit; override;
|
procedure Edit; override;
|
||||||
function GetAttributes: TPropertyAttributes; override;
|
function GetAttributes: TPropertyAttributes; override;
|
||||||
function GetValue: string; override;
|
function GetValue: string; override;
|
||||||
end; *)
|
end;
|
||||||
|
|
||||||
TJvOutlookBarButtonImageIndexProperty = class(TImageIndexPropertyEditor) //TJvDefaultImageIndexProperty)
|
TJvOutlookBarButtonImageIndexProperty = class(TImageIndexPropertyEditor) //TJvDefaultImageIndexProperty)
|
||||||
protected
|
private
|
||||||
function GetPage: TJvOutlookBarPage;
|
function GetPage: TJvOutlookBarPage;
|
||||||
function GetBar: TJvCustomOutlookBar;
|
function GetBar: TJvCustomOutlookBar;
|
||||||
|
protected
|
||||||
function GetImageList: TCustomImageList; override;
|
function GetImageList: TCustomImageList; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TJvOutlookBarPageImageIndexProperty = class(TImageIndexPropertyEditor) //TJvDefaultImageIndexProperty)
|
TJvOutlookBarPageImageIndexProperty = class(TImageIndexPropertyEditor) //TJvDefaultImageIndexProperty)
|
||||||
|
protected
|
||||||
function GetImageList: TCustomImageList; override;
|
function GetImageList: TCustomImageList; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -83,14 +87,27 @@ type
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
//JvOutlookBarForm,
|
JvDsgnConsts, JvOutlookBarForm;
|
||||||
JvDsgnConsts;
|
|
||||||
|
|
||||||
type
|
type
|
||||||
THackOutlookBar = class(TJvCustomOutlookBar);
|
THackOutlookBar = class(TJvCustomOutlookBar);
|
||||||
THackPages = class(TJvOutlookBarPages);
|
THackPages = class(TJvOutlookBarPages);
|
||||||
THackButtons = class(TJvOutlookBarButtons);
|
THackButtons = class(TJvOutlookBarButtons);
|
||||||
|
|
||||||
|
var
|
||||||
|
EditWindow: TFrmOLBEditor;
|
||||||
|
|
||||||
|
procedure ShowEditor(ADesigner: TComponentEditorDesigner;
|
||||||
|
AOutlookBar: TJvCustomOutlookBar);
|
||||||
|
begin
|
||||||
|
if AOutlookBar = nil then
|
||||||
|
exit;
|
||||||
|
if EditWindow = nil then
|
||||||
|
EditWindow := TFrmOLBEditor.Create(Application);
|
||||||
|
EditWindow.SetData(AOutlookBar, ADesigner);
|
||||||
|
EditWindow.Show;
|
||||||
|
end;
|
||||||
|
|
||||||
(*
|
(*
|
||||||
procedure ShowEditor(Designer: TIDesigner; OutlookBar: TJvCustomOutlookBar);
|
procedure ShowEditor(Designer: TIDesigner; OutlookBar: TJvCustomOutlookBar);
|
||||||
var
|
var
|
||||||
@ -126,11 +143,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
*)
|
*)
|
||||||
|
|
||||||
//=== { TJvOutlookBarPagesProperty } =========================================
|
//=== { TJvOutlookBarPagesProperty } =========================================
|
||||||
(*
|
|
||||||
procedure TJvOutlookBarPagesProperty.Edit;
|
procedure TJvOutlookBarPagesProperty.Edit;
|
||||||
begin
|
begin
|
||||||
ShowEditor(Designer, GetOutlookBar);
|
// !!!!!!!!!!!! HOW DO I GET THE DESIGNER HERE ???????????????
|
||||||
|
//ShowEditor(Designer, GetOutlookBar);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TJvOutlookBarPagesProperty.GetAttributes: TPropertyAttributes;
|
function TJvOutlookBarPagesProperty.GetAttributes: TPropertyAttributes;
|
||||||
@ -154,46 +173,55 @@ begin
|
|||||||
Result := Format('(%s)', [GetPropType^.Name]);
|
Result := Format('(%s)', [GetPropType^.Name]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
//=== { TJvOutlookBarEditor } ================================================
|
//=== { TJvOutlookBarEditor } ================================================
|
||||||
|
|
||||||
procedure TJvOutlookBarEditor.ExecuteVerb(Index: Integer);
|
procedure TJvOutlookBarEditor.ExecuteVerb(Index: Integer);
|
||||||
begin
|
begin
|
||||||
case Index of
|
case Index of
|
||||||
0:
|
0: OpenEditor;
|
||||||
ShowEditor(Designer, Component as TJvCustomOutlookBar);
|
else inherited ExecuteVerb(Index);
|
||||||
else
|
|
||||||
inherited ExecuteVerb(Index);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TJvOutlookBarEditor.GetOutlookBar: TJvCustomOutlookBar;
|
||||||
|
var
|
||||||
|
lComponent: TComponent;
|
||||||
|
begin
|
||||||
|
lComponent := Self.GetComponent;
|
||||||
|
if (lComponent is TJvCustomOutlookBar) then
|
||||||
|
Result := TJvCustomOutlookBar(lComponent)
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
function TJvOutlookBarEditor.GetVerb(Index: Integer): string;
|
function TJvOutlookBarEditor.GetVerb(Index: Integer): string;
|
||||||
begin
|
begin
|
||||||
case Index of
|
case Index of
|
||||||
0:
|
0: Result := RsOLBditor;
|
||||||
Result := RsOLEditor;
|
else Result := inherited GetVerb(Index);
|
||||||
else
|
|
||||||
Result := inherited GetVerb(Index);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TJvOutlookBarEditor.GetVerbCount: Integer;
|
function TJvOutlookBarEditor.GetVerbCount: Integer;
|
||||||
begin
|
begin
|
||||||
Result := 1;
|
Result := 1;
|
||||||
end; *)
|
end;
|
||||||
|
|
||||||
|
procedure TJvOutlookBarEditor.OpenEditor;
|
||||||
|
begin
|
||||||
|
ShowEditor(Designer, GetOutlookBar);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
//=== { TJvOutlookBarActivePageProperty } ====================================
|
//=== { TJvOutlookBarActivePageProperty } ====================================
|
||||||
|
|
||||||
procedure TJvOutlookBarActivePageProperty.Edit;
|
|
||||||
begin
|
|
||||||
inherited Edit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TJvOutlookBarActivePageProperty.GetAttributes: TPropertyAttributes;
|
function TJvOutlookBarActivePageProperty.GetAttributes: TPropertyAttributes;
|
||||||
begin
|
begin
|
||||||
Result := [paValueList, paSortList, paRevertable];
|
Result := [paValueList, paSortList, paRevertable];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TJvOutlookBarActivePageProperty.GetOL: TJvCustomOutlookBar;
|
function TJvOutlookBarActivePageProperty.GetOutlookBar: TJvCustomOutlookBar;
|
||||||
begin
|
begin
|
||||||
if GetComponent(0) is TJvCustomOutlookBar then
|
if GetComponent(0) is TJvCustomOutlookBar then
|
||||||
Result := TJvCustomOutlookBar(GetComponent(0))
|
Result := TJvCustomOutlookBar(GetComponent(0))
|
||||||
@ -204,13 +232,15 @@ end;
|
|||||||
function TJvOutlookBarActivePageProperty.GetValue: string;
|
function TJvOutlookBarActivePageProperty.GetValue: string;
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: Integer;
|
||||||
|
olb: THackOutlookBar;
|
||||||
begin
|
begin
|
||||||
|
Result := '';
|
||||||
|
olb := THackOutlookBar(GetOutlookBar);
|
||||||
|
if olb = nil then
|
||||||
|
exit;
|
||||||
I := GetOrdValue;
|
I := GetOrdValue;
|
||||||
if I < 0 then
|
if (I >= 0) and (I < olb.Pages.Count) then
|
||||||
Result := ''
|
Result := olb.Pages[I].Caption
|
||||||
else
|
|
||||||
if I < THackOutlookBar(OL).Pages.Count then
|
|
||||||
Result := THackOutlookBar(OL).Pages[I].Caption
|
|
||||||
else
|
else
|
||||||
Result := inherited GetValue;
|
Result := inherited GetValue;
|
||||||
end;
|
end;
|
||||||
@ -218,20 +248,24 @@ end;
|
|||||||
procedure TJvOutlookBarActivePageProperty.GetValues(Proc: TGetStrProc);
|
procedure TJvOutlookBarActivePageProperty.GetValues(Proc: TGetStrProc);
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: Integer;
|
||||||
|
olb: THackOutlookBar;
|
||||||
begin
|
begin
|
||||||
for I := 0 to THackOutlookBar(OL).Pages.Count - 1 do
|
olb := THackOutlookBar(GetOutlookBar);
|
||||||
Proc(THackOutlookBar(OL).Pages[I].Caption);
|
for I := 0 to olb.Pages.Count - 1 do
|
||||||
|
Proc(olb.Pages[I].Caption);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TJvOutlookBarActivePageProperty.SetValue(const Value: string);
|
procedure TJvOutlookBarActivePageProperty.SetValue(const Value: string);
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: Integer;
|
||||||
|
olb: THackOutlookBar;
|
||||||
begin
|
begin
|
||||||
I := StrToIntDef(Value, -1);
|
I := StrToIntDef(Value, -1);
|
||||||
if I < 0 then
|
if I < 0 then
|
||||||
begin
|
begin
|
||||||
for I := 0 to THackOutlookBar(OL).Pages.Count - 1 do
|
olb := THackOutlookBar(GetOutlookBar);
|
||||||
if AnsiSameText(THackOutlookBar(OL).Pages[I].Caption, Value) then
|
for I := 0 to olb.Pages.Count - 1 do
|
||||||
|
if AnsiSameText(olb.Pages[I].Caption, Value) then
|
||||||
begin
|
begin
|
||||||
SetOrdValue(I);
|
SetOrdValue(I);
|
||||||
Modified;
|
Modified;
|
||||||
@ -243,7 +277,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
//=== { TJvOutlookBarButtonImageIndexProperty } ==============================
|
//=== TJvOutlookBarCaptionEditor ===============================================
|
||||||
|
|
||||||
|
procedure TJvOutlookBarCaptionProperty.SetValue(const Value: string);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
if EditWindow <> nil then
|
||||||
|
EditWindow.RefreshNames;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
//=== TJvOutlookBarButtonImageIndexProperty ====================================
|
||||||
|
|
||||||
function TJvOutlookBarButtonImageIndexProperty.GetBar: TJvCustomOutlookBar;
|
function TJvOutlookBarButtonImageIndexProperty.GetBar: TJvCustomOutlookBar;
|
||||||
begin
|
begin
|
||||||
@ -264,11 +308,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
//=== { TJvOutlookBarPageImageIndexProperty } ================================
|
//=== TJvOutlookBarPageImageIndexProperty ======================================
|
||||||
|
|
||||||
function TJvOutlookBarPageImageIndexProperty.GetImageList: TCustomImageList;
|
function TJvOutlookBarPageImageIndexProperty.GetImageList: TCustomImageList;
|
||||||
|
var
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
pages: TJvOutlookBarPages;
|
||||||
|
olb: TJvCustomOutlookBAr;
|
||||||
begin
|
begin
|
||||||
Result := THackOutlookBar(THackPages(TJvOutlookBarPage(GetComponent(0)).Collection).Owner).PageImages;
|
page := TJvOutlookBarPage(GetComponent(0));
|
||||||
|
pages := THackPages(page.Collection);
|
||||||
|
olb := TJvCustomOutlookBar(pages.Owner);
|
||||||
|
Result := THackOutlookBar(olb).PageImages;
|
||||||
|
// Result := THackOutlookBar(THackPages(TJvOutlookBarPage(GetComponent(0)).Collection).Owner).PageImages;
|
||||||
|
// Result := THackOutlookBar(GetOutlookBar).PageImages;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
321
components/jvcllaz/design/JvCustomControls/jvoutlookbarform.lfm
Normal file
321
components/jvcllaz/design/JvCustomControls/jvoutlookbarform.lfm
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
object FrmOLBEditor: TFrmOLBEditor
|
||||||
|
Left = 311
|
||||||
|
Height = 462
|
||||||
|
Top = 151
|
||||||
|
Width = 226
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
Caption = 'OutlookBar Editor'
|
||||||
|
ClientHeight = 462
|
||||||
|
ClientWidth = 226
|
||||||
|
Constraints.MinHeight = 200
|
||||||
|
Constraints.MinWidth = 150
|
||||||
|
OnActivate = FormActivate
|
||||||
|
OnDestroy = FormDestroy
|
||||||
|
OnShow = FormShow
|
||||||
|
PopupMenu = popForm
|
||||||
|
ShowHint = True
|
||||||
|
LCLVersion = '1.9.0.0'
|
||||||
|
object TbTop: TToolBar
|
||||||
|
Left = 0
|
||||||
|
Height = 26
|
||||||
|
Top = 0
|
||||||
|
Width = 226
|
||||||
|
AutoSize = True
|
||||||
|
Caption = 'TbTop'
|
||||||
|
EdgeBorders = [ebTop, ebBottom]
|
||||||
|
Images = ImgList16
|
||||||
|
ParentShowHint = False
|
||||||
|
PopupMenu = popToolbar
|
||||||
|
TabOrder = 0
|
||||||
|
object BtnNew: TToolButton
|
||||||
|
Left = 1
|
||||||
|
Top = 2
|
||||||
|
Action = AcNewPage
|
||||||
|
DropdownMenu = popNew
|
||||||
|
Style = tbsDropDown
|
||||||
|
end
|
||||||
|
object BtnDel: TToolButton
|
||||||
|
Left = 36
|
||||||
|
Top = 2
|
||||||
|
Action = AcDelete
|
||||||
|
end
|
||||||
|
object ToolButton1: TToolButton
|
||||||
|
Left = 59
|
||||||
|
Height = 22
|
||||||
|
Top = 2
|
||||||
|
Caption = 'ToolButton1'
|
||||||
|
Style = tbsDivider
|
||||||
|
end
|
||||||
|
object BtnUp: TToolButton
|
||||||
|
Left = 64
|
||||||
|
Top = 2
|
||||||
|
Action = AcMoveUp
|
||||||
|
end
|
||||||
|
object BtnDown: TToolButton
|
||||||
|
Left = 87
|
||||||
|
Top = 2
|
||||||
|
Action = AcMoveDown
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object TvItems: TTreeView
|
||||||
|
Left = 0
|
||||||
|
Height = 413
|
||||||
|
Top = 26
|
||||||
|
Width = 226
|
||||||
|
Align = alClient
|
||||||
|
HideSelection = False
|
||||||
|
RightClickSelect = True
|
||||||
|
ShowButtons = False
|
||||||
|
TabOrder = 1
|
||||||
|
OnChange = TvItemsChange
|
||||||
|
OnCollapsing = TvItemsCollapsing
|
||||||
|
OnEdited = TvItemsEdited
|
||||||
|
OnKeyPress = TvItemsKeyPress
|
||||||
|
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoRightClickSelect, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||||
|
end
|
||||||
|
object StatusBar1: TStatusBar
|
||||||
|
Left = 0
|
||||||
|
Height = 23
|
||||||
|
Top = 439
|
||||||
|
Width = 226
|
||||||
|
Panels = <
|
||||||
|
item
|
||||||
|
Width = 50
|
||||||
|
end>
|
||||||
|
SimplePanel = False
|
||||||
|
end
|
||||||
|
object ImgList16: TImageList
|
||||||
|
left = 64
|
||||||
|
top = 96
|
||||||
|
Bitmap = {
|
||||||
|
4C69040000001000000010000000000000000000000000000000848484FFFFFF
|
||||||
|
FFFF000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000FFFFFF0000000000000000848484FF00FF
|
||||||
|
FFFF0000000000000000848484FF000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000848484FF00FFFFFF00000000848484FFFFFF
|
||||||
|
FFFF00000000848484FF00FFFFFF000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000848484FF00FFFFFF848484FF00FF
|
||||||
|
FFFF848484FF00FFFFFF00000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000FFFFFFFF00FFFFFF848484FF00FFFFFFFFFF
|
||||||
|
FFFF848484FF848484FF848484FF848484FF000000FF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF00000000848484FF848484FF848484FFFFFFFFFF8484
|
||||||
|
84FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF000000FF848484FF00000000848484FFFFFFFFFF848484FF00FF
|
||||||
|
FFFF848484FF00FFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFF000000FF848484FF848484FF00FFFFFF00FFFFFF848484FFFFFF
|
||||||
|
FFFF00FFFFFF848484FF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF000000FF848484FFFFFFFFFF000000FFFFFFFFFF848484FF00FF
|
||||||
|
FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFF000000FF848484FF00000000000000FF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF848484FF00000000000000FFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF000000FF00FFFFFFC6C6
|
||||||
|
C6FF000000FF000000FF848484FF00000000000000FF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF000000FFC6C6C6FF0000
|
||||||
|
00FFFFFFFFFF000000FF848484FF00000000000000FFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000FFFFFF
|
||||||
|
FFFF00FFFFFF000000FF848484FF00000000000000FF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF848484FF0000000000000000848484FF848484FF8484
|
||||||
|
84FF848484FF848484FF848484FF848484FF848484FF848484FF848484FF8484
|
||||||
|
84FF848484FF848484FF848484FF000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000084FF000084FF848484FF0000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000084FF000084FF848484FF000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000084FF000084FF848484FF000000000000
|
||||||
|
84FF000084FF848484FF00000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000848484FF000084FF000084FF000084FF0000
|
||||||
|
84FF848484FF000000FF000000FF000000FF000000FF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF0000000000000000848484FF000084FF000084FF0000
|
||||||
|
84FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF000000FF848484FF00000000848484FF000084FF000084FF0000
|
||||||
|
84FF000084FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFF000000FF848484FF00000000000084FF000084FF848484FF00FF
|
||||||
|
FFFF000084FF000084FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF000000FF848484FF848484FF000084FF848484FF00FFFFFFFFFF
|
||||||
|
FFFF848484FF000084FF848484FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFF000000FF848484FF000084FF000084FF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF848484FF000084FF00FFFFFFFFFFFFFF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF848484FF000084FF000000FFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF000000FF00FFFFFFC6C6
|
||||||
|
C6FF000000FF000000FF848484FF848484FF000000FF00FFFFFFFFFFFFFF00FF
|
||||||
|
FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF000000FFC6C6C6FF0000
|
||||||
|
00FFFFFFFFFF000000FF848484FF00000000000000FFFFFFFFFF00FFFFFFFFFF
|
||||||
|
FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000FFFFFF
|
||||||
|
FFFF00FFFFFF000000FF848484FF00000000000000FF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
|
||||||
|
00FF000000FF000000FF848484FF0000000000000000848484FF848484FF8484
|
||||||
|
84FF848484FF848484FF848484FF848484FF848484FF848484FF848484FF8484
|
||||||
|
84FF848484FF848484FF848484FF000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000FF000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000FF848400FF000000FF0000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00FF848400FF848400FF848400FF848400FF848400FF000000FF000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000FF8484
|
||||||
|
00FF848400FF848400FF848400FF848400FF848400FF848400FF000000FF0000
|
||||||
|
00000000000000000000000000000000000000000000000000FF000000FF0000
|
||||||
|
00FF000000FF848400FF848400FF848400FF000000FF000000FF000000FF0000
|
||||||
|
00FF000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF000000FF000000FF000000FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF000000FF000000FF000000FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000FF000000FF0000
|
||||||
|
00FF000000FF848400FF848400FF848400FF000000FF000000FF000000FF0000
|
||||||
|
00FF000000000000000000000000000000000000000000000000000000FF8484
|
||||||
|
00FF848400FF848400FF848400FF848400FF848400FF848400FF000000FF0000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00FF848400FF848400FF848400FF848400FF848400FF000000FF000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000FF848400FF848400FF848400FF000000FF00000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000FF848400FF000000FF0000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000FF000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000
|
||||||
|
}
|
||||||
|
end
|
||||||
|
object AlActions: TActionList
|
||||||
|
Images = ImgList16
|
||||||
|
OnUpdate = AlActionsUpdate
|
||||||
|
left = 64
|
||||||
|
top = 40
|
||||||
|
object AcNewPage: TAction
|
||||||
|
Caption = 'New page'
|
||||||
|
Hint = 'Add new page'
|
||||||
|
ImageIndex = 0
|
||||||
|
OnExecute = AcNewPageExecute
|
||||||
|
end
|
||||||
|
object AcNewButton: TAction
|
||||||
|
Caption = 'New button'
|
||||||
|
Hint = 'Add new button'
|
||||||
|
ImageIndex = 0
|
||||||
|
OnExecute = AcNewButtonExecute
|
||||||
|
end
|
||||||
|
object AcDelete: TAction
|
||||||
|
Caption = 'Delete'
|
||||||
|
Hint = 'Delete selected item'
|
||||||
|
ImageIndex = 1
|
||||||
|
OnExecute = AcDeleteExecute
|
||||||
|
end
|
||||||
|
object AcMoveUp: TAction
|
||||||
|
Caption = 'Move up'
|
||||||
|
Hint = 'Move item up'
|
||||||
|
ImageIndex = 2
|
||||||
|
OnExecute = AcMoveUpExecute
|
||||||
|
end
|
||||||
|
object AcMoveDown: TAction
|
||||||
|
Caption = 'Move down'
|
||||||
|
Hint = 'Move item down'
|
||||||
|
ImageIndex = 3
|
||||||
|
OnExecute = AcMoveDownExecute
|
||||||
|
end
|
||||||
|
object AcUpdate: TAction
|
||||||
|
Caption = 'Update'
|
||||||
|
Hint = 'Update list'
|
||||||
|
OnExecute = AcUpdateExecute
|
||||||
|
end
|
||||||
|
object AcShowTextLabels: TAction
|
||||||
|
Caption = 'Text labels'
|
||||||
|
Hint = 'Show text labels'
|
||||||
|
OnExecute = AcShowTextLabelsExecute
|
||||||
|
end
|
||||||
|
object AcToolbar: TAction
|
||||||
|
Caption = 'Toolbar'
|
||||||
|
Checked = True
|
||||||
|
OnExecute = AcToolbarExecute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object popNew: TPopupMenu
|
||||||
|
Images = ImgList16
|
||||||
|
left = 64
|
||||||
|
top = 152
|
||||||
|
object MnuNewPage: TMenuItem
|
||||||
|
Action = AcNewPage
|
||||||
|
end
|
||||||
|
object MnuNewButton: TMenuItem
|
||||||
|
Action = AcNewButton
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object popToolbar: TPopupMenu
|
||||||
|
Images = ImgList16
|
||||||
|
left = 64
|
||||||
|
top = 208
|
||||||
|
object MenuItem1: TMenuItem
|
||||||
|
Action = AcShowTextLabels
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object popForm: TPopupMenu
|
||||||
|
Images = ImgList16
|
||||||
|
left = 64
|
||||||
|
top = 264
|
||||||
|
object MenuItem2: TMenuItem
|
||||||
|
Action = AcNewPage
|
||||||
|
end
|
||||||
|
object MenuItem3: TMenuItem
|
||||||
|
Action = AcNewButton
|
||||||
|
end
|
||||||
|
object MenuItem4: TMenuItem
|
||||||
|
Action = AcDelete
|
||||||
|
end
|
||||||
|
object MenuItem5: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object MenuItem6: TMenuItem
|
||||||
|
Action = AcMoveUp
|
||||||
|
end
|
||||||
|
object MenuItem7: TMenuItem
|
||||||
|
Action = AcMoveDown
|
||||||
|
end
|
||||||
|
object MenuItem8: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object MenuItem9: TMenuItem
|
||||||
|
Action = AcToolbar
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
691
components/jvcllaz/design/JvCustomControls/jvoutlookbarform.pas
Normal file
691
components/jvcllaz/design/JvCustomControls/jvoutlookbarform.pas
Normal file
@ -0,0 +1,691 @@
|
|||||||
|
unit JvOutlookBarForm;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ActnList, Menus,
|
||||||
|
PropEdits, ComponentEditors,
|
||||||
|
JvOutlookBar;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TFrmOLBEditor }
|
||||||
|
|
||||||
|
TFrmOLBEditor = class(TForm)
|
||||||
|
AcNewPage: TAction;
|
||||||
|
AcNewButton: TAction;
|
||||||
|
AcDelete: TAction;
|
||||||
|
AcMoveUp: TAction;
|
||||||
|
AcMoveDown: TAction;
|
||||||
|
AcToolbar: TAction;
|
||||||
|
AcUpdate: TAction;
|
||||||
|
AcShowTextLabels: TAction;
|
||||||
|
AlActions: TActionList;
|
||||||
|
ImgList16: TImageList;
|
||||||
|
MenuItem1: TMenuItem;
|
||||||
|
MenuItem2: TMenuItem;
|
||||||
|
MenuItem3: TMenuItem;
|
||||||
|
MenuItem4: TMenuItem;
|
||||||
|
MenuItem5: TMenuItem;
|
||||||
|
MenuItem6: TMenuItem;
|
||||||
|
MenuItem7: TMenuItem;
|
||||||
|
MenuItem8: TMenuItem;
|
||||||
|
MenuItem9: TMenuItem;
|
||||||
|
MnuNewPage: TMenuItem;
|
||||||
|
MnuNewButton: TMenuItem;
|
||||||
|
popNew: TPopupMenu;
|
||||||
|
popToolbar: TPopupMenu;
|
||||||
|
popForm: TPopupMenu;
|
||||||
|
StatusBar1: TStatusBar;
|
||||||
|
TbTop: TToolBar;
|
||||||
|
BtnNew: TToolButton;
|
||||||
|
BtnDel: TToolButton;
|
||||||
|
ToolButton1: TToolButton;
|
||||||
|
BtnUp: TToolButton;
|
||||||
|
BtnDown: TToolButton;
|
||||||
|
TvItems: TTreeView;
|
||||||
|
procedure AcDeleteExecute(Sender: TObject);
|
||||||
|
procedure AcMoveDownExecute(Sender: TObject);
|
||||||
|
procedure AcMoveUpExecute(Sender: TObject);
|
||||||
|
procedure AcNewButtonExecute(Sender: TObject);
|
||||||
|
procedure AcNewPageExecute(Sender: TObject);
|
||||||
|
procedure AcShowTextLabelsExecute(Sender: TObject);
|
||||||
|
procedure AcToolbarExecute(Sender: TObject);
|
||||||
|
procedure AcUpdateExecute(Sender: TObject);
|
||||||
|
procedure AlActionsUpdate(AAction: TBasicAction; var Handled: Boolean);
|
||||||
|
procedure FormActivate(Sender: TObject);
|
||||||
|
procedure FormDestroy(Sender: TObject);
|
||||||
|
procedure FormShow(Sender: TObject);
|
||||||
|
procedure TvItemsChange(Sender: TObject; Node: TTreeNode);
|
||||||
|
procedure TvItemsCollapsing(Sender: TObject; Node: TTreeNode;
|
||||||
|
var AllowCollapse: Boolean);
|
||||||
|
procedure TvItemsEdited(Sender: TObject; Node: TTreeNode; var S: string);
|
||||||
|
procedure TvItemsKeyPress(Sender: TObject; var Key: char);
|
||||||
|
private
|
||||||
|
procedure BuildTreeData;
|
||||||
|
procedure DeleteItem(Item: TPersistent);
|
||||||
|
procedure ExchangeItems(Node1, Node2: TTreeNode);
|
||||||
|
class function GetButtonName(OLBar: TJvCustomOutlookBar): string;
|
||||||
|
class function GetPageName(OLBar: TJvCustomOutlookBar): string;
|
||||||
|
procedure SelectButtonInObjectInspector(AButton: TJvOutlookBarButton; ForceUpdate: Boolean);
|
||||||
|
procedure SelectPageInObjectInspector(APage: TJvOutlookBarPage; ForceUpdate: Boolean);
|
||||||
|
function ValidateTreeData: boolean;
|
||||||
|
|
||||||
|
protected
|
||||||
|
FOutlookBar: TJvCustomOutlookBar;
|
||||||
|
FDesigner: TComponentEditorDesigner;
|
||||||
|
function CheckValidButtonNode(Node: TTreeNode): boolean;
|
||||||
|
function CheckValidPageNode(Node: TTreeNode): boolean;
|
||||||
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||||
|
|
||||||
|
public
|
||||||
|
procedure RefreshNames;
|
||||||
|
procedure SetData(AOutlookBar: TJvCustomOutlookBar; ADesigner: TComponentEditorDesigner);
|
||||||
|
property Outlookbar: TJvCustomOutlookBar read FOutlookBar;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
FrmOLBEditor: TFrmOLBEditor;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
uses
|
||||||
|
PropEditUtils,
|
||||||
|
JvConsts;
|
||||||
|
|
||||||
|
type
|
||||||
|
THackOutlookBar = class(TJvCustomOutlookBar);
|
||||||
|
|
||||||
|
const
|
||||||
|
SDamagedTreeStructure = 'Dameged tree structure.';
|
||||||
|
|
||||||
|
|
||||||
|
{ TFrmOLBEditor }
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcDeleteExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
P: TPersistent;
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
node: TTreeNode;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) or (TvItems.Selected = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
TvItems.Items.BeginUpdate;
|
||||||
|
try
|
||||||
|
node := TvItems.Selected;
|
||||||
|
P := TPersistent(node.Data);
|
||||||
|
if P is TJvOutlookBarPage then
|
||||||
|
THackOutlookBar(FOutlookBar).Pages.Delete(TJvOutlookBarPage(P).Index)
|
||||||
|
else
|
||||||
|
if P is TJvOutlookBarButton then
|
||||||
|
begin
|
||||||
|
page := TJvOutlookBarPage(node.Parent.Data);
|
||||||
|
page.Buttons.Delete(TJvOutlookBarButton(P).Index);
|
||||||
|
end;
|
||||||
|
DeleteItem(node);
|
||||||
|
finally
|
||||||
|
TvItems.Items.EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcMoveDownExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
node: TTreeNode;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) or (TvItems.Selected = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
ExchangeItems(TvItems.Selected, TvItems.Selected.GetNextSibling);
|
||||||
|
node := TvItems.Selected.GetNextSibling;
|
||||||
|
node.MoveTo(TvItems.Selected, naInsert);
|
||||||
|
node.Expand(True);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcMoveUpExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
node: TTreeNode;
|
||||||
|
begin
|
||||||
|
node := TvItems.Selected;
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) or (node = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
ExchangeItems(TvItems.Selected, node.getPrevSibling);
|
||||||
|
node.MoveTo(node.GetPrevSibling, naInsert);
|
||||||
|
node.Expand(True);
|
||||||
|
TvItems.Selected := node;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcNewButtonExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
btn: TJvOutlookBarButton;
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
N: TTreeNode;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
if FDesigner.PropertyEditorHook = nil then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
N := TvItems.Selected;
|
||||||
|
if N.Parent <> nil then
|
||||||
|
N := N.Parent;
|
||||||
|
page := TJvOutlookBarPage(N.Data);
|
||||||
|
btn := page.Buttons.Add;
|
||||||
|
// btn.Caption := FDesigner.CreateUniqueComponentName(btn.ClassName);
|
||||||
|
btn.Caption := GetButtonName(OutlookBar);
|
||||||
|
TvItems.Selected := TvItems.Items.AddChildObject(N, btn.Caption, btn);
|
||||||
|
|
||||||
|
FDesigner.PropertyEditorHook.PersistentAdded(btn, True);
|
||||||
|
FDesigner.Modified;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcNewPageExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
if FDesigner.PropertyEditorHook = nil then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
page := THackOutlookBar(FOutlookBar).Pages.Add;
|
||||||
|
// page.Caption := FDesigner.CreateUniqueComponentName(page.ClassName);
|
||||||
|
page.Caption := GetPageName(FOutlookBar);
|
||||||
|
TvItems.Selected := TvItems.Items.AddObject(nil, page.Caption, page);
|
||||||
|
|
||||||
|
FDesigner.PropertyEditorHook.PersistentAdded(page,True);
|
||||||
|
FDesigner.Modified;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcShowTextLabelsExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
AcShowTextLabels.Checked := not AcShowTextLabels.Checked;
|
||||||
|
tbTop.ShowCaptions := AcShowTextLabels.Checked;
|
||||||
|
if AcShowTextLabels.Checked then begin
|
||||||
|
tbTop.ButtonHeight := 32;
|
||||||
|
tbTop.ButtonWidth := 32;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
tbTop.ButtonHeight := 22;
|
||||||
|
tbTop.ButtonWidth := 22;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcToolbarExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
AcToolBar.Checked := not acToolBar.Checked;
|
||||||
|
TbTop.Visible := AcToolBar.Checked;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AcUpdateExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
BuildTreeData;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.AlActionsUpdate(AAction: TBasicAction; var Handled: Boolean);
|
||||||
|
var
|
||||||
|
Sel: Boolean;
|
||||||
|
begin
|
||||||
|
Sel := TvItems.Selected <> nil;
|
||||||
|
AcNewButton.Enabled := Sel;
|
||||||
|
AcDelete.Enabled := Sel;
|
||||||
|
AcMoveUp.Enabled := Sel and (TvItems.Selected.getPrevSibling <> nil);
|
||||||
|
AcMoveDown.Enabled := Sel and (TvItems.Selected.getNextSibling <> nil);
|
||||||
|
AcUpdate.Enabled := Screen.ActiveForm = Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.BuildTreeData;
|
||||||
|
var
|
||||||
|
i, j: Integer;
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
pageNode: TTreeNode;
|
||||||
|
button: TJvOutlookBarButton;
|
||||||
|
olb: THackOutlookBar;
|
||||||
|
begin
|
||||||
|
TvItems.OnDeletion := nil;
|
||||||
|
TvItems.Items.Clear;
|
||||||
|
// TvItems.OnDeletion := TvItemsDeletion;
|
||||||
|
|
||||||
|
if FOutlookbar = nil then
|
||||||
|
exit;
|
||||||
|
{if FDesigner = nil) then
|
||||||
|
exit; }
|
||||||
|
|
||||||
|
TvItems.BeginUpdate;
|
||||||
|
try
|
||||||
|
olb := THackOutlookbar(FOutlookbar);
|
||||||
|
for i := 0 to olb.Pages.Count-1 do begin
|
||||||
|
page := olb.Pages[i];
|
||||||
|
pageNode := TvItems.Items.AddObject(nil, page.Caption, page);
|
||||||
|
for j := 0 to page.Buttons.Count-1 do begin
|
||||||
|
button := page.Buttons[j];
|
||||||
|
TvItems.Items.AddChildObject(pageNode, button.Caption, button);
|
||||||
|
end;
|
||||||
|
pageNode.Expand(false);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
TvItems.EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TFrmOLBEditor.CheckValidButtonNode(Node: TTreeNode): boolean;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
{$B-}
|
||||||
|
Result := (Node <> nil) and
|
||||||
|
(Node.Data <> nil) and
|
||||||
|
(TObject(Node.Data) is TJvOutlookBarButton);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TFrmOLBEditor.CheckValidPageNode(Node: TTreeNode): boolean;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
{$B-}
|
||||||
|
Result := (Node <> nil) and
|
||||||
|
(Node.Data <> nil) and
|
||||||
|
(TObject(Node.Data) is TJvOutlookBarPage);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.DeleteItem(Item: TPersistent);
|
||||||
|
var
|
||||||
|
N, N2: TTreeNode;
|
||||||
|
|
||||||
|
function FindNextNode(const Node: TTreeNode): TTreeNode;
|
||||||
|
begin
|
||||||
|
if Node = nil then
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
Result := Node.GetNextSibling;
|
||||||
|
if Result = nil then
|
||||||
|
Result := Node.GetPrevSibling;
|
||||||
|
if Result = nil then
|
||||||
|
Result := Node.Parent;
|
||||||
|
if Result = nil then
|
||||||
|
Result := TvItems.Items.GetFirstNode;
|
||||||
|
if Result = Node then
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
N2 := TvItems.Selected;
|
||||||
|
N := TvItems.Items.GetFirstNode;
|
||||||
|
try
|
||||||
|
while Assigned(N) do
|
||||||
|
begin
|
||||||
|
if N = Item then
|
||||||
|
begin
|
||||||
|
N2 := FindNextNode(N);
|
||||||
|
N.Data := nil;
|
||||||
|
N.Delete;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
N := N.GetNext;
|
||||||
|
N2 := N;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
TvItems.Selected := N2;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.ExchangeItems(Node1, Node2: TTreeNode);
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
begin
|
||||||
|
if TObject(Node1.Data) is TJvOutlookBarButton then
|
||||||
|
begin
|
||||||
|
I := TJvOutlookBarButton(Node1.Data).Index;
|
||||||
|
TJvOutlookBarButton(Node1.Data).Index := TJvOutlookBarButton(Node2.Data).Index;
|
||||||
|
TJvOutlookBarButton(Node2.Data).Index := I;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if TObject(Node1.Data) is TJvOutlookBarPage then
|
||||||
|
begin
|
||||||
|
I := TJvOutlookBarPage(Node1.Data).Index;
|
||||||
|
TJvOutlookBarPage(Node1.Data).Index := TJvOutlookBarPage(Node2.Data).Index;
|
||||||
|
TJvOutlookBarPage(Node2.Data).Index := I;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.FormActivate(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
if not ValidateTreeData then
|
||||||
|
BuildTreeData;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.FormDestroy(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if FOutlookBar <> nil then
|
||||||
|
FOutlookBar.RemoveFreeNotification(self);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.FormShow(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
BuildTreeData;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TFrmOLBEditor.GetButtonName(OLBar: TJvCustomOutlookBar): string;
|
||||||
|
const
|
||||||
|
cPrefix = 'JvOutlookBarButton';
|
||||||
|
cTemplate = cPrefix + '%d';
|
||||||
|
var
|
||||||
|
K: Integer;
|
||||||
|
Tmp: string;
|
||||||
|
|
||||||
|
function IsUnique(const S: string): Boolean;
|
||||||
|
var
|
||||||
|
I, J: Integer;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
for I := 0 to THackOutlookBar(OLBar).Pages.Count - 1 do
|
||||||
|
for J := 0 to THackOutlookBar(OLBar).Pages[I].Buttons.Count - 1 do
|
||||||
|
if AnsiSameText(THackOutlookBar(OLBar).Pages[I].Buttons[J].Caption, S) then
|
||||||
|
Exit;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := cPrefix;
|
||||||
|
if OLBar <> nil then
|
||||||
|
for K := 1 to MaxInt - 1 do
|
||||||
|
begin
|
||||||
|
Tmp := Format(cTemplate, [K]);
|
||||||
|
if IsUnique(Tmp) then
|
||||||
|
begin
|
||||||
|
Result := Tmp;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TFrmOLBEditor.GetPageName(OLBar: TJvCustomOutlookBar): string;
|
||||||
|
const
|
||||||
|
cPrefix = 'JvOutlookBarPage';
|
||||||
|
cTemplate = cPrefix + '%d';
|
||||||
|
var
|
||||||
|
K: Integer;
|
||||||
|
Tmp: string;
|
||||||
|
|
||||||
|
function IsUnique(const S: string): Boolean;
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
for I := 0 to THackOutlookBar(OLBar).Pages.Count - 1 do
|
||||||
|
if AnsiSameText(THackOutlookBar(OLBar).Pages[I].Caption, S) then
|
||||||
|
Exit;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := cPrefix;
|
||||||
|
if OLBar <> nil then
|
||||||
|
for K := 1 to MaxInt - 1 do
|
||||||
|
begin
|
||||||
|
Tmp := Format(cTemplate, [K]);
|
||||||
|
if IsUnique(Tmp) then
|
||||||
|
begin
|
||||||
|
Result := Tmp;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.Notification(AComponent: TComponent;
|
||||||
|
Operation: TOperation);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
if (AComponent = FOutlookBar) and (Operation = opRemove) then
|
||||||
|
begin
|
||||||
|
// The toolbar is currently released, whose content is displayed in the
|
||||||
|
// editor window. Need to clean up the content - otherwise the window will
|
||||||
|
// have references to the already removed toolbars, which will end in AVs ...
|
||||||
|
SetData(nil, nil);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.RefreshNames;
|
||||||
|
var
|
||||||
|
pageNode, buttonNode: TTreeNode;
|
||||||
|
obj: TObject;
|
||||||
|
s: string;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
pagenode := TvItems.Items.GetFirstNode;
|
||||||
|
while pagenode <> nil do
|
||||||
|
begin
|
||||||
|
if not CheckValidPageNode(pagenode) then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.RefreshNames: '+ SDamagedTreeStructure);
|
||||||
|
pageNode.Text := TJvOutlookBarPage(pageNode.Data).Caption;
|
||||||
|
buttonNode := pageNode.GetFirstChild;
|
||||||
|
while buttonNode <> nil do
|
||||||
|
begin
|
||||||
|
if not CheckValidButtonNode(buttonNode) then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.RefreshNames: '+ SDamagedTreeStructure);
|
||||||
|
buttonNode.Text := TJvOutlookBarButton(buttonNode.Data).Caption;
|
||||||
|
buttonNode := buttonNode.GetNextSibling;
|
||||||
|
end;
|
||||||
|
pageNode := pageNode.GetNextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.SelectPageInObjectInspector(APage: TJvOutlookbarPage;
|
||||||
|
ForceUpdate: Boolean);
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
NewSelection: TPersistentSelectionList;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (GlobalDesignHook = nil) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
// select in OI
|
||||||
|
NewSelection := TPersistentSelectionList.Create;
|
||||||
|
NewSelection.ForceUpdate := ForceUpdate;
|
||||||
|
try
|
||||||
|
NewSelection.Add(APage);
|
||||||
|
GlobalDesignHook.SetSelection(NewSelection);
|
||||||
|
GlobalDesignHook.LookupRoot := GetLookupRootForComponent(FOutlookBar);
|
||||||
|
finally
|
||||||
|
NewSelection.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.SelectButtonInObjectInspector(AButton: TJvOutlookBarButton;
|
||||||
|
ForceUpdate: Boolean);
|
||||||
|
var
|
||||||
|
I: Integer;
|
||||||
|
NewSelection: TPersistentSelectionList;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (GlobalDesignHook = nil) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
// select in OI
|
||||||
|
NewSelection := TPersistentSelectionList.Create;
|
||||||
|
NewSelection.ForceUpdate := ForceUpdate;
|
||||||
|
try
|
||||||
|
NewSelection.Add(AButton);
|
||||||
|
GlobalDesignHook.SetSelection(NewSelection);
|
||||||
|
GlobalDesignHook.LookupRoot := GetLookupRootForComponent(FOutlookBar);
|
||||||
|
finally
|
||||||
|
NewSelection.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.SetData(AOutlookBar: TJvCustomOutlookBar;
|
||||||
|
ADesigner: TComponentEditorDesigner);
|
||||||
|
begin
|
||||||
|
if FOutlookBar <> nil then
|
||||||
|
FOutlookBar.RemoveFreeNotification(self);
|
||||||
|
|
||||||
|
FOutlookBar := AOutlookBar;
|
||||||
|
FDesigner := ADesigner;
|
||||||
|
|
||||||
|
if FOutlookBar <> nil then
|
||||||
|
FOutlookBar.FreeNotification(self);
|
||||||
|
|
||||||
|
BuildTreeData;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.TvItemsChange(Sender: TObject; Node: TTreeNode);
|
||||||
|
var
|
||||||
|
Obj: TObject;
|
||||||
|
olb: THackOutlookBar;
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
btn: TJvOutlookBarButton;
|
||||||
|
index: integer;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
olb := THackOutlookBar(FOutlookBar);
|
||||||
|
if Assigned(Node) then
|
||||||
|
begin
|
||||||
|
Obj := TObject(Node.Data);
|
||||||
|
if Obj = nil then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.TvItemsChange: Incorrect data in the field.');
|
||||||
|
if Obj is TJvOutlookBarPage then
|
||||||
|
begin
|
||||||
|
if not(CheckValidPageNode(Node)) then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.TvItemsChange: ' + SDamagedTreeStructure);
|
||||||
|
page := TJvOutlookBarPage(Obj);
|
||||||
|
SelectPageInObjectInspector(page, true);
|
||||||
|
(****************** FIX ME
|
||||||
|
FDesigner.SelectOnlyThisComponent(page); *)
|
||||||
|
index := olb.Pages.IndexOf(page);
|
||||||
|
if index = -1 then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.TvItemsChange: ' + SDamagedTreeStructure);
|
||||||
|
olb.ActivePageIndex := index;
|
||||||
|
end else
|
||||||
|
if Obj is TJvOutlookBarButton then
|
||||||
|
begin
|
||||||
|
btn := TJvOutlookBarButton(Obj);
|
||||||
|
SelectButtonInObjectInspector(btn, true);
|
||||||
|
(******************* FIX ME
|
||||||
|
FDesigner.SelectOnlyThisComponent(btn);
|
||||||
|
**********)
|
||||||
|
if not(CheckValidButtonNode(Node)) then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.TvItemsChange: ' + SDamagedTreeStructure);
|
||||||
|
page := TJvOutlookBarPage(Node.Parent.Data);
|
||||||
|
index := olb.Pages.IndexOf(page);
|
||||||
|
if index = -1 then
|
||||||
|
raise Exception.Create('TFrmOLBEditor.TvItemsChange: ' + SDamagedTreeStructure);
|
||||||
|
olb.ActivePageIndex := index;
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
FDesigner.SelectOnlyThisComponent(FOutlookBar);
|
||||||
|
|
||||||
|
// CheckActionsAvailability;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.TvItemsCollapsing(Sender: TObject; Node: TTreeNode;
|
||||||
|
var AllowCollapse: Boolean);
|
||||||
|
begin
|
||||||
|
//
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.TvItemsEdited(Sender: TObject; Node: TTreeNode; var S: string);
|
||||||
|
var
|
||||||
|
page: TJvOutlookBarPage;
|
||||||
|
btn: TJvOutlookBarButton;
|
||||||
|
begin
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
if Node.Data = nil then
|
||||||
|
raise Exception.Create('TfrmOLBEditor.TvItemsEdited: ' + SDamagedTreeStructure);
|
||||||
|
|
||||||
|
if TObject(Node.Data) is TJvOutlookBarPage then
|
||||||
|
begin
|
||||||
|
page := TJvOutlookBarPage(Node.Data);
|
||||||
|
page.Caption := S;
|
||||||
|
FDesigner.Modified;
|
||||||
|
end else
|
||||||
|
if TObject(Node.Data) is TJvOutlookBarButton then
|
||||||
|
begin
|
||||||
|
btn := TJvOutlookBarButton(Node.Data);
|
||||||
|
btn.Caption := S;
|
||||||
|
FDesigner.Modified;
|
||||||
|
end else
|
||||||
|
raise Exception.Create('TFrmOLBEditor.TvItemsEdited: ' + SDamagedTreeStructure);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TFrmOLBEditor.TvItemsKeyPress(Sender: TObject; var Key: char);
|
||||||
|
begin
|
||||||
|
//
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TFrmOLBEditor.ValidateTreeData: boolean;
|
||||||
|
var
|
||||||
|
i, j: Integer;
|
||||||
|
pagesValid: Boolean;
|
||||||
|
btnsValid: Boolean;
|
||||||
|
pageNode: TTreeNode;
|
||||||
|
btnNode: TTreeNode;
|
||||||
|
olb: THackOutlookBar;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
if (FOutlookBar = nil) or (FDesigner = nil) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
olb := THackOutlookBar(FOutlookBar);
|
||||||
|
i := 0;
|
||||||
|
pagesValid := true;
|
||||||
|
pageNode := TvItems.Items.GetFirstNode;
|
||||||
|
|
||||||
|
while (i < olb.Pages.Count) and pagesValid do
|
||||||
|
begin
|
||||||
|
pagesValid := pagesValid and (pageNode <> nil);
|
||||||
|
if pagesValid then
|
||||||
|
pagesValid := pagesValid and (TObject(pageNode.Data) = olb.Pages[i]);
|
||||||
|
if pagesValid then
|
||||||
|
begin
|
||||||
|
j := 0;
|
||||||
|
btnsValid := true;
|
||||||
|
btnNode := pageNode.GetFirstChild;
|
||||||
|
while (j < olb.Pages[i].Buttons.Count) and btnsValid do
|
||||||
|
begin
|
||||||
|
btnsValid := btnsValid and (btnNode <> nil);
|
||||||
|
if btnsValid then
|
||||||
|
btnsValid := btnsValid and (TObject(btnNode.Data) = olb.Pages[i].Buttons[j]);
|
||||||
|
if btnsValid then
|
||||||
|
begin
|
||||||
|
inc(j);
|
||||||
|
btnNode := btnNode.GetNextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Important! You need to make sure that there are no extra items in the tree!
|
||||||
|
btnsValid := btnsValid and (btnNode = nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if pagesValid then
|
||||||
|
begin
|
||||||
|
inc(i);
|
||||||
|
pageNode := pageNode.GetNextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Important! You need to make sure that there are no extra items in the tree!
|
||||||
|
pagesValid := pagesValid and (pageNode = nil);
|
||||||
|
Result := pagesValid;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -138,6 +138,7 @@ type
|
|||||||
constructor Create(AOwner: TPersistent);
|
constructor Create(AOwner: TPersistent);
|
||||||
function Add: TJvOutlookBarButton;
|
function Add: TJvOutlookBarButton;
|
||||||
procedure Assign(Source: TPersistent); override;
|
procedure Assign(Source: TPersistent); override;
|
||||||
|
function IndexOf(AButton: TJvOutlookBarButton): Integer;
|
||||||
function Insert(Index: Integer): TJvOutlookBarButton;
|
function Insert(Index: Integer): TJvOutlookBarButton;
|
||||||
property Items[Index: Integer]: TJvOutlookBarButton read GetItem write SetItem; default;
|
property Items[Index: Integer]: TJvOutlookBarButton read GetItem write SetItem; default;
|
||||||
end;
|
end;
|
||||||
@ -219,6 +220,7 @@ type
|
|||||||
public
|
public
|
||||||
constructor Create(AOwner: TPersistent);
|
constructor Create(AOwner: TPersistent);
|
||||||
function Add: TJvOutlookBarPage;
|
function Add: TJvOutlookBarPage;
|
||||||
|
function IndexOf(APage: TJvOutlookBarPage): Integer;
|
||||||
function Insert(Index: Integer): TJvOutlookBarPage;
|
function Insert(Index: Integer): TJvOutlookBarPage;
|
||||||
procedure Assign(Source: TPersistent); override;
|
procedure Assign(Source: TPersistent); override;
|
||||||
property Items[Index: Integer]: TJvOutlookBarPage read GetItem write SetItem; default;
|
property Items[Index: Integer]: TJvOutlookBarPage read GetItem write SetItem; default;
|
||||||
@ -1053,6 +1055,13 @@ begin
|
|||||||
Result := TJvOutlookBarButton(inherited Items[Index]);
|
Result := TJvOutlookBarButton(inherited Items[Index]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TJvOutlookBarButtons.IndexOf(AButton: TJvOutlookBarButton): Integer;
|
||||||
|
begin
|
||||||
|
for Result := 0 to Count-1 do
|
||||||
|
if AButton = GetItem(Result) then exit;
|
||||||
|
Result := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
function TJvOutlookBarButtons.Insert(Index: Integer): TJvOutlookBarButton;
|
function TJvOutlookBarButtons.Insert(Index: Integer): TJvOutlookBarButton;
|
||||||
begin
|
begin
|
||||||
Result := TJvOutlookBarButton(inherited Insert(Index));
|
Result := TJvOutlookBarButton(inherited Insert(Index));
|
||||||
@ -1361,6 +1370,13 @@ begin
|
|||||||
Result := TJvOutlookBarPage(inherited Items[Index]);
|
Result := TJvOutlookBarPage(inherited Items[Index]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TJvOutlookBarPages.IndexOf(APage: TJvOutlookBarPage): Integer;
|
||||||
|
begin
|
||||||
|
for Result := 0 to Count-1 do
|
||||||
|
if APage = GetItem(Result) then exit;
|
||||||
|
Result := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
function TJvOutlookBarPages.Insert(Index: Integer): TJvOutlookBarPage;
|
function TJvOutlookBarPages.Insert(Index: Integer): TJvOutlookBarPage;
|
||||||
begin
|
begin
|
||||||
Result := TJvOutlookBarPage(inherited Insert(Index));
|
Result := TJvOutlookBarPage(inherited Insert(Index));
|
||||||
|
Reference in New Issue
Block a user