fixed script cross building binutils

git-svn-id: trunk@9622 -
This commit is contained in:
mattias 2006-07-17 17:39:25 +00:00
parent f0b0ae7a39
commit 3744d96407
7 changed files with 296 additions and 101 deletions

View File

@ -2,55 +2,59 @@ object WatchPropertyDlg: TWatchPropertyDlg
Caption = 'Watch Properties' Caption = 'Watch Properties'
ClientHeight = 206 ClientHeight = 206
ClientWidth = 420 ClientWidth = 420
PixelsPerInch = 95
Position = poScreenCenter Position = poScreenCenter
HorzScrollBar.Page = 421 HorzScrollBar.Page = 419
VertScrollBar.Page = 207 VertScrollBar.Page = 205
Left = 358 Left = 358
Height = 206 Height = 206
Top = 238 Top = 238
Width = 420 Width = 420
object lblExpression: TLabel object lblExpression: TLabel
Caption = 'Expression:' Caption = 'Expression:'
Color = clNone
ParentColor = False
Left = 16 Left = 16
Height = 17 Height = 13
Top = 14 Top = 14
Width = 65 Width = 65
end end
object lblRepCount: TLabel
Caption = 'Repeat Count:'
Color = clNone
ParentColor = False
Left = 15
Height = 13
Top = 45
Width = 80
end
object lblDigits: TLabel
Caption = 'Digits:'
Color = clNone
ParentColor = False
Left = 176
Height = 13
Top = 45
Width = 35
end
object txtExpression: TEdit object txtExpression: TEdit
TabOrder = 2 TabOrder = 1
TabOrder = 2
Left = 105 Left = 105
Height = 23 Height = 23
Top = 8 Top = 8
Width = 300 Width = 300
end end
object lblRepCount: TLabel
Caption = 'Repeat Count:'
Left = 15
Height = 17
Top = 45
Width = 80
end
object txtRepCount: TEdit object txtRepCount: TEdit
TabOrder = 4 TabOrder = 2
Text = '0' Text = '0'
TabOrder = 4
Left = 105 Left = 105
Height = 23 Height = 23
Top = 39 Top = 39
Width = 60 Width = 60
end end
object lblDigits: TLabel
Caption = 'Digits:'
Left = 176
Height = 17
Top = 45
Width = 40
end
object txtDigits: TEdit object txtDigits: TEdit
TabOrder = 6 TabOrder = 5
Text = '0' Text = '0'
TabOrder = 6
Left = 225 Left = 225
Height = 23 Height = 23
Top = 39 Top = 39
@ -58,28 +62,33 @@ object WatchPropertyDlg: TWatchPropertyDlg
end end
object chkEnabled: TCheckBox object chkEnabled: TCheckBox
AllowGrayed = True AllowGrayed = True
AutoSize = True
Caption = 'Enabled' Caption = 'Enabled'
DragCursor = 65524
TabOrder = 7 TabOrder = 7
Left = 15 Left = 15
Height = 20 Height = 20
Top = 65 Top = 65
Width = 84 Width = 73
end end
object chkAllowFunc: TCheckBox object chkAllowFunc: TCheckBox
AllowGrayed = True AllowGrayed = True
AutoSize = True
Caption = 'Allow Function Calls' Caption = 'Allow Function Calls'
DragCursor = 65524
TabOrder = 0 TabOrder = 0
Left = 105 Left = 105
Height = 20 Height = 20
Top = 65 Top = 65
Width = 1 Width = 143
end end
object rgStyle: TRadioGroup object rgStyle: TRadioGroup
AutoFill = True
Caption = 'Style' Caption = 'Style'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 3
Columns = 3 Columns = 3
ItemIndex = 7 ItemIndex = 7
Items.Strings = ( Items.Strings = (
@ -93,36 +102,40 @@ object WatchPropertyDlg: TWatchPropertyDlg
'Default' 'Default'
'Memory Dump' 'Memory Dump'
) )
ParentColor = True TabOrder = 3
Left = 15 Left = 15
Height = 78 Height = 78
Top = 90 Top = 90
Width = 390 Width = 390
end end
object btnOK: TButton object btnOK: TButton
BorderSpacing.InnerBorder = 4
Caption = 'OK' Caption = 'OK'
Default = True Default = True
ModalResult = 1 ModalResult = 1
OnClick = btnOKClick OnClick = btnOKClick
TabOrder = 9 TabOrder = 4
Left = 170 Left = 170
Height = 25 Height = 25
Top = 176 Top = 176
Width = 75 Width = 75
end end
object btnCancel: TButton object btnCancel: TButton
BorderSpacing.InnerBorder = 4
Cancel = True Cancel = True
Caption = 'Cancel' Caption = 'Cancel'
ModalResult = 2 ModalResult = 2
TabOrder = 10 TabOrder = 6
Left = 250 Left = 250
Height = 25 Height = 25
Top = 176 Top = 176
Width = 75 Width = 75
end end
object btnHelp: TButton object btnHelp: TButton
BorderSpacing.InnerBorder = 4
Caption = 'Help' Caption = 'Help'
TabOrder = 11 OnClick = btnHelpClick
TabOrder = 8
Left = 330 Left = 330
Height = 25 Height = 25
Top = 176 Top = 176

View File

@ -1,32 +1,41 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TWatchPropertyDlg','FORMDATA',[ LazarusResources.Add('TWatchPropertyDlg','FORMDATA',[
'TPF0'#17'TWatchPropertyDlg'#16'WatchPropertyDlg'#7'Caption'#6#16'Watch Prope' 'TPF0'#17'TWatchPropertyDlg'#16'WatchPropertyDlg'#7'Caption'#6#16'Watch Prope'
+'rties'#12'ClientHeight'#3#206#0#11'ClientWidth'#3#164#1#8'Position'#7#14'po' +'rties'#12'ClientHeight'#3#206#0#11'ClientWidth'#3#164#1#13'PixelsPerInch'#2
+'ScreenCenter'#18'HorzScrollBar.Page'#3#165#1#18'VertScrollBar.Page'#3#207#0 +'_'#8'Position'#7#14'poScreenCenter'#18'HorzScrollBar.Page'#3#163#1#18'VertS'
+#4'Left'#3'f'#1#6'Height'#3#206#0#3'Top'#3#238#0#5'Width'#3#164#1#0#6'TLabel' +'crollBar.Page'#3#205#0#4'Left'#3'f'#1#6'Height'#3#206#0#3'Top'#3#238#0#5'Wi'
+#13'lblExpression'#7'Caption'#6#11'Expression:'#4'Left'#2#16#6'Height'#2#17#3 +'dth'#3#164#1#0#6'TLabel'#13'lblExpression'#7'Caption'#6#11'Expression:'#5'C'
+'Top'#2#14#5'Width'#2'A'#0#0#5'TEdit'#13'txtExpression'#8'TabOrder'#2#2#8'Ta' +'olor'#7#6'clNone'#11'ParentColor'#8#4'Left'#2#16#6'Height'#2#13#3'Top'#2#14
+'bOrder'#2#2#4'Left'#2'i'#6'Height'#2#23#3'Top'#2#8#5'Width'#3','#1#0#0#6'TL' +#5'Width'#2'A'#0#0#6'TLabel'#11'lblRepCount'#7'Caption'#6#13'Repeat Count:'#5
+'abel'#11'lblRepCount'#7'Caption'#6#13'Repeat Count:'#4'Left'#2#15#6'Height' +'Color'#7#6'clNone'#11'ParentColor'#8#4'Left'#2#15#6'Height'#2#13#3'Top'#2'-'
+#2#17#3'Top'#2'-'#5'Width'#2'P'#0#0#5'TEdit'#11'txtRepCount'#8'TabOrder'#2#4 +#5'Width'#2'P'#0#0#6'TLabel'#9'lblDigits'#7'Caption'#6#7'Digits:'#5'Color'#7
+#4'Text'#6#1'0'#8'TabOrder'#2#4#4'Left'#2'i'#6'Height'#2#23#3'Top'#2''''#5'W' +#6'clNone'#11'ParentColor'#8#4'Left'#3#176#0#6'Height'#2#13#3'Top'#2'-'#5'Wi'
+'idth'#2'<'#0#0#6'TLabel'#9'lblDigits'#7'Caption'#6#7'Digits:'#4'Left'#3#176 +'dth'#2'#'#0#0#5'TEdit'#13'txtExpression'#8'TabOrder'#2#1#4'Left'#2'i'#6'Hei'
+#0#6'Height'#2#17#3'Top'#2'-'#5'Width'#2'('#0#0#5'TEdit'#9'txtDigits'#8'TabO' +'ght'#2#23#3'Top'#2#8#5'Width'#3','#1#0#0#5'TEdit'#11'txtRepCount'#8'TabOrde'
+'rder'#2#6#4'Text'#6#1'0'#8'TabOrder'#2#6#4'Left'#3#225#0#6'Height'#2#23#3'T' +'r'#2#2#4'Text'#6#1'0'#4'Left'#2'i'#6'Height'#2#23#3'Top'#2''''#5'Width'#2'<'
+'op'#2''''#5'Width'#3#180#0#0#0#9'TCheckBox'#10'chkEnabled'#11'AllowGrayed'#9 +#0#0#5'TEdit'#9'txtDigits'#8'TabOrder'#2#5#4'Text'#6#1'0'#4'Left'#3#225#0#6
+#8'AutoSize'#9#7'Caption'#6#7'Enabled'#10'DragCursor'#4#244#255#0#0#8'TabOrd' +'Height'#2#23#3'Top'#2''''#5'Width'#3#180#0#0#0#9'TCheckBox'#10'chkEnabled'
+'er'#2#7#4'Left'#2#15#6'Height'#2#20#3'Top'#2'A'#5'Width'#2'T'#0#0#9'TCheckB' +#11'AllowGrayed'#9#7'Caption'#6#7'Enabled'#8'TabOrder'#2#7#4'Left'#2#15#6'He'
+'ox'#12'chkAllowFunc'#11'AllowGrayed'#9#8'AutoSize'#9#7'Caption'#6#20'Allow ' +'ight'#2#20#3'Top'#2'A'#5'Width'#2'I'#0#0#9'TCheckBox'#12'chkAllowFunc'#11'A'
+'Function Calls'#10'DragCursor'#4#244#255#0#0#8'TabOrder'#2#0#4'Left'#2'i'#6 +'llowGrayed'#9#7'Caption'#6#20'Allow Function Calls'#8'TabOrder'#2#0#4'Left'
+'Height'#2#20#3'Top'#2'A'#5'Width'#2#1#0#0#11'TRadioGroup'#7'rgStyle'#7'Capt' +#2'i'#6'Height'#2#20#3'Top'#2'A'#5'Width'#3#143#0#0#0#11'TRadioGroup'#7'rgSt'
+'ion'#6#5'Style'#7'Columns'#2#3#9'ItemIndex'#2#7#13'Items.Strings'#1#6#9'Cha' +'yle'#8'AutoFill'#9#7'Caption'#6#5'Style'#28'ChildSizing.LeftRightSpacing'#2
+'racter'#6#6'String'#6#7'Decimal'#6#11'Hexadecimal'#6#14'Floating Point'#6#7 +#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7
+'Pointer'#6#16'Record/Structure'#6#7'Default'#6#11'Memory Dump'#0#11'ParentC' +#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomoge'
+'olor'#9#4'Left'#2#15#6'Height'#2'N'#3'Top'#2'Z'#5'Width'#3#134#1#0#0#7'TBut' +'nousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'C'
+'ton'#5'btnOK'#7'Caption'#6#2'OK'#7'Default'#9#11'ModalResult'#2#1#7'OnClick' +'hildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29
+#7#10'btnOKClick'#8'TabOrder'#2#9#4'Left'#3#170#0#6'Height'#2#25#3'Top'#3#176 +'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#3#7'Column'
+#0#5'Width'#2'K'#0#0#7'TButton'#9'btnCancel'#6'Cancel'#9#7'Caption'#6#6'Canc' +'s'#2#3#9'ItemIndex'#2#7#13'Items.Strings'#1#6#9'Character'#6#6'String'#6#7
+'el'#11'ModalResult'#2#2#8'TabOrder'#2#10#4'Left'#3#250#0#6'Height'#2#25#3'T' +'Decimal'#6#11'Hexadecimal'#6#14'Floating Point'#6#7'Pointer'#6#16'Record/St'
+'op'#3#176#0#5'Width'#2'K'#0#0#7'TButton'#7'btnHelp'#7'Caption'#6#4'Help'#8 +'ructure'#6#7'Default'#6#11'Memory Dump'#0#8'TabOrder'#2#3#4'Left'#2#15#6'He'
+'TabOrder'#2#11#4'Left'#3'J'#1#6'Height'#2#25#3'Top'#3#176#0#5'Width'#2'K'#0 +'ight'#2'N'#3'Top'#2'Z'#5'Width'#3#134#1#0#0#7'TButton'#5'btnOK'#25'BorderSp'
+#0#0 +'acing.InnerBorder'#2#4#7'Caption'#6#2'OK'#7'Default'#9#11'ModalResult'#2#1#7
+'OnClick'#7#10'btnOKClick'#8'TabOrder'#2#4#4'Left'#3#170#0#6'Height'#2#25#3
+'Top'#3#176#0#5'Width'#2'K'#0#0#7'TButton'#9'btnCancel'#25'BorderSpacing.Inn'
+'erBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabO'
+'rder'#2#6#4'Left'#3#250#0#6'Height'#2#25#3'Top'#3#176#0#5'Width'#2'K'#0#0#7
+'TButton'#7'btnHelp'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#4'Help'#7
+'OnClick'#7#12'btnHelpClick'#8'TabOrder'#2#8#4'Left'#3'J'#1#6'Height'#2#25#3
+'Top'#3#176#0#5'Width'#2'K'#0#0#0
]); ]);

View File

@ -40,10 +40,13 @@ interface
uses uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, LResources, StdCtrls, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, LResources, StdCtrls,
Buttons, Extctrls, Debugger, BaseDebugManager, Menus; Buttons, Extctrls, Menus,
IDEContextHelpEdit, Debugger, BaseDebugManager;
type type
{ TWatchPropertyDlg }
TWatchPropertyDlg = class(TForm) TWatchPropertyDlg = class(TForm)
lblExpression: TLabel; lblExpression: TLabel;
lblRepCount: TLabel; lblRepCount: TLabel;
@ -57,6 +60,7 @@ type
txtExpression: TEdit; txtExpression: TEdit;
txtRepCount: TEdit; txtRepCount: TEdit;
txtDigits: TEdit; txtDigits: TEdit;
procedure btnHelpClick(Sender: TObject);
procedure btnOKClick(Sender: TObject); procedure btnOKClick(Sender: TObject);
private private
FWatch: TIDEWatch; FWatch: TIDEWatch;
@ -82,6 +86,11 @@ begin
FWatch.Enabled := chkEnabled.Checked; FWatch.Enabled := chkEnabled.Checked;
end; end;
procedure TWatchPropertyDlg.btnHelpClick(Sender: TObject);
begin
ShowContextHelpForIDE(btnHelp);
end;
constructor TWatchPropertyDlg.Create(AOwner: TComponent; const AWatch: TIDEWatch); constructor TWatchPropertyDlg.Create(AOwner: TComponent; const AWatch: TIDEWatch);
begin begin
FWatch := AWatch; FWatch := AWatch;

View File

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<CONFIG Name="IDE windows and dialogs" Path="IDE_Window:_" ChildCount="47"> <CONFIG Name="IDE windows and dialogs" Path="IDE_Window:_" ChildCount="48">
<Node1 Name="TObjectInspector" Path="Object_Inspector" HasHelp="True"/> <Node1 Name="TObjectInspector" Path="Object_Inspector" HasHelp="True"/>
<Node2 Name="TfrmCompilerOptions" Path="Compiler_Options" HasHelp="True" ChildCount="1"> <Node2 Name="TfrmCompilerOptions" Path="Compiler_Options" HasHelp="True" ChildCount="1">
<Node1 Name="MainNotebook" ChildCount="7"> <Node1 Name="MainNotebook" ChildCount="7">
@ -90,4 +90,5 @@
<Node45 Name="TCodeToolsOptsDlg" Path="Codetools_Options" HasHelp="True"/> <Node45 Name="TCodeToolsOptsDlg" Path="Codetools_Options" HasHelp="True"/>
<Node46 Name="TCodeToolsDefinesEditor" Path="Codetools_Defines_Editor" HasHelp="True"/> <Node46 Name="TCodeToolsDefinesEditor" Path="Codetools_Defines_Editor" HasHelp="True"/>
<Node47 Name="THelpOptionsDialog" Path="Help_Options" HasHelp="True"/> <Node47 Name="THelpOptionsDialog" Path="Help_Options" HasHelp="True"/>
<Node48 Name="TWatchPropertyDlg" Path="Watch_Properties" HasHelp="True"/>
</CONFIG> </CONFIG>

View File

@ -56,7 +56,8 @@ type
TLDConfigNodeType = ( TLDConfigNodeType = (
ldcntControl, ldcntControl,
ldcntForm, ldcntForm,
ldcntSplitter, ldcntSplitterLeftRight,
ldcntSplitterUpDown,
ldcntPages, ldcntPages,
ldcntPage ldcntPage
); );
@ -65,7 +66,8 @@ const
LDConfigNodeTypeNames: array[TLDConfigNodeType] of string = ( LDConfigNodeTypeNames: array[TLDConfigNodeType] of string = (
'Control', 'Control',
'Form', 'Form',
'Splitter', 'SplitterLeftRight',
'SplitterUpDown',
'Pages', 'Pages',
'Page' 'Page'
); );
@ -94,9 +96,12 @@ type
procedure DoAdd(ChildNode: TLazDockConfigNode); procedure DoAdd(ChildNode: TLazDockConfigNode);
procedure DoRemove(ChildNode: TLazDockConfigNode); procedure DoRemove(ChildNode: TLazDockConfigNode);
public public
constructor Create(ParentNode: TLazDockConfigNode);
constructor Create(ParentNode: TLazDockConfigNode; const AName: string); constructor Create(ParentNode: TLazDockConfigNode; const AName: string);
destructor Destroy; override; destructor Destroy; override;
procedure Clear; procedure Clear;
procedure RemoveFromParentAndFree;
procedure Assign(Source: TPersistent); override;
function FindByName(const AName: string; Recursive: boolean = false; function FindByName(const AName: string; Recursive: boolean = false;
WithRoot: boolean = true): TLazDockConfigNode; WithRoot: boolean = true): TLazDockConfigNode;
function GetScreenBounds: TRect; function GetScreenBounds: TRect;
@ -161,6 +166,8 @@ type
procedure ClearConfigs; procedure ClearConfigs;
function GetConfigWithDockerName(const DockerName: string function GetConfigWithDockerName(const DockerName: string
): TLazDockerConfig; ): TLazDockerConfig;
function CreateLayout(const DockerName: string; VisibleControl: TControl
): TLazDockConfigNode;
public public
property Manager: TAnchoredDockManager read FManager; property Manager: TAnchoredDockManager read FManager;
property DockerCount: Integer read GetDockerCount; property DockerCount: Integer read GetDockerCount;
@ -485,9 +492,12 @@ function TCustomLazControlDocker.GetLayoutFromControl: TLazDockConfigNode;
Result:=TLazDockConfigNode.Create(ParentNode,GetControlName(AControl)); Result:=TLazDockConfigNode.Create(ParentNode,GetControlName(AControl));
// The Type // The Type
if AControl is TLazDockSplitter then if AControl is TLazDockSplitter then begin
Result.FTheType:=ldcntSplitter if TLazDockSplitter(AControl).ResizeAnchor in [akLeft,akRight] then
else if AControl is TLazDockForm then Result.FTheType:=ldcntSplitterLeftRight
else
Result.FTheType:=ldcntSplitterUpDown;
end else if AControl is TLazDockForm then
Result.FTheType:=ldcntForm Result.FTheType:=ldcntForm
else if AControl is TLazDockPages then else if AControl is TLazDockPages then
Result.FTheType:=ldcntPages Result.FTheType:=ldcntPages
@ -737,40 +747,66 @@ procedure TCustomLazControlDocker.RestoreLayout;
|+---+#+-----------------+| |+---+#+-----------------+|
+-------------------------+ +-------------------------+
} }
type
TSiblingDistance = (
sdUnknown,
sdThreeSides, // sibling shares 3 sides
sdOneSide, // sibling shares 1 side
sdSplitterThreeSides,// splitter, then sibling shares 3 sides
sdSplitterOneSide // splitter, then sibling shares 1 side
);
var var
Layout: TLazDockerConfig; Layout: TLazDockerConfig;
SelfNode: TLazDockConfigNode; SelfNode: TLazDockConfigNode;
{ function FindControl(Node: TLazDockConfigNode): TControl;
begin
if Node.TheType=ldcntControl then
Result:=Manager.FindDockerByName(Node.Name)
else
Result:=nil;
end;
procedure RaiseLayoutInconsistency(Node: TLazDockConfigNode);
begin
raise Exception.Create('TCustomLazControlDocker.RestoreLayout'
+' DockerName="'+DockerName+'"'
+' Control='+DbgSName(Control)
+' Node='+Node.Name);
end;
procedure FindSibling(Node: TLazDockConfigNode; Side: TAnchorKind; procedure FindSibling(Node: TLazDockConfigNode; Side: TAnchorKind;
out Sibling: TControl; out SiblingNode: TLazDockConfigNode; out Sibling: TControl; out SiblingNode: TLazDockConfigNode;
out Distance: integer); out Distance: TSiblingDistance);
// find the nearest visible sibling control at Side
var var
SiblingName: string; SiblingName: string;
begin begin
Sibling:=nil; Sibling:=nil;
SiblingNode:=nil; SiblingNode:=nil;
Distance:=10000; Distance:=sdUnknown;
if Node=nil then exit; if Node=nil then exit;
SiblingName:=Node.Sides[Side]; SiblingName:=Node.Sides[Side];
if SiblingName<>'' then begin if SiblingName<>'' then begin
SiblingNode:=Layout.Root.FindByName(SiblingName,true,true); SiblingNode:=Layout.Root.FindByName(SiblingName,true);
Sibling:=FindControl(SiblingNode); if SiblingNode=nil then
RaiseLayoutInconsistency(Node);
case SiblingNode.TheType of
ldcntSplitterLeftRight,ldcntSplitterUpDown:
begin
FindSibling(SiblingNode,Side,Sibling,SiblingNode,Distance);
if Distance=sdOneSide then
Distance:=sdSplitterOneSide;
if Distance=sdThreeSides then
Distance:=sdSplitterThreeSides;
if Distance=sdSplitterThreeSides then begin
end;
exit;
end;
else
exit;
end;
// TODO // TODO
end; end;
end;} end;
var var
NewBounds: TRect; NewBounds: TRect;
begin begin
DebugLn(['TCustomLazControlDocker.RestoreLayout A ',DockerName]); DebugLn(['TCustomLazControlDocker.RestoreLayout A ',DockerName,' Control=',DbgSName(Control)]);
if (Manager=nil) or (Control=nil) then exit; if (Manager=nil) or (Control=nil) then exit;
Layout:=Manager.GetConfigWithDockerName(DockerName); Layout:=Manager.GetConfigWithDockerName(DockerName);
if (Layout=nil) or (Layout.Root=nil) then exit; if (Layout=nil) or (Layout.Root=nil) then exit;
@ -780,12 +816,20 @@ begin
if SelfNode.Parent<>nil then begin if SelfNode.Parent<>nil then begin
// this control was docked // this control was docked
if SelfNode.Parent.TheType=ldcntPage then begin case SelfNode.Parent.TheType of
// this control was docked as child of a page ldcntPage:
DebugLn(['TCustomLazControlDocker.RestoreLayout TODO restore page']); begin
end else begin // this control was docked as child of a page
// this control was docked on a form as child DebugLn(['TCustomLazControlDocker.RestoreLayout TODO restore page']);
//FindSibling(SelfNode,akLeft,LeftSibling,LeftSiblingDistance); end;
ldcntControl,ldcntForm:
begin
// this control was docked on a form as child
DebugLn(['TCustomLazControlDocker.RestoreLayout TODO restore splitter']);
//FindSibling(SelfNode,akLeft,LeftSibling,LeftSiblingDistance);
end;
else
exit;
end; end;
end; end;
@ -1067,6 +1111,69 @@ begin
Result:=nil; Result:=nil;
end; end;
function TCustomLazDockingManager.CreateLayout(const DockerName: string;
VisibleControl: TControl): TLazDockConfigNode;
// create a usable config
// This means: search a config, create a copy
// and remove all nodes without visible controls.
procedure RemoveEmptyNodes(Node: TLazDockConfigNode);
var
i: Integer;
Docker: TCustomLazControlDocker;
Child: TLazDockConfigNode;
begin
if Node=nil then exit;
// remove empty childs
for i:=Node.ChildCount-1 downto 0 do
RemoveEmptyNodes(Node.Childs[i]);
// remove unneeded splitters
for i:=Node.ChildCount-1 downto 0 do begin
Child:=Node.Childs[i];
// a splitter is needed, if it has none splitters on both sides
if Child.TheType=ldcntSplitterLeftRight then begin
end else if Child.TheType=ldcntSplitterUpDown then begin
end;
end;
case Node.TheType of
ldcntControl:
begin
Docker:=FindDockerByName(Node.Name);
// if the associated control does not exist or is not visible,
// then delete the node
if (Docker=nil)
or (Docker.Control=nil)
or ((not Docker.Control.Visible) and (Docker.Control<>VisibleControl))
then
Node.RemoveFromParentAndFree;
end;
ldcntForm,ldcntPage,ldcntPages:
// these are auto created parent nodes. If they have no childs: delete
if Node.ChildCount=0 then
Node.RemoveFromParentAndFree;
end;
end;
var
Config: TLazDockerConfig;
begin
Result:=nil;
Config:=GetConfigWithDockerName(DockerName);
if (Config=nil) or (Config.Root=nil)
or (Config.Root.FindByName(DockerName)=nil) then begin
// no good config found
exit;
end;
// create a copy of the config
Result:=TLazDockConfigNode.Create(nil);
Result.Assign(Config.Root);
// clean up
RemoveEmptyNodes(Result);
end;
{ TLazDockConfigNode } { TLazDockConfigNode }
function TLazDockConfigNode.GetSides(Side: TAnchorKind): string; function TLazDockConfigNode.GetSides(Side: TAnchorKind): string;
@ -1138,12 +1245,17 @@ begin
FChilds.Remove(ChildNode); FChilds.Remove(ChildNode);
end; end;
constructor TLazDockConfigNode.Create(ParentNode: TLazDockConfigNode);
begin
FTheType:=ldcntControl;
Parent:=ParentNode;
end;
constructor TLazDockConfigNode.Create(ParentNode: TLazDockConfigNode; constructor TLazDockConfigNode.Create(ParentNode: TLazDockConfigNode;
const AName: string); const AName: string);
begin begin
FName:=AName; FName:=AName;
FTheType:=ldcntControl; Create(ParentNode,AName);
Parent:=ParentNode;
end; end;
destructor TLazDockConfigNode.Destroy; destructor TLazDockConfigNode.Destroy;
@ -1163,6 +1275,39 @@ begin
FChilds.Clear; FChilds.Clear;
end; end;
procedure TLazDockConfigNode.RemoveFromParentAndFree;
begin
if Parent<>nil then Parent.FChilds.Remove(Self);
Free;
end;
procedure TLazDockConfigNode.Assign(Source: TPersistent);
var
Src: TLazDockConfigNode;
i: Integer;
SrcChild: TLazDockConfigNode;
NewChild: TLazDockConfigNode;
a: TAnchorKind;
begin
if Source is TLazDockConfigNode then begin
Clear;
Src:=TLazDockConfigNode(Source);
FBounds:=Src.FBounds;
FClientBounds:=Src.FClientBounds;
FName:=Src.FName;
for a:=Low(TAnchorKind) to High(TAnchorKind) do
FSides[a]:=Src.FSides[a];
FTheType:=Src.FTheType;
for i:=0 to Src.FChilds.Count-1 do begin
SrcChild:=Src.Childs[i];
NewChild:=TLazDockConfigNode.Create(Self);
NewChild.Assign(SrcChild);
FChilds.Add(NewChild);
end;
end else
inherited Assign(Source);
end;
function TLazDockConfigNode.FindByName(const AName: string; function TLazDockConfigNode.FindByName(const AName: string;
Recursive: boolean; WithRoot: boolean): TLazDockConfigNode; Recursive: boolean; WithRoot: boolean): TLazDockConfigNode;
var var
@ -1241,6 +1386,7 @@ var
SubPath: String; SubPath: String;
begin begin
Clear; Clear;
// Note: 'Name' is stored for information, but not restored on load
TheType:=LDConfigNodeTypeNameToType(Config.GetValue(Path+'Type/Value', TheType:=LDConfigNodeTypeNameToType(Config.GetValue(Path+'Type/Value',
LDConfigNodeTypeNames[ldcntControl])); LDConfigNodeTypeNames[ldcntControl]));
Config.GetValue(Path+'Bounds/',FBounds,Rect(0,0,0,0)); Config.GetValue(Path+'Bounds/',FBounds,Rect(0,0,0,0));

View File

@ -84,7 +84,7 @@ fi
if [ "x$Params" != "x" ]; then if [ "x$Params" != "x" ]; then
Params="$Params targets=i386-win32" Params="$Params targets=i386-win32"
echo "calling update_cross_fpc.sh $Params ..." echo "calling update_cross_fpc.sh $Params ..."
./update_cross_fpc.sh $Params ./update_cross_fpc.sh $Params || exit
fi fi

View File

@ -72,7 +72,7 @@ for p in $Params; do
BuildRoot=$(echo $p | sed -e 's#^buildroot=##') BuildRoot=$(echo $p | sed -e 's#^buildroot=##')
;; ;;
targets=*) targets=*)
Targets=$p Targets=$(echo $p | sed -e 's#^targets=##')
;; ;;
*) *)
echo "Unknown option: $p" echo "Unknown option: $p"
@ -182,22 +182,22 @@ fi
if [ $DownloadFPC = "yes" ]; then if [ $DownloadFPC = "yes" ]; then
cd $BuildRoot cd $BuildRoot
if [ -f fpc ]; then if [ -d fpc ]; then
cd fpc cd fpc
echo "SVN update for FPC ..." echo "SVN update for FPC ..."
svn cleanup svn cleanup
svn up svn up
else else
echo "SVN checkout for FPC ..." echo "SVN checkout for FPC 2.0 ..."
svn co http://svn.freepascal.org/svn/fpc/branches/fixes_2_0 fpc svn co http://svn.freepascal.org/svn/fpc/branches/fixes_2_0 fpc
fi fi
if [ -f install ]; then if [ -d install ]; then
cd install cd install
echo "SVN update for FPC install ..." echo "SVN update for FPC install ..."
svn cleanup svn cleanup
svn up svn up
else else
echo "SVN checkout for FPC install ..." echo "SVN checkout for FPC 2.0 install ..."
svn co http://svn.freepascal.org/svn/fpcbuild/branches/fixes_2_0/install install svn co http://svn.freepascal.org/svn/fpcbuild/branches/fixes_2_0/install install
fi fi
fi fi
@ -206,6 +206,10 @@ fi
# setup some variables # setup some variables
# retrieve the version information # retrieve the version information
VersionFile="$BuildRoot/fpc/compiler/version.pas" VersionFile="$BuildRoot/fpc/compiler/version.pas"
if [ ! -f $VersionFile ]; then
echo No FPC sources found. To download them call ./update_cross_fpc.sh DownloadFPC
exit
fi
CompilerVersion=`cat $VersionFile | grep ' *version_nr *=.*;' | sed -e 's/[^0-9]//g'` CompilerVersion=`cat $VersionFile | grep ' *version_nr *=.*;' | sed -e 's/[^0-9]//g'`
CompilerRelease=`cat $VersionFile | grep ' *release_nr *=.*;' | sed -e 's/[^0-9]//g'` CompilerRelease=`cat $VersionFile | grep ' *release_nr *=.*;' | sed -e 's/[^0-9]//g'`
CompilerPatch=`cat $VersionFile | grep ' *patch_nr *=.*;' | sed -e 's/[^0-9]//g'` CompilerPatch=`cat $VersionFile | grep ' *patch_nr *=.*;' | sed -e 's/[^0-9]//g'`
@ -215,7 +219,12 @@ CompilerVersionStr="$CompilerVersion.$CompilerRelease.$CompilerPatch"
# build binutils # build binutils
if [ $BuildBinutils = "yes" ]; then if [ $BuildBinutils = "yes" ]; then
# create custom version of buildcrossbinutils # create custom version of buildcrossbinutils
echo "building cross binutils ..." echo "building cross binutils for targets:"
echo " WIN=$TARGETS_WIN"
echo " I386=$TARGETS_I386"
echo " POWERPC=$TARGETS_POWERPC"
echo " SPARC=$TARGETS_SPARC"
echo " M68K=$TARGETS_M68K"
cd $BuildRoot/install/cross/ cd $BuildRoot/install/cross/
cat buildcrossbinutils | \ cat buildcrossbinutils | \
sed -e 's#^BASE=.*$#BASE='"$BuildRoot"'/binutils#' \ sed -e 's#^BASE=.*$#BASE='"$BuildRoot"'/binutils#' \
@ -233,10 +242,18 @@ if [ $BuildBinutils = "yes" ]; then
#debugging: head -n 50 buildcrossbinutils.sh #debugging: head -n 50 buildcrossbinutils.sh
# build the cross binutils # build the cross binutils
echo "HINT: when something goes wrong see the log files in $BuildRoot/bintuils/logs/" echo "HINT: when something goes wrong see the log files in $BuildRoot/binutils/logs/"
rm -rf $BuildRoot/binutils rm -rf $BuildRoot/binutils
sh buildcrossbinutils.sh Command=$BuildRoot/install/cross/buildcrossbinutils.sh
echo "calling $Command ..."
Result=$(sh buildcrossbinutils.sh)
FailResult=$(echo "$Result" | grep -i failes || true)
if [ -n "$FailResult" ]; then
echo $Result
echo "HINT: see the log files in $BuildRoot/binutils/logs/"
exit -1
fi
# link binaries into the bin directory, so that FPC can find them # link binaries into the bin directory, so that FPC can find them
mkdir -p $BinDir mkdir -p $BinDir
for Target in $Targets; do for Target in $Targets; do