IDE, FPDoc-editor: added feature to edit topics

git-svn-id: trunk@22629 -
This commit is contained in:
martin 2009-11-16 19:51:10 +00:00
parent 25bbbfc1e6
commit fe9f11aa36
4 changed files with 492 additions and 158 deletions

View File

@ -100,6 +100,10 @@ type
function GetPackageName: string; function GetPackageName: string;
function GetModuleNode: TDOMNode; // the unit function GetModuleNode: TDOMNode; // the unit
function GetModuleName: string; function GetModuleName: string;
function GetModuleTopicCount: Integer;
function GetModuleTopicName(Index: Integer): String;
function GetModuleTopic(Name: String): TDOMNode;
function CreateModuleTopic(Name: String): TDOMNode;
function GetFirstElement: TDOMNode; function GetFirstElement: TDOMNode;
function GetElementWithName(const ElementName: string; function GetElementWithName(const ElementName: string;
CreateIfNotExists: boolean = false): TDOMNode; CreateIfNotExists: boolean = false): TDOMNode;
@ -475,6 +479,68 @@ begin
Result:=''; Result:='';
end; end;
function TLazFPDocFile.GetModuleTopicCount: Integer;
var
n: TDOMNode;
begin
Result := 0;
n := GetModuleNode;
if n = nil then exit;
n := n.FirstChild;
while (n <> nil) do begin
if (n.NodeName = 'topic') then inc(result);
n := n.NextSibling;
end;
end;
function TLazFPDocFile.GetModuleTopicName(Index: Integer): String;
var
n: TDOMNode;
begin
Result := '';
n := GetModuleNode;
if n = nil then exit;
n := n.FirstChild;
while (n <> nil) and (Index >= 0) do begin
if (n.NodeName = 'topic') and (n is TDomElement) then begin
if Index = 0 then begin
Result := TDomElement(n).GetAttribute('name');
exit;
end;
dec(Index);
end;
n := n.NextSibling;
end;
end;
function TLazFPDocFile.GetModuleTopic(Name: String): TDOMNode;
begin
Result := GetModuleNode;
if Result = nil then exit;
Result := Result.FirstChild;
while (Result <> nil) do begin
if (Result.NodeName = 'topic') and (Result is TDomElement) and
(SysUtils.CompareText(TDomElement(Result).GetAttribute('name'), Name) = 0)
then
exit;
Result := Result.NextSibling;
end;
end;
function TLazFPDocFile.CreateModuleTopic(Name: String): TDOMNode;
var
ModuleNode: TDOMNode;
begin
ModuleNode := GetModuleNode;
if ModuleNode = nil then exit;
Result:=Doc.CreateElement('topic');
DocChanging;
TDOMElement(Result).SetAttribute('name', Name);
ModuleNode.AppendChild(Result);
DocChanged;
end;
function TLazFPDocFile.GetFirstElement: TDOMNode; function TLazFPDocFile.GetFirstElement: TDOMNode;
begin begin
//get first module node //get first module node

View File

@ -1,9 +1,8 @@
object FPDocEditor: TFPDocEditor object FPDocEditor: TFPDocEditor
Left = 514 Left = 2054
Height = 126 Height = 126
Top = 761 Top = 761
Width = 753 Width = 753
ActiveControl = ExampleEdit
Caption = 'FPDoc editor' Caption = 'FPDoc editor'
ClientHeight = 126 ClientHeight = 126
ClientWidth = 753 ClientWidth = 753
@ -17,24 +16,24 @@ object FPDocEditor: TFPDocEditor
Height = 126 Height = 126
Top = 0 Top = 0
Width = 690 Width = 690
ActivePage = ShortTabSheet ActivePage = TopicSheet
Align = alClient Align = alClient
TabIndex = 0 TabIndex = 6
TabOrder = 0 TabOrder = 0
TabPosition = tpBottom TabPosition = tpBottom
OnChange = PageControlChange OnChange = PageControlChange
OnPageChanged = PageControlChange OnPageChanged = PageControlChange
object ShortTabSheet: TTabSheet object ShortTabSheet: TTabSheet
Caption = 'ShortTabSheet' Caption = 'ShortTabSheet'
ClientHeight = 100 ClientHeight = 98
ClientWidth = 682 ClientWidth = 682
object LinkLabel: TLabel object LinkLabel: TLabel
AnchorSideTop.Control = LinkEdit AnchorSideTop.Control = LinkEdit
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 6 Left = 6
Height = 14 Height = 16
Top = 26 Top = 28
Width = 44 Width = 51
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'LinkLabel' Caption = 'LinkLabel'
ParentColor = False ParentColor = False
@ -44,9 +43,9 @@ object FPDocEditor: TFPDocEditor
AnchorSideTop.Control = ShortEdit AnchorSideTop.Control = ShortEdit
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 6 Left = 6
Height = 14 Height = 16
Top = 3 Top = 3
Width = 52 Width = 57
BorderSpacing.Left = 6 BorderSpacing.Left = 6
Caption = 'ShortLabel' Caption = 'ShortLabel'
ParentColor = False ParentColor = False
@ -56,10 +55,10 @@ object FPDocEditor: TFPDocEditor
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = ShortTabSheet AnchorSideRight.Control = ShortTabSheet
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 64 Left = 69
Height = 21 Height = 23
Top = 0 Top = 0
Width = 616 Width = 611
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
AutoSelect = False AutoSelect = False
BorderSpacing.Left = 6 BorderSpacing.Left = 6
@ -73,9 +72,9 @@ object FPDocEditor: TFPDocEditor
AnchorSideTop.Control = LinkEdit AnchorSideTop.Control = LinkEdit
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 6 Left = 6
Height = 23 Height = 25
Top = 50 Top = 54
Width = 91 Width = 96
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'CreateButton' Caption = 'CreateButton'
@ -89,10 +88,10 @@ object FPDocEditor: TFPDocEditor
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ShortTabSheet AnchorSideRight.Control = ShortTabSheet
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 56 Left = 63
Height = 21 Height = 23
Top = 23 Top = 25
Width = 624 Width = 617
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
AutoSelect = False AutoSelect = False
BorderSpacing.Left = 6 BorderSpacing.Left = 6
@ -106,11 +105,11 @@ object FPDocEditor: TFPDocEditor
end end
object InheritedTabSheet: TTabSheet object InheritedTabSheet: TTabSheet
Caption = 'InheritedTabSheet' Caption = 'InheritedTabSheet'
ClientHeight = 100 ClientHeight = 98
ClientWidth = 682 ClientWidth = 682
object InheritedShortLabel: TLabel object InheritedShortLabel: TLabel
Left = 0 Left = 0
Height = 18 Height = 16
Top = 2 Top = 2
Width = 682 Width = 682
Align = alTop Align = alTop
@ -125,8 +124,8 @@ object FPDocEditor: TFPDocEditor
AnchorSideRight.Control = InheritedTabSheet AnchorSideRight.Control = InheritedTabSheet
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 0 Left = 0
Height = 27 Height = 23
Top = 22 Top = 20
Width = 682 Width = 682
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
@ -138,9 +137,9 @@ object FPDocEditor: TFPDocEditor
AnchorSideTop.Control = InheritedShortEdit AnchorSideTop.Control = InheritedShortEdit
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 0 Left = 0
Height = 29 Height = 25
Top = 55 Top = 49
Width = 158 Width = 153
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'MoveToInheritedButton' Caption = 'MoveToInheritedButton'
@ -152,10 +151,10 @@ object FPDocEditor: TFPDocEditor
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = MoveToInheritedButton AnchorSideTop.Control = MoveToInheritedButton
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 168 Left = 163
Height = 29 Height = 25
Top = 55 Top = 49
Width = 175 Width = 165
AutoSize = True AutoSize = True
BorderSpacing.Left = 10 BorderSpacing.Left = 10
Caption = 'CopyFromInheritedButton' Caption = 'CopyFromInheritedButton'
@ -166,10 +165,10 @@ object FPDocEditor: TFPDocEditor
AnchorSideLeft.Control = CopyFromInheritedButton AnchorSideLeft.Control = CopyFromInheritedButton
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CopyFromInheritedButton AnchorSideTop.Control = CopyFromInheritedButton
Left = 353 Left = 338
Height = 29 Height = 25
Top = 55 Top = 49
Width = 174 Width = 167
AutoSize = True AutoSize = True
BorderSpacing.Left = 10 BorderSpacing.Left = 10
Caption = 'AddLinkToInheritedButton' Caption = 'AddLinkToInheritedButton'
@ -179,11 +178,11 @@ object FPDocEditor: TFPDocEditor
end end
object DescrTabSheet: TTabSheet object DescrTabSheet: TTabSheet
Caption = 'DescrTabSheet' Caption = 'DescrTabSheet'
ClientHeight = 100 ClientHeight = 98
ClientWidth = 682 ClientWidth = 682
object DescrMemo: TMemo object DescrMemo: TMemo
Left = 0 Left = 0
Height = 96 Height = 94
Top = 0 Top = 0
Width = 680 Width = 680
Align = alClient Align = alClient
@ -199,11 +198,11 @@ object FPDocEditor: TFPDocEditor
end end
object ErrorsTabSheet: TTabSheet object ErrorsTabSheet: TTabSheet
Caption = 'ErrorsTabSheet' Caption = 'ErrorsTabSheet'
ClientHeight = 100 ClientHeight = 98
ClientWidth = 682 ClientWidth = 682
object ErrorsMemo: TMemo object ErrorsMemo: TMemo
Left = 0 Left = 0
Height = 96 Height = 94
Top = 0 Top = 0
Width = 680 Width = 680
Align = alClient Align = alClient
@ -219,11 +218,11 @@ object FPDocEditor: TFPDocEditor
end end
object SeeAlsoTabSheet: TTabSheet object SeeAlsoTabSheet: TTabSheet
Caption = 'SeeAlsoTabSheet' Caption = 'SeeAlsoTabSheet'
ClientHeight = 100 ClientHeight = 98
ClientWidth = 682 ClientWidth = 682
object SeeAlsoMemo: TMemo object SeeAlsoMemo: TMemo
Left = 0 Left = 0
Height = 100 Height = 98
Top = 0 Top = 0
Width = 682 Width = 682
Align = alClient Align = alClient
@ -237,11 +236,11 @@ object FPDocEditor: TFPDocEditor
end end
object ExampleTabSheet: TTabSheet object ExampleTabSheet: TTabSheet
Caption = 'ExampleTabSheet' Caption = 'ExampleTabSheet'
ClientHeight = 100 ClientHeight = 98
ClientWidth = 682 ClientWidth = 682
object ExampleEdit: TEdit object ExampleEdit: TEdit
Left = 0 Left = 0
Height = 21 Height = 23
Top = 0 Top = 0
Width = 680 Width = 680
Align = alTop Align = alTop
@ -257,10 +256,10 @@ object FPDocEditor: TFPDocEditor
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ExampleTabSheet AnchorSideRight.Control = ExampleTabSheet
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 543 Left = 532
Height = 23 Height = 25
Top = 27 Top = 29
Width = 133 Width = 144
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
@ -269,6 +268,101 @@ object FPDocEditor: TFPDocEditor
TabOrder = 1 TabOrder = 1
end end
end end
object TopicSheet: TTabSheet
Caption = 'Topics'
ClientHeight = 98
ClientWidth = 682
object Panel1: TPanel
Left = 512
Height = 98
Top = 0
Width = 170
Align = alRight
BorderSpacing.Left = 5
BevelOuter = bvNone
ClientHeight = 98
ClientWidth = 170
TabOrder = 0
object Panel2: TPanel
Left = 0
Height = 25
Top = 0
Width = 170
Align = alTop
AutoSize = True
BevelOuter = bvNone
ClientHeight = 25
ClientWidth = 170
TabOrder = 0
object NewTopicButton: TButton
Left = 120
Height = 25
Top = 0
Width = 50
Align = alRight
AutoSize = True
Caption = 'New'
OnClick = NewTopicButtonClick
TabOrder = 0
end
object NewTopicNameEdit: TEdit
Left = 0
Height = 25
Top = 0
Width = 115
Align = alClient
BorderSpacing.Right = 5
OnEnter = TopicControlEnter
TabOrder = 1
end
end
object TopicListBox: TListBox
Left = 0
Height = 68
Top = 30
Width = 170
Align = alClient
BorderSpacing.Top = 5
ItemHeight = 0
OnClick = TopicListBoxClick
OnEnter = TopicControlEnter
TabOrder = 1
end
end
object Panel3: TPanel
Left = 0
Height = 98
Top = 0
Width = 507
Align = alClient
BevelOuter = bvNone
ClientHeight = 98
ClientWidth = 507
TabOrder = 1
object TopicShort: TEdit
Left = 0
Height = 23
Top = 0
Width = 507
Align = alTop
AutoSelect = False
OnChange = TopicDescrChange
OnEnter = TopicControlEnter
TabOrder = 0
end
object TopicDescr: TMemo
Left = 0
Height = 70
Top = 28
Width = 507
Align = alClient
BorderSpacing.Top = 5
OnChange = TopicDescrChange
OnEnter = TopicControlEnter
TabOrder = 1
end
end
end
end end
object LeftBtnPanel: TPanel object LeftBtnPanel: TPanel
Left = 0 Left = 0

View File

@ -1,112 +1,135 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TFPDocEditor','FORMDATA',[ LazarusResources.Add('TFPDocEditor','FORMDATA',[
'TPF0'#12'TFPDocEditor'#11'FPDocEditor'#4'Left'#3#2#2#6'Height'#2'~'#3'Top'#3 'TPF0'#12'TFPDocEditor'#11'FPDocEditor'#4'Left'#3#6#8#6'Height'#2'~'#3'Top'#3
+#249#2#5'Width'#3#241#2#13'ActiveControl'#7#11'ExampleEdit'#7'Caption'#6#12 +#249#2#5'Width'#3#241#2#7'Caption'#6#12'FPDoc editor'#12'ClientHeight'#2'~'
+'FPDoc editor'#12'ClientHeight'#2'~'#11'ClientWidth'#3#241#2#10'KeyPreview'#9 +#11'ClientWidth'#3#241#2#10'KeyPreview'#9#8'OnCreate'#7#10'FormCreate'#9'OnD'
+#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#9'OnKeyDown'#7 +'estroy'#7#11'FormDestroy'#9'OnKeyDown'#7#11'FormKeyDown'#10'LCLVersion'#6#6
+#11'FormKeyDown'#10'LCLVersion'#6#6'0.9.29'#0#12'TPageControl'#11'PageContro' +'0.9.29'#0#12'TPageControl'#11'PageControl'#4'Left'#2'?'#6'Height'#2'~'#3'To'
+'l'#4'Left'#2'?'#6'Height'#2'~'#3'Top'#2#0#5'Width'#3#178#2#10'ActivePage'#7 +'p'#2#0#5'Width'#3#178#2#10'ActivePage'#7#10'TopicSheet'#5'Align'#7#8'alClie'
+#13'ShortTabSheet'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#0#11 +'nt'#8'TabIndex'#2#6#8'TabOrder'#2#0#11'TabPosition'#7#8'tpBottom'#8'OnChang'
+'TabPosition'#7#8'tpBottom'#8'OnChange'#7#17'PageControlChange'#13'OnPageCha' +'e'#7#17'PageControlChange'#13'OnPageChanged'#7#17'PageControlChange'#0#9'TT'
+'nged'#7#17'PageControlChange'#0#9'TTabSheet'#13'ShortTabSheet'#7'Caption'#6 +'abSheet'#13'ShortTabSheet'#7'Caption'#6#13'ShortTabSheet'#12'ClientHeight'#2
+#13'ShortTabSheet'#12'ClientHeight'#2'd'#11'ClientWidth'#3#170#2#0#6'TLabel' +'b'#11'ClientWidth'#3#170#2#0#6'TLabel'#9'LinkLabel'#21'AnchorSideTop.Contro'
+#9'LinkLabel'#21'AnchorSideTop.Control'#7#8'LinkEdit'#18'AnchorSideTop.Side' +'l'#7#8'LinkEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'
+#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#14#3'Top'#2#26#5'Width'#2','#17'Bord' +#2#16#3'Top'#2#28#5'Width'#2'3'#17'BorderSpacing.Top'#2#6#7'Caption'#6#9'Lin'
+'erSpacing.Top'#2#6#7'Caption'#6#9'LinkLabel'#11'ParentColor'#8#0#0#6'TLabel' +'kLabel'#11'ParentColor'#8#0#0#6'TLabel'#10'ShortLabel'#22'AnchorSideLeft.Co'
+#10'ShortLabel'#22'AnchorSideLeft.Control'#7#13'ShortTabSheet'#21'AnchorSide' +'ntrol'#7#13'ShortTabSheet'#21'AnchorSideTop.Control'#7#9'ShortEdit'#18'Anch'
+'Top.Control'#7#9'ShortEdit'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#2 +'orSideTop.Side'#7#9'asrCenter'#4'Left'#2#6#6'Height'#2#16#3'Top'#2#3#5'Widt'
+#6#6'Height'#2#14#3'Top'#2#3#5'Width'#2'4'#18'BorderSpacing.Left'#2#6#7'Capt' +'h'#2'9'#18'BorderSpacing.Left'#2#6#7'Caption'#6#10'ShortLabel'#11'ParentCol'
+'ion'#6#10'ShortLabel'#11'ParentColor'#8#0#0#5'TEdit'#9'ShortEdit'#22'Anchor' +'or'#8#0#0#5'TEdit'#9'ShortEdit'#22'AnchorSideLeft.Control'#7#10'ShortLabel'
+'SideLeft.Control'#7#10'ShortLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#23 +#19'AnchorSideLeft.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#13'Sho'
+'AnchorSideRight.Control'#7#13'ShortTabSheet'#20'AnchorSideRight.Side'#7#9'a' +'rtTabSheet'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2'E'#6'Height'#2
+'srBottom'#4'Left'#2'@'#6'Height'#2#21#3'Top'#2#0#5'Width'#3'h'#2#7'Anchors' +#23#3'Top'#2#0#5'Width'#3'c'#2#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0
+#11#5'akTop'#6'akLeft'#7'akRight'#0#10'AutoSelect'#8#18'BorderSpacing.Left'#2 +#10'AutoSelect'#8#18'BorderSpacing.Left'#2#6#19'BorderSpacing.Right'#2#2#8'O'
+#6#19'BorderSpacing.Right'#2#2#8'OnChange'#7#15'ShortEditChange'#13'OnEditin' +'nChange'#7#15'ShortEditChange'#13'OnEditingDone'#7#20'ShortEditEditingDone'
+'gDone'#7#20'ShortEditEditingDone'#8'TabOrder'#2#0#4'Text'#6#9'ShortEdit'#0#0 +#8'TabOrder'#2#0#4'Text'#6#9'ShortEdit'#0#0#7'TButton'#12'CreateButton'#21'A'
+#7'TButton'#12'CreateButton'#21'AnchorSideTop.Control'#7#8'LinkEdit'#18'Anch' +'nchorSideTop.Control'#7#8'LinkEdit'#18'AnchorSideTop.Side'#7#9'asrBottom'#4
+'orSideTop.Side'#7#9'asrBottom'#4'Left'#2#6#6'Height'#2#23#3'Top'#2'2'#5'Wid' +'Left'#2#6#6'Height'#2#25#3'Top'#2'6'#5'Width'#2'`'#8'AutoSize'#9#20'BorderS'
+'th'#2'['#8'AutoSize'#9#20'BorderSpacing.Around'#2#6#7'Caption'#6#12'CreateB' +'pacing.Around'#2#6#7'Caption'#6#12'CreateButton'#7'OnClick'#7#17'CreateButt'
+'utton'#7'OnClick'#7#17'CreateButtonClick'#8'TabOrder'#2#1#0#0#5'TEdit'#8'Li' +'onClick'#8'TabOrder'#2#1#0#0#5'TEdit'#8'LinkEdit'#22'AnchorSideLeft.Control'
+'nkEdit'#22'AnchorSideLeft.Control'#7#9'LinkLabel'#19'AnchorSideLeft.Side'#7 +#7#9'LinkLabel'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Cont'
+#9'asrBottom'#21'AnchorSideTop.Control'#7#9'ShortEdit'#18'AnchorSideTop.Side' +'rol'#7#9'ShortEdit'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRigh'
+#7#9'asrBottom'#23'AnchorSideRight.Control'#7#13'ShortTabSheet'#20'AnchorSid' +'t.Control'#7#13'ShortTabSheet'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Le'
+'eRight.Side'#7#9'asrBottom'#4'Left'#2'8'#6'Height'#2#21#3'Top'#2#23#5'Width' +'ft'#2'?'#6'Height'#2#23#3'Top'#2#25#5'Width'#3'i'#2#7'Anchors'#11#5'akTop'#6
+#3'p'#2#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#10'AutoSelect'#8#18'Bo' +'akLeft'#7'akRight'#0#10'AutoSelect'#8#18'BorderSpacing.Left'#2#6#17'BorderS'
+'rderSpacing.Left'#2#6#17'BorderSpacing.Top'#2#2#19'BorderSpacing.Right'#2#2 +'pacing.Top'#2#2#19'BorderSpacing.Right'#2#2#8'OnChange'#7#14'LinkEditChange'
+#8'OnChange'#7#14'LinkEditChange'#13'OnEditingDone'#7#19'LinkEditEditingDone' +#13'OnEditingDone'#7#19'LinkEditEditingDone'#8'TabOrder'#2#2#4'Text'#6#8'Lin'
+#8'TabOrder'#2#2#4'Text'#6#8'LinkEdit'#0#0#0#9'TTabSheet'#17'InheritedTabShe' +'kEdit'#0#0#0#9'TTabSheet'#17'InheritedTabSheet'#7'Caption'#6#17'InheritedTa'
+'et'#7'Caption'#6#17'InheritedTabSheet'#12'ClientHeight'#2'd'#11'ClientWidth' +'bSheet'#12'ClientHeight'#2'b'#11'ClientWidth'#3#170#2#0#6'TLabel'#19'Inheri'
+#3#170#2#0#6'TLabel'#19'InheritedShortLabel'#4'Left'#2#0#6'Height'#2#18#3'To' +'tedShortLabel'#4'Left'#2#0#6'Height'#2#16#3'Top'#2#2#5'Width'#3#170#2#5'Ali'
+'p'#2#2#5'Width'#3#170#2#5'Align'#7#5'alTop'#17'BorderSpacing.Top'#2#2#7'Cap' +'gn'#7#5'alTop'#17'BorderSpacing.Top'#2#2#7'Caption'#6#19'InheritedShortLabe'
+'tion'#6#19'InheritedShortLabel'#11'ParentColor'#8#0#0#5'TEdit'#18'Inherited' +'l'#11'ParentColor'#8#0#0#5'TEdit'#18'InheritedShortEdit'#22'AnchorSideLeft.'
+'ShortEdit'#22'AnchorSideLeft.Control'#7#17'InheritedTabSheet'#21'AnchorSide' +'Control'#7#17'InheritedTabSheet'#21'AnchorSideTop.Control'#7#19'InheritedSh'
+'Top.Control'#7#19'InheritedShortLabel'#18'AnchorSideTop.Side'#7#9'asrBottom' +'ortLabel'#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'
+#23'AnchorSideRight.Control'#7#17'InheritedTabSheet'#20'AnchorSideRight.Side' +#7#17'InheritedTabSheet'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#2#0
+#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#27#3'Top'#2#22#5'Width'#3#170#2#7'An' +#6'Height'#2#23#3'Top'#2#20#5'Width'#3#170#2#7'Anchors'#11#5'akTop'#6'akLeft'
+'chors'#11#5'akTop'#6'akLeft'#7'akRight'#0#17'BorderSpacing.Top'#2#2#8'ReadO' +#7'akRight'#0#17'BorderSpacing.Top'#2#2#8'ReadOnly'#9#8'TabOrder'#2#0#4'Text'
+'nly'#9#8'TabOrder'#2#0#4'Text'#6#18'InheritedShortEdit'#0#0#7'TButton'#21'M' +#6#18'InheritedShortEdit'#0#0#7'TButton'#21'MoveToInheritedButton'#21'Anchor'
+'oveToInheritedButton'#21'AnchorSideTop.Control'#7#18'InheritedShortEdit'#18 +'SideTop.Control'#7#18'InheritedShortEdit'#18'AnchorSideTop.Side'#7#9'asrBot'
+'AnchorSideTop.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#29#3'Top'#2'7'#5 +'tom'#4'Left'#2#0#6'Height'#2#25#3'Top'#2'1'#5'Width'#3#153#0#8'AutoSize'#9
+'Width'#3#158#0#8'AutoSize'#9#20'BorderSpacing.Around'#2#6#7'Caption'#6#21'M' +#20'BorderSpacing.Around'#2#6#7'Caption'#6#21'MoveToInheritedButton'#7'OnCli'
+'oveToInheritedButton'#7'OnClick'#7#26'MoveToInheritedButtonClick'#8'TabOrde' +'ck'#7#26'MoveToInheritedButtonClick'#8'TabOrder'#2#1#0#0#7'TButton'#23'Copy'
+'r'#2#1#0#0#7'TButton'#23'CopyFromInheritedButton'#22'AnchorSideLeft.Control' +'FromInheritedButton'#22'AnchorSideLeft.Control'#7#21'MoveToInheritedButton'
+#7#21'MoveToInheritedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'Ancho' +#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#21'MoveT'
+'rSideTop.Control'#7#21'MoveToInheritedButton'#18'AnchorSideTop.Side'#7#9'as' +'oInheritedButton'#18'AnchorSideTop.Side'#7#9'asrCenter'#4'Left'#3#163#0#6'H'
+'rCenter'#4'Left'#3#168#0#6'Height'#2#29#3'Top'#2'7'#5'Width'#3#175#0#8'Auto' +'eight'#2#25#3'Top'#2'1'#5'Width'#3#165#0#8'AutoSize'#9#18'BorderSpacing.Lef'
+'Size'#9#18'BorderSpacing.Left'#2#10#7'Caption'#6#23'CopyFromInheritedButton' +'t'#2#10#7'Caption'#6#23'CopyFromInheritedButton'#7'OnClick'#7#28'CopyFromIn'
+#7'OnClick'#7#28'CopyFromInheritedButtonClick'#8'TabOrder'#2#2#0#0#7'TButton' +'heritedButtonClick'#8'TabOrder'#2#2#0#0#7'TButton'#24'AddLinkToInheritedBut'
+#24'AddLinkToInheritedButton'#22'AnchorSideLeft.Control'#7#23'CopyFromInheri' +'ton'#22'AnchorSideLeft.Control'#7#23'CopyFromInheritedButton'#19'AnchorSide'
+'tedButton'#19'AnchorSideLeft.Side'#7#9'asrBottom'#21'AnchorSideTop.Control' +'Left.Side'#7#9'asrBottom'#21'AnchorSideTop.Control'#7#23'CopyFromInheritedB'
+#7#23'CopyFromInheritedButton'#4'Left'#3'a'#1#6'Height'#2#29#3'Top'#2'7'#5'W' +'utton'#4'Left'#3'R'#1#6'Height'#2#25#3'Top'#2'1'#5'Width'#3#167#0#8'AutoSiz'
+'idth'#3#174#0#8'AutoSize'#9#18'BorderSpacing.Left'#2#10#7'Caption'#6#24'Add' +'e'#9#18'BorderSpacing.Left'#2#10#7'Caption'#6#24'AddLinkToInheritedButton'#7
+'LinkToInheritedButton'#7'OnClick'#7#29'AddLinkToInheritedButtonClick'#8'Tab' +'OnClick'#7#29'AddLinkToInheritedButtonClick'#8'TabOrder'#2#3#0#0#0#9'TTabSh'
+'Order'#2#3#0#0#0#9'TTabSheet'#13'DescrTabSheet'#7'Caption'#6#13'DescrTabShe' +'eet'#13'DescrTabSheet'#7'Caption'#6#13'DescrTabSheet'#12'ClientHeight'#2'b'
+'et'#12'ClientHeight'#2'd'#11'ClientWidth'#3#170#2#0#5'TMemo'#9'DescrMemo'#4 +#11'ClientWidth'#3#170#2#0#5'TMemo'#9'DescrMemo'#4'Left'#2#0#6'Height'#2'^'#3
+'Left'#2#0#6'Height'#2'`'#3'Top'#2#0#5'Width'#3#168#2#5'Align'#7#8'alClient' +'Top'#2#0#5'Width'#3#168#2#5'Align'#7#8'alClient'#19'BorderSpacing.Right'#2#2
+#19'BorderSpacing.Right'#2#2#20'BorderSpacing.Bottom'#2#4#13'Lines.Strings'#1 +#20'BorderSpacing.Bottom'#2#4#13'Lines.Strings'#1#6#9'DescrMemo'#0#8'OnChang'
,#6#9'DescrMemo'#0#8'OnChange'#7#15'DescrMemoChange'#13'OnEditingDone'#7#20'D' ,'e'#7#15'DescrMemoChange'#13'OnEditingDone'#7#20'DescrMemoEditingDone'#8'Tab'
+'escrMemoEditingDone'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#14'ErrorsTabSheet'#7 +'Order'#2#0#0#0#0#9'TTabSheet'#14'ErrorsTabSheet'#7'Caption'#6#14'ErrorsTabS'
+'Caption'#6#14'ErrorsTabSheet'#12'ClientHeight'#2'd'#11'ClientWidth'#3#170#2 +'heet'#12'ClientHeight'#2'b'#11'ClientWidth'#3#170#2#0#5'TMemo'#10'ErrorsMem'
+#0#5'TMemo'#10'ErrorsMemo'#4'Left'#2#0#6'Height'#2'`'#3'Top'#2#0#5'Width'#3 +'o'#4'Left'#2#0#6'Height'#2'^'#3'Top'#2#0#5'Width'#3#168#2#5'Align'#7#8'alCl'
+#168#2#5'Align'#7#8'alClient'#19'BorderSpacing.Right'#2#2#20'BorderSpacing.B' +'ient'#19'BorderSpacing.Right'#2#2#20'BorderSpacing.Bottom'#2#4#13'Lines.Str'
+'ottom'#2#4#13'Lines.Strings'#1#6#10'ErrorsMemo'#0#8'OnChange'#7#16'ErrorsMe' +'ings'#1#6#10'ErrorsMemo'#0#8'OnChange'#7#16'ErrorsMemoChange'#13'OnEditingD'
+'moChange'#13'OnEditingDone'#7#21'ErrorsMemoEditingDone'#8'TabOrder'#2#0#0#0 +'one'#7#21'ErrorsMemoEditingDone'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#15'SeeA'
+#0#9'TTabSheet'#15'SeeAlsoTabSheet'#7'Caption'#6#15'SeeAlsoTabSheet'#12'Clie' +'lsoTabSheet'#7'Caption'#6#15'SeeAlsoTabSheet'#12'ClientHeight'#2'b'#11'Clie'
+'ntHeight'#2'd'#11'ClientWidth'#3#170#2#0#5'TMemo'#11'SeeAlsoMemo'#4'Left'#2 +'ntWidth'#3#170#2#0#5'TMemo'#11'SeeAlsoMemo'#4'Left'#2#0#6'Height'#2'b'#3'To'
+#0#6'Height'#2'd'#3'Top'#2#0#5'Width'#3#170#2#5'Align'#7#8'alClient'#13'Line' +'p'#2#0#5'Width'#3#170#2#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#11'See'
+'s.Strings'#1#6#11'SeeAlsoMemo'#0#8'OnChange'#7#17'SeeAlsoMemoChange'#13'OnE' +'AlsoMemo'#0#8'OnChange'#7#17'SeeAlsoMemoChange'#13'OnEditingDone'#7#22'SeeA'
+'ditingDone'#7#22'SeeAlsoMemoEditingDone'#8'TabOrder'#2#0#0#0#0#9'TTabSheet' +'lsoMemoEditingDone'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#15'ExampleTabSheet'#7
+#15'ExampleTabSheet'#7'Caption'#6#15'ExampleTabSheet'#12'ClientHeight'#2'd' +'Caption'#6#15'ExampleTabSheet'#12'ClientHeight'#2'b'#11'ClientWidth'#3#170#2
+#11'ClientWidth'#3#170#2#0#5'TEdit'#11'ExampleEdit'#4'Left'#2#0#6'Height'#2 +#0#5'TEdit'#11'ExampleEdit'#4'Left'#2#0#6'Height'#2#23#3'Top'#2#0#5'Width'#3
+#21#3'Top'#2#0#5'Width'#3#168#2#5'Align'#7#5'alTop'#10'AutoSelect'#8#19'Bord' +#168#2#5'Align'#7#5'alTop'#10'AutoSelect'#8#19'BorderSpacing.Right'#2#2#8'On'
+'erSpacing.Right'#2#2#8'OnChange'#7#17'ExampleEditChange'#13'OnEditingDone'#7 +'Change'#7#17'ExampleEditChange'#13'OnEditingDone'#7#22'ExampleEditEditingDo'
+#22'ExampleEditEditingDone'#8'TabOrder'#2#0#4'Text'#6#11'ExampleEdit'#0#0#7 +'ne'#8'TabOrder'#2#0#4'Text'#6#11'ExampleEdit'#0#0#7'TButton'#19'BrowseExamp'
+'TButton'#19'BrowseExampleButton'#21'AnchorSideTop.Control'#7#11'ExampleEdit' +'leButton'#21'AnchorSideTop.Control'#7#11'ExampleEdit'#18'AnchorSideTop.Side'
+#18'AnchorSideTop.Side'#7#9'asrBottom'#23'AnchorSideRight.Control'#7#15'Exam' +#7#9'asrBottom'#23'AnchorSideRight.Control'#7#15'ExampleTabSheet'#20'AnchorS'
+'pleTabSheet'#20'AnchorSideRight.Side'#7#9'asrBottom'#4'Left'#3#31#2#6'Heigh' +'ideRight.Side'#7#9'asrBottom'#4'Left'#3#20#2#6'Height'#2#25#3'Top'#2#29#5'W'
+'t'#2#23#3'Top'#2#27#5'Width'#3#133#0#7'Anchors'#11#5'akTop'#7'akRight'#0#8 +'idth'#3#144#0#7'Anchors'#11#5'akTop'#7'akRight'#0#8'AutoSize'#9#20'BorderSp'
+'AutoSize'#9#20'BorderSpacing.Around'#2#6#7'Caption'#6#19'BrowseExampleButto' +'acing.Around'#2#6#7'Caption'#6#19'BrowseExampleButton'#7'OnClick'#7#24'Brow'
+'n'#7'OnClick'#7#24'BrowseExampleButtonClick'#8'TabOrder'#2#1#0#0#0#0#6'TPan' +'seExampleButtonClick'#8'TabOrder'#2#1#0#0#0#9'TTabSheet'#10'TopicSheet'#7'C'
+'el'#12'LeftBtnPanel'#4'Left'#2#0#6'Height'#2'~'#3'Top'#2#0#5'Width'#2'?'#5 +'aption'#6#6'Topics'#12'ClientHeight'#2'b'#11'ClientWidth'#3#170#2#0#6'TPane'
+'Align'#7#6'alLeft'#8'AutoSize'#9#10'BevelOuter'#7#6'bvNone'#18'ChildSizing.' +'l'#6'Panel1'#4'Left'#3#0#2#6'Height'#2'b'#3'Top'#2#0#5'Width'#3#170#0#5'Ali'
+'Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine' +'gn'#7#7'alRight'#18'BorderSpacing.Left'#2#5#10'BevelOuter'#7#6'bvNone'#12'C'
+#2#3#12'ClientHeight'#2'~'#11'ClientWidth'#2'?'#11'FullRepaint'#8#14'ParentS' +'lientHeight'#2'b'#11'ClientWidth'#3#170#0#8'TabOrder'#2#0#0#6'TPanel'#6'Pan'
+'howHint'#8#8'ShowHint'#9#8'TabOrder'#2#1#0#12'TSpeedButton'#16'BoldFormatBu' +'el2'#4'Left'#2#0#6'Height'#2#25#3'Top'#2#0#5'Width'#3#170#0#5'Align'#7#5'al'
+'tton'#4'Left'#2#0#6'Height'#2#23#3'Top'#2#0#5'Width'#2#20#21'Constraints.Ma' +'Top'#8'AutoSize'#9#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2#25#11'Clie'
+'xHeight'#2#23#20'Constraints.MaxWidth'#2#20#5'Color'#7#9'clBtnFace'#9'NumGl' +'ntWidth'#3#170#0#8'TabOrder'#2#0#0#7'TButton'#14'NewTopicButton'#4'Left'#2
+'yphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#0#0#12'TSpeedButton'#18'Italic' +'x'#6'Height'#2#25#3'Top'#2#0#5'Width'#2'2'#5'Align'#7#7'alRight'#8'AutoSize'
+'FormatButton'#3'Tag'#2#1#4'Left'#2#20#6'Height'#2#23#3'Top'#2#0#5'Width'#2 +#9#7'Caption'#6#3'New'#7'OnClick'#7#19'NewTopicButtonClick'#8'TabOrder'#2#0#0
+#20#21'Constraints.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#5'Color'#7#9 +#0#5'TEdit'#16'NewTopicNameEdit'#4'Left'#2#0#6'Height'#2#25#3'Top'#2#0#5'Wid'
+'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#0#0#12'TSpee' +'th'#2's'#5'Align'#7#8'alClient'#19'BorderSpacing.Right'#2#5#7'OnEnter'#7#17
+'dButton'#21'UnderlineFormatButton'#3'Tag'#2#2#4'Left'#2'('#6'Height'#2#23#3 +'TopicControlEnter'#8'TabOrder'#2#1#0#0#0#8'TListBox'#12'TopicListBox'#4'Lef'
+'Top'#2#0#5'Width'#2#20#21'Constraints.MaxHeight'#2#23#20'Constraints.MaxWid' +'t'#2#0#6'Height'#2'D'#3'Top'#2#30#5'Width'#3#170#0#5'Align'#7#8'alClient'#17
+'th'#2#20#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatBut' +'BorderSpacing.Top'#2#5#10'ItemHeight'#2#0#7'OnClick'#7#17'TopicListBoxClick'
+'tonClick'#0#0#12'TSpeedButton'#18'InsertVarTagButton'#3'Tag'#2#5#4'Left'#2#0 +#7'OnEnter'#7#17'TopicControlEnter'#8'TabOrder'#2#1#0#0#0#6'TPanel'#6'Panel3'
+#6'Height'#2#23#3'Top'#2#23#5'Width'#2#20#21'Constraints.MaxHeight'#2#23#20 +#4'Left'#2#0#6'Height'#2'b'#3'Top'#2#0#5'Width'#3#251#1#5'Align'#7#8'alClien'
+'t'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'b'#11'ClientWidth'#3#251#1
+#8'TabOrder'#2#1#0#5'TEdit'#10'TopicShort'#4'Left'#2#0#6'Height'#2#23#3'Top'
+#2#0#5'Width'#3#251#1#5'Align'#7#5'alTop'#10'AutoSelect'#8#8'OnChange'#7#16
+'TopicDescrChange'#7'OnEnter'#7#17'TopicControlEnter'#8'TabOrder'#2#0#0#0#5
+'TMemo'#10'TopicDescr'#4'Left'#2#0#6'Height'#2'F'#3'Top'#2#28#5'Width'#3#251
+#1#5'Align'#7#8'alClient'#17'BorderSpacing.Top'#2#5#8'OnChange'#7#16'TopicDe'
+'scrChange'#7'OnEnter'#7#17'TopicControlEnter'#8'TabOrder'#2#1#0#0#0#0#0#6'T'
+'Panel'#12'LeftBtnPanel'#4'Left'#2#0#6'Height'#2'~'#3'Top'#2#0#5'Width'#2'?'
+#5'Align'#7#6'alLeft'#8'AutoSize'#9#10'BevelOuter'#7#6'bvNone'#18'ChildSizin'
+'g.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLin'
+'e'#2#3#12'ClientHeight'#2'~'#11'ClientWidth'#2'?'#11'FullRepaint'#8#14'Pare'
+'ntShowHint'#8#8'ShowHint'#9#8'TabOrder'#2#1#0#12'TSpeedButton'#16'BoldForma'
+'tButton'#4'Left'#2#0#6'Height'#2#23#3'Top'#2#0#5'Width'#2#20#21'Constraints'
+'.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#5'Color'#7#9'clBtnFace'#9'Nu'
+'mGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#0#0#12'TSpeedButton'#18'Ita'
+'licFormatButton'#3'Tag'#2#1#4'Left'#2#20#6'Height'#2#23#3'Top'#2#0#5'Width'
+#2#20#21'Constraints.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#5'Color'#7
+#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#0#0#12'TSp'
+'eedButton'#21'UnderlineFormatButton'#3'Tag'#2#2#4'Left'#2'('#6'Height'#2#23
+#3'Top'#2#0#5'Width'#2#20#21'Constraints.MaxHeight'#2#23#20'Constraints.MaxW'
+'idth'#2#20#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatB'
+'uttonClick'#0#0#12'TSpeedButton'#18'InsertVarTagButton'#3'Tag'#2#5#4'Left'#2
+#0#6'Height'#2#23#3'Top'#2#23#5'Width'#2#20#21'Constraints.MaxHeight'#2#23#20
+'Constraints.MaxWidth'#2#20#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnCli' +'Constraints.MaxWidth'#2#20#5'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnCli'
+'ck'#7#17'FormatButtonClick'#0#0#12'TSpeedButton'#26'InsertParagraphSpeedBut' +'ck'#7#17'FormatButtonClick'#0#0#12'TSpeedButton'#26'InsertParagraphSpeedBut'
+'ton'#3'Tag'#2#6#4'Left'#2#20#6'Height'#2#23#3'Top'#2#23#5'Width'#2#20#21'Co' ,'ton'#3'Tag'#2#6#4'Left'#2#20#6'Height'#2#23#3'Top'#2#23#5'Width'#2#20#21'Co'
+'nstraints.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#7'Caption'#6#1'P'#5 +'nstraints.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#7'Caption'#6#1'P'#5
+'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#0 +'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#0
+#0#12'TSpeedButton'#21'InsertLinkSpeedButton'#4'Left'#2'('#6'Height'#2#23#3 +#0#12'TSpeedButton'#21'InsertLinkSpeedButton'#4'Left'#2'('#6'Height'#2#23#3
@ -129,7 +152,7 @@ LazarusResources.Add('TFPDocEditor','FORMDATA',[
+'Width'#2#20#21'Constraints.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#5 +'Width'#2#20#21'Constraints.MaxHeight'#2#23#20'Constraints.MaxWidth'#2#20#5
+'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#8 +'Color'#7#9'clBtnFace'#9'NumGlyphs'#2#0#7'OnClick'#7#17'FormatButtonClick'#8
+'ShowHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#10'SaveButton'#19'Anc' +'ShowHint'#9#14'ParentShowHint'#8#0#0#12'TSpeedButton'#10'SaveButton'#19'Anc'
,'horSideLeft.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#29#3'Top'#2'a'#5'W' +'horSideLeft.Side'#7#9'asrBottom'#4'Left'#2#0#6'Height'#2#29#3'Top'#2'a'#5'W'
+'idth'#2'?'#5'Align'#7#8'alBottom'#7'Caption'#6#4'Save'#5'Color'#7#9'clBtnFa' +'idth'#2'?'#5'Align'#7#8'alBottom'#7'Caption'#6#4'Save'#5'Color'#7#9'clBtnFa'
+'ce'#9'NumGlyphs'#2#0#7'OnClick'#7#15'SaveButtonClick'#0#0#0#11'TOpenDialog' +'ce'#9'NumGlyphs'#2#0#7'OnClick'#7#15'SaveButtonClick'#0#0#0#11'TOpenDialog'
+#10'OpenDialog'#5'Title'#6#17'Open example file'#6'Filter'#6#28'pascal file|' +#10'OpenDialog'#5'Title'#6#17'Open example file'#6'Filter'#6#28'pascal file|'

View File

@ -63,6 +63,12 @@ type
AddLinkToInheritedButton: TButton; AddLinkToInheritedButton: TButton;
BoldFormatButton: TSpeedButton; BoldFormatButton: TSpeedButton;
BrowseExampleButton: TButton; BrowseExampleButton: TButton;
TopicShort: TEdit;
TopicDescr: TMemo;
Panel3: TPanel;
TopicListBox: TListBox;
NewTopicNameEdit: TEdit;
NewTopicButton: TButton;
ControlDocker: TLazControlDocker; ControlDocker: TLazControlDocker;
CopyFromInheritedButton: TButton; CopyFromInheritedButton: TButton;
CreateButton: TButton; CreateButton: TButton;
@ -84,6 +90,8 @@ type
LeftBtnPanel: TPanel; LeftBtnPanel: TPanel;
LinkEdit: TEdit; LinkEdit: TEdit;
LinkLabel: TLabel; LinkLabel: TLabel;
Panel1: TPanel;
Panel2: TPanel;
SaveButton: TSpeedButton; SaveButton: TSpeedButton;
SeeAlsoMemo: TMemo; SeeAlsoMemo: TMemo;
MoveToInheritedButton: TButton; MoveToInheritedButton: TButton;
@ -95,6 +103,7 @@ type
ShortTabSheet: TTabSheet; ShortTabSheet: TTabSheet;
InsertPrintShortSpeedButton: TSpeedButton; InsertPrintShortSpeedButton: TSpeedButton;
InsertURLTagSpeedButton: TSpeedButton; InsertURLTagSpeedButton: TSpeedButton;
TopicSheet: TTabSheet;
UnderlineFormatButton: TSpeedButton; UnderlineFormatButton: TSpeedButton;
procedure AddLinkToInheritedButtonClick(Sender: TObject); procedure AddLinkToInheritedButtonClick(Sender: TObject);
procedure ApplicationIdle(Sender: TObject; var Done: Boolean); procedure ApplicationIdle(Sender: TObject; var Done: Boolean);
@ -116,12 +125,16 @@ type
procedure LinkEditChange(Sender: TObject); procedure LinkEditChange(Sender: TObject);
procedure LinkEditEditingDone(Sender: TObject); procedure LinkEditEditingDone(Sender: TObject);
procedure MoveToInheritedButtonClick(Sender: TObject); procedure MoveToInheritedButtonClick(Sender: TObject);
procedure NewTopicButtonClick(Sender: TObject);
procedure PageControlChange(Sender: TObject); procedure PageControlChange(Sender: TObject);
procedure SaveButtonClick(Sender: TObject); procedure SaveButtonClick(Sender: TObject);
procedure SeeAlsoMemoChange(Sender: TObject); procedure SeeAlsoMemoChange(Sender: TObject);
procedure SeeAlsoMemoEditingDone(Sender: TObject); procedure SeeAlsoMemoEditingDone(Sender: TObject);
procedure ShortEditChange(Sender: TObject); procedure ShortEditChange(Sender: TObject);
procedure ShortEditEditingDone(Sender: TObject); procedure ShortEditEditingDone(Sender: TObject);
procedure TopicControlEnter(Sender: TObject);
procedure TopicDescrChange(Sender: TObject);
procedure TopicListBoxClick(Sender: TObject);
private private
FCaretXY: TPoint; FCaretXY: TPoint;
FModified: Boolean; FModified: Boolean;
@ -160,6 +173,12 @@ type
function GetCurrentModuleName: string; function GetCurrentModuleName: string;
procedure JumpToError(Item : TFPDocItem; LineCol: TPoint); procedure JumpToError(Item : TFPDocItem; LineCol: TPoint);
function GUIModified: boolean; function GUIModified: boolean;
private
FLastTopicControl: TControl;
FInTopicSetup: Boolean;
FCurrentTopic: String;
procedure FillTopicCombo;
function TopicDocFile(CreateIfNoExists: Boolean = False): TLazFPDocFile;
public public
procedure Reset; procedure Reset;
procedure InvalidateChain; procedure InvalidateChain;
@ -266,6 +285,8 @@ begin
InsertRemarkButton.LoadGlyphFromLazarusResource('insertremark'); InsertRemarkButton.LoadGlyphFromLazarusResource('insertremark');
InsertURLTagSpeedButton.LoadGlyphFromLazarusResource('formatunderline'); InsertURLTagSpeedButton.LoadGlyphFromLazarusResource('formatunderline');
SaveButton.LoadGlyphFromLazarusResource('laz_save'); SaveButton.LoadGlyphFromLazarusResource('laz_save');
FInTopicSetup := false;
end; end;
procedure TFPDocEditor.FormDestroy(Sender: TObject); procedure TFPDocEditor.FormDestroy(Sender: TObject);
@ -296,6 +317,12 @@ procedure TFPDocEditor.FormatButtonClick(Sender: TObject);
DescrMemo.SelText := StartTag + DescrMemo.SelText + EndTag DescrMemo.SelText := StartTag + DescrMemo.SelText + EndTag
else if PageControl.ActivePage = ErrorsTabSheet then else if PageControl.ActivePage = ErrorsTabSheet then
ErrorsMemo.SelText := StartTag + ErrorsMemo.SelText + EndTag ErrorsMemo.SelText := StartTag + ErrorsMemo.SelText + EndTag
else if PageControl.ActivePage = TopicSheet then begin
if (FLastTopicControl = TopicShort) then
TopicShort.SelText := StartTag + TopicShort.SelText + EndTag;
if (FLastTopicControl = TopicDescr) then
TopicDescr.SelText := StartTag + TopicDescr.SelText + EndTag;
end
else else
exit; exit;
Modified:=true; Modified:=true;
@ -356,6 +383,13 @@ begin
SeeAlsoMemo.SelText := LinkSrc; SeeAlsoMemo.SelText := LinkSrc;
if PageControl.ActivePage = ErrorsTabSheet then if PageControl.ActivePage = ErrorsTabSheet then
ErrorsMemo.SelText := LinkSrc; ErrorsMemo.SelText := LinkSrc;
if PageControl.ActivePage = TopicSheet then begin
if (FLastTopicControl = TopicShort) then
TopicShort.SelText := LinkSrc;
if (FLastTopicControl = TopicDescr) then
TopicDescr.SelText := LinkSrc;
end;
Modified:=true; Modified:=true;
end; end;
@ -450,6 +484,23 @@ begin
end; end;
end; end;
procedure TFPDocEditor.NewTopicButtonClick(Sender: TObject);
var
Dfile: TLazFPDocFile;
begin
if NewTopicNameEdit.Text = '' then exit;
Dfile := TopicDocFile(True);
if not assigned(DFile) then exit;
if DFile.GetModuleTopic(NewTopicNameEdit.Text) = nil then begin
DFile.CreateModuleTopic(NewTopicNameEdit.Text);
CodeHelpBoss.SaveFPDocFile(DFile);
end;
FillTopicCombo;
TopicListBox.ItemIndex := TopicListBox.Items.IndexOf(NewTopicNameEdit.Text);
TopicShort.SetFocus;
TopicListBoxClick(Sender);
end;
procedure TFPDocEditor.PageControlChange(Sender: TObject); procedure TFPDocEditor.PageControlChange(Sender: TObject);
begin begin
UpdateButtons; UpdateButtons;
@ -482,6 +533,51 @@ begin
Modified:=true; Modified:=true;
end; end;
procedure TFPDocEditor.TopicControlEnter(Sender: TObject);
begin
FLastTopicControl := TControl(Sender);
end;
procedure TFPDocEditor.TopicDescrChange(Sender: TObject);
begin
if FInTopicSetup then exit;
Modified := True;
SaveButton.Enabled := True;
end;
procedure TFPDocEditor.TopicListBoxClick(Sender: TObject);
var
DFile: TLazFPDocFile;
Node: TDOMNode;
Child: TDOMNode;
begin
if (FCurrentTopic <> '') and Modified then
Save;
FInTopicSetup := True;
TopicShort.Clear;
TopicDescr.Clear;
FInTopicSetup := false;
FCurrentTopic := '';
if TopicListBox.ItemIndex < 0 then exit;
Dfile := TopicDocFile(True);
if DFile = nil then exit;
Node := DFile.GetModuleTopic(TopicListBox.Items[TopicListBox.ItemIndex]);
if Node = nil then exit;
FCurrentTopic := TopicListBox.Items[TopicListBox.ItemIndex];
FInTopicSetup := True;
Child := Node.FindNode('short');
if Child <> nil then
TopicShort.Text := DFile.GetChildValuesAsString(Child);
Child := Node.FindNode('descr');
if Child <> nil then
TopicDescr.Text := DFile.GetChildValuesAsString(Child);
FInTopicSetup := false;
end;
function TFPDocEditor.GetContextTitle(Element: TCodeHelpElement): string; function TFPDocEditor.GetContextTitle(Element: TCodeHelpElement): string;
// get codetools path. for example: TButton.Align // get codetools path. for example: TButton.Align
begin begin
@ -793,7 +889,8 @@ begin
HasEdit:=(PageControl.ActivePage = ShortTabSheet) HasEdit:=(PageControl.ActivePage = ShortTabSheet)
or (PageControl.ActivePage = DescrTabSheet) or (PageControl.ActivePage = DescrTabSheet)
or (PageControl.ActivePage = SeeAlsoTabSheet) or (PageControl.ActivePage = SeeAlsoTabSheet)
or (PageControl.ActivePage = ErrorsTabSheet); or (PageControl.ActivePage = ErrorsTabSheet)
or (PageControl.ActivePage = TopicSheet);
BoldFormatButton.Enabled:=HasEdit; BoldFormatButton.Enabled:=HasEdit;
ItalicFormatButton.Enabled:=HasEdit; ItalicFormatButton.Enabled:=HasEdit;
UnderlineFormatButton.Enabled:=HasEdit; UnderlineFormatButton.Enabled:=HasEdit;
@ -846,6 +943,40 @@ begin
or (ExampleEdit.Text<>FOldVisualValues[fpdiExample]); or (ExampleEdit.Text<>FOldVisualValues[fpdiExample]);
end; end;
procedure TFPDocEditor.FillTopicCombo;
var
c, i: LongInt;
DFile: TLazFPDocFile;
begin
FCurrentTopic := '';
FInTopicSetup := True;
TopicListBox.Clear;
TopicShort.Clear;
TopicDescr.Clear;
FInTopicSetup := false;
Dfile := TopicDocFile;
if not assigned(DFile) then exit;
c := DFile.GetModuleTopicCount;
for i := 0 to c - 1 do begin
TopicListBox.Items.Add(DFile.GetModuleTopicName(i));
end;
end;
function TFPDocEditor.TopicDocFile(CreateIfNoExists: Boolean): TLazFPDocFile;
var
CacheWasUsed : Boolean;
AnOwner: TObject;
DFileName: String;
begin
if assigned(DocFile) then
Result := DocFile
else begin
DFileName := CodeHelpBoss.GetFPDocFilenameForSource(SourceFilename, true, CacheWasUsed, AnOwner, CreateIfNoExists);
if CodeHelpBoss.LoadFPDocFile(DFileName, [chofUpdateFromDisk], Result, CacheWasUsed) <> chprSuccess then
Result := nil;
end;
end;
procedure TFPDocEditor.Reset; procedure TFPDocEditor.Reset;
begin begin
FreeAndNil(fChain); FreeAndNil(fChain);
@ -890,6 +1021,7 @@ begin
fSourceFilename:=NewSrcFilename; fSourceFilename:=NewSrcFilename;
Reset; Reset;
FillTopicCombo;
InvalidateChain; InvalidateChain;
end; end;
@ -921,6 +1053,8 @@ end;
procedure TFPDocEditor.Save(CheckGUI: boolean); procedure TFPDocEditor.Save(CheckGUI: boolean);
var var
Values: TFPDocElementValues; Values: TFPDocElementValues;
DFile: TLazFPDocFile;
Node: TDOMNode;
begin begin
//DebugLn(['TFPDocEditor.Save FModified=',FModified]); //DebugLn(['TFPDocEditor.Save FModified=',FModified]);
if (not FModified) if (not FModified)
@ -930,17 +1064,34 @@ begin
end; end;
FModified:=false; FModified:=false;
SaveButton.Enabled:=false; SaveButton.Enabled:=false;
DFile := nil;
if FCurrentTopic <> '' then begin
Dfile := TopicDocFile(True);
if DFile <> nil then begin
Node := DFile.GetModuleTopic(FCurrentTopic);
if Node <> nil then begin
DFile.SetChildValue(Node, 'short', TopicShort.Text);
DFile.SetChildValue(Node, 'descr', TopicDescr.Text);
end;
end;
end;
if (fChain=nil) or (fChain.Count=0) then begin if (fChain=nil) or (fChain.Count=0) then begin
DebugLn(['TFPDocEditor.Save failed: no chain']); if (FCurrentTopic <> '') and (DFile <> nil) then CodeHelpBoss.SaveFPDocFile(DFile)
else DebugLn(['TFPDocEditor.Save failed: no chain']);
exit; exit;
end; end;
if not fChain.IsValid then begin if not fChain.IsValid then begin
DebugLn(['TFPDocEditor.Save failed: chain not valid']); if (FCurrentTopic <> '') and (DFile <> nil) then CodeHelpBoss.SaveFPDocFile(DFile)
else DebugLn(['TFPDocEditor.Save failed: chain not valid']);
exit; exit;
end; end;
Values:=GetGUIValues; if (fChain[0].FPDocFile = nil) and (DFile <> nil) then CodeHelpBoss.SaveFPDocFile(DFile)
if not WriteNode(fChain[0],Values,true) then begin else begin
DebugLn(['TLazDocForm.Save WriteNode FAILED']); Values:=GetGUIValues;
if not WriteNode(fChain[0],Values,true) then begin
DebugLn(['TLazDocForm.Save WriteNode FAILED']);
end;
end; end;
end; end;