194 lines
4.8 KiB
ObjectPascal
194 lines
4.8 KiB
ObjectPascal
unit usettings;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, IniFiles, Graphics;
|
|
|
|
type
|
|
|
|
{ TSettings }
|
|
|
|
TSettings = class
|
|
private
|
|
FIniFile: TIniFile;
|
|
procedure FTranspModeWrite(Value: Integer);
|
|
function FTranspModeRead(): Integer;
|
|
procedure FStretchModeWrite(Value: Boolean);
|
|
function FStretchModeRead(): Boolean;
|
|
procedure FLastDirWrite(const Value: string);
|
|
function FLastDirRead(): string;
|
|
procedure FBackColorWrite(Color: TColor);
|
|
function FBackColorRead(): TColor;
|
|
procedure FBitModeWrite(Mode: Integer);
|
|
function FBitModeRead(): Integer;
|
|
procedure FInfoVisibleWrite(Value: Boolean);
|
|
function FInfoVisibleRead(): Boolean;
|
|
|
|
{$IFDEF windows}
|
|
function FGetSendtoShortcutPath: WideString;
|
|
procedure FCreateSendtoShortcut;
|
|
function FSendtoShortcutExists: Boolean;
|
|
{$IFEND}
|
|
public
|
|
constructor Create(const DirPath: string);
|
|
destructor Destroy; override;
|
|
|
|
{$IFDEF windows}
|
|
procedure AddToSendTo(Delete: Boolean);
|
|
property SendToShortcutExists: Boolean read FSendtoShortcutExists;
|
|
{$IFEND}
|
|
|
|
property TranspMode: Integer read FTranspModeRead write FTranspModeWrite;
|
|
property StretchMode: Boolean read FStretchModeRead write FStretchModeWrite;
|
|
property LastDir: string read FLastDirRead write FLastDirWrite;
|
|
property BackColor: TColor read FBackColorRead write FBackColorWrite;
|
|
property BitMode: Integer read FBitModeRead write FBitModeWrite;
|
|
property InfoVisible: Boolean read FInfoVisibleRead write FInfoVisibleWrite;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses LazUTF8
|
|
|
|
{$IFDEF windows}
|
|
,windows, shlobj {for special folders}, ActiveX, ComObj
|
|
{$ENDIF}
|
|
;
|
|
|
|
const
|
|
sMain = 'main';
|
|
sSendtoShortcut : string = 'Open in Tim2View';
|
|
|
|
{ TSettings }
|
|
|
|
{$IFDEF windows}
|
|
procedure TSettings.AddToSendTo(Delete: Boolean);
|
|
var
|
|
path: string;
|
|
begin
|
|
if Delete then
|
|
begin
|
|
path := UTF8Encode(FGetSendtoShortcutPath);
|
|
DeleteFile(PChar(Utf8ToSys(path)));
|
|
end
|
|
else
|
|
FCreateSendtoShortcut;
|
|
end;
|
|
|
|
function TSettings.FGetSendtoShortcutPath: WideString;
|
|
var
|
|
PIDL: PItemIDList;
|
|
InFolder: array[0..MAX_PATH] of Char;
|
|
begin
|
|
SHGetSpecialFolderLocation(0, CSIDL_SENDTO, PIDL);
|
|
SHGetPathFromIDList(PIDL, InFolder);
|
|
Result := InFolder + PathDelim + UTF8ToSys(sSendtoShortcut)+'.lnk';
|
|
end;
|
|
|
|
procedure TSettings.FCreateSendtoShortcut;
|
|
var
|
|
IObject: IUnknown;
|
|
ISLink: IShellLink;
|
|
IPFile: IPersistFile;
|
|
TargetPath: string;
|
|
begin
|
|
{ Creates an instance of IShellLink }
|
|
IObject := CreateComObject(CLSID_ShellLink);
|
|
ISLink := IObject as IShellLink;
|
|
IPFile := IObject as IPersistFile;
|
|
|
|
TargetPath := ParamStr(0);
|
|
ISLink.SetPath(pChar(TargetPath));
|
|
ISLink.SetArguments(pChar(''));
|
|
ISLink.SetWorkingDirectory(pChar(ExtractFilePath(TargetPath)));
|
|
|
|
{ Create the link }
|
|
IPFile.Save(PWChar(FGetSendtoShortcutPath), false);
|
|
end;
|
|
|
|
function TSettings.FSendtoShortcutExists: Boolean;
|
|
begin
|
|
Result := FileExists(FGetSendtoShortcutPath);
|
|
end;
|
|
{$ENDIF}
|
|
|
|
procedure TSettings.FTranspModeWrite(Value: Integer);
|
|
begin
|
|
FIniFile.WriteInteger(sMain, 'TranspMode', Value);
|
|
end;
|
|
|
|
function TSettings.FTranspModeRead: Integer;
|
|
begin
|
|
Result := FIniFile.ReadInteger(sMain, 'TranspMode', 1);
|
|
end;
|
|
|
|
procedure TSettings.FStretchModeWrite(Value: Boolean);
|
|
begin
|
|
FIniFile.WriteBool(sMain, 'StretchMode', Value);
|
|
end;
|
|
|
|
function TSettings.FStretchModeRead: Boolean;
|
|
begin
|
|
Result := FIniFile.ReadBool(sMain, 'StretchMode', False);
|
|
end;
|
|
|
|
procedure TSettings.FLastDirWrite(const Value: string);
|
|
begin
|
|
FIniFile.WriteString(sMain, 'LastDir', UTF8ToSys(Value));
|
|
end;
|
|
|
|
function TSettings.FLastDirRead: string;
|
|
begin
|
|
Result := SysToUtf8(FIniFile.ReadString(sMain, 'LastDir', ''));
|
|
end;
|
|
|
|
procedure TSettings.FBackColorWrite(Color: TColor);
|
|
begin
|
|
FIniFile.WriteInteger(sMain, 'BackColor', Color);
|
|
end;
|
|
|
|
function TSettings.FBackColorRead: TColor;
|
|
begin
|
|
Result := FIniFile.ReadInteger(sMain, 'BackColor', clBtnFace);
|
|
end;
|
|
|
|
procedure TSettings.FBitModeWrite(Mode: Integer);
|
|
begin
|
|
FIniFile.WriteInteger(sMain, 'BitMode', Mode);
|
|
end;
|
|
|
|
function TSettings.FBitModeRead: Integer;
|
|
begin
|
|
Result := FIniFile.ReadInteger(sMain, 'BitMode', 0);
|
|
end;
|
|
|
|
procedure TSettings.FInfoVisibleWrite(Value: Boolean);
|
|
begin
|
|
FIniFile.WriteBool(sMain, 'InfoVisible', Value);
|
|
end;
|
|
|
|
function TSettings.FInfoVisibleRead: Boolean;
|
|
begin
|
|
Result := FIniFile.ReadBool(sMain, 'InfoVisible', True);
|
|
end;
|
|
|
|
constructor TSettings.Create(const DirPath: string);
|
|
begin
|
|
inherited Create;
|
|
|
|
FIniFile := TIniFile.Create(IncludeTrailingPathDelimiter(DirPath) + 'settings.t2v');
|
|
end;
|
|
|
|
destructor TSettings.Destroy;
|
|
begin
|
|
FIniFile.Free;
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
end.
|
|
|