Files
lazarus-ccr/components/flashfiler/sourcelaz/explorer/usqlcfg.pas
2016-12-07 13:31:59 +00:00

196 lines
5.4 KiB
ObjectPascal

{*********************************************************}
{* Persistently Stored SQL Window Configuration Info *}
{*********************************************************}
(* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is TurboPower FlashFiler
*
* The Initial Developer of the Original Code is
* TurboPower Software
*
* Portions created by the Initial Developer are Copyright (C) 1996-2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** *)
{$I ffdefine.inc}
unit usqlcfg;
interface
uses
Classes,
Forms,
Windows,
Graphics,
SysUtils,
ffllbase;
const
sqlCfgKeyOptions = 'SQLOpts:';
sqlCfgSplitterPosition = 'SQLSplitterPos';
sqlCfgWindow = 'SQLWindow';
sqlCfgWindowState = 'SQLWindowState';
sqlCfgWindowFontName = 'SQLFontName';
sqlCfgWindowFontSize = 'SQLFontSize';
defWindowState = wsNormal;
defSplitterPos = 129;
type
TffeSQLConfig = class(TPersistent)
protected {private}
FSplitterPos : Integer;
FWindowRect : TRect;
FWindowState : TWindowState;
FFontName : string;
FFontSize : Integer;
FServerName : string;
FDBName : string;
FINIFilename : TFileName;
FINISection : string;
protected
procedure ParseWindowString(aWindowStr : TffShStr);
procedure SetWindowPos(aRect : TRect);
public
constructor Create(const aServerName, aDBName : string);
procedure Refresh;
{- Reload all settings from persistent storage}
procedure Save;
{- Save the configuration to persistent storage}
property FontName : string
read FFontName
write FFontName;
property FontSize : Integer
read FFontSize
write FFontSize;
property SplitterPos : Integer
read FSplitterPos
write FSplitterPos;
property WindowPos : TRect
read FWindowRect
write FWindowRect;
property WindowState : TWindowState
read FWindowState
write FWindowState;
end;
implementation
uses
Dialogs,
Inifiles,
uConfig; {!!.11}
{ TffeSQLConfig }
{====================================================================}
constructor TffeSQLConfig.Create(const aServerName, aDBName : string);
begin
FServerName := aServerName;
FDBName := aDBName;
FINISection := sqlCfgKeyOptions + aServerName + aDBName;
{Begin !!.11}
FINIFilename := Config.WorkingDirectory + ChangeFileExt(ExtractFileName(Application.ExeName), '.');
FINIFilename := Copy(FINIFilename, 1, Length(FINIFilename)-1) + 'SQL.INI';
{End !!.11}
Refresh;
end;
{--------}
procedure TffeSQLConfig.ParseWindowString(aWindowStr : TffShStr);
type
TElement = (teLeft, teTop, teRight, teBottom);
var
J : TElement;
Element : TffShStr;
begin
try
J := teLeft;
repeat
FFShStrSplit(aWindowStr, ' ', Element, aWindowStr);
case J of
teLeft : FWindowRect.Left := StrToInt(Element);
teTop : FWindowRect.Top := StrToInt(Element);
teRight : FWindowRect.Right := StrToInt(Element);
teBottom : FWindowRect.Bottom := StrToInt(Element);
end;
if J < High(J) then Inc(J);
until aWindowStr = '';
except
end;
end;
{--------}
procedure TffeSQLConfig.Refresh;
var
Window : TffShStr;
begin
with TINIFile.Create(FINIFilename) do begin
try
{get the window settings}
FWindowState := TWindowState(ReadInteger(FINISection,
sqlCfgWindowState,
Ord(defWindowState)));
Window := ReadString(FINISection, sqlCfgWindow, '');
if Window <> '' then
ParseWindowString(Window);
{get the font settings}
FFontName := ReadString(FINISection, sqlCfgWindowFontName, '');
FFontSize := ReadInteger(FINISection, sqlCfgWindowFontSize, 8);
{get the height of the SQL window}
FSplitterPos :=
ReadInteger(FINISection, sqlCfgSplitterPosition, 129);
finally
free;
end;
end; {with}
end;
{--------}
procedure TffeSQLConfig.Save;
begin
with TINIFile.Create(FINIFilename) do
try
try
with FWindowRect do
WriteString(FINISection, sqlCfgWindow, Format('%d %d %d %d', [Left, Top, Right, Bottom]));
WriteString(FINISection, sqlCfgWindowFontName, FFontName);
WriteInteger(FINISection, sqlCfgWindowFontSize, FFontSize);
WriteInteger(FINISection, sqlCfgWindowState, Ord(FWindowState));
WriteInteger(FINISection, sqlCfgSplitterPosition, FSplitterPos);
finally
Free;
end;
except
on E:Exception do
ShowMessage('Error writing INI file: '+E.Message);
end;
end;
{--------}
procedure TffeSQLConfig.SetWindowPos(aRect : TRect);
begin
with FWindowRect do begin
Left := aRect.Left;
Right := aRect.Right;
Top := aRect.Top;
Bottom := aRect.Bottom;
end;
end;
{====================================================================}
end.