1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
* *
***************************************************************************
Author: Mattias Gaertner
Abstract:
The IDE keeps book about loading projects and forms. When an error occurs,
that kills the IDE, it will not open it automatically again the next time.
}
unit IDEProtocol;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
// LCL
LCLProc,
// LazUtils
LazConfigStorage, LazFileUtils,
// IdeIntf
BaseIDEIntf,
// IDE
LazConf;
const
IDEProtocolOptsVersion: integer = 1;
IDEProtocolFilename = 'protocol.xml';
type
{ TIDEProtocol }
TIDEProtocol = class
private
FFilename: string;
FLastProjectLoadingCrashed: boolean;
public
constructor Create;
destructor Destroy; override;
procedure Load;
procedure Save;
procedure LoadFromConfig(Config: TConfigStorage; const Path: string);
procedure SaveToConfig(Config: TConfigStorage; const Path: string);
public
property Filename: string read FFilename write FFilename;
property LastProjectLoadingCrashed: boolean read FLastProjectLoadingCrashed
write FLastProjectLoadingCrashed;
end;
var
IDEProtocolOpts: TIDEProtocol;
implementation
{ TIDEProtocol }
constructor TIDEProtocol.Create;
begin
end;
destructor TIDEProtocol.Destroy;
begin
inherited Destroy;
end;
procedure TIDEProtocol.Load;
var
Config: TConfigStorage;
begin
if Filename='' then
Filename:=AppendPathDelim(GetPrimaryConfigPath)+IDEProtocolFilename;
try
Config:=DefaultConfigClass.Create(Filename,true);
try
LoadFromConfig(Config,'Protocol/');
finally
Config.Free;
end;
except
on E: Exception do begin
DebugLn('[TIDEProtocol.Load] error reading "',Filename,'": ',E.Message);
end;
end;
end;
procedure TIDEProtocol.Save;
var
Config: TConfigStorage;
begin
if Filename='' then
Filename:=AppendPathDelim(GetPrimaryConfigPath)+IDEProtocolFilename;
try
Config:=DefaultConfigClass.Create(Filename,false);
try
SaveToConfig(Config,'Protocol/');
Config.WriteToDisk;
finally
Config.Free;
end;
except
on E: Exception do begin
DebugLn('[TIDEProtocol.Save] error writing "',Filename,'": ',E.Message);
end;
end;
end;
procedure TIDEProtocol.LoadFromConfig(Config: TConfigStorage; const Path: string);
begin
FLastProjectLoadingCrashed:=Config.GetValue(Path+'LastProjectLoading/Failed',false);
end;
procedure TIDEProtocol.SaveToConfig(Config: TConfigStorage; const Path: string);
begin
Config.SetValue(Path+'Version',IDEProtocolOptsVersion);
Config.SetDeleteValue(Path+'LastProjectLoading/Failed',
FLastProjectLoadingCrashed,false);
end;
end.
|