IDE: Add option to enable/disable Anchordocking and DockedFormEdit (initial setup dialog, and options)

This commit is contained in:
Martin 2024-08-06 22:56:24 +02:00
parent c9afc8aa72
commit ca4538b235
44 changed files with 1581 additions and 306 deletions

View File

@ -89,6 +89,15 @@ resourcestring
adrsFloatingWindowsOnTopHint = 'Show floating windows on top of main form';
adrsFlatHeadersButtons = 'Flat header buttons';
adrsFlatHeadersButtonsHint = 'Flat buttons in headers of docked controls';
setupMultiWindowIDEDisplayIndi = 'Multi Window IDE: Display individual separate Windows'
+' in the IDE';
setupSingleWindowIDEDisplayASi = 'Single Window IDE: Display a single Window holding '
+'all parts of the IDE (Docked)';
setupSingleWindowModeAllowsYou = 'Single Window mode allows you to undock individual '
+'Windows and have several group of Windows. The IDE will show additional "Dock-Handles" in '
+'each Window, which will allow you to change layout, but also require additional space.';
SDisable = 'Disabled (requires restart)';
SIDELayout = 'IDE Layout';
implementation

View File

@ -51,6 +51,29 @@ type
procedure Assign(Source: TAbstractDesktopDockingOpt); override;
end;
{ TAnchorDockGlobalOptions }
TAnchorDockGlobalOptions = class
private
FDoneAskUserEnableAnchorDock: boolean;
FEnableAnchorDock: boolean;
public
constructor Create;
procedure SaveSafe;
procedure LoadSafe;
procedure SaveToFile(AFilename: String);
procedure LoadFromFile(AFilename: String);
public
property EnableAnchorDock: boolean read FEnableAnchorDock write FEnableAnchorDock default False;
property DoneAskUserEnableAnchorDock: boolean read FDoneAskUserEnableAnchorDock write FDoneAskUserEnableAnchorDock default False;
end;
const
AnchorDockedGlobalOptionsFileName = 'anchordockingoptions.xml';
var
AnchorDockGlobalOptions: TAnchorDockGlobalOptions = nil;
implementation
{ TAnchorDesktopOpt }
@ -297,6 +320,59 @@ begin
Result := DockMaster.FullRestoreLayout(FTree,True);
end;
{ TAnchorDockGlobalOptions }
constructor TAnchorDockGlobalOptions.Create;
begin
//
end;
procedure TAnchorDockGlobalOptions.SaveSafe;
begin
try
SaveToFile(AnchorDockedGlobalOptionsFileName);
except
on E: Exception do
LazLoggerBase.DebugLn(['Error: (lazarus) [TAnchorDockGlobalOptions.SaveSafe] ', E.Message]);
end;
end;
procedure TAnchorDockGlobalOptions.LoadSafe;
begin
try
LoadFromFile(AnchorDockedGlobalOptionsFileName);
except
on E: Exception do
LazLoggerBase.DebugLn(['Error: (lazarus) [TAnchorDockGlobalOptions.LoadSafe] ', E.Message]);
end;
end;
procedure TAnchorDockGlobalOptions.SaveToFile(AFilename: String);
var
Cfg: TConfigStorage;
begin
Cfg := GetIDEConfigStorage(AFilename, False);
try
Cfg.SetDeleteValue('EnableAnchorDock/Value', EnableAnchorDock, False);
Cfg.SetDeleteValue('DoneAskUserEnableAnchorDock/Value', DoneAskUserEnableAnchorDock, False);
finally
Cfg.Free;
end;
end;
procedure TAnchorDockGlobalOptions.LoadFromFile(AFilename: String);
var
Cfg: TConfigStorage;
begin
Cfg := GetIDEConfigStorage(AFilename, True);
try
EnableAnchorDock := Cfg.GetValue('EnableAnchorDock/Value', False);
DoneAskUserEnableAnchorDock := Cfg.GetValue('DoneAskUserEnableAnchorDock/Value', False);
finally
Cfg.Free;
end;
end;
initialization
{$I ADLayoutDefault.lrs}

View File

@ -0,0 +1,68 @@
object AnchorDockSetupFrame: TAnchorDockSetupFrame
Left = 0
Height = 240
Top = 0
Width = 320
ChildSizing.LeftRightSpacing = 5
ChildSizing.TopBottomSpacing = 5
ChildSizing.HorizontalSpacing = 2
ChildSizing.VerticalSpacing = 5
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsHomogenousChildResize
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 240
ClientWidth = 320
TabOrder = 0
DesignLeft = 342
DesignTop = 289
object rbMulti: TRadioButton
Left = 5
Height = 17
Top = 5
Width = 25
Constraints.MaxWidth = 25
TabOrder = 0
OnChange = rbMultiChange
end
object lbMulti: TLabel
Left = 32
Height = 17
Top = 5
Width = 283
Caption = 'lbMulti'
WordWrap = True
OnClick = lbMultiClick
end
object rbSingle: TRadioButton
Left = 5
Height = 17
Top = 27
Width = 25
TabOrder = 1
OnChange = rbMultiChange
end
object lbSingle: TLabel
Left = 32
Height = 17
Top = 27
Width = 283
Caption = 'lbSingle'
WordWrap = True
OnClick = lbSingleClick
end
object Label1: TLabel
Left = 5
Height = 15
Top = 49
Width = 25
end
object lbInfo: TLabel
Left = 32
Height = 15
Top = 49
Width = 283
Caption = 'lbInfo'
WordWrap = True
end
end

View File

@ -0,0 +1,198 @@
unit AnchorDockDsgnInitialSetupFrame;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, LazarusPackageIntf, AnchorDockStr, IDEWindowIntf,
AnchorDesktopOptions;
type
TAnchorDockDsgnSetup = class;
{ TAnchorDockSetupFrame }
TAnchorDockSetupFrame = class(TFrame)
Label1: TLabel;
lbInfo: 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
lbMulti.Caption := setupMultiWindowIDEDisplayIndi;
lbSingle.Caption := setupSingleWindowIDEDisplayASi;
lbInfo.Caption := setupSingleWindowModeAllowsYou;
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 := 'Single/Multi Window';
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.

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="4">
<Package Version="5">
<Name Value="AnchorDockingDsgn"/>
<Type Value="RunAndDesignTime"/>
<AddToProjectUsesSection Value="True"/>
@ -19,7 +19,7 @@
<License Value="GPL2 as the IDE
"/>
<Version Major="1"/>
<Files Count="3">
<Files Count="4">
<Item1>
<Filename Value="registeranchordocking.pas"/>
<HasRegisterProc Value="True"/>
@ -33,7 +33,12 @@
<Filename Value="anchordesktopoptions.pas"/>
<UnitName Value="AnchorDesktopOptions"/>
</Item3>
<Item4>
<Filename Value="anchordockdsgninitialsetupframe.pas"/>
<UnitName Value="AnchorDockDsgnInitialSetupFrame"/>
</Item4>
</Files>
<CompatibilityMode Value="True"/>
<RequiredPkgs Count="2">
<Item1>
<PackageName Value="IDEIntf"/>

View File

@ -8,7 +8,7 @@ unit AnchorDockingDsgn;
interface
uses
RegisterAnchorDocking, AnchorDesktopOptions, LazarusPackageIntf;
RegisterAnchorDocking, AnchorDesktopOptions, AnchorDockDsgnInitialSetupFrame, LazarusPackageIntf;
implementation

View File

@ -11,11 +11,22 @@ object AnchorDockIDEFrame: TAnchorDockIDEFrame
object NoteLabel: TLabel
Left = 6
Height = 15
Top = 6
Top = 31
Width = 483
Align = alTop
BorderSpacing.Around = 6
Caption = 'NoteLabel'
ParentColor = False
end
object cbDisable: TCheckBox
Left = 6
Height = 19
Top = 6
Width = 483
Align = alTop
BorderSpacing.Around = 6
Caption = 'cbDisable'
TabOrder = 0
OnChange = cbDisableChange
end
end

View File

@ -89,9 +89,12 @@ type
{ TAnchorDockIDEFrame }
TAnchorDockIDEFrame = class(TAbstractIDEOptionsEditor)
cbDisable: TCheckBox;
NoteLabel: TLabel;
procedure cbDisableChange(Sender: TObject);
private
FSettings: TAnchorDockSettings;
FDisabledChanged: boolean;
public
OptionsFrame: TAnchorDockOptionsFrame;
constructor Create(TheOwner: TComponent); override;
@ -103,11 +106,15 @@ type
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
TAnchorDockIDEDisabledFrame = class(TAnchorDockIDEFrame)
end;
var
IDEAnchorDockMaster: TIDEAnchorDockMaster = nil;
AnchorDockOptionsID: integer = 1000;
procedure Register;
procedure ProvideIDEDockMaster;
implementation
@ -115,7 +122,16 @@ implementation
procedure Register;
begin
if not (IDEDockMaster is TIDEAnchorDockMaster) then exit;
AnchorDockGlobalOptions.LoadSafe;
if not AnchorDockGlobalOptions.EnableAnchorDock then begin
AnchorDockOptionsID:=RegisterIDEOptionsEditor(GroupEnvironment,TAnchorDockIDEDisabledFrame,
AnchorDockOptionsID)^.Index;
exit;
end;
// Calling IDEDockMaster will create it, if it hasn't already been created.
if not (IDEDockMaster is TIDEAnchorDockMaster) then
exit;
// add options frame
AnchorDockOptionsID:=RegisterIDEOptionsEditor(GroupEnvironment,TAnchorDockIDEFrame,
@ -418,6 +434,11 @@ end;
{ TAnchorDockIDEFrame }
procedure TAnchorDockIDEFrame.cbDisableChange(Sender: TObject);
begin
FDisabledChanged := True;
end;
constructor TAnchorDockIDEFrame.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
@ -442,6 +463,11 @@ end;
procedure TAnchorDockIDEFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin
cbDisable.Caption := SDisable;
if self is TAnchorDockIDEDisabledFrame then begin
NoteLabel.Visible := False;
exit;
end;
if ADialog=nil then ;
if IDEDockMaster=IDEAnchorDockMaster then begin
NoteLabel.Visible:=false;
@ -460,6 +486,10 @@ end;
procedure TAnchorDockIDEFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
cbDisable.Checked := not AnchorDockGlobalOptions.EnableAnchorDock;
FDisabledChanged := False;
if self is TAnchorDockIDEDisabledFrame then exit;
if not (AOptions is SupportedOptionsClass) then exit;
DockMaster.SaveSettings(FSettings);
OptionsFrame.LoadFromSettings(FSettings);
@ -467,6 +497,13 @@ end;
procedure TAnchorDockIDEFrame.WriteSettings(AOptions: TAbstractIDEOptions);
begin
AnchorDockGlobalOptions.EnableAnchorDock := not cbDisable.Checked;
if FDisabledChanged then
AnchorDockGlobalOptions.DoneAskUserEnableAnchorDock := True;
AnchorDockGlobalOptions.SaveSafe;
if self is TAnchorDockIDEDisabledFrame then exit;
if not (AOptions is SupportedOptionsClass) then exit;
OptionsFrame.SaveToSettings(FSettings);
if (not DockMaster.SettingsAreEqual(FSettings))
@ -481,17 +518,23 @@ begin
Result:=IDEEditorGroups.GetByIndex(GroupEnvironment)^.GroupClass;
end;
initialization
// create the dockmaster in the initialization section, so that it is ready
// when the Register procedures of the packages are called.
if IDEDockMaster<>nil then begin
debugln('WARNING: there is already another IDEDockMaster installed: ',DbgSName(IDEDockMaster));
TIDEAnchorDockMaster.Create;
end else
procedure ProvideIDEDockMaster;
begin
OnIDEDockMasterNeeded := nil;
AnchorDockGlobalOptions.LoadSafe;
if AnchorDockGlobalOptions.EnableAnchorDock then
IDEDockMaster:=TIDEAnchorDockMaster.Create;
end;
initialization
AnchorDockGlobalOptions := TAnchorDockGlobalOptions.Create;
if OnIDEDockMasterNeeded = nil then OnIDEDockMasterNeeded := @ProvideIDEDockMaster;
finalization
FreeAndNil(IDEAnchorDockMaster);
FreeAndNil(AnchorDockGlobalOptions);
end.

View File

@ -300,3 +300,23 @@ msgstr "K použití anchordicking musíte nejdříve odinstalovat %s"
msgid "Undock"
msgstr "Uvolnit"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -295,3 +295,23 @@ msgstr ""
msgid "Undock"
msgstr ""
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -295,3 +295,23 @@ msgstr "Para utilizar anchordocking primero debe desinstalar %s"
msgid "Undock"
msgstr "Desacoplar"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -297,3 +297,23 @@ msgstr "Pour utiliser l'amarrage par ancres vous devez tout d'abord désinstalle
msgid "Undock"
msgstr "Désamarrer"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -297,3 +297,23 @@ msgstr "Az ablakok rögzítésének használatához először el kell távolíta
msgid "Undock"
msgstr "Rögzítés feloldása"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -299,3 +299,23 @@ msgstr "Per usare l'anchordocking dovete prima disinstallare %s"
msgid "Undock"
msgstr "Libera"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -299,3 +299,23 @@ msgstr "Norint naudoti prieraišų pritvirtinimą, būtina išdiegti „%s“"
msgid "Undock"
msgstr "Naikinti pritvirtinimą"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -298,3 +298,23 @@ msgstr "Aby używać anchordocking musisz najpierw odinstalować %s"
msgid "Undock"
msgstr "Oddokuj"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -287,3 +287,23 @@ msgstr ""
msgid "Undock"
msgstr ""
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -297,3 +297,23 @@ msgstr "Para usar a ancoragem, deve-se primeiro desinstalar %s"
msgid "Undock"
msgstr "Desancorar"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -297,3 +297,23 @@ msgstr "Для использования anchordocking сначала удал
msgid "Undock"
msgstr "Расстыковать"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -299,3 +299,23 @@ msgstr "Bağlantıyı kullanmak için önce %s öğesini kaldırmanız gerekir"
msgid "Undock"
msgstr "Yuvadan ayır"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -300,3 +300,23 @@ msgstr "Щоб використовувати якірне стикування,
msgid "Undock"
msgstr "Відстикувати"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -298,3 +298,23 @@ msgstr "要使用 anchordocking您必须先卸载 %s"
msgid "Undock"
msgstr "取消停靠"
#: anchordockstr.sdisable
msgid "Disabled (requires restart)"
msgstr ""
#: anchordockstr.setupmultiwindowidedisplayindi
msgid "Multi Window IDE: Display individual separate Windows in the IDE"
msgstr ""
#: anchordockstr.setupsinglewindowidedisplayasi
msgid "Single Window IDE: Display a single Window holding all parts of the IDE (Docked)"
msgstr ""
#: anchordockstr.setupsinglewindowmodeallowsyou
msgid "Single Window mode allows you to undock individual Windows and have several group of Windows. The IDE will show additional \"Dock-Handles\" in each Window, which will allow you to change layout, but also require additional space."
msgstr ""
#: anchordockstr.sidelayout
msgid "IDE Layout"
msgstr ""

View File

@ -22,7 +22,7 @@
<CustomOptions Value="$(IDEBuildOptions)"/>
</Other>
</CompilerOptions>
<Files Count="17">
<Files Count="18">
<Item1>
<Filename Value="source\dockedregister.pas"/>
<HasRegisterProc Value="True"/>
@ -93,22 +93,29 @@
<Filename Value="source\dockedresizecontrol.pas"/>
<UnitName Value="DockedResizeControl"/>
</Item17>
<Item18>
<Filename Value="dockedforminitialsetupframe.pas"/>
<UnitName Value="DockedFormInitialSetupFrame"/>
</Item18>
</Files>
<CompatibilityMode Value="True"/>
<i18n>
<EnableI18N Value="True"/>
<OutDir Value="languages"/>
</i18n>
<RequiredPkgs Count="3">
<RequiredPkgs Count="4">
<Item1>
<PackageName Value="DebuggerIntf"/>
<PackageName Value="LazControlDsgn"/>
</Item1>
<Item2>
<PackageName Value="CodeTools"/>
<PackageName Value="DebuggerIntf"/>
</Item2>
<Item3>
<PackageName Value="IDEIntf"/>
<PackageName Value="CodeTools"/>
</Item3>
<Item4>
<PackageName Value="IDEIntf"/>
</Item4>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)"/>

View File

@ -8,11 +8,10 @@ unit DockedFormEditor;
interface
uses
DockedRegister, DockedStrConsts, DockedFormAccesses, DockedMainIDE,
DockedResizer, DockedOptionsIDE, DockedOptionsFrame, DockedTools,
DockedDesignForm, DockedSourcePageControl, DockedSourceWindow,
DockedAnchorDesigner, DockedBasicAnchorDesigner, DockedAnchorControl,
DockedGrip, DockedResizeControl, LazarusPackageIntf;
DockedRegister, DockedStrConsts, DockedFormAccesses, DockedMainIDE, DockedResizer,
DockedOptionsIDE, DockedOptionsFrame, DockedTools, DockedDesignForm, DockedSourcePageControl,
DockedSourceWindow, DockedAnchorDesigner, DockedBasicAnchorDesigner, DockedAnchorControl,
DockedGrip, DockedResizeControl, DockedFormInitialSetupFrame, LazarusPackageIntf;
implementation

View File

@ -0,0 +1,68 @@
object DockedFormEditSetupFrame: TDockedFormEditSetupFrame
Left = 0
Height = 240
Top = 0
Width = 320
ChildSizing.LeftRightSpacing = 5
ChildSizing.TopBottomSpacing = 5
ChildSizing.HorizontalSpacing = 2
ChildSizing.VerticalSpacing = 5
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsHomogenousChildResize
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 240
ClientWidth = 320
TabOrder = 0
DesignLeft = 348
DesignTop = 3
object rbFloat: TRadioButton
Left = 5
Height = 17
Top = 5
Width = 25
Constraints.MaxWidth = 25
TabOrder = 0
OnChange = rbDockedChange
end
object lbFloat: TLabel
Left = 32
Height = 17
Top = 5
Width = 283
Caption = 'lbFloat'
WordWrap = True
OnClick = lbFloatClick
end
object rbDocked: TRadioButton
Left = 5
Height = 17
Top = 27
Width = 25
TabOrder = 1
OnChange = rbDockedChange
end
object lbDocked: TLabel
Left = 32
Height = 17
Top = 27
Width = 283
Caption = 'lbDocked'
WordWrap = True
OnClick = lbDockedClick
end
object Label1: TLabel
Left = 5
Height = 15
Top = 49
Width = 25
end
object lbInfo: TLabel
Left = 32
Height = 15
Top = 49
Width = 283
Caption = 'lbInfo'
WordWrap = True
end
end

View File

@ -0,0 +1,192 @@
unit DockedFormInitialSetupFrame;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, LazarusPackageIntf,
DockedStrConsts, DockedOptionsIDE;
type
TDockedFormEditSetup = class;
{ TDockedFormEditSetupFrame }
TDockedFormEditSetupFrame = class(TFrame)
Label1: TLabel;
lbInfo: TLabel;
lbFloat: TLabel;
lbDocked: TLabel;
rbFloat: TRadioButton;
rbDocked: TRadioButton;
procedure lbDockedClick(Sender: TObject);
procedure lbFloatClick(Sender: TObject);
procedure rbDockedChange(Sender: TObject);
private
FDialog: ISetupDlgProvider;
FSetup: TDockedFormEditSetup;
FChanged: Boolean;
public
procedure Init;
end;
TDockedFormEditSetup = class(TObject, ISetupDlgFrame)
private
FTheFrame: TDockedFormEditSetupFrame;
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: TDockedFormEditSetup;
{$R *.lfm}
{ TDockedFormEditSetupFrame }
procedure TDockedFormEditSetupFrame.lbFloatClick(Sender: TObject);
begin
rbFloat.Checked := True;
end;
procedure TDockedFormEditSetupFrame.rbDockedChange(Sender: TObject);
begin
FChanged := True;
FDialog.FrameStateChanged(FSetup, issOk, isaReady);
end;
procedure TDockedFormEditSetupFrame.lbDockedClick(Sender: TObject);
begin
rbDocked.Checked:= True;
end;
procedure TDockedFormEditSetupFrame.Init;
begin
lbFloat.Caption := setupDisplayTheFormEditorDesig;
lbDocked.Caption := setupDisplayDockTheFormEditorA;
lbInfo.Caption := setupWithTheDockedDesignerYouW;
end;
{ TDockedFormEditSetup }
destructor TDockedFormEditSetup.Destroy;
begin
FreeAndNil(FTheFrame);
inherited Destroy;
end;
function TDockedFormEditSetup.RequireSetup: boolean;
begin
if DockedOptions = nil then exit(False);
DockedOptions.LoadSafe;
Result := not DockedOptions.DoneAskUserEnableDockedDesigner;
end;
procedure TDockedFormEditSetup.AddToDialog(AnOwner, AParent: TComponent; ADialog: ISetupDlgProvider);
begin
FTheFrame := TDockedFormEditSetupFrame.Create(AnOwner);
FTheFrame.Parent := AParent as TWinControl;
FTheFrame.Align := alClient;
FTheFrame.FDialog := ADialog;
FTheFrame.FSetup := Self;
FTheFrame.Init;
ADialog.SetGroupCaption(GroupId, SIDELayout);
end;
procedure TDockedFormEditSetup.Init;
begin
if DockedOptions = nil then exit;
DockedOptions.LoadSafe;
end;
procedure TDockedFormEditSetup.Done;
begin
FTheFrame := nil; // destroyed by parent
end;
function TDockedFormEditSetup.Caption: String;
begin
Result := 'Embed form editor';
end;
function TDockedFormEditSetup.SortOrder: Integer;
begin
Result := -1;
end;
procedure TDockedFormEditSetup.UpdateState;
begin
if not FInitDone then begin
FTheFrame.rbDocked.Checked := DockedOptions.EnableDockedDesigner;
FTheFrame.rbFloat.Checked := not DockedOptions.EnableDockedDesigner;
FTheFrame.FChanged := DockedOptions.DoneAskUserEnableDockedDesigner;
end;
FInitDone := True;
if (not FTheFrame.FChanged) then
FTheFrame.FDialog.FrameStateChanged(Self, issInfo, isaReady)
else
FTheFrame.FDialog.FrameStateChanged(Self, issOk, isaReady);
end;
procedure TDockedFormEditSetup.ApplySelection;
begin
if DockedOptions = nil then exit;
DockedOptions.DoneAskUserEnableDockedDesigner := True;
DockedOptions.EnableDockedDesigner := FTheFrame.rbDocked.Checked;
DockedOptions.SaveSafe;
end;
function TDockedFormEditSetup.Internal: TObject;
begin
Result := nil;
end;
function TDockedFormEditSetup.UniqueId: String;
begin
Result := '{234D6036-1AD5-4A9D-91FD-AE783B2E3A5D}';
end;
function TDockedFormEditSetup.GroupId: String;
begin
Result := '{62435B06-4C68-4D77-A4BC-2496E35DF59C}';
end;
procedure TDockedFormEditSetup.PageSelected(AnUserActivated: Boolean);
begin
if AnUserActivated then begin
FTheFrame.FChanged := True;
FTheFrame.FDialog.FrameStateChanged(Self, issOk, isaReady);
end;
end;
initialization
Registration := TDockedFormEditSetup.Create;
SetupDlgFrameList.Add(Registration);
finalization
FreeAndNil(Registration);
end.

View File

@ -54,6 +54,15 @@ resourceString
STabPositionRight = 'Right';
SArgumentOutOfRange = 'Argument out of range.';
setupDisplayTheFormEditorDesig = 'Display the form editor (Designer) as a separate '
+'floating form.';
setupDisplayDockTheFormEditorA = 'Display/Dock the form editor as part of the source-'
+'editors.';
setupWithTheDockedDesignerYouW = 'With the docked designer you will have a tab to '
+'toggle the source and the design view. You can open a 2nd source-edit window to see both at'
+' the same time.';
SDisableRequiresRestart = 'Disabled (requires restart)';
SIDELayout = 'IDE Layout';
const
STabPosition: array [Low(TTabPosition)..High(TTabPosition)] of String = (

View File

@ -119,6 +119,22 @@ msgstr "Détacher les côtés du contrôle"
msgid "Detach Control Side"
msgstr "Détacher le côté du contrôle"
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr "Forcer le rafraîchissement lors du redimensionnement"
@ -127,6 +143,10 @@ msgstr "Forcer le rafraîchissement lors du redimensionnement"
msgid "Force refreshing form when user is sizing it"
msgstr "Forcer l'actualisation de la fiche lorsque l'utilisateur la dimensionne"
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr "Facteur de curseur de souris pour la propriété BorderSpacing"

View File

@ -121,6 +121,22 @@ msgstr ""
msgid "Detach Control Side"
msgstr ""
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr ""
@ -129,6 +145,10 @@ msgstr ""
msgid "Force refreshing form when user is sizing it"
msgstr ""
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr ""

View File

@ -122,6 +122,22 @@ msgstr ""
msgid "Detach Control Side"
msgstr ""
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr ""
@ -130,6 +146,10 @@ msgstr ""
msgid "Force refreshing form when user is sizing it"
msgstr ""
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr ""

View File

@ -108,6 +108,22 @@ msgstr ""
msgid "Detach Control Side"
msgstr ""
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr ""
@ -116,6 +132,10 @@ msgstr ""
msgid "Force refreshing form when user is sizing it"
msgstr ""
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr ""

View File

@ -118,6 +118,22 @@ msgstr "Desanexar lados do controle"
msgid "Detach Control Side"
msgstr "Desanexar lado do controle"
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr "Forçar atualização ao redimensionar"
@ -126,6 +142,10 @@ msgstr "Forçar atualização ao redimensionar"
msgid "Force refreshing form when user is sizing it"
msgstr "Forçar atualização do formulário quando o usuário o estiver redimensionando"
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr "Fator do cursor do mouse para a propriedade BorderSpacing"

View File

@ -118,6 +118,22 @@ msgstr "Отвязать стороны компонента"
msgid "Detach Control Side"
msgstr "Отвязать сторону компонента"
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr "Принудительно обновлять при изменении размера"
@ -126,6 +142,10 @@ msgstr "Принудительно обновлять при изменении
msgid "Force refreshing form when user is sizing it"
msgstr "Принудительно обновлять форму при изменении её размера"
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr "Масштаб движения курсора мыши для свойства BorderSpacing"

View File

@ -118,6 +118,22 @@ msgstr "Kontrol Taraflarını Ayırın"
msgid "Detach Control Side"
msgstr "Kontrol Tarafını Ayırın"
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr "İndirme ve çıkartma için her zaman zorla"
@ -126,6 +142,10 @@ msgstr "İndirme ve çıkartma için her zaman zorla"
msgid "Force refreshing form when user is sizing it"
msgstr "Kullanıcı boyutlandırırken formu yenilemeye zorla"
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr "BorderSpacing özelliği için fare imleci faktörü"

View File

@ -120,6 +120,22 @@ msgstr "Від'єднати боки елемента керування"
msgid "Detach Control Side"
msgstr "Від'єднати бік елемента керування"
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr "Примусове оновлення при зміні розміру"
@ -128,6 +144,10 @@ msgstr "Примусове оновлення при зміні розміру"
msgid "Force refreshing form when user is sizing it"
msgstr "Примусове оновлення форми, коли користувач змінює її розміри"
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr "Коефіцієнт вказівника миші для властивості BorderSpacing"

View File

@ -119,6 +119,22 @@ msgstr "分离控制面板"
msgid "Detach Control Side"
msgstr "分离控制面板"
#: dockedstrconsts.sdisablerequiresrestart
msgid "Disabled (requires restart)"
msgstr ""
#: dockedstrconsts.setupdisplaydocktheformeditora
msgid "Display/Dock the form editor as part of the source-editors."
msgstr ""
#: dockedstrconsts.setupdisplaytheformeditordesig
msgid "Display the form editor (Designer) as a separate floating form."
msgstr ""
#: dockedstrconsts.setupwiththedockeddesigneryouw
msgid "With the docked designer you will have a tab to toggle the source and the design view. You can open a 2nd source-edit window to see both at the same time."
msgstr ""
#: dockedstrconsts.sforcerefreshingcaption
msgid "Force Refreshing At Sizing"
msgstr "强制刷新大小"
@ -127,6 +143,10 @@ msgstr "强制刷新大小"
msgid "Force refreshing form when user is sizing it"
msgstr "用户调整大小时强制刷新窗体"
#: dockedstrconsts.sidelayout
msgid "IDE Layout"
msgstr ""
#: dockedstrconsts.smouseborderfactorcaption
msgid "Mouse cursor factor for BorderSpacing property"
msgstr "BorderSpacing 属性的鼠标指针系数"

View File

@ -6,257 +6,303 @@ object FrameDockedOptions: TFrameDockedOptions
ClientHeight = 489
ClientWidth = 571
TabOrder = 0
DesignLeft = 229
DesignTop = 262
object LabelTabPosition: TLabel
AnchorSideLeft.Control = Owner
DesignLeft = 336
DesignTop = 249
object cbDisableDockFormEd: TCheckBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = Owner
Left = 6
Height = 13
Height = 19
Top = 0
Width = 58
Width = 137
BorderSpacing.Left = 6
Caption = 'Tab Position'
ParentColor = False
Caption = 'cbDisableDockFormEd'
TabOrder = 0
OnChange = cbDisableDockFormEdChange
end
object ComboBoxTabPosition: TComboBox
object Panel1: TPanel
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = LabelTabPosition
AnchorSideTop.Control = cbDisableDockFormEd
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 6
Height = 21
Top = 13
Width = 559
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 6
ItemHeight = 13
ParentShowHint = False
ReadOnly = True
ShowHint = True
Style = csDropDownList
TabOrder = 0
end
object LabelResizerColor: TLabel
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = ComboBoxTabPosition
AnchorSideTop.Side = asrBottom
Left = 6
Height = 13
Top = 40
Width = 63
BorderSpacing.Top = 6
Caption = 'Resizer Color'
ParentColor = False
end
object ColorBoxResizer: TColorBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = LabelResizerColor
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 6
Height = 22
Top = 53
Width = 559
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor]
Anchors = [akTop, akLeft, akRight]
ItemHeight = 16
ParentShowHint = False
ShowHint = True
TabOrder = 1
end
object DividerBevelAnchors: TDividerBevel
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = CheckBoxForceRefreshing
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 6
Height = 13
Top = 104
Width = 559
Caption = 'Anchors'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]
ParentFont = False
end
object CheckBoxAnchorTabVisible: TCheckBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = DividerBevelAnchors
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 123
Width = 109
BorderSpacing.Top = 6
Caption = 'Show Anchors Tab'
OnChange = CheckBoxAnchorTabVisibleChange
ParentShowHint = False
ShowHint = True
TabOrder = 2
end
object LabelCaptureDistance: TLabel
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = CheckBoxAnchorTabVisible
AnchorSideTop.Side = asrBottom
Left = 6
Height = 13
Top = 146
Width = 83
BorderSpacing.Top = 6
Caption = 'Capture Distance'
ParentColor = False
end
object SpinEditCaptureDistance: TSpinEdit
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = LabelCaptureDistance
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 6
Height = 21
Top = 159
Width = 559
Anchors = [akTop, akLeft, akRight]
ParentShowHint = False
ShowHint = True
TabOrder = 3
end
object LabelMouseBorderFactor: TLabel
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = SpinEditCaptureDistance
AnchorSideTop.Side = asrBottom
Left = 6
Height = 13
Top = 186
Width = 114
BorderSpacing.Top = 6
Caption = 'Mouse Bordering Factor'
ParentColor = False
end
object SpinEditMouseBorderFactor: TSpinEdit
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = LabelMouseBorderFactor
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 6
Height = 21
Top = 199
Width = 559
Anchors = [akTop, akLeft, akRight]
MaxValue = 10
MinValue = 1
ParentShowHint = False
ShowHint = True
TabOrder = 4
Value = 1
end
object CheckBoxTreatAlign: TCheckBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = SpinEditMouseBorderFactor
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 226
Width = 128
BorderSpacing.Top = 6
Caption = 'Automatic Treat Aligns'
ParentShowHint = False
ShowHint = True
TabOrder = 5
end
object LabelColors: TLabel
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = CheckBoxAllowSizing
AnchorSideTop.Side = asrBottom
Left = 6
Height = 13
Top = 295
Width = 30
BorderSpacing.Top = 6
Caption = 'Colors'
ParentColor = False
end
object CheckBoxForceRefreshing: TCheckBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = ColorBoxResizer
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 81
Width = 146
BorderSpacing.Top = 6
Caption = 'Force Refreshing At Sizing'
OnChange = CheckBoxAnchorTabVisibleChange
ParentShowHint = False
ShowHint = True
TabOrder = 6
end
object AnchorsColorBox: TColorBox
AnchorSideLeft.Control = ComboBoxTabPosition
AnchorSideTop.Control = AnchorsColorListBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 26
Top = 430
Width = 559
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeNone, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors]
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 2
ItemHeight = 20
OnChange = AnchorsColorBoxChange
TabOrder = 7
end
object AnchorsColorListBox: TColorListBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = LabelColors
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 6
Height = 143
Top = 308
Width = 559
Style = [cbCustomColors]
OnGetColors = AnchorsColorListBoxGetColors
Anchors = [akTop, akLeft, akRight]
ItemHeight = 0
OnSelectionChange = AnchorsColorListBoxSelectionChange
TabOrder = 8
end
object CheckBoxTreatBorder: TCheckBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = CheckBoxTreatAlign
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 249
Width = 170
BorderSpacing.Top = 6
Caption = 'Automatic Treat Around Border'
ParentShowHint = False
ShowHint = True
TabOrder = 9
end
object CheckBoxAllowSizing: TCheckBox
AnchorSideLeft.Control = LabelTabPosition
AnchorSideTop.Control = CheckBoxTreatBorder
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17
Top = 272
Width = 170
BorderSpacing.Top = 6
Caption = 'Allow Sizing'
ParentShowHint = False
ShowHint = True
TabOrder = 10
Height = 470
Top = 19
Width = 565
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 6
BevelOuter = bvNone
Caption = 'Panel1'
ClientHeight = 470
ClientWidth = 565
TabOrder = 1
object ComboBoxTabPosition: TComboBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = LabelTabPosition
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 0
Height = 23
Top = 33
Width = 565
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 6
ItemHeight = 15
ParentShowHint = False
ReadOnly = True
ShowHint = True
Style = csDropDownList
TabOrder = 0
end
object LabelResizerColor: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = ComboBoxTabPosition
AnchorSideTop.Side = asrBottom
Left = 0
Height = 15
Top = 62
Width = 68
BorderSpacing.Top = 6
Caption = 'Resizer Color'
ParentColor = False
end
object ColorBoxResizer: TColorBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = LabelResizerColor
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 0
Height = 22
Top = 77
Width = 565
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor]
Anchors = [akTop, akLeft, akRight]
ItemHeight = 16
ParentShowHint = False
ShowHint = True
TabOrder = 1
end
object DividerBevelAnchors: TDividerBevel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = CheckBoxForceRefreshing
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 0
Height = 15
Top = 130
Width = 565
Caption = 'Anchors'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]
ParentFont = False
end
object CheckBoxAnchorTabVisible: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = DividerBevelAnchors
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 151
Width = 116
BorderSpacing.Top = 6
Caption = 'Show Anchors Tab'
ParentShowHint = False
ShowHint = True
TabOrder = 2
OnChange = CheckBoxAnchorTabVisibleChange
end
object LabelCaptureDistance: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = CheckBoxAnchorTabVisible
AnchorSideTop.Side = asrBottom
Left = 0
Height = 15
Top = 176
Width = 90
BorderSpacing.Top = 6
Caption = 'Capture Distance'
ParentColor = False
end
object SpinEditCaptureDistance: TSpinEdit
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = LabelCaptureDistance
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 0
Height = 23
Top = 191
Width = 565
Anchors = [akTop, akLeft, akRight]
ParentShowHint = False
ShowHint = True
TabOrder = 3
end
object LabelMouseBorderFactor: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = SpinEditCaptureDistance
AnchorSideTop.Side = asrBottom
Left = 0
Height = 15
Top = 220
Width = 127
BorderSpacing.Top = 6
Caption = 'Mouse Bordering Factor'
ParentColor = False
end
object SpinEditMouseBorderFactor: TSpinEdit
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = LabelMouseBorderFactor
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 0
Height = 23
Top = 235
Width = 565
Anchors = [akTop, akLeft, akRight]
MaxValue = 10
MinValue = 1
ParentShowHint = False
ShowHint = True
TabOrder = 4
Value = 1
end
object CheckBoxTreatAlign: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = SpinEditMouseBorderFactor
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 264
Width = 139
BorderSpacing.Top = 6
Caption = 'Automatic Treat Aligns'
ParentShowHint = False
ShowHint = True
TabOrder = 5
end
object LabelColors: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = CheckBoxAllowSizing
AnchorSideTop.Side = asrBottom
Left = 0
Height = 15
Top = 339
Width = 34
BorderSpacing.Top = 6
Caption = 'Colors'
ParentColor = False
end
object CheckBoxForceRefreshing: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = ColorBoxResizer
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 105
Width = 155
BorderSpacing.Top = 6
Caption = 'Force Refreshing At Sizing'
ParentShowHint = False
ShowHint = True
TabOrder = 6
OnChange = CheckBoxAnchorTabVisibleChange
end
object AnchorsColorBox: TColorBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = AnchorsColorListBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 26
Top = 499
Width = 565
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeNone, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors]
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 2
ItemHeight = 20
TabOrder = 7
OnChange = AnchorsColorBoxChange
end
object AnchorsColorListBox: TColorListBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = LabelColors
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 0
Height = 143
Top = 354
Width = 565
Style = [cbCustomColors]
OnGetColors = AnchorsColorListBoxGetColors
Anchors = [akTop, akLeft, akRight]
ItemHeight = 0
OnSelectionChange = AnchorsColorListBoxSelectionChange
TabOrder = 8
end
object CheckBoxTreatBorder: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = CheckBoxTreatAlign
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 289
Width = 184
BorderSpacing.Top = 6
Caption = 'Automatic Treat Around Border'
ParentShowHint = False
ShowHint = True
TabOrder = 9
end
object CheckBoxAllowSizing: TCheckBox
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = CheckBoxTreatBorder
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 314
Width = 82
BorderSpacing.Top = 6
Caption = 'Allow Sizing'
ParentShowHint = False
ShowHint = True
TabOrder = 10
end
object DividerBevel1: TDividerBevel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
AnchorSideRight.Control = ComboBoxTabPosition
AnchorSideRight.Side = asrBottom
Left = 0
Height = 15
Top = 0
Width = 571
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Bottom = 3
Font.Style = [fsBold]
ParentFont = False
end
object LabelTabPosition: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = DividerBevel1
AnchorSideTop.Side = asrBottom
Left = 0
Height = 15
Top = 18
Width = 64
Caption = 'Tab Position'
ParentColor = False
end
end
end

View File

@ -29,6 +29,7 @@ type
{ TFrameDockedOptions }
TFrameDockedOptions = class(TAbstractIDEOptionsEditor)
cbDisableDockFormEd: TCheckBox;
CheckBoxAnchorTabVisible: TCheckBox;
CheckBoxForceRefreshing: TCheckBox;
CheckBoxTreatAlign: TCheckBox;
@ -37,6 +38,7 @@ type
ColorBoxResizer: TColorBox;
ComboBoxTabPosition: TComboBox;
DividerBevelAnchors: TDividerBevel;
DividerBevel1: TDividerBevel;
LabelColors: TLabel;
LabelCaptureDistance: TLabel;
LabelMouseBorderFactor: TLabel;
@ -44,8 +46,10 @@ type
LabelTabPosition: TLabel;
AnchorsColorBox: TColorBox;
AnchorsColorListBox: TColorListBox;
Panel1: TPanel;
SpinEditCaptureDistance: TSpinEdit;
SpinEditMouseBorderFactor: TSpinEdit;
procedure cbDisableDockFormEdChange(Sender: TObject);
procedure CheckBoxAnchorTabVisibleChange(Sender: TObject);
procedure AnchorsColorBoxChange(Sender: TObject);
procedure AnchorsColorListBoxGetColors(Sender: TCustomColorListBox; Items: TStrings);
@ -68,6 +72,7 @@ type
FLastTreatAlign: Boolean;
FLastTreatBorder: Boolean;
FReady: Boolean;
FDisableChanged: Boolean;
public
function GetTitle: String; override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
@ -77,6 +82,12 @@ type
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
{ TFrameDisabledDockedOptions }
TFrameDisabledDockedOptions = class(TFrameDockedOptions)
constructor Create(AnOwner: TComponent); override;
end;
implementation
{$R *.lfm}
@ -95,6 +106,11 @@ begin
SpinEditMouseBorderFactor.Enabled := CheckBoxAnchorTabVisible.Checked;
end;
procedure TFrameDockedOptions.cbDisableDockFormEdChange(Sender: TObject);
begin
FDisableChanged := True;
end;
procedure TFrameDockedOptions.AnchorsColorBoxChange(Sender: TObject);
var
i: Integer;
@ -144,6 +160,7 @@ begin
LabelTabPosition.Caption := STabPositionCaption;
LabelCaptureDistance.Caption := SCaptureDistanceCaption;
LabelMouseBorderFactor.Caption := SMouseBorderFactorCaption;
cbDisableDockFormEd.Caption := SDisableRequiresRestart;
CheckBoxAllowSizing.Hint := SAllowSizingHint;
CheckBoxAnchorTabVisible.Hint := SAnchorTabVisibleHint;
@ -174,6 +191,8 @@ begin
FLastTabPosition := DockedOptions.TabPosition;
FLastTreatAlign := DockedOptions.TreatAlign;
FLastTreatBorder := DockedOptions.TreatBorder;
cbDisableDockFormEd.Checked := not DockedOptions.EnableDockedDesigner;
FDisableChanged := False;
RestoreSettings(AOptions);
FReady := true;
end;
@ -196,6 +215,9 @@ begin
DockedOptions.TabPosition := TTabPosition(ComboBoxTabPosition.ItemIndex);
DockedOptions.TreatAlign := CheckBoxTreatAlign.Checked;
DockedOptions.TreatBorder := CheckBoxTreatBorder.Checked;
if FDisableChanged then
DockedOptions.DoneAskUserEnableDockedDesigner := True;
DockedOptions.EnableDockedDesigner := not cbDisableDockFormEd.Checked;
if DockedOptions.Modified then
begin
@ -231,5 +253,13 @@ begin
Result := IDEEditorGroups.GetByIndex(GroupEnvironment)^.GroupClass;
end;
{ TFrameDisabledDockedOptions }
constructor TFrameDisabledDockedOptions.Create(AnOwner: TComponent);
begin
inherited Create(AnOwner);
Panel1.Visible := False;
end;
end.

View File

@ -69,6 +69,8 @@ type
FAnchorTopColor: TColor;
FCaptureDistance: Integer;
FChangeStamp: Integer;
FDoneAskUserEnableDockedDesigner: boolean;
FEnableDockedDesigner: boolean;
FForceRefreshing: Boolean;
FLastSavedChangeStamp: Integer;
FMouseBorderFactor: Integer;
@ -87,6 +89,8 @@ type
procedure SetAnchorTargetColor(AValue: TColor);
procedure SetAnchorTopColor(AValue: TColor);
procedure SetCaptureDistance(AValue: Integer);
procedure SetDoneAskUserEnableDockedDesigner(AValue: boolean);
procedure SetEnableDockedDesigner(AValue: boolean);
procedure SetForceRefreshing(AValue: Boolean);
procedure SetModified(AValue: Boolean);
procedure SetMouseBorderFactor(AValue: Integer);
@ -121,6 +125,8 @@ type
property TabPosition: TTabPosition read FTabPosition write SetTabPosition;
property TreatAlign: Boolean read FTreatAlign write SetTreatAlign;
property TreatBorder: Boolean read FTreatBorder write SetTreatBorder;
property EnableDockedDesigner: boolean read FEnableDockedDesigner write SetEnableDockedDesigner default False;
property DoneAskUserEnableDockedDesigner: boolean read FDoneAskUserEnableDockedDesigner write SetDoneAskUserEnableDockedDesigner default False;
end;
const
@ -209,6 +215,20 @@ begin
IncreaseChangeStamp;
end;
procedure TDockedOptions.SetDoneAskUserEnableDockedDesigner(AValue: boolean);
begin
if FDoneAskUserEnableDockedDesigner = AValue then Exit;
FDoneAskUserEnableDockedDesigner := AValue;
IncreaseChangeStamp;
end;
procedure TDockedOptions.SetEnableDockedDesigner(AValue: boolean);
begin
if FEnableDockedDesigner = AValue then Exit;
FEnableDockedDesigner := AValue;
IncreaseChangeStamp;
end;
procedure TDockedOptions.SetForceRefreshing(AValue: Boolean);
begin
if FForceRefreshing = AValue then Exit;
@ -277,6 +297,8 @@ begin
FTabPosition := tpTop;
FTreatAlign := True;
FTreatBorder := True;
FEnableDockedDesigner := False;
FDoneAskUserEnableDockedDesigner := False;
end;
procedure TDockedOptions.SaveSafe;
@ -323,6 +345,8 @@ begin
Cfg.SetDeleteValue('TabPosition/Value', Integer(TabPosition), Integer(tpTop));
Cfg.SetDeleteValue('TreatAlign/Value', TreatAlign, True);
Cfg.SetDeleteValue('TreatBorder/Value', TreatBorder, True);
Cfg.SetDeleteValue('EnableDockedDesigner/Value', EnableDockedDesigner, False);
Cfg.SetDeleteValue('DoneAskUserEnableDockedDesigner/Value', DoneAskUserEnableDockedDesigner, False);
finally
Cfg.Free;
end;
@ -350,6 +374,8 @@ begin
TabPosition := TTabPosition(Cfg.GetValue('TabPosition/Value', Integer(tpTop)));
TreatAlign := Cfg.GetValue('TreatAlign/Value', True);
TreatBorder := Cfg.GetValue('TreatBorder/Value', True);
EnableDockedDesigner := Cfg.GetValue('EnableDockedDesigner/Value', False);
DoneAskUserEnableDockedDesigner := Cfg.GetValue('DoneAskUserEnableDockedDesigner/Value', False);
finally
Cfg.Free;
end;

View File

@ -24,7 +24,7 @@ uses
SrcEditorIntf, IDEWindowIntf, PropEdits, ComponentEditors, IDEOptEditorIntf,
IDEOptionsIntf,
// DockedFormEditor
DockedMainIDE, DockedDesignForm, DockedOptionsIDE, DockedOptionsFrame;
DockedMainIDE, DockedDesignForm, DockedOptionsIDE, DockedOptionsFrame, DockedSourceWindow;
var
DockedOptionsFrameID: Integer = 1000;
@ -35,36 +35,45 @@ implementation
procedure Register;
begin
Screen.AddHandlerFormAdded(TDockedMainIDE.Screen_FormAdded);
Screen.AddHandlerRemoveForm(TDockedMainIDE.Screen_FormDel);
Screen.AddHandlerNewFormCreated(TDesignForm.Screen_NewFormCreated);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowCreate, TDockedMainIDE.WindowCreate);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowDestroy, TDockedMainIDE.WindowDestroy);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowShow, TDockedMainIDE.WindowShow);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowHide, TDockedMainIDE.WindowHide);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorActivate, TDockedMainIDE.EditorActivated);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorDestroy, TDockedMainIDE.EditorDestroyed);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorCreate, TDockedMainIDE.EditorCreate);
LazarusIDE.AddHandlerOnShowDesignerFormOfSource(TDockedMainIDE.OnShowDesignerForm);
LazarusIDE.AddHandlerOnShowSourceOfActiveDesignerForm(TDockedMainIDE.OnShowSrcEditor);
GlobalDesignHook.AddHandlerShowMethod(TDockedMainIDE.OnDesignShowMethod);
GlobalDesignHook.AddHandlerModified(TDockedMainIDE.OnDesignModified);
GlobalDesignHook.AddHandlerPersistentAdded(TDockedMainIDE.OnDesignPersistentAdded);
GlobalDesignHook.AddHandlerPersistentDeleted(TDockedMainIDE.OnDesignPersistentDeleted);
GlobalDesignHook.AddHandlerRefreshPropertyValues(TDockedMainIDE.OnDesignRefreshPropertyValues);
GlobalDesignHook.AddHandlerDesignerMouseDown(TDockedMainIDE.OnDesignMouseDown);
GlobalDesignHook.AddHandlerSetSelection(TDockedMainIDE.OnDesignSetSelection);
DockedOptions := TDockedOptions.Create;
DockedOptionsFrameID := RegisterIDEOptionsEditor(GroupEnvironment, TFrameDockedOptions, DockedOptionsFrameID)^.Index;
DockedOptions.LoadSafe;
if DockedOptions.EnableDockedDesigner then begin
SourceWindows := TSourceWindows.CreateNew;
IDETabMaster := TDockedTabMaster.Create;
DesignForms := TDesignForms.Create;
Screen.AddHandlerFormAdded(TDockedMainIDE.Screen_FormAdded);
Screen.AddHandlerRemoveForm(TDockedMainIDE.Screen_FormDel);
Screen.AddHandlerNewFormCreated(TDesignForm.Screen_NewFormCreated);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowCreate, TDockedMainIDE.WindowCreate);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowDestroy, TDockedMainIDE.WindowDestroy);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowShow, TDockedMainIDE.WindowShow);
SourceEditorManagerIntf.RegisterChangeEvent(semWindowHide, TDockedMainIDE.WindowHide);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorActivate, TDockedMainIDE.EditorActivated);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorDestroy, TDockedMainIDE.EditorDestroyed);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorCreate, TDockedMainIDE.EditorCreate);
LazarusIDE.AddHandlerOnShowDesignerFormOfSource(TDockedMainIDE.OnShowDesignerForm);
LazarusIDE.AddHandlerOnShowSourceOfActiveDesignerForm(TDockedMainIDE.OnShowSrcEditor);
GlobalDesignHook.AddHandlerShowMethod(TDockedMainIDE.OnDesignShowMethod);
GlobalDesignHook.AddHandlerModified(TDockedMainIDE.OnDesignModified);
GlobalDesignHook.AddHandlerPersistentAdded(TDockedMainIDE.OnDesignPersistentAdded);
GlobalDesignHook.AddHandlerPersistentDeleted(TDockedMainIDE.OnDesignPersistentDeleted);
GlobalDesignHook.AddHandlerRefreshPropertyValues(TDockedMainIDE.OnDesignRefreshPropertyValues);
GlobalDesignHook.AddHandlerDesignerMouseDown(TDockedMainIDE.OnDesignMouseDown);
GlobalDesignHook.AddHandlerSetSelection(TDockedMainIDE.OnDesignSetSelection);
DockedOptionsFrameID := RegisterIDEOptionsEditor(GroupEnvironment, TFrameDockedOptions, DockedOptionsFrameID)^.Index;
IDETabMaster := TDockedTabMaster.Create;
DesignForms := TDesignForms.Create;
end
else begin
DockedOptionsFrameID := RegisterIDEOptionsEditor(GroupEnvironment, TFrameDisabledDockedOptions, DockedOptionsFrameID)^.Index;
end;
end;
initialization
DockedOptions := TDockedOptions.Create;
finalization
Screen.RemoveHandlerNewFormCreated(TDesignForm.Screen_NewFormCreated);
Screen.RemoveHandlerFormAdded(TDockedMainIDE.Screen_FormAdded);

View File

@ -467,9 +467,6 @@ begin
LPageCtrl.ShowCode;
end;
initialization
SourceWindows := TSourceWindows.CreateNew;
finalization
SourceWindows.Free;

View File

@ -466,7 +466,12 @@ type
end;
var
IDEDockMaster: TIDEDockMaster = nil; // can be set by a package
OnIDEDockMasterNeeded: procedure = nil;
procedure SetIDEDockMaster(AnIDEDockMaster: TIDEDockMaster);
function GetIDEDockMaster: TIDEDockMaster;
property IDEDockMaster: TIDEDockMaster read GetIDEDockMaster write SetIDEDockMaster;
procedure MakeIDEWindowDockable(AControl: TWinControl);
procedure MakeIDEWindowDockSite(AForm: TCustomForm);
@ -484,6 +489,7 @@ uses
var
FIDEWindowsGlobalOptions: TIDEWindowsGlobalOptions = nil;
TheIDEDockMaster: TIDEDockMaster = nil; // can be set by a package
procedure SetPopupModeParentForPropertyEditor(const AEditorDlg: TCustomForm);
begin
@ -500,6 +506,18 @@ begin
Result:=iwsNormal;
end;
procedure SetIDEDockMaster(AnIDEDockMaster: TIDEDockMaster);
begin
TheIDEDockMaster := AnIDEDockMaster;
end;
function GetIDEDockMaster: TIDEDockMaster;
begin
if (TheIDEDockMaster = nil) and Assigned(OnIDEDockMasterNeeded) then
OnIDEDockMasterNeeded;
Result := TheIDEDockMaster;
end;
procedure MakeIDEWindowDockable(AControl: TWinControl);
begin
if Assigned(IDEDockMaster) then

View File

@ -1340,9 +1340,6 @@ begin
end;
end;
Application.ShowButtonGlyphs := EnvironmentGuiOpts.ShowButtonGlyphs;
Application.ShowMenuGlyphs := EnvironmentGuiOpts.ShowMenuGlyphs;
OldVer:=EnvironmentOptions.OldLazarusVersion;
NowVer:=LazarusVersionStr;
//debugln(['TMainIDE.LoadGlobalOptions ',FEnvOptsCfgExisted,' diff=',OldVer<>NowVer,' Now=',NowVer,' Old=',OldVer,' Comp=',CompareLazarusVersion(NowVer,OldVer)]);
@ -1571,8 +1568,6 @@ begin
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.Create BUILD MANAGER');{$ENDIF}
// setup macros before loading options
MainBuildBoss.SetupTransferMacros;
EnvironmentGuiOpts := TEnvGuiOptions.Create;
EnvironmentOptions.RegisterSubConfig(EnvironmentGuiOpts, '/');
EnvironmentDebugOpts := TEnvDebuggerOptions.Create;
EnvironmentOptions.RegisterSubConfig(EnvironmentDebugOpts, 'EnvironmentOptions/');
@ -1585,9 +1580,6 @@ begin
LoadGlobalOptions;
if Application.Terminated then exit;
if EnvironmentGuiOpts.Desktop.SingleTaskBarButton then
Application.TaskBarBehavior := tbSingleButton;
// setup code templates
SetupCodeMacros;
@ -1601,6 +1593,14 @@ begin
SetupInteractive;
if Application.Terminated then exit;
EnvironmentGuiOpts := TEnvGuiOptions.Create;
EnvironmentOptions.RegisterSubConfig(EnvironmentGuiOpts, '/',True);
if EnvironmentGuiOpts.Desktop.SingleTaskBarButton then
Application.TaskBarBehavior := tbSingleButton;
Application.ShowButtonGlyphs := EnvironmentGuiOpts.ShowButtonGlyphs;
Application.ShowMenuGlyphs := EnvironmentGuiOpts.ShowMenuGlyphs;
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.Create CODETOOLS');{$ENDIF}
MainBuildBoss.SetupExternalTools(TExternalToolsIDE);

View File

@ -368,7 +368,7 @@ type
procedure DoAfterWrite(Restore: boolean); override;
// SubConfig
function GetSubConfigObj(ASubConfigClass: TIDESubOptionsClass): TIDESubOptions;
procedure RegisterSubConfig(ASubConfig: TIDESubOptions; APath: String);
procedure RegisterSubConfig(ASubConfig: TIDESubOptions; APath: String; ALoadConf: Boolean = False);
procedure UnRegisterSubConfig(ASubConfig: TIDESubOptions);
function SubConfigCount: integer;
property SubConfig[Index: Integer]: TIDESubOptions read GetSubConfig;
@ -818,8 +818,8 @@ begin
Result := Nil;
end;
procedure TEnvironmentOptions.RegisterSubConfig(ASubConfig: TIDESubOptions;
APath: String);
procedure TEnvironmentOptions.RegisterSubConfig(ASubConfig: TIDESubOptions; APath: String;
ALoadConf: Boolean);
//var
// i: Integer;
begin
@ -835,7 +835,11 @@ begin
fRegisteredSubConfig.Add(ASubConfig);
ASubConfig.FTopPath := APath;
ASubConfig.FXMLCfg := FXMLCfg;
// ASubConfig.ReadFromXml;
if ALoadConf then begin
ASubConfig.InitConfig;
ASubConfig.FVersion:=FFileVersion;
ASubConfig.ReadFromXml(False);
end;
end;
procedure TEnvironmentOptions.UnRegisterSubConfig(ASubConfig: TIDESubOptions);