mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 05:59:49 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			179 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			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.
 | 
						|
 |