BSOne.SFC/Tocsg.Module/SunkAssister/EXE_SunkAssister/Config/ManagerConfig.pas

312 lines
8.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{*******************************************************}
{ }
{ ManagerConfig }
{ }
{ Copyright (C) 2011 Sunk }
{ }
{*******************************************************}
unit ManagerConfig;
interface
uses
Define,
Winapi.Windows, System.SysUtils, System.Classes, Vcl.ComCtrls,
System.Generics.Collections, superobject;
const
INI_CONFIG = FAMILY_NAME+'.cfg';
type
TCloseBtnEvent = (cbeQuestion, cbeHide, cbeExit);
TFormSize = record
bDo : Boolean;
nWidth,
nHeight : Integer;
end;
TFormPosition = record
bDo : Boolean;
nTop,
nLeft : Integer;
end;
PSunkHotkey = ^TTgHotkey;
TTgHotkey = record
ShortCut: TShortCut;
Modifiers: THKModifiers;
Description: String;
end;
TNormalConfig = record
SaveLog,
FormInitHide : Boolean;
FormSize : TFormSize;
FormPosition : TFormPosition;
CloseBtnEvent : TCloseBtnEvent;
StartupExecute: Boolean;
AlphaBlend : Boolean;
AlphaBlendVal : WORD;
end;
TPathConfig = record
LogPath,
DataPath: String;
end;
TManagerConfig = class(TObject)
private
lstHK_: TList<PSunkHotkey>;
PathConfig_: TPathConfig;
procedure SetCloseBtnEvent(Value: TCloseBtnEvent);
procedure SetForInitHide(Value: Boolean);
procedure SetFormSizeSave(Value: Boolean);
procedure SetFormSizeWidth(Value: Integer);
procedure SetFormSizeHeight(Value: Integer);
procedure SetFormPosSave(Value: Boolean);
procedure SetFormPosLeft(Value: Integer);
procedure SetFormPosTop(Value: Integer);
procedure SetStartupExecute(Value: Boolean);
procedure SetLogPath(const sLogPath: String);
function GetLogPath: String;
procedure SetDataPath(const sDataPath: String);
function GetDatapath: String;
public
NormalConfig: TNormalConfig; // <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 2015-12-17
Constructor Create;
Destructor Destroy; override;
procedure SetDefault;
procedure SaveConfig;
procedure LoadConfig;
property CloseBtnEvent: TCloseBtnEvent read NormalConfig.CloseBtnEvent write SetCloseBtnEvent;
property FormInitHide: Boolean read NormalConfig.FormInitHide write SetForInitHide;
property FormSizeSave: Boolean read NormalConfig.FormSize.bDo write SetFormSizeSave;
property FormWidth: Integer read NormalConfig.FormSize.nWidth write SetFormSizeWidth;
property FormHeight: Integer read NormalConfig.FormSize.nHeight write SetFormSizeHeight;
property FormPosSave: Boolean read NormalConfig.FormPosition.bDo write SetFormPosSave;
property FormLeft: Integer read NormalConfig.FormPosition.nLeft write SetFormPosLeft;
property FormTop: Integer read NormalConfig.FormPosition.nTop write SetFormPosTop;
property StartupExecute: Boolean read NormalConfig.StartupExecute write SetStartupExecute;
property LogPath: String read GetLogPath write SetLogPath;
property DataPath: String read GetDatapath write SetDataPath;
end;
var
gCfg: TManagerConfig = nil;
implementation
uses
Tocsg.Safe, Tocsg.Path, Tocsg.JSON;
{ TManagerConfig }
Constructor TManagerConfig.Create;
begin
Inherited Create;
ASSERT(gCfg = nil);
gCfg := self;
SetDefault;
end;
Destructor TManagerConfig.Destroy;
begin
gCfg := nil;
Inherited;
end;
procedure TManagerConfig.SetCloseBtnEvent(Value: TCloseBtnEvent);
begin
if NormalConfig.CloseBtnEvent <> Value then
NormalConfig.CloseBtnEvent := Value;
end;
procedure TManagerConfig.SetForInitHide(Value: Boolean);
begin
if NormalConfig.FormInitHide <> Value then
NormalConfig.FormInitHide := Value;
end;
procedure TManagerConfig.SetFormSizeSave(Value: Boolean);
begin
if NormalConfig.FormSize.bDo <> Value then
NormalConfig.FormSize.bDo := Value;
end;
procedure TManagerConfig.SetFormSizeWidth(Value: Integer);
begin
if NormalConfig.FormSize.nWidth <> Value then
NormalConfig.FormSize.nWidth := Value;
end;
procedure TManagerConfig.SetFormSizeHeight(Value: Integer);
begin
if NormalConfig.FormSize.nHeight <> Value then
NormalConfig.FormSize.nHeight := Value;
end;
procedure TManagerConfig.SetFormPosSave(Value: Boolean);
begin
if NormalConfig.FormPosition.bDo <> Value then
NormalConfig.FormPosition.bDo := Value;
end;
procedure TManagerConfig.SetFormPosLeft(Value: Integer);
begin
if NormalConfig.FormPosition.nLeft <> Value then
NormalConfig.FormPosition.nLeft := Value;
end;
procedure TManagerConfig.SetFormPosTop(Value: Integer);
begin
if NormalConfig.FormPosition.nTop <> Value then
NormalConfig.FormPosition.nTop := Value;
end;
procedure TManagerConfig.SetStartupExecute(Value: Boolean);
begin
if NormalConfig.StartupExecute <> Value then
NormalConfig.StartupExecute := Value;
end;
procedure TManagerConfig.SetLogPath(const sLogPath: String);
begin
if PathConfig_.LogPath <> sLogPath then
PathConfig_.LogPath := sLogPath;
end;
function TManagerConfig.GetLogPath: String;
begin
Result := PathConfig_.LogPath;
if Result = '' then
Result := GetRunExePathDir + DIR_DEFAULT_LOG_PATH;
end;
procedure TManagerConfig.SetDataPath(const sDataPath: String);
begin
if PathConfig_.DataPath <> sDataPath then
PathConfig_.DataPath := sDataPath;
end;
function TManagerConfig.GetDatapath: String;
begin
Result := PathConfig_.DataPath;
if Result = '' then
Result := GetRunExePathDir + DIR_DEFAULT_DATA_PATH;
end;
procedure TManagerConfig.SetDefault;
begin
with NormalConfig do
begin
FormSize.bDo := false;
FormSize.nWidth := -1;
FormSize.nHeight := -1;
FormPosition.bDo := false;
FormPosition.nTop := -1;
FormPosition.nLeft := -1;
FormInitHide := false;
SaveLog := true;
CloseBtnEvent := cbeQuestion;
StartupExecute := true;
end;
with PathConfig_ do
begin
LogPath := GetRunExePathDir + DIR_DEFAULT_LOG_PATH;
DataPath := GetRunExePathDir + DIR_DEFAULT_DATA_PATH;
end;
end;
procedure TManagerConfig.SaveConfig;
var
O: ISuperObject;
sPath: String;
fs: TFileStream;
begin
O := SO;
O['NormalConfig'] := TTgJson.ValueToJsonObject<TNormalConfig>(NormalConfig);
O['PathConfig'] := TTgJson.ValueToJsonObject<TPathConfig>(PathConfig_);
sPath := ExtractFilePath(GetRunExePath)+INI_CONFIG;
Guard(fs, TFileStream.Create(sPath, fmCreate));
O.SaveTo(fs, true);
end;
procedure TManagerConfig.LoadConfig;
var
sPath: String;
lstJsonData: TStringList;
O: ISuperObject;
begin
sPath := ExtractFilePath(GetRunExePath) + INI_CONFIG;
if not FileExists(sPath) then
begin
SetDefault;
exit;
end;
Guard(lstJsonData, TStringList.Create);
lstJsonData.LoadFromFile(sPath);
O := SO(lstJsonData.Text);
if O['NormalConfig'] <> nil then
begin
// NormalConfig := TTgJson.GetDataAsType<TNormalConfig>(O['NormalConfig']);
{
SaveLog,
FormInitHide : Boolean;
FormSize : TFormSize;
FormPosition : TFormPosition;
CloseBtnEvent : TCloseBtnEvent;
StartupExecute: Boolean;
AlphaBlend : Boolean;
AlphaBlendVal : WORD;
}
with NormalConfig do
begin
SaveLog := O['NormalConfig'].B['SaveLog'];
FormInitHide := O['NormalConfig'].B['FormInitHide'];
if O['NormalConfig'].O['FormSize'] = nil then
begin
FormSize.bDo := false;
FormSize.nWidth := -1;
FormSize.nHeight := -1;
end else
FormSize := TTgJson.GetDataAsType<TFormSize>(O['NormalConfig'].O['FormSize']);
if O['NormalConfig'].O['FormPosition'] = nil then
begin
FormPosition.bDo := false;
FormPosition.nTop := -1;
FormPosition.nLeft := -1;
end else
FormPosition := TTgJson.GetDataAsType<TFormPosition>(O['NormalConfig'].O['FormPosition']);
CloseBtnEvent := TCloseBtnEvent(O['NormalConfig'].I['CloseBtnEvent']);
StartupExecute := O['NormalConfig'].B['StartupExecute'];
AlphaBlend := O['NormalConfig'].B['AlphaBlend'];
AlphaBlendVal := O['NormalConfig'].I['AlphaBlendVal'];
if AlphaBlendVal = 0 then
AlphaBlendVal := 255;
end;
end;
if O['PathConfig'] <> nil then
PathConfig_ := TTgJson.GetDataAsType<TPathConfig>(O['PathConfig']);
end;
end.