lazarus/ide/advhistorylist.pas
2014-02-06 19:42:58 +00:00

179 lines
5.0 KiB
ObjectPascal

unit AdvHistoryList;
{$mode objfpc}{$H+}
{$I ide.inc}
interface
uses
Classes, SysUtils, AvgLvlTree, InputHistory, Laz2_XMLCfg, IDEProcs, StdCtrls;
Const
hlCmdLineParamsHistoryList = 'CmdLineParamsHistoryList';
hlLaunchingApplicationHistoryList = 'LaunchingApplicationHistoryList';
Type
{ TAdvHistoryList }
TAdvHistoryList = class(THistoryList)
private
FSelected : String;
protected
FSaveSelected : Boolean;
procedure AssignValues(Source : TPersistent);override;
public
constructor Create(TheListType: TRecentListType);override;
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);override;
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);override;
procedure AdvLoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);virtual;
procedure AdvSaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);virtual;
procedure Clear; override;
procedure SetComboBox(AComboBox : TComboBox);
class function CreateMe(ATheListType : TRecentListType; AName : String) : THistoryList;override;
procedure Assign(Source: TPersistent); override;
procedure AssignKeyValue(Source : TPersistent);virtual;
property Selected : String read FSelected write FSelected;
end;
implementation
{ TAdvHistoryListCreator }
class function TAdvHistoryList.CreateMe(ATheListType : TRecentListType; AName : String) : THistoryList;
Var
AAdvHistoryList : TAdvHistoryList;
begin
AAdvHistoryList := TAdvHistoryList.Create(ATheListType);
AAdvHistoryList.Name := AName;
AAdvHistoryList.NameValueSeparator := #0;
Result := AAdvHistoryList;
end;
constructor TAdvHistoryList.Create(TheListType: TRecentListType);
begin
inherited;
FSelected := '';
end;
procedure TAdvHistoryList.Assign(Source: TPersistent);
begin
inherited;
If Source is TAdvHistoryList Then
If FSaveSelected Then
Self.FSelected := TAdvHistoryList(Source).FSelected;
end;
procedure TAdvHistoryList.AssignKeyValue(Source : TPersistent);
Var
I : Integer;
AName, AValue : String;
Begin
If Source is TAdvHistoryList Then Begin
Self.NameValueSeparator := TAdvHistoryList(Source).NameValueSeparator;
Self.AssignValues(Source);
For I := 0 To TAdvHistoryList(Source).Count - 1 Do Begin
TAdvHistoryList(Source).GetNameValue(I, AName, AValue);
Self.Values[AName] := AValue;
end;
end;
end;
procedure TAdvHistoryList.AssignValues(Source : TPersistent);
Begin
inherited;
If Source is TAdvHistoryList Then
If FSaveSelected Then
Self.FSelected := TAdvHistoryList(Source).FSelected;
end;
procedure TAdvHistoryList.AdvLoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
begin
FSaveSelected := True;
Self.LoadFromXMLConfig(XMLConfig, Path);
FSaveSelected := False;
end;
procedure TAdvHistoryList.AdvSaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
begin
FSaveSelected := True;
Self.SaveToXMLConfig(XMLConfig, Path);
FSaveSelected := False;
end;
procedure TAdvHistoryList.LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
Var
AStringToStringTree : TStringToStringTree;
APStringToStringItem : PStringToStringItem;
begin
AStringToStringTree := TStringToStringTree.Create(false);
if Name='' then
Name:=XMLConfig.GetValue(Path+'Name','');
MaxCount:=XMLConfig.GetValue(Path+'MaxCount',MaxCount);
FListType:=StrToRecentListType(XMLConfig.GetValue(Path+'Type',''));
If FSaveSelected Then
FSelected := XMLConfig.GetValue(Path+'Selected','');
LoadStringToStringTree(XMLConfig, AStringToStringTree, Path);
For APStringToStringItem in AStringToStringTree do
Self.Values[APStringToStringItem^.Name] := APStringToStringItem^.Value;
CleanUpRecentList(Self,ListType);
FreeAndNil(AStringToStringTree);
end;
procedure TAdvHistoryList.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
Var
AStringToStringTree : TStringToStringTree;
begin
AStringToStringTree := TStringToStringTree.Create(false);
XMLConfig.SetDeleteValue(Path+'Name',Name,'');
XMLConfig.SetDeleteValue(Path+'Type',RecentListTypeNames[ListType],
RecentListTypeNames[rltCaseSensitive]);
XMLConfig.SetDeleteValue(Path+'MaxCount',MaxCount,20);
If FSaveSelected Then
XMLConfig.SetDeleteValue(Path+'Selected', FSelected, '');
AStringToStringTree.AddNameValues(Self);
SaveStringToStringTree(XMLConfig, AStringToStringTree, Path);
FreeAndNil(AStringToStringTree);
end;
procedure TAdvHistoryList.Clear;
begin
inherited;
FSelected := '';
end;
procedure TAdvHistoryList.SetComboBox(AComboBox : TComboBox);
Var
I, AIndex : Integer;
AValue : String;
Begin
AComboBox.Items.Clear;
For I := 0 To Self.Count - 1 Do Begin
AValue := Self.Names[I];
AIndex := AComboBox.Items.IndexOf(AValue);
If AIndex = -1 Then
If AValue <> '' Then
AComboBox.Items.Add(AValue);
end;
end;
initialization
THistoryLists.RegisterHistoryListClass(TAdvHistoryList, hlCmdLineParamsHistoryList);
THistoryLists.RegisterHistoryListClass(TAdvHistoryList, hlLaunchingApplicationHistoryList);
end.