mirror of https://gitlab.com/basile.b/dexed.git
demangling, only called manually, messages-widget context menu.
This commit is contained in:
parent
cf0d62f0b7
commit
1254f45ecd
|
@ -0,0 +1,16 @@
|
||||||
|
module runnable;
|
||||||
|
|
||||||
|
import std.stdio;
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Compile file & run.
|
||||||
|
- select containing mangled symbols
|
||||||
|
- message context menu, click Demangle selection
|
||||||
|
*/
|
||||||
|
|
||||||
|
void main(string[] args)
|
||||||
|
{
|
||||||
|
"_D2rt4util7console8__assertFiZv".writeln;
|
||||||
|
"random initial junk _D2rt4util7console8__assertFiZv random trailer".writeln;
|
||||||
|
"multiple _D2rt4util7console8__assertFiZv occurrences _D2rt4util7console8__assertFiZv".writeln;
|
||||||
|
}
|
|
@ -28,7 +28,6 @@ type
|
||||||
fMaxCount: Integer;
|
fMaxCount: Integer;
|
||||||
fAutoSelect: boolean;
|
fAutoSelect: boolean;
|
||||||
fSingleClick: boolean;
|
fSingleClick: boolean;
|
||||||
fDemangle: boolean;
|
|
||||||
fFont: TFont;
|
fFont: TFont;
|
||||||
fMsgColors: array[TCEAppMessageKind] of TColor;
|
fMsgColors: array[TCEAppMessageKind] of TColor;
|
||||||
procedure setFont(aValue: TFont);
|
procedure setFont(aValue: TFont);
|
||||||
|
@ -43,7 +42,6 @@ type
|
||||||
property colorHint: TColor read fMsgColors[amkHint] write fMsgColors[amkHint];
|
property colorHint: TColor read fMsgColors[amkHint] write fMsgColors[amkHint];
|
||||||
property colorWarning: TColor read fMsgColors[amkWarn] write fMsgColors[amkWarn];
|
property colorWarning: TColor read fMsgColors[amkWarn] write fMsgColors[amkWarn];
|
||||||
property colorError: TColor read fMsgColors[amkErr] write fMsgColors[amkErr];
|
property colorError: TColor read fMsgColors[amkErr] write fMsgColors[amkErr];
|
||||||
property demangle: boolean read fDemangle write fDemangle default false;
|
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
|
@ -78,7 +76,6 @@ type
|
||||||
State: TCustomDrawState; var DefaultDraw: Boolean);
|
State: TCustomDrawState; var DefaultDraw: Boolean);
|
||||||
procedure ListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure ListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
private
|
private
|
||||||
fDemangle: boolean;
|
|
||||||
fDemanglerAvailable: boolean;
|
fDemanglerAvailable: boolean;
|
||||||
fMsgColors: array[TCEAppMessageKind] of TColor;
|
fMsgColors: array[TCEAppMessageKind] of TColor;
|
||||||
fActAutoSel: TAction;
|
fActAutoSel: TAction;
|
||||||
|
@ -87,6 +84,7 @@ type
|
||||||
fActSaveMsg: TAction;
|
fActSaveMsg: TAction;
|
||||||
fActCopyMsg: TAction;
|
fActCopyMsg: TAction;
|
||||||
fActSelAll: TAction;
|
fActSelAll: TAction;
|
||||||
|
fActDemangle: TAction;
|
||||||
fMaxMessCnt: Integer;
|
fMaxMessCnt: Integer;
|
||||||
fProj: ICECommonProject;
|
fProj: ICECommonProject;
|
||||||
fDoc: TCESynMemo;
|
fDoc: TCESynMemo;
|
||||||
|
@ -103,6 +101,7 @@ type
|
||||||
procedure demanglerOutput(sender: TObject);
|
procedure demanglerOutput(sender: TObject);
|
||||||
procedure filterMessages(aCtxt: TCEAppMessageCtxt);
|
procedure filterMessages(aCtxt: TCEAppMessageCtxt);
|
||||||
procedure clearOutOfRangeMessg;
|
procedure clearOutOfRangeMessg;
|
||||||
|
procedure actDemangleExecute(Sender: TObject);
|
||||||
procedure actAutoSelExecute(Sender: TObject);
|
procedure actAutoSelExecute(Sender: TObject);
|
||||||
procedure actClearCurCatExecute(Sender: TObject);
|
procedure actClearCurCatExecute(Sender: TObject);
|
||||||
procedure actClearAllExecute(Sender: TObject);
|
procedure actClearAllExecute(Sender: TObject);
|
||||||
|
@ -112,7 +111,6 @@ type
|
||||||
procedure setMaxMessageCount(aValue: Integer);
|
procedure setMaxMessageCount(aValue: Integer);
|
||||||
procedure setAutoSelectCategory(aValue: boolean);
|
procedure setAutoSelectCategory(aValue: boolean);
|
||||||
procedure setSingleMessageClick(aValue: boolean);
|
procedure setSingleMessageClick(aValue: boolean);
|
||||||
procedure setDemangle(aValue: boolean);
|
|
||||||
procedure listDeletion(Sender: TObject; Node: TTreeNode);
|
procedure listDeletion(Sender: TObject; Node: TTreeNode);
|
||||||
procedure selCtxtClick(Sender: TObject);
|
procedure selCtxtClick(Sender: TObject);
|
||||||
function iconIndex(aKind: TCEAppMessageKind): Integer;
|
function iconIndex(aKind: TCEAppMessageKind): Integer;
|
||||||
|
@ -158,7 +156,6 @@ type
|
||||||
property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount;
|
property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount;
|
||||||
property autoSelectCategory: boolean read fAutoSelect write setAutoSelectCategory;
|
property autoSelectCategory: boolean read fAutoSelect write setAutoSelectCategory;
|
||||||
property singleMessageClick: boolean read fSingleClick write setSingleMessageClick;
|
property singleMessageClick: boolean read fSingleClick write setSingleMessageClick;
|
||||||
property demangle: boolean read fDemangle write setDemangle;
|
|
||||||
//
|
//
|
||||||
property colorBuble: TColor read fMsgColors[amkBub] write setColorBuble;
|
property colorBuble: TColor read fMsgColors[amkBub] write setColorBuble;
|
||||||
property colorInfo: TColor read fMsgColors[amkInf] write setColorInfo;
|
property colorInfo: TColor read fMsgColors[amkInf] write setColorInfo;
|
||||||
|
@ -213,7 +210,6 @@ begin
|
||||||
fAutoSelect := opts.fAutoSelect;
|
fAutoSelect := opts.fAutoSelect;
|
||||||
fSingleClick := opts.fSingleClick;
|
fSingleClick := opts.fSingleClick;
|
||||||
fFastDisplay := opts.fFastDisplay;
|
fFastDisplay := opts.fFastDisplay;
|
||||||
fDemangle := opts.fDemangle;
|
|
||||||
fMsgColors := opts.fMsgColors;
|
fMsgColors := opts.fMsgColors;
|
||||||
fFont.EndUpdate;
|
fFont.EndUpdate;
|
||||||
end
|
end
|
||||||
|
@ -226,7 +222,6 @@ begin
|
||||||
fSingleClick := widg.fSingleClick;
|
fSingleClick := widg.fSingleClick;
|
||||||
fFastDisplay := widg.fastDisplay;
|
fFastDisplay := widg.fastDisplay;
|
||||||
fMsgColors := widg.fMsgColors;
|
fMsgColors := widg.fMsgColors;
|
||||||
fDemangle := widg.fDemangle;
|
|
||||||
end
|
end
|
||||||
else inherited;
|
else inherited;
|
||||||
end;
|
end;
|
||||||
|
@ -244,7 +239,6 @@ begin
|
||||||
widg.singleMessageClick := fSingleClick;
|
widg.singleMessageClick := fSingleClick;
|
||||||
widg.fastDisplay:= fFastDisplay;
|
widg.fastDisplay:= fFastDisplay;
|
||||||
widg.fMsgColors := fMsgColors;
|
widg.fMsgColors := fMsgColors;
|
||||||
widg.Demangle := fDemangle;
|
|
||||||
end
|
end
|
||||||
else inherited;
|
else inherited;
|
||||||
end;
|
end;
|
||||||
|
@ -278,6 +272,9 @@ begin
|
||||||
fActSaveMsg := TAction.Create(self);
|
fActSaveMsg := TAction.Create(self);
|
||||||
fActSaveMsg.OnExecute := @actSaveMsgExecute;
|
fActSaveMsg.OnExecute := @actSaveMsgExecute;
|
||||||
fActSaveMsg.caption := 'Save selected message(s) to...';
|
fActSaveMsg.caption := 'Save selected message(s) to...';
|
||||||
|
fActDemangle := TAction.Create(self);
|
||||||
|
fActDemangle.OnExecute := @actDemangleExecute;
|
||||||
|
fActDemangle.caption := 'Demangle selection';
|
||||||
//
|
//
|
||||||
inherited;
|
inherited;
|
||||||
//
|
//
|
||||||
|
@ -326,7 +323,6 @@ begin
|
||||||
//
|
//
|
||||||
fToDemangle := TStringList.Create;
|
fToDemangle := TStringList.Create;
|
||||||
fToDemangleObjs:= TFPList.Create;
|
fToDemangleObjs:= TFPList.Create;
|
||||||
fDemanglerAvailable := exeInSysPath('ddemangle' + exeExt);
|
|
||||||
//
|
//
|
||||||
EntitiesConnector.addObserver(self);
|
EntitiesConnector.addObserver(self);
|
||||||
EntitiesConnector.addSingleService(self);
|
EntitiesConnector.addSingleService(self);
|
||||||
|
@ -430,14 +426,6 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMessagesWidget.setDemangle(aValue: boolean);
|
|
||||||
begin
|
|
||||||
if fDemangle = aValue then exit;
|
|
||||||
fDemangle := aValue;
|
|
||||||
if fDemangle then
|
|
||||||
IncLoopUpdate;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCEMessagesWidget.setColorError(aValue: TColor);
|
procedure TCEMessagesWidget.setColorError(aValue: TColor);
|
||||||
begin
|
begin
|
||||||
fMsgColors[amkErr] := max(aValue, minColor);
|
fMsgColors[amkErr] := max(aValue, minColor);
|
||||||
|
@ -536,7 +524,7 @@ end;
|
||||||
|
|
||||||
function TCEMessagesWidget.contextActionCount: integer;
|
function TCEMessagesWidget.contextActionCount: integer;
|
||||||
begin
|
begin
|
||||||
result := 6;
|
result := 7;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEMessagesWidget.contextAction(index: integer): TAction;
|
function TCEMessagesWidget.contextAction(index: integer): TAction;
|
||||||
|
@ -548,10 +536,16 @@ begin
|
||||||
3: result := fActCopyMsg;
|
3: result := fActCopyMsg;
|
||||||
4: result := fActSelAll;
|
4: result := fActSelAll;
|
||||||
5: result := fActSaveMsg;
|
5: result := fActSaveMsg;
|
||||||
|
6: result := fActDemangle;
|
||||||
else result := nil;
|
else result := nil;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEMessagesWidget.actDemangleExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
callDemangler;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEMessagesWidget.actAutoSelExecute(Sender: TObject);
|
procedure TCEMessagesWidget.actAutoSelExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
fAutoSelect := fActAutoSel.Checked;
|
fAutoSelect := fActAutoSel.Checked;
|
||||||
|
@ -702,7 +696,7 @@ begin
|
||||||
dt^.demangled:=false;
|
dt^.demangled:=false;
|
||||||
if fAutoSelect then if fCtxt <> aCtxt then
|
if fAutoSelect then if fCtxt <> aCtxt then
|
||||||
fBtns[aCtxt].Click;
|
fBtns[aCtxt].Click;
|
||||||
if fastDisplay or fDemangle then
|
if fastDisplay then
|
||||||
IncLoopUpdate;
|
IncLoopUpdate;
|
||||||
item := List.Items.Add(nil, msg);
|
item := List.Items.Add(nil, msg);
|
||||||
item.Data := dt;
|
item.Data := dt;
|
||||||
|
@ -759,24 +753,28 @@ var
|
||||||
dat: PMessageData;
|
dat: PMessageData;
|
||||||
i: integer;
|
i: integer;
|
||||||
str: string;
|
str: string;
|
||||||
|
const
|
||||||
|
toolname = 'ddemangle' + exeExt;
|
||||||
begin
|
begin
|
||||||
|
fDemanglerAvailable:= exeInSysPath(toolname);
|
||||||
if not fDemanglerAvailable then
|
if not fDemanglerAvailable then
|
||||||
exit;
|
exit;
|
||||||
//
|
//
|
||||||
freeDemangler;
|
|
||||||
fDemangler := TCEProcess.Create(nil);
|
fDemangler := TCEProcess.Create(nil);
|
||||||
fDemangler.Executable := 'ddemangle' + exeExt;
|
fDemangler.Executable := toolname;
|
||||||
fDemangler.OnTerminate:= @demanglerOutput;
|
fDemangler.OnTerminate:= @demanglerOutput;
|
||||||
fDemangler.Options:= fDemangler.Options + [poUsePipes];
|
fDemangler.Options:= [poUsePipes];
|
||||||
fDemangler.ShowWindow:= swoHIDE;
|
fDemangler.ShowWindow:= swoHIDE;
|
||||||
fToDemangle.Clear;
|
fToDemangle.Clear;
|
||||||
fToDemangleObjs.Clear;
|
fToDemangleObjs.Clear;
|
||||||
for i := 0 to list.Items.Count-1 do
|
for i := 0 to list.Items.Count-1 do
|
||||||
begin
|
begin
|
||||||
|
if not list.Items.Item[i].Selected then continue;
|
||||||
dat := PMessageData(list.Items.Item[i].Data);
|
dat := PMessageData(list.Items.Item[i].Data);
|
||||||
if dat^.demangled then continue;
|
if dat^.demangled then continue;
|
||||||
dat^.demangled := true;
|
dat^.demangled := true;
|
||||||
str := list.Items.Item[i].Text;
|
str := list.Items.Item[i].Text;
|
||||||
|
if str = '' then continue;
|
||||||
fToDemangleObjs.add(list.Items.Item[i]);
|
fToDemangleObjs.add(list.Items.Item[i]);
|
||||||
fToDemangle.Add(str);
|
fToDemangle.Add(str);
|
||||||
end;
|
end;
|
||||||
|
@ -804,6 +802,7 @@ begin
|
||||||
if itm = nil then continue;
|
if itm = nil then continue;
|
||||||
itm.Text := fToDemangle.Strings[i];
|
itm.Text := fToDemangle.Strings[i];
|
||||||
end;
|
end;
|
||||||
|
freeDemangler;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEMessagesWidget.freeDemangler;
|
procedure TCEMessagesWidget.freeDemangler;
|
||||||
|
@ -826,7 +825,6 @@ begin
|
||||||
List.Update;
|
List.Update;
|
||||||
filterMessages(fCtxt);
|
filterMessages(fCtxt);
|
||||||
end;
|
end;
|
||||||
callDemangler;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEMessagesWidget.iconIndex(aKind: TCEAppMessageKind): Integer;
|
function TCEMessagesWidget.iconIndex(aKind: TCEAppMessageKind): Integer;
|
||||||
|
|
Loading…
Reference in New Issue