You've already forked lazarus-ccr
manualdocker: patch from Martin Friebe to work correct with the latest source editor
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1189 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -35,6 +35,8 @@ type
|
||||
{ TManualDocker }
|
||||
|
||||
TManualDocker = class(TObject)
|
||||
private
|
||||
FCurrentSrcWin: TWinControl;
|
||||
protected
|
||||
procedure ChangeDocking(DockingEnabled: Boolean);
|
||||
procedure LoadState(cfg: TXMLConfig; var Astate: TDockState; const StateName: string);
|
||||
@ -43,8 +45,12 @@ type
|
||||
procedure SaveStates;
|
||||
|
||||
procedure AllocControls(AParent: TWinControl);
|
||||
procedure DeallocControls;
|
||||
procedure RealignControls;
|
||||
procedure UpdateDockState(var astate: TDockState; wnd: TWinControl);
|
||||
|
||||
procedure SourceWindowCreated(Sender: TObject);
|
||||
procedure SourceWindowDestroyed(Sender: TObject);
|
||||
public
|
||||
ConfigPath : AnsiString;
|
||||
split : TSplitter;
|
||||
@ -87,8 +93,10 @@ var
|
||||
i : Integer;
|
||||
begin
|
||||
if DockingEnabled then begin
|
||||
if not Assigned(SourceEditorWindow) or not Assigned(IDEMessagesWindow) then Exit;
|
||||
if not Assigned(panel) then AllocControls(SourceEditorWindow);
|
||||
if not (Assigned(SourceEditorManagerIntf) and Assigned(SourceEditorManagerIntf.ActiveSourceWindow))
|
||||
or not Assigned(IDEMessagesWindow)
|
||||
then Exit;
|
||||
if not Assigned(panel) then AllocControls(SourceEditorManagerIntf.ActiveSourceWindow);
|
||||
split.visible:=true;
|
||||
panel.visible:=true;
|
||||
with IDEMessagesWindow do
|
||||
@ -117,6 +125,7 @@ begin
|
||||
IDEMessagesWindow.BorderStyle := FloatBrd;
|
||||
end;
|
||||
IDEMessagesWindow.TabStop := true;
|
||||
IDEMessagesWindow.Show;
|
||||
end;
|
||||
MsgWnd.docked := DockingEnabled;
|
||||
cmd.Checked := DockingEnabled;
|
||||
@ -127,6 +136,11 @@ var
|
||||
pths : array [0..1] of String;
|
||||
i : Integer;
|
||||
begin
|
||||
if SourceEditorManagerIntf <> nil then begin
|
||||
SourceEditorManagerIntf.RegisterChangeEvent(semWindowCreate, @SourceWindowCreated);
|
||||
SourceEditorManagerIntf.RegisterChangeEvent(semWindowDestroy, @SourceWindowDestroyed);
|
||||
end;
|
||||
|
||||
pths[0]:= LazarusIDE.GetPrimaryConfigPath;
|
||||
pths[1]:= LazarusIDE.GetSecondaryConfigPath;
|
||||
for i := 0 to length(pths)-1 do begin
|
||||
@ -169,6 +183,7 @@ end;
|
||||
|
||||
procedure TManualDocker.AllocControls(AParent: TWinControl);
|
||||
begin
|
||||
FCurrentSrcWin := AParent;
|
||||
panel := TPanel.Create(nil);
|
||||
panel.Parent := AParent;
|
||||
panel.BorderStyle := bsNone;
|
||||
@ -179,6 +194,12 @@ begin
|
||||
RealignControls;
|
||||
end;
|
||||
|
||||
procedure TManualDocker.DeallocControls;
|
||||
begin
|
||||
FreeAndNil(split);
|
||||
FreeAndNil(panel);
|
||||
end;
|
||||
|
||||
procedure TManualDocker.RealignControls;
|
||||
begin
|
||||
panel.Align := alClient;
|
||||
@ -193,6 +214,34 @@ begin
|
||||
astate.DockSize.cy := wnd.ClientHeight;
|
||||
end;
|
||||
|
||||
procedure TManualDocker.SourceWindowCreated(Sender: TObject);
|
||||
begin
|
||||
if Assigned(FCurrentSrcWin) or (SourceEditorManagerIntf.SourceWindowCount > 1) then
|
||||
exit;
|
||||
if MsgWnd.Docked then
|
||||
ChangeDocking(true);
|
||||
end;
|
||||
|
||||
procedure TManualDocker.SourceWindowDestroyed(Sender: TObject);
|
||||
var
|
||||
IsDocked: Boolean;
|
||||
begin
|
||||
IsDocked := MsgWnd.docked;
|
||||
if FCurrentSrcWin <> Sender then exit;
|
||||
if IsDocked then
|
||||
ChangeDocking(False);
|
||||
FCurrentSrcWin := nil;
|
||||
DeallocControls;
|
||||
if IsDocked then begin
|
||||
if (SourceEditorManagerIntf.SourceWindowCount >= 1) then
|
||||
ChangeDocking(True)
|
||||
else
|
||||
if Assigned(IDEMessagesWindow) then
|
||||
IDEMessagesWindow.Hide;
|
||||
MsgWnd.Docked := IsDocked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TManualDocker.LoadState(cfg: TXMLConfig; var Astate: TDockState;
|
||||
const StateName: string);
|
||||
begin
|
||||
|
Reference in New Issue
Block a user