From b65e38f23f31ddf2da200d41186e43172e084022 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sun, 7 Jun 2020 21:00:04 +0200 Subject: [PATCH] minor optimization to the message widget --- src/u_ceproject.pas | 4 ++++ src/u_dubproject.pas | 2 ++ src/u_interfaces.pas | 4 ++++ src/u_main.pas | 2 ++ src/u_messages.pas | 32 ++++++++++++++++++++++---------- src/u_tools.pas | 2 ++ 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/u_ceproject.pas b/src/u_ceproject.pas index 853cfd54..bec7bfa8 100644 --- a/src/u_ceproject.pas +++ b/src/u_ceproject.pas @@ -943,8 +943,10 @@ begin (sender as TDexedProcess).getFullLines(lst) else processOutputToStrings(TProcess(sender), lst); + fMsgs.beginMessageCall(); for str in lst do fMsgs.message(str, fAsProjectItf, amcProj, amkBub); + fMsgs.endMessageCall(); finally lst.Free; end; @@ -974,8 +976,10 @@ begin lst := TStringList.Create; try fCompilProc.getFullLines(lst); + fMsgs.beginMessageCall(); for str in lst do fMsgs.message(str, fAsProjectItf, amcProj, amkAuto); + fMsgs.endMessageCall(); finally lst.Free; end; diff --git a/src/u_dubproject.pas b/src/u_dubproject.pas index 4437b338..047605e5 100644 --- a/src/u_dubproject.pas +++ b/src/u_dubproject.pas @@ -1066,8 +1066,10 @@ begin lst := TStringList.Create; try fDubProc.getFullLines(lst); + fMsgs.beginMessageCall(); for str in lst do fMsgs.message(str, fAsProjectItf, amcProj, amkAuto); + fMsgs.endMessageCall(); finally lst.Free; end; diff --git a/src/u_interfaces.pas b/src/u_interfaces.pas index a55ce50b..b617cdfa 100644 --- a/src/u_interfaces.pas +++ b/src/u_interfaces.pas @@ -271,6 +271,10 @@ type * Single service provided by the messages widget. *) IMessagesDisplay = interface(ISingleService) + // begins several calls to message() + procedure beginMessageCall(); + // ends several calls to message() + procedure endMessageCall(); // displays a message. procedure message(const value: string; aData: Pointer; aCtxt: TAppMessageCtxt; aKind: TAppMessageKind); // clears the messages related to the context aCtxt. diff --git a/src/u_main.pas b/src/u_main.pas index cb49f619..6f02f96e 100644 --- a/src/u_main.pas +++ b/src/u_main.pas @@ -2931,12 +2931,14 @@ begin lst := TStringList.Create; try proc.getFullLines(lst); + fMsgs.beginMessageCall(); if proc = fRunProc then for str in lst do fMsgs.message(str, fDoc, amcEdit, amkBub) else // dmd used to compile runnable for str in lst do fMsgs.message(str, fDoc, amcEdit, amkAuto); + fMsgs.endMessageCall(); finally lst.Free; end; diff --git a/src/u_messages.pas b/src/u_messages.pas index b548d0fd..b76683fa 100644 --- a/src/u_messages.pas +++ b/src/u_messages.pas @@ -164,6 +164,8 @@ type // function singleServiceName: string; procedure message(const value: string; aData: Pointer; aCtxt: TAppMessageCtxt; aKind: TAppMessageKind); + procedure beginMessageCall(); + procedure endMessageCall(); procedure clearbyContext(aCtxt: TAppMessageCtxt); procedure clearbyData(data: Pointer); procedure scrollToBack; @@ -942,6 +944,16 @@ begin exit('IMessagesDisplay'); end; +procedure TMessagesWidget.beginMessageCall(); +begin + list.BeginUpdate; +end; + +procedure TMessagesWidget.endMessageCall(); +begin + list.EndUpdate; +end; + procedure TMessagesWidget.message(const value: string; aData: Pointer; aCtxt: TAppMessageCtxt; aKind: TAppMessageKind); var @@ -952,7 +964,7 @@ begin showWidget; if not fAlwaysFilter then TreeFilterEdit1.Filter:=''; - if (value.length > fOptions.maxLineLength) and (fOptions.maxLineLength > 0) then + if (fOptions.maxLineLength > 0) and (value.length > fOptions.maxLineLength) then msg := value[1..fOptions.maxLineLength] else msg := value; @@ -963,23 +975,23 @@ begin if aCtxt = amcAutoCompile then begin case fProjCompile of - false: aCtxt := amcAutoEdit; - true: aCtxt := amcAutoProj; + false: aCtxt := amcAutoEdit; + true: aCtxt := amcAutoProj; end; end; if aCtxt = amcAutoEdit then begin - aData := fDoc; - aCtxt := amcEdit; + aData := fDoc; + aCtxt := amcEdit; end else if aCtxt = amcAutoProj then begin - aData := fProj; - aCtxt := amcProj; + aData := fProj; + aCtxt := amcProj; end; - dt := new(PMessageData); - dt^.data := aData; - dt^.ctxt := aCtxt; + dt := new(PMessageData); + dt^.data := aData; + dt^.ctxt := aCtxt; if fAutoSelect and (fCtxt <> aCtxt) then fBtns[aCtxt].Click; if fastDisplay then diff --git a/src/u_tools.pas b/src/u_tools.pas index 3d4a9d78..8f168cca 100644 --- a/src/u_tools.pas +++ b/src/u_tools.pas @@ -279,8 +279,10 @@ begin lst := TStringList.Create; try fProcess.getFullLines(lst); + fMsgs.beginMessageCall(); for str in lst do fMsgs.message(str, nil, amcMisc, amkAuto); + fMsgs.endMessageCall(); finally lst.Free; end;