lazarus/components/anchordocking/design/anchordockdsgninitialsetupframe.pas

202 lines
4.9 KiB
ObjectPascal

unit AnchorDockDsgnInitialSetupFrame;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, LazarusPackageIntf, AnchorDockStr, IDEWindowIntf,
AnchorDesktopOptions;
type
TAnchorDockDsgnSetup = class;
{ TAnchorDockSetupFrame }
TAnchorDockSetupFrame = class(TFrame)
lbInfo: TLabel;
lbInfo1: TLabel;
lbMulti: TLabel;
lbSingle: TLabel;
rbMulti: TRadioButton;
rbSingle: TRadioButton;
procedure lbMultiClick(Sender: TObject);
procedure lbSingleClick(Sender: TObject);
procedure rbMultiChange(Sender: TObject);
private
FDialog: ISetupDlgProvider;
FSetup: TAnchorDockDsgnSetup;
FChanged: Boolean;
public
procedure Init;
end;
{ TAnchorDockDsgnSetup }
TAnchorDockDsgnSetup = class(TObject, ISetupDlgFrame)
private
FTheFrame: TAnchorDockSetupFrame;
FInitDone: Boolean;
public
destructor Destroy; override;
function RequireSetup: boolean;
procedure AddToDialog(AnOwner, AParent: TComponent; // AParent: TWinControl that will hold the frame
ADialog: ISetupDlgProvider
);
procedure Init;
procedure Done;
function Caption: String;
function SortOrder: Integer;
function UniqueId: String;
function GroupId: String;
procedure PageSelected(AnUserActivated: Boolean);
procedure UpdateState;
procedure ApplySelection; // Called when the IDE gets started
function Internal: TObject;
end;
implementation
var
Registration: TAnchorDockDsgnSetup;
{$R *.lfm}
{ TAnchorDockSetupFrame }
procedure TAnchorDockSetupFrame.lbMultiClick(Sender: TObject);
begin
rbMulti.Checked := True;
end;
procedure TAnchorDockSetupFrame.lbSingleClick(Sender: TObject);
begin
rbSingle.Checked := True;
end;
procedure TAnchorDockSetupFrame.rbMultiChange(Sender: TObject);
begin
FChanged := True;
FDialog.FrameStateChanged(FSetup, issOk, isaReady);
end;
procedure TAnchorDockSetupFrame.Init;
begin
rbMulti.Caption := setupMultiWindowIDEClassic;
lbMulti.Caption := setupMultiWindowIDESeperateWindows;
rbSingle.Caption := setupMultiWindowIDEModern;
lbSingle.Caption := setupMultiWindowIDESingleWindow;
lbInfo.Caption := setupMultiWindowIDEInfo;
lbInfo1.Caption := setupMultiWindowIDEOption;
end;
{ TAnchorDockDsgnSetup }
destructor TAnchorDockDsgnSetup.Destroy;
begin
FreeAndNil(FTheFrame);
inherited Destroy;
end;
function TAnchorDockDsgnSetup.RequireSetup: boolean;
begin
if AnchorDockGlobalOptions = nil then exit(False);
AnchorDockGlobalOptions.LoadSafe;
Result := not AnchorDockGlobalOptions.DoneAskUserEnableAnchorDock;
end;
procedure TAnchorDockDsgnSetup.AddToDialog(AnOwner, AParent: TComponent; ADialog: ISetupDlgProvider
);
begin
FTheFrame := TAnchorDockSetupFrame.Create(AnOwner);
FTheFrame.Parent := AParent as TWinControl;
FTheFrame.Align := alClient;
FTheFrame.FDialog := ADialog;
FTheFrame.FSetup := Self;
FTheFrame.Init;
ADialog.SetGroupCaption(GroupId, SIDELayout);
end;
procedure TAnchorDockDsgnSetup.Init;
begin
if AnchorDockGlobalOptions = nil then exit;
AnchorDockGlobalOptions.LoadSafe;
end;
procedure TAnchorDockDsgnSetup.Done;
begin
FTheFrame := nil;
end;
function TAnchorDockDsgnSetup.Caption: String;
begin
Result := SSingleMultiWindow;
end;
function TAnchorDockDsgnSetup.SortOrder: Integer;
begin
Result := -2;
end;
function TAnchorDockDsgnSetup.UniqueId: String;
begin
Result := '{56782628-36B2-4082-9F9B-C4A1CABC7A98}';
end;
function TAnchorDockDsgnSetup.GroupId: String;
begin
Result := '{62435B06-4C68-4D77-A4BC-2496E35DF59C}';
end;
procedure TAnchorDockDsgnSetup.PageSelected(AnUserActivated: Boolean);
begin
if AnUserActivated then begin
FTheFrame.FChanged := True;
FTheFrame.FDialog.FrameStateChanged(Self, issOk, isaReady);
end;
end;
procedure TAnchorDockDsgnSetup.UpdateState;
begin
if not FInitDone then begin
FTheFrame.rbSingle.Checked := AnchorDockGlobalOptions.EnableAnchorDock;
FTheFrame.rbMulti.Checked := not AnchorDockGlobalOptions.EnableAnchorDock;
FTheFrame.FChanged := AnchorDockGlobalOptions.DoneAskUserEnableAnchorDock;
end;
FInitDone := True;
if (not FTheFrame.FChanged) then
FTheFrame.FDialog.FrameStateChanged(Self, issInfo, isaReady)
else
FTheFrame.FDialog.FrameStateChanged(Self, issOk, isaReady);
end;
procedure TAnchorDockDsgnSetup.ApplySelection;
begin
if AnchorDockGlobalOptions = nil then exit;
AnchorDockGlobalOptions.DoneAskUserEnableAnchorDock := True;
AnchorDockGlobalOptions.EnableAnchorDock := FTheFrame.rbSingle.Checked;
AnchorDockGlobalOptions.SaveSafe;
if not AnchorDockGlobalOptions.EnableAnchorDock then
OnIDEDockMasterNeeded := nil;
end;
function TAnchorDockDsgnSetup.Internal: TObject;
begin
Result := nil;
end;
initialization
Registration := TAnchorDockDsgnSetup.Create;
SetupDlgFrameList.Add(Registration);
finalization
FreeAndNil(Registration);
end.