You've already forked lazarus-ccr
Added files from Mac-Friendly article; updated dfmtolfm.pas with -m switch
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1375 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
207
components/xdev_toolkit/PrefsUtil.pas
Normal file
207
components/xdev_toolkit/PrefsUtil.pas
Normal file
@@ -0,0 +1,207 @@
|
||||
unit PrefsUtil;
|
||||
|
||||
{
|
||||
|
||||
Class for working with application preferences.
|
||||
|
||||
Author: Phil Hess.
|
||||
Copyright: Copyright (C) 2010 Phil Hess. All rights reserved.
|
||||
License: Modified LGPL. This means you can link your code to this
|
||||
compiled unit (statically in a standalone executable or
|
||||
dynamically in a library) without releasing your code. Only
|
||||
changes to this unit need to be made publicly available.
|
||||
|
||||
}
|
||||
|
||||
{$MODE Delphi}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
MacOSAll,
|
||||
CFHelpers; {Handy routines for use with Core Foundation}
|
||||
|
||||
type {Note: Not all CF object types are supported yet by this class}
|
||||
TCFPreferences = class(TObject)
|
||||
private
|
||||
function GetAppValue(const KeyName : string) : CFPropertyListRef;
|
||||
public
|
||||
destructor Destroy; override;
|
||||
function AppHasKey(const KeyName : string) : Boolean;
|
||||
function GetAppString(const KeyName : string) : string;
|
||||
function GetAppStringDef(const KeyName : string;
|
||||
const Default : string) : string;
|
||||
procedure SetAppString(const KeyName : string;
|
||||
const Value : string);
|
||||
function GetAppBoolean(const KeyName : string) : Boolean;
|
||||
function GetAppBooleanDef(const KeyName : string;
|
||||
Default : Boolean) : Boolean;
|
||||
procedure SetAppBoolean(const KeyName : string;
|
||||
Value : Boolean);
|
||||
procedure DeleteAppKey(const KeyName : string);
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
destructor TCFPreferences.Destroy;
|
||||
{Write any changes to preferences file.}
|
||||
begin
|
||||
CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
|
||||
function TCFPreferences.GetAppValue(const KeyName : string) : CFPropertyListRef;
|
||||
{Get key's value for preference domain "Current User, Current
|
||||
Application, Any Host."}
|
||||
var
|
||||
KeyRef : CFStringRef;
|
||||
begin
|
||||
AnsiStrToCFStr(KeyName, KeyRef);
|
||||
try
|
||||
Result :=
|
||||
CFPreferencesCopyAppValue(KeyRef, kCFPreferencesCurrentApplication);
|
||||
finally
|
||||
FreeCFRef(KeyRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TCFPreferences.AppHasKey(const KeyName : string) : Boolean;
|
||||
{Return True if key exists in preference domain "Current User, Current
|
||||
Application, Any Host."}
|
||||
var
|
||||
ValueRef : CFPropertyListRef;
|
||||
begin
|
||||
Result := False;
|
||||
try
|
||||
ValueRef := GetAppValue(KeyName);
|
||||
if Assigned(ValueRef) then
|
||||
Result := True;
|
||||
finally
|
||||
FreeCFRef(ValueRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TCFPreferences.GetAppString(const KeyName : string) : string;
|
||||
{Get key's string value for preference domain "Current User, Current
|
||||
Application, Any Host."
|
||||
If key does not exist, returns blank string.}
|
||||
var
|
||||
ValueRef : CFPropertyListRef;
|
||||
begin
|
||||
Result := '';
|
||||
try
|
||||
ValueRef := GetAppValue(KeyName);
|
||||
if Assigned(ValueRef) and
|
||||
(CFGetTypeID(ValueRef) = CFStringGetTypeID) then {Value is a string?}
|
||||
Result := CFStrToAnsiStr(ValueRef);
|
||||
finally
|
||||
FreeCFRef(ValueRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TCFPreferences.GetAppStringDef(const KeyName : string;
|
||||
const Default : string) : string;
|
||||
{Get key's string value for preference domain "Current User, Current
|
||||
Application, Any Host."
|
||||
If key does not exist, returns Default.}
|
||||
begin
|
||||
if AppHasKey(KeyName) then
|
||||
Result := GetAppString(KeyName)
|
||||
else
|
||||
Result := Default;
|
||||
end;
|
||||
|
||||
|
||||
procedure TCFPreferences.SetAppString(const KeyName : string;
|
||||
const Value : string);
|
||||
{Set key's string value in preference domain "Current User, Current
|
||||
Application, Any Host."}
|
||||
var
|
||||
KeyRef : CFStringRef;
|
||||
ValueRef : CFPropertyListRef;
|
||||
begin
|
||||
AnsiStrToCFStr(KeyName, KeyRef);
|
||||
AnsiStrToCFStr(Value, ValueRef);
|
||||
try
|
||||
CFPreferencesSetAppValue(KeyRef, ValueRef, kCFPreferencesCurrentApplication);
|
||||
finally
|
||||
FreeCFRef(KeyRef);
|
||||
FreeCFRef(ValueRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TCFPreferences.GetAppBoolean(const KeyName : string) : Boolean;
|
||||
{Get key's Boolean value for preference domain "Current User, Current
|
||||
Application, Any Host."
|
||||
If key does not exist, returns False.}
|
||||
var
|
||||
ValueRef : CFPropertyListRef;
|
||||
begin
|
||||
Result := False;
|
||||
try
|
||||
ValueRef := GetAppValue(KeyName);
|
||||
if Assigned(ValueRef) and
|
||||
(CFGetTypeID(ValueRef) = CFBooleanGetTypeID) then {Value is a Boolean?}
|
||||
Result := CFBooleanGetValue(ValueRef);
|
||||
finally
|
||||
FreeCFRef(ValueRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function TCFPreferences.GetAppBooleanDef(const KeyName : string;
|
||||
Default : Boolean) : Boolean;
|
||||
{Get key's Boolean value for preference domain "Current User, Current
|
||||
Application, Any Host."
|
||||
If key does not exist, returns Default.}
|
||||
begin
|
||||
if AppHasKey(KeyName) then
|
||||
Result := GetAppBoolean(KeyName)
|
||||
else
|
||||
Result := Default;
|
||||
end;
|
||||
|
||||
|
||||
procedure TCFPreferences.SetAppBoolean(const KeyName : string;
|
||||
Value : Boolean);
|
||||
{Set key's Boolean value in preference domain "Current User, Current
|
||||
Application, Any Host."}
|
||||
var
|
||||
KeyRef : CFStringRef;
|
||||
ValueRef : CFBooleanRef;
|
||||
begin
|
||||
AnsiStrToCFStr(KeyName, KeyRef);
|
||||
if Value then
|
||||
ValueRef := kCFBooleanTrue
|
||||
else
|
||||
ValueRef := kCFBooleanFalse;
|
||||
try
|
||||
CFPreferencesSetAppValue(KeyRef, ValueRef, kCFPreferencesCurrentApplication);
|
||||
finally
|
||||
FreeCFRef(KeyRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TCFPreferences.DeleteAppKey(const KeyName : string);
|
||||
{Delete key from preference domain "Current User, Current
|
||||
Application, Any Host."}
|
||||
var
|
||||
KeyRef : CFStringRef;
|
||||
begin
|
||||
AnsiStrToCFStr(KeyName, KeyRef);
|
||||
try
|
||||
CFPreferencesSetAppValue(KeyRef, nil, kCFPreferencesCurrentApplication);
|
||||
finally
|
||||
FreeCFRef(KeyRef);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user