From cf7d601ef9f94cf090fc2e481b7e881419e7086d Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 14 Jul 2014 00:16:53 +0200 Subject: [PATCH] r19 --- lazproj/test/src/main.d | 2 +- src/ce_dmdwrap.pas | 2 +- src/ce_editor.pas | 26 +++-- src/ce_main.pas | 33 +++--- src/ce_messages.lfm | 20 ++-- src/ce_messages.pas | 207 ++++++++++++++++++++++++++++---------- src/ce_projconf.lfm | 24 ++--- src/ce_staticexplorer.pas | 12 +++ src/ce_widget.pas | 24 +++++ src/ce_widgettypes.pas | 5 +- 10 files changed, 257 insertions(+), 98 deletions(-) diff --git a/lazproj/test/src/main.d b/lazproj/test/src/main.d index 217e998f..aad1af2d 100644 --- a/lazproj/test/src/main.d +++ b/lazproj/test/src/main.d @@ -25,7 +25,7 @@ void main(string args[]) } // if not UsePipes in RunOptions // then: - // readln; + readln; // (input is passed thru the new console) // else: input is not handled so readln will hang Coedit until diff --git a/src/ce_dmdwrap.pas b/src/ce_dmdwrap.pas index 0e5029a9..7aee7e97 100644 --- a/src/ce_dmdwrap.pas +++ b/src/ce_dmdwrap.pas @@ -158,7 +158,7 @@ type end; (***************************************************************************** - * Encapsulates the options/args related to the debuging + * Encapsulates the options/args related to the debugging *) TDebugOpts = class(TOptsGroup) private diff --git a/src/ce_editor.pas b/src/ce_editor.pas index 65bbded2..01e3ec90 100644 --- a/src/ce_editor.pas +++ b/src/ce_editor.pas @@ -9,7 +9,7 @@ uses Graphics, SynEditKeyCmds, ComCtrls, SynEditHighlighter, ExtCtrls, Menus, SynEditHighlighterFoldBase, SynMacroRecorder, SynPluginSyncroEdit, SynEdit, SynHighlighterLFM, ce_widget, ce_d2syn, ce_synmemo, ce_common, AnchorDocking, - ce_dlang; + ce_dlang, ce_project; type { TCEEditorWidget } @@ -48,6 +48,9 @@ type procedure removeEditor(const aIndex: NativeInt); procedure focusedEditorChanged; // + procedure projCompile(const aProject: TCEProject); override; + procedure projRun(const aProject: TCEProject); override; + // property currentEditor: TCESynMemo read getCurrentEditor; property editor[index: NativeInt]: TCESynMemo read getEditor; property editorCount: NativeInt read getEditorCount; @@ -58,7 +61,7 @@ implementation {$R *.lfm} uses - ce_main; + ce_main, ce_messages; constructor TCEEditorWidget.create(aOwner: TComponent); var @@ -123,7 +126,7 @@ begin if pageControl.ActivePageIndex <> -1 then mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex); // - if (curr.modified or (pageControl.ActivePage.Caption = '')) then + if (pageControl.ActivePage.Caption = '') then begin fKeyChanged := true; beginUpdateByDelay; @@ -168,6 +171,7 @@ end; procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt); begin + mainForm.MessageWidget.ClearMessages(msEditor); editor[aIndex].OnChange:= nil; pageControl.Pages[aIndex].Free; end; @@ -223,6 +227,16 @@ begin UpdateByEvent; end; +procedure TCEEditorWidget.projCompile(const aProject: TCEProject); +begin + stopUpdateByDelay; +end; + +procedure TCEEditorWidget.projRun(const aProject: TCEProject); +begin + stopUpdateByDelay; +end; + procedure TCEEditorWidget.UpdateByEvent; const modstr: array[boolean] of string = ('...', 'MODIFIED'); @@ -251,13 +265,13 @@ begin mainForm.docChangeNotify(Self, editorIndex); if ed.Lines.Count = 0 then exit; // - mainForm.MessageWidget.Clear; + mainForm.MessageWidget.ClearMessages(msEditor); lex( ed.Lines.Text, tokLst ); checkSyntacticErrors( tokLst, errLst); for err in errLst do - mainForm.MessageWidget.addMessage(format( - '%s (@line:%4.d @char:%.4d)',[err.msg, err.position.y, err.position.x])); + mainForm.MessageWidget.addMessage(format( '%s (@line:%4.d @char:%.4d)', + [err.msg, err.position.y, err.position.x]), msEditor); md := ''; if ed.isDSource then diff --git a/src/ce_main.pas b/src/ce_main.pas index 33651a58..eda3440e 100644 --- a/src/ce_main.pas +++ b/src/ce_main.pas @@ -837,7 +837,7 @@ begin end; Str.SetSize(readSz); lns.LoadFromStream(Str); - for msg in lns do fMesgWidg.addMessage(msg); + for msg in lns do fMesgWidg.addMessage(msg); // proj/file ? finally str.Free; lns.Free; @@ -858,7 +858,7 @@ begin getDir(0, olddir); try - fMesgWidg.addCeInf( 'compiling ' + fEditWidg.editor[edIndex].fileName ); + fMesgWidg.addCeInf( 'compiling ' + fEditWidg.editor[edIndex].fileName, msEditor ); temppath := GetTempDir(false); chDir(temppath); @@ -891,7 +891,7 @@ begin begin fMesgWidg.addCeInf( fEditWidg.editor[edIndex].fileName - + ' successfully compiled' ); + + ' successfully compiled', msEditor ); runproc.Options:= [poStderrToOutPut, poUsePipes]; {$IFDEF MSWINDOWS} @@ -913,7 +913,7 @@ begin end else fMesgWidg.addCeErr( fEditWidg.editor[edIndex].fileName - + ' has not been compiled' ); + + ' has not been compiled', msEditor ); finally dmdproc.Free; @@ -927,13 +927,17 @@ var dmdproc: TProcess; ppproc: TProcess; olddir, prjpath: string; + i: NativeInt; begin - fMesgWidg.Clear; + fMesgWidg.ClearMessages(msProject); + + for i := 0 to fWidgList.Count-1 do + fWidgList.widget[i].projCompile(aProject); if aProject.Sources.Count = 0 then begin - fMesgWidg.addCeErr( aProject.fileName + ' has no source files' ); + fMesgWidg.addCeErr( aProject.fileName + ' has no source files', msProject); exit; end; @@ -950,7 +954,7 @@ begin ppproc.Free; end; end - else fMesgWidg.addCeWarn('the pre-compilation executable does not exist'); + else fMesgWidg.addCeWarn('the pre-compilation executable does not exist', msProject); end; olddir := ''; @@ -959,7 +963,7 @@ begin try - fMesgWidg.addCeInf( 'compiling ' + aProject.fileName ); + fMesgWidg.addCeInf( 'compiling ' + aProject.fileName, msProject); prjpath := extractFilePath(aProject.fileName); if directoryExists(prjpath) then chDir(prjpath); @@ -982,10 +986,10 @@ begin if dmdProc.ExitStatus = 0 then {$ENDIF} fMesgWidg.addCeInf( aProject.fileName - + ' successfully compiled' ) + + ' successfully compiled', msProject) else fMesgWidg.addCeErr( aProject.fileName - + ' has not been compiled' ); + + ' has not been compiled', msProject); end; with fProject.currentConfiguration do @@ -1001,7 +1005,7 @@ begin ppproc.Free; end; end - else fMesgWidg.addCeWarn('the post-compilation executable does not exist'); + else fMesgWidg.addCeWarn('the post-compilation executable does not exist', msProject); end; finally @@ -1014,10 +1018,14 @@ procedure TCEMainForm.runProject(const aProject: TCEProject; const runArgs: stri var runproc: TProcess; procname: string; + i: NativeInt; begin if aProject.currentConfiguration.outputOptions.binaryKind <> executable then exit; + for i := 0 to fWidgList.Count-1 do + fWidgList.widget[i].projRun(aProject); + runproc := TProcess.Create(nil); try runproc.Options := aProject.currentConfiguration.runOptions.options; @@ -1040,12 +1048,11 @@ begin if not fileExists(procname) then begin - fMesgWidg.addCeErr('output executable missing: ' + procname); + fMesgWidg.addCeErr('output executable missing: ' + procname, msProject); exit; end; runproc.Executable := procname; - //runproc.Parameters.Text := runArgs; runproc.Execute; while runproc.Running do if runproc.ExitStatus <> 0 then break; ProcessOutputToMsg(runproc); diff --git a/src/ce_messages.lfm b/src/ce_messages.lfm index 2fab7e34..285e7b9a 100644 --- a/src/ce_messages.lfm +++ b/src/ce_messages.lfm @@ -1,7 +1,7 @@ inherited CEMessagesWidget: TCEMessagesWidget - Left = 621 + Left = 812 Height = 172 - Top = 659 + Top = 258 Width = 744 Caption = 'Messages' ClientHeight = 172 @@ -17,32 +17,28 @@ inherited CEMessagesWidget: TCEMessagesWidget ClientHeight = 172 ClientWidth = 744 PopupMenu = nil - object List: TListView[0] + object List: TTreeView[0] Left = 2 Height = 168 Top = 2 Width = 740 Align = alClient - AutoSort = False BorderSpacing.Around = 2 - Columns = < - item - Width = 736 - end> + DefaultItemHeight = 16 Font.CharSet = ANSI_CHARSET Font.Height = -12 Font.Name = 'Lucida Console' Font.Pitch = fpFixed Font.Quality = fqDraft HideSelection = False - IconOptions.WrapText = False + Images = imgList MultiSelect = True ParentFont = False ReadOnly = True - ShowColumnHeaders = False - SmallImages = imgList + ShowLines = False + ShowRoot = False TabOrder = 0 - ViewStyle = vsReport + Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoToolTips, tvoThemedDraw] end end end diff --git a/src/ce_messages.pas b/src/ce_messages.pas index ef0b6c0b..aede1569 100644 --- a/src/ce_messages.pas +++ b/src/ce_messages.pas @@ -10,28 +10,47 @@ uses type + TMessageContext = (msUnknown, msProject, msEditor); + + PMessageItemData = ^TMessageItemData; + TMessageItemData = record + ctxt: TMessageContext; + data: Pointer; + end; + { TCEMessagesWidget } TCEMessagesWidget = class(TCEWidget) imgList: TImageList; - List: TListView; + List: TTreeView; private - fActClear: TAction; + fActClearAll: TAction; + fActClearEdi: TAction; fActSaveMsg: TAction; fActCopyMsg: TAction; fActSelAll: TAction; fProject: TCEProject; - procedure actClearExecute(Sender: TObject); + fMaxMessCnt: Integer; + fDoc: TCESynMemo; + procedure filterMessages; + procedure clearOutOfRangeMessg; + procedure actClearEdiExecute(Sender: TObject); + procedure actClearAllExecute(Sender: TObject); procedure actSaveMsgExecute(Sender: TObject); procedure actCopyMsgExecute(Sender: TObject); procedure actSelAllExecute(Sender: TObject); + procedure setMaxMessageCount(aValue: Integer); + procedure listDeletion(Sender: TObject; Node: TTreeNode); + function newMessageItemData(aCtxt: TMessageContext): PMessageItemData; + published + property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount default 250; public constructor create(aOwner: TComponent); override; // procedure scrollToBack; - procedure addMessage(const aMsg: string); - procedure addCeInf(const aMsg: string); - procedure addCeErr(const aMsg: string); - procedure addCeWarn(const aMsg: string); + procedure addMessage(const aMsg: string; aCtxt: TMessageContext = msUnknown); + procedure addCeInf(const aMsg: string; aCtxt: TMessageContext = msUnknown); + procedure addCeErr(const aMsg: string; aCtxt: TMessageContext = msUnknown); + procedure addCeWarn(const aMsg: string; aCtxt: TMessageContext = msUnknown); // function contextName: string; override; function contextActionCount: integer; override; @@ -43,7 +62,8 @@ type procedure docFocused(const aDoc: TCESynMemo); override; procedure docClose(const aDoc: TCESynMemo); override; // - procedure Clear; + procedure ClearAllMessages; + procedure ClearMessages(aCtxt: TMessageContext); end; PTCEMessageItem = ^TCEMessageItem; @@ -62,9 +82,14 @@ uses constructor TCEMessagesWidget.create(aOwner: TComponent); begin - fActClear := TAction.Create(self); - fActClear.OnExecute := @actClearExecute; - fActClear.caption := 'Clear messages'; + fMaxMessCnt := 250; + // + fActClearAll := TAction.Create(self); + fActClearAll.OnExecute := @actClearAllExecute; + fActClearAll.caption := 'Clear all messages'; + fActClearEdi := TAction.Create(self); + fActClearEdi.OnExecute := @actClearEdiExecute; + fActClearEdi.caption := 'Clear editor messages'; fActCopyMsg := TAction.Create(self); fActCopyMsg.OnExecute := @actCopyMsgExecute; fActCopyMsg.Caption := 'Copy message(s)'; @@ -73,63 +98,134 @@ begin fActSelAll.Caption := 'Select all'; fActSaveMsg := TAction.Create(self); fActSaveMsg.OnExecute := @actSaveMsgExecute; - fActSaveMsg.caption := 'Save messages to...'; + fActSaveMsg.caption := 'Save selected message(s) to...'; // inherited; fID := 'ID_MSGS'; // List.PopupMenu := contextMenu; + List.OnDeletion := @ListDeletion; DockMaster.GetAnchorSite(Self).Name := ID; end; +procedure TCEMessagesWidget.clearOutOfRangeMessg; +begin + while List.Items.Count > fMaxMessCnt do + List.Items.Delete(List.Items.GetFirstNode); +end; + +procedure TCEMessagesWidget.setMaxMessageCount(aValue: Integer); +begin + if aValue < 10 then aValue := 10; + if aValue > 1023 then aValue := 1023; + if fMaxMessCnt = aValue then exit; + fMaxMessCnt := aValue; + clearOutOfRangeMessg; +end; + +function TCEMessagesWidget.newMessageItemData(aCtxt: TMessageContext): PMessageItemData; +begin + result := new(PMessageItemData); + result^.ctxt := aCtxt; + case aCtxt of + msUnknown: result^.data := nil; + msProject: result^.data := Pointer(fProject); + msEditor: result^.data := Pointer(fDoc); + end; +end; + +procedure TCEMessagesWidget.listDeletion(Sender: TObject; Node: TTreeNode); +begin + if node.Data <> nil then + Dispose( PMessageItemData(Node.Data)); +end; + procedure TCEMessagesWidget.scrollToBack; begin if not Visible then exit; - List.ViewOrigin := Point(0, List.Items.Count * 25); + if List.BottomItem <> nil then + List.BottomItem.MakeVisible; end; -procedure TCEMessagesWidget.addCeInf(const aMsg: string); +procedure TCEMessagesWidget.filterMessages; var - item: TCEMessageItem; + itm: TTreeNode; + dat: PMessageItemData; + i: NativeInt; begin - item := TCEMessageItem.Create(List.Items); - item.Caption := 'Coedit information: ' + aMsg; + for i := 0 to List.Items.Count-1 do + begin + itm := List.Items[i]; + dat := PMessageItemData(itm.Data); + case dat^.ctxt of + msProject: itm.Visible := Pointer(fProject) = (dat^.data); + msEditor: itm.Visible := Pointer(fDoc) = (dat^.data); + else itm.Visible := true; + end; + end; +end; + +procedure TCEMessagesWidget.ClearAllMessages; +begin + List.Items.Clear; +end; + +procedure TCEMessagesWidget.ClearMessages(aCtxt: TMessageContext); +var + i: NativeInt; +begin + for i := List.Items.Count-1 downto 0 do + begin + if PMessageItemData(List.Items[i].Data)^.ctxt = aCtxt then + List.Items.Delete(List.Items[i]); + end; +end; + +procedure TCEMessagesWidget.addCeInf(const aMsg: string; aCtxt: TMessageContext = msUnknown); +var + item: TTreeNode; +begin + item := List.Items.Add(nil, 'Coedit information: ' + aMsg); + item.Data := newMessageItemData(aCtxt); item.ImageIndex := 1; - List.Items.AddItem(item); + item.SelectedIndex := 1; + clearOutOfRangeMessg; scrollToBack; end; -procedure TCEMessagesWidget.addCeWarn(const aMsg: string); +procedure TCEMessagesWidget.addCeWarn(const aMsg: string; aCtxt: TMessageContext = msUnknown); var - item: TCEMessageItem; + item: TTreeNode; begin - item := TCEMessageItem.Create(List.Items); - item.Caption := 'Coedit warning: ' + aMsg; + item := List.Items.Add(nil, 'Coedit warning: ' + aMsg); + item.Data := newMessageItemData(aCtxt); item.ImageIndex := 3; - List.Items.AddItem(item); + item.SelectedIndex := 3; + clearOutOfRangeMessg; scrollToBack; end; -procedure TCEMessagesWidget.addCeErr(const aMsg: string); +procedure TCEMessagesWidget.addCeErr(const aMsg: string; aCtxt: TMessageContext = msUnknown); var - item: TCEMessageItem; + item: TTreeNode; begin - item := TCEMessageItem.Create(List.Items); - item.Caption := 'Coedit error: ' + aMsg; + item := List.Items.Add(nil, 'Coedit error: ' + aMsg); + item.Data := newMessageItemData(aCtxt); item.ImageIndex := 4; - List.Items.AddItem(item); + item.SelectedIndex := 4; + clearOutOfRangeMessg; scrollToBack; end; -procedure TCEMessagesWidget.addMessage(const aMsg: string); +procedure TCEMessagesWidget.addMessage(const aMsg: string; aCtxt: TMessageContext = msUnknown); var - item: TCEMessageItem; + item: TTreeNode; begin - item := TCEMessageItem.Create(List.Items); - item.Caption := aMsg; - item.Data := mainForm.EditWidget.currentEditor; + item := List.Items.Add(nil, aMsg); + item.Data := newMessageItemData(aCtxt); item.ImageIndex := Integer( semanticMsgAna(aMsg) ); - List.Items.AddItem(item); + item.SelectedIndex := Integer( semanticMsgAna(aMsg) ); + clearOutOfRangeMessg; end; function TCEMessagesWidget.contextName: string; @@ -139,16 +235,17 @@ end; function TCEMessagesWidget.contextActionCount: integer; begin - result := 4; + result := 5; end; function TCEMessagesWidget.contextAction(index: integer): TAction; begin case index of - 0: result := fActClear; - 1: result := fActCopyMsg; - 2: result := fActSelAll; - 3: result := fActSaveMsg; + 0: result := fActClearAll; + 1: result := fActClearEdi; + 2: result := fActCopyMsg; + 3: result := fActSelAll; + 4: result := fActSaveMsg; else result := nil; end; end; @@ -156,33 +253,36 @@ end; procedure TCEMessagesWidget.projNew(const aProject: TCEProject); begin fProject := aProject; + filterMessages; end; procedure TCEMessagesWidget.projClose(const aProject: TCEProject); begin - if fProject = aProject then - actClearExecute(nil); + if fProject = aProject then ClearMessages(msProject); fProject := nil; + filterMessages; end; procedure TCEMessagesWidget.docFocused(const aDoc: TCESynMemo); begin - Clear; + fDoc := aDoc; + filterMessages; end; procedure TCEMessagesWidget.docClose(const aDoc: TCESynMemo); begin - Clear; + fDoc := nil; + filterMessages; end; -procedure TCEMessagesWidget.Clear; +procedure TCEMessagesWidget.actClearAllExecute(Sender: TObject); begin - actClearExecute(nil); + ClearAllMessages; end; -procedure TCEMessagesWidget.actClearExecute(Sender: TObject); +procedure TCEMessagesWidget.actClearEdiExecute(Sender: TObject); begin - List.Clear; + ClearMessages(msEditor); end; procedure TCEMessagesWidget.actCopyMsgExecute(Sender: TObject); @@ -191,20 +291,23 @@ var str: string; begin str := ''; - for i := 0 to List.Items.Count-1 do if List.Items[i].Selected then - str += List.Items[i].Caption + LineEnding; + for i := 0 to List.Items.Count-1 do if List.Items[i].MultiSelected then + str += List.Items[i].Text + LineEnding; Clipboard.AsText := str; end; procedure TCEMessagesWidget.actSelAllExecute(Sender: TObject); +var + i: NativeInt; begin - List.SelectAll; + for i := 0 to List.Items.Count-1 do + List.Items[i].MultiSelected := true; end; procedure TCEMessagesWidget.actSaveMsgExecute(Sender: TObject); var lst: TStringList; - itm: TListItem; + itm: TtreeNode; begin with TSaveDialog.Create(nil) do try @@ -213,7 +316,7 @@ begin lst := TStringList.Create; try for itm in List.Items do - lst.Add(itm.Caption); + lst.Add(itm.Text); lst.SaveToFile(filename); finally lst.Free; diff --git a/src/ce_projconf.lfm b/src/ce_projconf.lfm index 5e88ab19..859c7b41 100644 --- a/src/ce_projconf.lfm +++ b/src/ce_projconf.lfm @@ -40,18 +40,18 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget 0000000700000047656E6572616CFFFFFFFFFFFFFFFF02000000FFFFFFFF0900 000000000000010A00000043617465676F72696573FFFFFFFFFFFFFFFF020000 00FFFFFFFF000000000000000000080000004D65737361676573FFFFFFFFFFFF - FFFF03000000FFFFFFFF000000000000000000080000004465627567696E67FF - FFFFFFFFFFFFFF04000000FFFFFFFF0000000000000000000D000000446F6375 - 6D656E746174696F6EFFFFFFFFFFFFFFFF05000000FFFFFFFF00000000000000 - 0000060000004F7574707574FFFFFFFFFFFFFFFF06000000FFFFFFFF00000000 - 0000000000060000004F7468657273FFFFFFFFFFFFFFFF07000000FFFFFFFF00 - 0000000000000000050000005061746873FFFFFFFFFFFFFFFF08000000FFFFFF - FF000000000000000000110000005072652D6275696C642070726F63657373FF - FFFFFFFFFFFFFF09000000FFFFFFFF00000000000000000012000000506F7374 - 2D6275696C642070726F63657373FFFFFFFFFFFFFFFF0A000000FFFFFFFF0000 - 000000000000000B00000052756E206F7074696F6E73FFFFFFFFFFFFFFFF0B00 - 0000FFFFFFFF0000000000000000000E000000416C6C2063617465676F726965 - 73 + FFFF03000000FFFFFFFF00000000000000000009000000446562756767696E67 + FFFFFFFFFFFFFFFF04000000FFFFFFFF0000000000000000000D000000446F63 + 756D656E746174696F6EFFFFFFFFFFFFFFFF05000000FFFFFFFF000000000000 + 000000060000004F7574707574FFFFFFFFFFFFFFFF06000000FFFFFFFF000000 + 000000000000060000004F7468657273FFFFFFFFFFFFFFFF07000000FFFFFFFF + 000000000000000000050000005061746873FFFFFFFFFFFFFFFF08000000FFFF + FFFF000000000000000000110000005072652D6275696C642070726F63657373 + FFFFFFFFFFFFFFFF09000000FFFFFFFF00000000000000000012000000506F73 + 742D6275696C642070726F63657373FFFFFFFFFFFFFFFF0A000000FFFFFFFF00 + 00000000000000000B00000052756E206F7074696F6E73FFFFFFFFFFFFFFFF0B + 000000FFFFFFFF0000000000000000000E000000416C6C2063617465676F7269 + 6573 } end object Panel1: TPanel[1] diff --git a/src/ce_staticexplorer.pas b/src/ce_staticexplorer.pas index 7b4dd02e..5c582a0f 100644 --- a/src/ce_staticexplorer.pas +++ b/src/ce_staticexplorer.pas @@ -50,6 +50,8 @@ type procedure projNew(const aProject: TCEProject); override; procedure projChange(const aProject: TCEProject); override; procedure projClose(const aProject: TCEProject); override; + procedure projCompile(const aProject: TCEProject); override; + procedure projRun(const aProject: TCEProject); override; end; implementation @@ -154,6 +156,16 @@ begin beginUpdateByDelay; end; +procedure TCEStaticExplorerWidget.projCompile(const aProject: TCEProject); +begin + stopUpdateByDelay; +end; + +procedure TCEStaticExplorerWidget.projRun(const aProject: TCEProject); +begin + stopUpdateByDelay; +end; + procedure TCEStaticExplorerWidget.UpdateByDelay; begin if not fAutoRefresh then exit; diff --git a/src/ce_widget.pas b/src/ce_widget.pas index 626decc2..5cb7640e 100644 --- a/src/ce_widget.pas +++ b/src/ce_widget.pas @@ -51,6 +51,10 @@ type // if not re-called during 'updaterByDelayDuration' ms then // 'UpdateByDelay' is called once. procedure beginUpdateByDelay; + // prevent any pending update. + procedure stopUpdateByDelay; + // immediate call any pending update. + procedure endUpdatebyDelay; // increments the updates count. procedure beginUpdateByEvent; // decrements the update count and call 'UpdateByEvent' if the @@ -67,6 +71,8 @@ type procedure projNew(const aProject: TCEProject); virtual; procedure projChange(const aProject: TCEProject); virtual; procedure projClose(const aProject: TCEProject); virtual; + procedure projCompile(const aProject: TCEProject); virtual; + procedure projRun(const aProject: TCEProject); virtual; procedure projFocused(const aProject: TCEProject); virtual; // function contextName: string; virtual; @@ -185,6 +191,16 @@ begin fUpdaterDelay.OnTimer := @updaterLatchProc; end; +procedure TCEWidget.stopUpdateByDelay; +begin + fUpdaterDelay.OnTimer := nil; +end; + +procedure TCEWidget.endUpdateByDelay; +begin + updaterLatchProc(nil); +end; + procedure TCEWidget.updaterAutoProc(Sender: TObject); begin fUpdating := true; @@ -224,6 +240,14 @@ procedure TCEWidget.projClose(const aProject: TCEProject); begin end; +procedure TCEWidget.projCompile(const aProject: TCEProject); +begin +end; + +procedure TCEWidget.projRun(const aProject: TCEProject); +begin +end; + procedure TCEWidget.projFocused(const aProject: TCEProject); begin end; diff --git a/src/ce_widgettypes.pas b/src/ce_widgettypes.pas index c7a05055..aff46c29 100644 --- a/src/ce_widgettypes.pas +++ b/src/ce_widgettypes.pas @@ -37,7 +37,10 @@ type procedure projNew(const aProject: TCEProject); procedure projChange(const aProject: TCEProject); procedure projClose(const aProject: TCEProject); - // not used yet. + procedure projCompile(const aProject: TCEProject); + procedure projRun(const aProject: TCEProject); + + // not used yet: (project group) procedure projFocused(const aProject: TCEProject); end;