externhelp: add, delete item

git-svn-id: trunk@23754 -
This commit is contained in:
mattias 2010-02-21 18:32:07 +00:00
parent 56a59d23e6
commit 84ee7a6b32
2 changed files with 154 additions and 5 deletions

View File

@ -39,6 +39,7 @@ inherited ExternHelpGeneralOptsFrame: TExternHelpGeneralOptsFrame
BorderSpacing.Around = 6
Color = clBtnFace
NumGlyphs = 0
OnClick = AddSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
@ -52,6 +53,7 @@ inherited ExternHelpGeneralOptsFrame: TExternHelpGeneralOptsFrame
Width = 23
Color = clBtnFace
NumGlyphs = 0
OnClick = DeleteSpeedButtonClick
ShowHint = True
ParentShowHint = False
end
@ -107,6 +109,7 @@ inherited ExternHelpGeneralOptsFrame: TExternHelpGeneralOptsFrame
Top = 93
Width = 237
Anchors = [akTop, akLeft, akRight]
OnEditingDone = FilenameEditEditingDone
TabOrder = 2
Text = 'FilenameEdit'
end
@ -134,6 +137,7 @@ inherited ExternHelpGeneralOptsFrame: TExternHelpGeneralOptsFrame
Width = 260
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 6
OnEditingDone = URLEditEditingDone
TabOrder = 3
Text = 'URLEdit'
end

View File

@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, LCLProc, FileUtil, LResources, Forms, Controls, Graphics,
Dialogs, LazConfigStorage, ComCtrls, Buttons, StdCtrls, ExtCtrls,
IDEOptionsIntf, LazIDEIntf, BaseIDEIntf;
PackageIntf, MacroIntf, IDEOptionsIntf, LazIDEIntf, BaseIDEIntf;
var
ExternHelpOptionID: integer = 2000;
@ -51,6 +51,7 @@ type
procedure MoveChild(FromPos, ToPos: integer);
procedure RemoveChild(Index: integer);
procedure DeleteChild(Index: integer);
procedure DeleteChild(Child: TExternHelpItem);
function IndexOf(Child: TExternHelpItem): integer;
function IsEqual(Item: TExternHelpItem; WithName: boolean): boolean;
procedure Assign(Src: TExternHelpItem; WithName: boolean);
@ -122,6 +123,9 @@ type
StoreLabel: TLabel;
URLEdit: TEdit;
URLLabel: TLabel;
procedure AddSpeedButtonClick(Sender: TObject);
procedure DeleteSpeedButtonClick(Sender: TObject);
procedure FilenameEditEditingDone(Sender: TObject);
procedure ItemsTreeViewEdited(Sender: TObject; Node: TTreeNode;
var S: string);
procedure ItemsTreeViewEditing(Sender: TObject; Node: TTreeNode;
@ -129,12 +133,16 @@ type
procedure ItemsTreeViewSelectionChanged(Sender: TObject);
procedure NameEditChange(Sender: TObject);
procedure NameEditEditingDone(Sender: TObject);
procedure URLEditEditingDone(Sender: TObject);
private
FOptions: TExternHelpOptions;
procedure FillItemsTreeView;
procedure NameChanged(TVNode: TTreeNode; var NewName: string;
UpdateTree, UpdateEdit: boolean);
procedure SelectionChanged;
function FindTVNode(NodeText: string): TTreeNode;
function CreateUniqueName(Prefix: string): string;
procedure FillStoreInCombobox;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
@ -175,6 +183,7 @@ constructor TExternHelpOptions.Create;
begin
RootItem:=TExternHelpRootItem.Create;
RootItem.Owner:=Self;
Filename:='externhelp.xml';
end;
destructor TExternHelpOptions.Destroy;
@ -278,6 +287,78 @@ begin
NameChanged(Node,S,false,true);
end;
procedure TExternHelpGeneralOptsFrame.FilenameEditEditingDone(Sender: TObject);
var
s: String;
TVNode: TTreeNode;
Item: TExternHelpItem;
Msg: String;
Filename: String;
begin
s:=FilenameEdit.Text;
TVNode:=ItemsTreeView.Selected;
if (TVNode=nil) or (not (TObject(TVNode.Data) is TExternHelpItem)) then exit;
Item:=TExternHelpItem(TVNode.Data);
s:=Trim(s);
if s<>Item.Filename then begin
Filename:=s;
DoDirSeparators(Filename);
IDEMacros.SubstituteMacros(Filename);
Msg:='';
if (Filename<>'') and (Filename[length(Filename)]=PathDelim) then begin
if not DirPathExists(Filename) then
Msg:='Directory not found: '+Filename;
end else begin
if not FileExistsUTF8(Filename) then
Msg:='File not found: '+Filename;
end;
if Msg<>'' then begin
MessageDlg('Warning',Msg,mtWarning,[mbIgnore],0);
end;
Item.Filename:=s;
end;
end;
procedure TExternHelpGeneralOptsFrame.AddSpeedButtonClick(Sender: TObject);
var
SelTVNode: TTreeNode;
Item: TExternHelpItem;
TVNode: TTreeNode;
SelItem: TExternHelpItem;
begin
SelTVNode:=ItemsTreeView.Selected;
Item:=TExternHelpItem.Create;
Item.Name:=CreateUniqueName('Item');
if TObject(SelTVNode.Data) is TExternHelpItem then begin
// init with values of selected node
SelItem:=TExternHelpItem(SelTVNode.Data);
Item.Filename:=SelItem.Filename;
Item.URL:=SelItem.URL;
Item.StoreIn:=SelItem.StoreIn;
end;
TVNode:=ItemsTreeView.Items.AddObject(SelTVNode,Item.Name,Item);
ItemsTreeView.Selected:=TVNode;
end;
procedure TExternHelpGeneralOptsFrame.DeleteSpeedButtonClick(Sender: TObject);
var
SelTVNode: TTreeNode;
Item: TExternHelpItem;
begin
SelTVNode:=ItemsTreeView.Selected;
if (SelTVNode=nil) or (not (TObject(SelTVNode.Data) is TExternHelpItem)) then exit;
Item:=TExternHelpItem(SelTVNode.Data);
// select next
if SelTVNode.GetNext<>nil then
ItemsTreeView.Selected:=SelTVNode.GetNext
else
ItemsTreeView.Selected:=SelTVNode.GetPrev;
// delete in treeview
SelTVNode.Free;
// delete in Options
Item.Free;
end;
procedure TExternHelpGeneralOptsFrame.ItemsTreeViewEditing(Sender: TObject;
Node: TTreeNode; var AllowEdit: Boolean);
begin
@ -306,6 +387,22 @@ begin
NameChanged(ItemsTreeView.Selected,S,true,true);
end;
procedure TExternHelpGeneralOptsFrame.URLEditEditingDone(Sender: TObject);
var
s: String;
TVNode: TTreeNode;
Item: TExternHelpItem;
begin
s:=URLEdit.Text;
TVNode:=ItemsTreeView.Selected;
if (TVNode=nil) or (not (TObject(TVNode.Data) is TExternHelpItem)) then exit;
Item:=TExternHelpItem(TVNode.Data);
s:=Trim(s);
if s<>Item.URL then begin
Item.URL:=s;
end;
end;
procedure TExternHelpGeneralOptsFrame.FillItemsTreeView;
procedure Add(ParentItem: TExternHelpItem; ParentTVNode: TTreeNode);
@ -362,7 +459,7 @@ begin
FilenameEdit.Text:=Item.Filename;
URLEdit.Enabled:=true;
URLEdit.Text:=Item.URL;
StoreComboBox.Enabled:=true;
StoreComboBox.Enabled:=Item.Parent=Options.RootItem;
StoreComboBox.Text:=Item.StoreIn;
end else begin
NameEdit.Enabled:=false;
@ -376,6 +473,38 @@ begin
end;
end;
function TExternHelpGeneralOptsFrame.FindTVNode(NodeText: string): TTreeNode;
begin
Result:=ItemsTreeView.Items.GetFirstNode;
while (Result<>nil) and (SysUtils.CompareText(Result.Text,NodeText)<>0) do
Result:=Result.GetNext;
end;
function TExternHelpGeneralOptsFrame.CreateUniqueName(Prefix: string): string;
var
i: Integer;
begin
i:=0;
repeat
inc(i);
Result:=Prefix+IntToStr(i);
until FindTVNode(Result)=nil;
end;
procedure TExternHelpGeneralOptsFrame.FillStoreInCombobox;
var
sl: TStringList;
begin
sl:=TStringList.Create;
try
sl.Sort;
sl.Insert(0,'My settings');
StoreComboBox.Items.Assign(sl);
finally
sl.Free;
end;
end;
constructor TExternHelpGeneralOptsFrame.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
@ -478,6 +607,8 @@ end;
destructor TExternHelpItem.Destroy;
begin
if Parent<>nil then
Parent.RemoveChild(Parent.IndexOf(Self));
Clear;
FreeAndNil(fChilds);
inherited Destroy;
@ -486,9 +617,14 @@ end;
procedure TExternHelpItem.Clear;
var
i: Integer;
Child: TExternHelpItem;
begin
if (ChildCount=0) and (URL='') and (Filename='') and (StoreIn='') then exit;
for i:=fChilds.Count-1 downto 0 do TObject(fChilds).Free;
for i:=fChilds.Count-1 downto 0 do begin
Child:=Childs[i];
Child.Parent:=nil;
Child.Free;
end;
fChilds.Clear;
fURL:='';
FFilename:='';
@ -500,22 +636,31 @@ procedure TExternHelpItem.AddChild(Item: TExternHelpItem);
begin
Item.Parent:=Self;
fChilds.Add(Item);
IncreaseChangeStep;
end;
procedure TExternHelpItem.MoveChild(FromPos, ToPos: integer);
begin
if FromPos=ToPos then exit;
fChilds.Move(FromPos,ToPos);
IncreaseChangeStep;
end;
procedure TExternHelpItem.RemoveChild(Index: integer);
begin
Childs[Index].Parent:=nil;
fChilds.Delete(Index);
IncreaseChangeStep;
end;
procedure TExternHelpItem.DeleteChild(Index: integer);
begin
TObject(fChilds[Index]).Free;
fChilds.Delete(Index);
Childs[Index].Free;
end;
procedure TExternHelpItem.DeleteChild(Child: TExternHelpItem);
begin
Child.Free;
end;
function TExternHelpItem.IndexOf(Child: TExternHelpItem): integer;