IDE: fpdoceditor: update topic on idle

git-svn-id: trunk@34253 -
This commit is contained in:
mattias 2011-12-18 10:54:36 +00:00
parent c99b5e17ac
commit 9305126522
2 changed files with 81 additions and 60 deletions

View File

@ -7,25 +7,29 @@ unit allsynedit;
interface
uses
SynBeautifier, SynCompletion, SynDesignStringConstants, SynEdit, SynEditAutoComplete,
SynEditExport, SynEditFoldedView, SynEditHighlighter, SynEditHighlighterFoldBase,
SynEditHighlighterXMLBase, SynEditKeyCmds, SynEditLazDsgn, SynEditLines, SynEditMarks,
SynEditMarkup, SynEditMarkupBracket, SynEditMarkupCtrlMouseLink, SynEditMarkupHighAll,
SynBeautifier, SynCompletion, SynDesignStringConstants, SynEdit,
SynEditAutoComplete, SynEditExport, SynEditFoldedView, SynEditHighlighter,
SynEditHighlighterFoldBase, SynEditHighlighterXMLBase, SynEditKeyCmds,
SynEditLazDsgn, SynEditLines, SynEditMarks, SynEditMarkup,
SynEditMarkupBracket, SynEditMarkupCtrlMouseLink, SynEditMarkupHighAll,
SynEditMarkupSelection, SynEditMarkupSpecialLine, SynEditMarkupWordGroup,
SynEditMiscClasses, SynEditMiscProcs, SynEditMouseCmds, SynEditPlugins,
SynEditPointClasses, SynEditRegexSearch, SynEditSearch, SynEditStrConst, SynEditTextBase,
SynEditTextBuffer, SynEditTextDoubleWidthChars, SynEditTextTabExpander, SynEditTextTrimmer,
SynEditTypes, SynExportHTML, SynGutter, SynGutterBase, SynGutterChanges,
SynGutterCodeFolding, SynGutterLineNumber, SynGutterLineOverview, SynGutterMarks,
SynEditPointClasses, SynEditRegexSearch, SynEditSearch, SynEditStrConst,
SynEditTextBase, SynEditTextBuffer, SynEditTextDoubleWidthChars,
SynEditTextTabExpander, SynEditTextTrimmer, SynEditTypes, SynExportHTML,
SynGutter, SynGutterBase, SynGutterChanges, SynGutterCodeFolding,
SynGutterLineNumber, SynGutterLineOverview, SynGutterMarks,
SynHighlighterAny, SynHighlighterCpp, SynHighlighterCss, SynHighlighterDiff,
SynHighlighterHashEntries, SynHighlighterHTML, SynHighlighterJava, SynHighlighterJScript,
SynHighlighterLFM, SynHighlighterMulti, SynHighlighterPas, SynHighlighterPerl,
SynHighlighterPHP, SynHighlighterPosition, SynHighlighterPython, SynHighlighterSQL,
SynHighlighterTeX, synhighlighterunixshellscript, SynHighlighterVB, SynHighlighterXML,
SynMacroRecorder, SynMemo, SynPluginSyncroEdit, SynPluginSyncronizedEditBase,
SynPluginTemplateEdit, SynPropertyEditObjectList, SynRegExpr, SynTextDrawer,
SynEditMarkupGutterMark, SynHighlighterBat, SynHighlighterIni, SynEditMarkupSpecialChar,
LazSynEditText, LazSynTextArea, LazarusPackageIntf;
SynHighlighterHashEntries, SynHighlighterHTML, SynHighlighterJava,
SynHighlighterJScript, SynHighlighterLFM, SynHighlighterMulti,
SynHighlighterPas, SynHighlighterPerl, SynHighlighterPHP,
SynHighlighterPosition, SynHighlighterPython, SynHighlighterSQL,
SynHighlighterTeX, synhighlighterunixshellscript, SynHighlighterVB,
SynHighlighterXML, SynMacroRecorder, SynMemo, SynPluginSyncroEdit,
SynPluginSyncronizedEditBase, SynPluginTemplateEdit,
SynPropertyEditObjectList, SynRegExpr, SynTextDrawer,
SynEditMarkupGutterMark, SynHighlighterBat, SynHighlighterIni,
SynEditMarkupSpecialChar, LazarusPackageIntf;
implementation

View File

@ -60,7 +60,9 @@ type
fpdefChainNeedsUpdate,
fpdefCaptionNeedsUpdate,
fpdefValueControlsNeedsUpdate,
fpdefInheritedControlsNeedsUpdate
fpdefInheritedControlsNeedsUpdate,
fpdefTopicSettingUp,
fpdefTopicNeedsUpdate
);
TFPDocEditorFlags = set of TFPDocEditorFlag;
@ -185,10 +187,10 @@ type
procedure DoEditorUpdate(Sender: TObject);
private
FLastTopicControl: TControl;
FInTopicSetup: Boolean;
FCurrentTopic: String;
procedure FillTopicCombo;
function TopicDocFile(CreateIfNoExists: Boolean = False): TLazFPDocFile;
procedure UpdateTopicCombo;
procedure ClearTopicControls;
function TopicDocFile(CreateIfNotExists: Boolean = False): TLazFPDocFile;
public
procedure Reset;
procedure InvalidateChain;
@ -291,8 +293,6 @@ begin
InsertURLTagSpeedButton.LoadGlyphFromLazarusResource('formatunderline');
SaveButton.LoadGlyphFromLazarusResource('laz_save');
FInTopicSetup := false;
SourceEditorManagerIntf.RegisterChangeEvent(semEditorActivate, @DoEditorUpdate);
SourceEditorManagerIntf.RegisterChangeEvent(semEditorStatus, @DoEditorUpdate);
end;
@ -443,6 +443,8 @@ begin
UpdateValueControls
else if fpdefInheritedControlsNeedsUpdate in FFlags then
UpdateInheritedControls
else if fpdefTopicNeedsUpdate in FFlags then
UpdateTopicCombo
else
Done:=true;
end;
@ -522,7 +524,7 @@ begin
DFile.CreateModuleTopic(NewTopicNameEdit.Text);
CodeHelpBoss.SaveFPDocFile(DFile);
end;
FillTopicCombo;
UpdateTopicCombo;
TopicListBox.ItemIndex := TopicListBox.Items.IndexOf(NewTopicNameEdit.Text);
TopicListBoxClick(Sender);
end;
@ -598,7 +600,7 @@ end;
procedure TFPDocEditor.TopicDescrChange(Sender: TObject);
begin
if fpdefReading in FFlags then exit;
if FInTopicSetup then exit;
if fpdefTopicSettingUp in FFlags then exit;
Modified := True;
end;
@ -611,12 +613,7 @@ begin
if (FCurrentTopic <> '') and Modified then
Save;
FInTopicSetup := True;
TopicShort.Clear;
TopicDescr.Clear;
TopicShort.Enabled := False;
TopicDescr.Enabled := False;
FInTopicSetup := false;
ClearTopicControls;
FCurrentTopic := '';
if TopicListBox.ItemIndex < 0 then exit;
@ -627,17 +624,20 @@ begin
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);
TopicShort.Enabled := True;
TopicDescr.Enabled := True;
TopicShort.SetFocus;
FInTopicSetup := false;
Include(FFlags,fpdefTopicSettingUp);
try
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);
TopicShort.Enabled := True;
TopicDescr.Enabled := True;
TopicShort.SetFocus;
finally
Exclude(FFlags,fpdefTopicSettingUp);
end;
end;
function TFPDocEditor.GetContextTitle(Element: TCodeHelpElement): string;
@ -656,6 +656,19 @@ begin
Result:=nil;
end;
procedure TFPDocEditor.ClearTopicControls;
begin
Include(FFlags, fpdefTopicSettingUp);
try
TopicShort.Clear;
TopicDescr.Clear;
TopicShort.Enabled := False;
TopicDescr.Enabled := False;
finally
Exclude(FFlags, fpdefTopicSettingUp);
end;
end;
function TFPDocEditor.GetDocFile: TLazFPDocFile;
begin
Result:=nil;
@ -1043,39 +1056,42 @@ begin
UpdateFPDocEditor(SrcEdit.FileName, CaretPos);
end;
procedure TFPDocEditor.FillTopicCombo;
procedure TFPDocEditor.UpdateTopicCombo;
var
c, i: LongInt;
DFile: TLazFPDocFile;
Topics: TStringList;
begin
FCurrentTopic := '';
FInTopicSetup := True;
TopicListBox.Clear;
TopicShort.Clear;
TopicDescr.Clear;
TopicShort.Enabled := False;
TopicDescr.Enabled := False;
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));
Exclude(FFlags,fpdefTopicNeedsUpdate);
Topics:=TStringList.Create;
try
FCurrentTopic := '';
ClearTopicControls;
Dfile := TopicDocFile;
if not assigned(DFile) then exit;
c := DFile.GetModuleTopicCount;
for i := 0 to c - 1 do
Topics.Add(DFile.GetModuleTopicName(i));
finally
TopicListBox.Items.Assign(Topics);
end;
end;
function TFPDocEditor.TopicDocFile(CreateIfNoExists: Boolean): TLazFPDocFile;
function TFPDocEditor.TopicDocFile(CreateIfNotExists: Boolean): TLazFPDocFile;
var
CacheWasUsed : Boolean;
AnOwner: TObject;
DFileName: String;
begin
Result := nil;
if assigned(DocFile) then
Result := DocFile
else begin
DFileName := CodeHelpBoss.GetFPDocFilenameForSource(SourceFilename, true, CacheWasUsed, AnOwner, CreateIfNoExists);
if (DFileName = '') or
(CodeHelpBoss.LoadFPDocFile(DFileName, [chofUpdateFromDisk], Result, CacheWasUsed) <> chprSuccess)
DFileName := CodeHelpBoss.GetFPDocFilenameForSource(SourceFilename, true,
CacheWasUsed, AnOwner, CreateIfNotExists);
if (DFileName = '')
or (CodeHelpBoss.LoadFPDocFile(DFileName, [chofUpdateFromDisk], Result,
CacheWasUsed) <> chprSuccess)
then
Result := nil;
end;
@ -1097,6 +1113,7 @@ begin
SeeAlsoMemo.Clear;
ErrorsMemo.Clear;
ExampleEdit.Clear;
ClearTopicControls;
for i:=Low(TFPDocItem) to high(TFPDocItem) do
FOldVisualValues[i]:='';
@ -1136,7 +1153,7 @@ begin
fSourceFilename:=NewSrcFilename;
Reset;
FillTopicCombo;
Include(FFlags,fpdefTopicNeedsUpdate);
InvalidateChain;
end;