mirror of https://gitlab.com/basile.b/dexed.git
call heavy things written in D in fpc threads
This commit is contained in:
parent
739d7225cf
commit
04798b1c83
|
@ -138,9 +138,13 @@ type
|
||||||
fAutoExpandErrors: boolean;
|
fAutoExpandErrors: boolean;
|
||||||
fSortSymbols: boolean;
|
fSortSymbols: boolean;
|
||||||
fSmartExpander: boolean;
|
fSmartExpander: boolean;
|
||||||
|
fTreeDataToThread: string;
|
||||||
|
fTreeDataFromThread: string;
|
||||||
ndAlias, ndClass, ndEnum, ndFunc, ndUni: TTreeNode;
|
ndAlias, ndClass, ndEnum, ndFunc, ndUni: TTreeNode;
|
||||||
ndImp, ndIntf, ndMix, ndStruct, ndTmp: TTreeNode;
|
ndImp, ndIntf, ndMix, ndStruct, ndTmp: TTreeNode;
|
||||||
ndVar, ndWarn, ndErr, ndUt: TTreeNode;
|
ndVar, ndWarn, ndErr, ndUt: TTreeNode;
|
||||||
|
procedure getTreeDataInThread;
|
||||||
|
procedure gotTreeDataFromThread(sender: TObject);
|
||||||
procedure TreeDblClick(Sender: TObject);
|
procedure TreeDblClick(Sender: TObject);
|
||||||
procedure actRefreshExecute(Sender: TObject);
|
procedure actRefreshExecute(Sender: TObject);
|
||||||
procedure actAutoRefreshExecute(Sender: TObject);
|
procedure actAutoRefreshExecute(Sender: TObject);
|
||||||
|
@ -728,6 +732,25 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSymbolListWidget.getSymbols;
|
procedure TSymbolListWidget.getSymbols;
|
||||||
|
begin
|
||||||
|
if fDoc.isNil then
|
||||||
|
exit;
|
||||||
|
if (fDoc.Lines.Count = 0) or not fDoc.isDSource then
|
||||||
|
begin
|
||||||
|
clearTree;
|
||||||
|
updateVisibleCat;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
fTreeDataToThread := fDoc.Lines.Text;
|
||||||
|
TTHread.ExecuteInThread(@getTreeDataInThread, @gotTreeDataFromThread);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSymbolListWidget.getTreeDataInThread;
|
||||||
|
begin
|
||||||
|
fTreeDataFromThread := listSymbols(PChar(fTreeDataToThread), fDeep);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSymbolListWidget.gotTreeDataFromThread(sender: TObject);
|
||||||
|
|
||||||
function getCatNode(node: TTreeNode; stype: TSymbolType ): TTreeNode;
|
function getCatNode(node: TTreeNode; stype: TSymbolType ): TTreeNode;
|
||||||
function newCat(const aCat: string): TTreeNode;
|
function newCat(const aCat: string): TTreeNode;
|
||||||
|
@ -817,21 +840,12 @@ begin
|
||||||
if fDoc.isNil then
|
if fDoc.isNil then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
if (fDoc.Lines.Count = 0) or not fDoc.isDSource then
|
if fTreeDataFromThread.isEmpty or ndAlias.isNil then
|
||||||
begin
|
|
||||||
clearTree;
|
|
||||||
updateVisibleCat;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
s := fDoc.Lines.Text;
|
|
||||||
s := listSymbols(PChar(s), fDeep);
|
|
||||||
|
|
||||||
if s.isEmpty or ndAlias.isNil then
|
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
clearTree;
|
clearTree;
|
||||||
updateVisibleCat;
|
updateVisibleCat;
|
||||||
fSyms.LoadFromString(s);
|
fSyms.LoadFromString(fTreeDataFromThread);
|
||||||
f := TreeFilterEdit1.Filter;
|
f := TreeFilterEdit1.Filter;
|
||||||
TreeFilterEdit1.Text := '';
|
TreeFilterEdit1.Text := '';
|
||||||
tree.BeginUpdate;
|
tree.BeginUpdate;
|
||||||
|
|
|
@ -95,6 +95,8 @@ type
|
||||||
fDoc: TDexedMemo;
|
fDoc: TDexedMemo;
|
||||||
fTodos: TTodoItems;
|
fTodos: TTodoItems;
|
||||||
fOptions: TTodoOptions;
|
fOptions: TTodoOptions;
|
||||||
|
fTodoItemsDataFromThread: string;
|
||||||
|
fTodoItemsresultFromThread: string;
|
||||||
// IDocumentObserver
|
// IDocumentObserver
|
||||||
procedure docNew(document: TDexedMemo);
|
procedure docNew(document: TDexedMemo);
|
||||||
procedure docFocused(document: TDexedMemo);
|
procedure docFocused(document: TDexedMemo);
|
||||||
|
@ -116,6 +118,8 @@ type
|
||||||
// TODOlist things
|
// TODOlist things
|
||||||
function getContext: TTodoContext;
|
function getContext: TTodoContext;
|
||||||
procedure scanTodoItems(autoRefreshed: boolean);
|
procedure scanTodoItems(autoRefreshed: boolean);
|
||||||
|
procedure scanTodoInThread;
|
||||||
|
procedure scannedTodoInThread(Sender : TObject);
|
||||||
procedure clearTodoList;
|
procedure clearTodoList;
|
||||||
procedure fillTodoList;
|
procedure fillTodoList;
|
||||||
procedure lstItemsColumnClick(Sender: TObject; Column: TListColumn);
|
procedure lstItemsColumnClick(Sender: TObject; Column: TListColumn);
|
||||||
|
@ -446,14 +450,33 @@ begin
|
||||||
str += PathSeparator;
|
str += PathSeparator;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else str := fDoc.fileName;
|
else if fDoc.fileName <> newdocPageCaption then
|
||||||
|
begin
|
||||||
|
str := fDoc.fileName;
|
||||||
|
end;
|
||||||
|
|
||||||
str := todoItems(PChar(str));
|
if str.isNotEmpty then
|
||||||
if str.length < 10 then
|
begin
|
||||||
|
fTodoItemsDataFromThread := str;
|
||||||
|
TThread.ExecuteInThread(@scanTodoInThread, @scannedTodoInThread);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTodoListWidget.scanTodoInThread;
|
||||||
|
begin
|
||||||
|
fTodoItemsResultFromThread := todoItems(PChar(fTodoItemsDataFromThread));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTodoListWidget.scannedTodoInThread(Sender : TObject);
|
||||||
|
var
|
||||||
|
txt: TmemoryStream;
|
||||||
|
begin
|
||||||
|
if fTodoItemsResultFromThread.length < 10 then
|
||||||
exit;
|
exit;
|
||||||
txt := TMemoryStream.create;
|
txt := TMemoryStream.create;
|
||||||
try
|
try
|
||||||
txt.Write(str[1], str.length);
|
txt.Write(fTodoItemsResultFromThread[1], fTodoItemsResultFromThread.length);
|
||||||
txt.Position:=0;
|
txt.Position:=0;
|
||||||
fTodos.loadFromTxtStream(txt);
|
fTodos.loadFromTxtStream(txt);
|
||||||
fillTodoList;
|
fillTodoList;
|
||||||
|
|
Loading…
Reference in New Issue