1
0
mirror of synced 2024-11-22 11:23:50 +00:00
unitswitcher/Source/UnSwSettings.pas
Mark van Renswoude be20ec1c0f Fixed: Issue #137
Fixed: Issue #142
Fixed: Issue #143
Fixed: Issue #155
2006-01-15 00:22:09 +00:00

386 lines
12 KiB
ObjectPascal

{: Encapsulates the settings.
Last changed: $Date$
Revision: $Rev$
Author: $Author$
}
unit UnSwSettings;
interface
uses
Classes,
Graphics,
Registry;
type
TUnSwBaseSettings = class(TObject)
protected
procedure Load(const ARegistry: TRegistry); virtual; abstract;
procedure Save(const ARegistry: TRegistry); virtual; abstract;
function GetKeyName(const AName: String): String; virtual;
procedure ReadBoolDef(const ARegistry: TRegistry; var AValue: Boolean; const AName: String);
procedure ReadIntegerDef(const ARegistry: TRegistry; var AValue: Integer; const AName: String);
procedure ReadColorDef(const ARegistry: TRegistry; var AValue: TColor; const AName: String);
procedure WriteBool(const ARegistry: TRegistry; const AValue: Boolean; const AName: String);
procedure WriteInteger(const ARegistry: TRegistry; const AValue: Integer; const AName: String);
procedure WriteColor(const ARegistry: TRegistry; const AValue: TColor; const AName: String);
end;
TUnSwDialogSort = (dsName, dsType);
TUnSwDialogSettings = class(TUnSwBaseSettings)
private
FHeight: Integer;
FIncludeDataModules: Boolean;
FIncludeForms: Boolean;
FIncludeProjectSource: Boolean;
FIncludeUnits: Boolean;
FMRUList: TStrings;
FPrefix: String;
FSort: TUnSwDialogSort;
FWidth: Integer;
protected
function GetKeyName(const AName: String): String; override;
procedure Load(const ARegistry: TRegistry); override;
procedure Save(const ARegistry: TRegistry); override;
public
constructor Create(const APrefix: String);
destructor Destroy(); override;
property Height: Integer read FHeight write FHeight;
property IncludeDataModules: Boolean read FIncludeDataModules write FIncludeDataModules;
property IncludeForms: Boolean read FIncludeForms write FIncludeForms;
property IncludeProjectSource: Boolean read FIncludeProjectSource write FIncludeProjectSource;
property IncludeUnits: Boolean read FIncludeUnits write FIncludeUnits;
property MRUList: TStrings read FMRUList write FMRUList;
property Sort: TUnSwDialogSort read FSort write FSort;
property Width: Integer read FWidth write FWidth;
end;
TUnSwColorSettings = class(TUnSwBaseSettings)
private
FDataModules: TColor;
FEnabled: Boolean;
FForms: TColor;
FProjectSource: TColor;
FUnits: TColor;
protected
procedure Load(const ARegistry: TRegistry); override;
procedure Save(const ARegistry: TRegistry); override;
public
property DataModules: TColor read FDataModules write FDataModules;
property Enabled: Boolean read FEnabled write FEnabled;
property Forms: TColor read FForms write FForms;
property ProjectSource: TColor read FProjectSource write FProjectSource;
property Units: TColor read FUnits write FUnits;
end;
TUnSwSettings = class(TObject)
private
FColors: TUnSwColorSettings;
FFormsDialog: TUnSwDialogSettings;
FUnitsDialog: TUnSwDialogSettings;
FRegistryKey: String;
protected
procedure Load();
public
constructor Create();
destructor Destroy(); override;
procedure ResetDefaults(const AColorsOnly: Boolean = False);
procedure Save();
property Colors: TUnSwColorSettings read FColors write FColors;
property FormsDialog: TUnSwDialogSettings read FFormsDialog write FFormsDialog;
property UnitsDialog: TUnSwDialogSettings read FUnitsDialog write FUnitsDialog;
end;
function Settings(): TUnSwSettings;
implementation
uses
SysUtils,
ToolsAPI,
Windows;
var
GSettings: TUnSwSettings;
function Settings(): TUnSwSettings;
begin
if not Assigned(GSettings) then
GSettings := TUnSwSettings.Create();
Result := GSettings;
end;
{ TUnSwBaseSettings }
function TUnSwBaseSettings.GetKeyName(const AName: String): String;
begin
Result := AName;
end;
procedure TUnSwBaseSettings.ReadBoolDef(const ARegistry: TRegistry;
var AValue: Boolean;
const AName: String);
begin
if ARegistry.ValueExists(GetKeyName(AName)) then
AValue := ARegistry.ReadBool(GetKeyName(AName));
end;
procedure TUnSwBaseSettings.ReadColorDef(const ARegistry: TRegistry;
var AValue: TColor;
const AName: String);
begin
if ARegistry.ValueExists(GetKeyName(AName)) then
AValue := TColor(ARegistry.ReadInteger(GetKeyName(AName)));
end;
procedure TUnSwBaseSettings.ReadIntegerDef(const ARegistry: TRegistry;
var AValue: Integer;
const AName: String);
begin
if ARegistry.ValueExists(GetKeyName(AName)) then
AValue := ARegistry.ReadInteger(GetKeyName(AName));
end;
procedure TUnSwBaseSettings.WriteBool(const ARegistry: TRegistry;
const AValue: Boolean;
const AName: String);
begin
ARegistry.WriteBool(GetKeyName(AName), AValue);
end;
procedure TUnSwBaseSettings.WriteColor(const ARegistry: TRegistry;
const AValue: TColor;
const AName: String);
begin
WriteInteger(ARegistry, Integer(AValue), AName);
end;
procedure TUnSwBaseSettings.WriteInteger(const ARegistry: TRegistry;
const AValue: Integer;
const AName: String);
begin
ARegistry.WriteInteger(GetKeyName(AName), AValue);
end;
{ TUnSwDialogSettings }
constructor TUnSwDialogSettings.Create(const APrefix: String);
begin
inherited Create();
FMRUList := TStringList.Create();
FPrefix := APrefix;
TStringList(FMRUList).CaseSensitive := False
end;
destructor TUnSwDialogSettings.Destroy();
begin
FreeAndNil(FMRUList);
inherited;
end;
function TUnSwDialogSettings.GetKeyName(const AName: String): String;
begin
Result := FPrefix + AName;
end;
procedure TUnSwDialogSettings.Load(const ARegistry: TRegistry);
var
iSort: Integer;
sMRU: String;
begin
// Conversion v0.1 -> v0.2
if ARegistry.ValueExists('IncludeDataModules') then
begin
ARegistry.RenameValue('IncludeDataModules', 'UnitsIncludeDataModules');
ARegistry.RenameValue('IncludeForms', 'UnitsIncludeForms');
ARegistry.RenameValue('IncludeProjectSource', 'UnitsIncludeProjectSource');
ARegistry.RenameValue('FormsDialogHeight', 'FormsHeight');
ARegistry.RenameValue('FormsDialogWidth', 'FormsWidth');
ARegistry.RenameValue('UnitsDialogHeight', 'UnitsHeight');
ARegistry.RenameValue('UnitsDialogWidth', 'UnitsWidth');
end;
ReadBoolDef(ARegistry, FIncludeDataModules, 'IncludeDataModules');
ReadBoolDef(ARegistry, FIncludeForms, 'IncludeForms');
ReadBoolDef(ARegistry, FIncludeProjectSource, 'IncludeProjectSource');
ReadBoolDef(ARegistry, FIncludeUnits, 'IncludeUnits');
ReadIntegerDef(ARegistry, FWidth, 'Width');
ReadIntegerDef(ARegistry, FHeight, 'Height');
iSort := Integer(FSort);
ReadIntegerDef(ARegistry, iSort, 'Sort');
FSort := TUnSwDialogSort(iSort);
if ARegistry.ValueExists(GetKeyName('MRU')) then
begin
SetLength(sMRU, ARegistry.GetDataSize(GetKeyName('MRU')));
if Length(sMRU) > 0 then
begin
ARegistry.ReadBinaryData(GetKeyName('MRU'), PChar(sMRU)^, Length(sMRU));
FMRUList.Text := Trim(sMRU);
end;
end;
end;
procedure TUnSwDialogSettings.Save(const ARegistry: TRegistry);
var
sMRU: String;
begin
WriteBool(ARegistry, FIncludeDataModules, 'IncludeDataModules');
WriteBool(ARegistry, FIncludeForms, 'IncludeForms');
WriteBool(ARegistry, FIncludeProjectSource, 'IncludeProjectSource');
WriteBool(ARegistry, FIncludeUnits, 'IncludeUnits');
WriteInteger(ARegistry, FWidth, 'Width');
WriteInteger(ARegistry, FHeight, 'Height');
WriteInteger(ARegistry, Integer(FSort), 'Sort');
if FMRUList.Count > 0 then
begin
sMRU := FMRUList.Text;
ARegistry.WriteBinaryData(GetKeyName('MRU'), PChar(sMRU)^, Length(sMRU));
end else
ARegistry.DeleteValue(GetKeyName('MRU'));
end;
{ TUnSwColorSettings }
procedure TUnSwColorSettings.Load(const ARegistry: TRegistry);
begin
ReadBoolDef(ARegistry, FEnabled, 'ColorEnabled');
ReadColorDef(ARegistry, FDataModules, 'ColorDataModules');
ReadColorDef(ARegistry, FForms, 'ColorForms');
ReadColorDef(ARegistry, FProjectSource, 'ColorProjectSource');
ReadColorDef(ARegistry, FUnits, 'ColorUnits');
end;
procedure TUnSwColorSettings.Save(const ARegistry: TRegistry);
begin
WriteBool(ARegistry, FEnabled, 'ColorEnabled');
WriteColor(ARegistry, FDataModules, 'ColorDataModules');
WriteColor(ARegistry, FForms, 'ColorForms');
WriteColor(ARegistry, FProjectSource, 'ColorProjectSource');
WriteColor(ARegistry, FUnits, 'ColorUnits');
end;
{ TUnSwSettings }
constructor TUnSwSettings.Create();
begin
inherited Create();
FRegistryKey := (BorlandIDEServices as IOTAServices).GetBaseRegistryKey() +
'\UnitSwitcher';
FColors := TUnSwColorSettings.Create();
FFormsDialog := TUnSwDialogSettings.Create('Forms');
FUnitsDialog := TUnSwDialogSettings.Create('Units');
ResetDefaults();
Load();
end;
destructor TUnSwSettings.Destroy();
begin
FreeAndNil(FUnitsDialog);
FreeAndNil(FFormsDialog);
FreeAndNil(FColors);
inherited;
end;
procedure TUnSwSettings.ResetDefaults(const AColorsOnly: Boolean);
procedure ResetDialog(const ADialog: TUnSwDialogSettings);
begin
ADialog.IncludeDataModules := True;
ADialog.IncludeForms := True;
ADialog.IncludeProjectSource := True;
ADialog.IncludeUnits := True;
ADialog.Sort := dsName;
ADialog.Width := 300;
ADialog.Height := 425;
end;
begin
if not AColorsOnly then
begin
ResetDialog(FFormsDialog);
ResetDialog(FUnitsDialog);
end;
FColors.Enabled := True;
FColors.DataModules := RGB( 35, 120, 35); // Green
FColors.Forms := RGB( 50, 70, 120); // Blue
FColors.ProjectSource := RGB(120, 120, 35); // Yellow
FColors.Units := RGB(150, 35, 35); // Red
end;
procedure TUnSwSettings.Load();
var
ideRegistry: TRegistry;
begin
ideRegistry := TRegistry.Create();
with ideRegistry do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey(FRegistryKey, False) then
begin
FColors.Load(ideRegistry);
FFormsDialog.Load(ideRegistry);
FUnitsDialog.Load(ideRegistry);
CloseKey();
end;
finally
Free();
end;
end;
procedure TUnSwSettings.Save();
var
ideRegistry: TRegistry;
begin
ideRegistry := TRegistry.Create();
with ideRegistry do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey(FRegistryKey, True) then
begin
FColors.Save(ideRegistry);
FFormsDialog.Save(ideRegistry);
FUnitsDialog.Save(ideRegistry);
CloseKey();
end;
finally
Free();
end;
end;
initialization
finalization
FreeAndNil(GSettings);
end.