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

View File

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