IDE: further migration external tools

git-svn-id: trunk@43262 -
This commit is contained in:
mattias 2013-10-17 19:17:50 +00:00
parent dc96e37202
commit 316056f2f7
8 changed files with 247 additions and 302 deletions

View File

@ -19,7 +19,7 @@ interface
uses
Classes, SysUtils, contnrs, Forms, Menus,
TextTools, IDECommands, IDEExternToolIntf;
TextTools, IDECommands, IDEExternToolIntf, MenuIntf;
type
TMsgQuickFixes = class;
@ -53,7 +53,7 @@ type
function LineCount: integer; inline;
property Lines[Index: integer]: TMessageLine read GetLines;
function AddMenuItem(Fix: TMsgQuickFix; Msg: TMessageLine; aCaption: string;
aTag: PtrInt = 0): TMenuItem; virtual; abstract;
aTag: PtrInt = 0): TIDEMenuCommand; virtual; abstract;
end;
var

View File

@ -51,6 +51,9 @@ uses
// IDEIntf
LazIDEIntf, IDEMsgIntf, IDEHelpIntf, IDEImagesIntf, IDEWindowIntf, IDEDialogs,
PackageIntf,
{$IFDEF EnableNewExtTools}
IDEExternToolIntf,
{$ENDIF}
// IDE
LazarusIDEStrConsts, TransferMacros, LazConf, IDEProcs, DialogProcs,
MainBar, ExtToolEditDlg, EnvironmentOpts,

View File

@ -86,167 +86,5 @@ object MessagesFrame: TMessagesFrame
OnClose = MsgCtrlPopupMenuClose
left = 240
top = 25
object QuickFixesMenuItem: TMenuItem
Caption = 'QuickFixesMenuItem'
end
object FindMenuItem: TMenuItem
Caption = 'FindMenuItem'
OnClick = FindMenuItemClick
end
object HideSeparatorMenuItem: TMenuItem
Caption = '-'
end
object HideMsgOfTypeMenuItem: TMenuItem
Caption = 'HideMsgOfTypeMenuItem'
OnClick = HideMsgOfTypeMenuItemClick
end
object UnhideMsgTypeMenuItem: TMenuItem
Caption = 'UnhideMsgTypeMenuItem'
object UnhideMsgTypeSeparatorMenuItem: TMenuItem
Caption = '-'
end
object ClearHideMsgTypesMenuItem: TMenuItem
Caption = 'ClearHideMsgTypesMenuItem'
OnClick = ClearHideMsgTypesMenuItemClick
end
end
object HideBelowMenuItem: TMenuItem
Caption = 'HideBelowMenuItem'
object HideWarningsMenuItem: TMenuItem
AutoCheck = True
Caption = 'HideWarningsMenuItem'
GroupIndex = 1
RadioItem = True
OnClick = HideUrgencyMenuItemClick
end
object HideNotesMenuItem: TMenuItem
AutoCheck = True
Caption = 'HideNotesMenuItem'
GroupIndex = 1
RadioItem = True
OnClick = HideUrgencyMenuItemClick
end
object HideHintsMenuItem: TMenuItem
AutoCheck = True
Caption = 'HideHintsMenuItem'
GroupIndex = 1
RadioItem = True
OnClick = HideUrgencyMenuItemClick
end
object HideVerboseMenuItem: TMenuItem
AutoCheck = True
Caption = 'HideVerboseMenuItem'
GroupIndex = 1
RadioItem = True
OnClick = HideUrgencyMenuItemClick
end
object HideDebugMenuItem: TMenuItem
AutoCheck = True
Caption = 'HideDebugMenuItem'
GroupIndex = 1
RadioItem = True
OnClick = HideUrgencyMenuItemClick
end
object HideNoneMenuItem: TMenuItem
AutoCheck = True
Caption = 'HidenoneMenuItem'
GroupIndex = 1
RadioItem = True
OnClick = HideUrgencyMenuItemClick
end
end
object HideHintsWithoutPosMenuItem: TMenuItem
AutoCheck = True
Caption = 'HideHintsWithoutPosMenuItem'
Checked = True
OnClick = HideHintsWithoutPosMenuItemClick
end
object SwitchFilterMenuItem: TMenuItem
Caption = 'SwitchFilterMenuItem'
object FilterSeparatorMenuItem: TMenuItem
Caption = '-'
end
object AddFilterMenuItem: TMenuItem
Caption = 'AddFilterMenuItem'
OnClick = AddFilterMenuItemClick
end
end
object CopySeparatorMenuItem: TMenuItem
Caption = '-'
end
object CopyMenuItem: TMenuItem
Caption = 'CopyMenuItem'
object CopyFilenameMenuItem: TMenuItem
Caption = 'CopyFilenameMenuItem'
OnClick = CopyFilenameMenuItemClick
end
object CopyMsgMenuItem: TMenuItem
Caption = 'CopyMsgMenuItem'
OnClick = CopyMsgMenuItemClick
end
object CopyShownMenuItem: TMenuItem
Caption = 'CopyShownMenuItem'
OnClick = CopyShownMenuItemClick
end
object CopyAllMenuItem: TMenuItem
Caption = 'CopyAllMenuItem'
OnClick = CopyAllMenuItemClick
end
end
object SaveToFileMenuItem: TMenuItem
Caption = 'SaveToFileMenuItem'
object SaveAllToFileMenuItem: TMenuItem
Caption = 'SaveAllToFileMenuItem'
OnClick = SaveAllToFileMenuItemClick
end
object SaveShownToFileMenuItem: TMenuItem
Caption = 'SaveShownToFileMenuItem'
OnClick = SaveShownToFileMenuItemClick
end
end
object StyleSeparatorMenuItem: TMenuItem
Caption = '-'
end
object FilenameStyleMenuItem: TMenuItem
Caption = 'FilenameStyleMenuItem'
object FileStyleShortMenuItem: TMenuItem
AutoCheck = True
Caption = 'FileStyleShortMenuItem'
GroupIndex = 2
RadioItem = True
OnClick = FileStyleMenuItemClick
end
object FileStyleRelativeMenuItem: TMenuItem
AutoCheck = True
Caption = 'FileStyleRelativeMenuItem'
GroupIndex = 2
RadioItem = True
OnClick = FileStyleMenuItemClick
end
object FileStyleFullMenuItem: TMenuItem
AutoCheck = True
Caption = 'FileStyleFullMenuItem'
GroupIndex = 2
RadioItem = True
OnClick = FileStyleMenuItemClick
end
end
object TranslateMenuItem: TMenuItem
AutoCheck = True
Caption = 'TranslateMenuItem'
OnClick = TranslateMenuItemClick
end
object ShowIDMenuItem: TMenuItem
AutoCheck = True
Caption = 'ShowIDMenuItem'
OnClick = ShowIDMenuItemClick
end
object InfoSeparatorMenuItem: TMenuItem
Caption = '-'
end
object AboutToolMenuItem: TMenuItem
Caption = 'AboutToolMenuItem'
OnClick = AboutToolMenuItemClick
end
end
end

View File

@ -36,7 +36,8 @@ uses
LazUTF8Classes, LazFileUtils, LazUTF8, AvgLvlTree, SynEdit,
LResources, Forms, Buttons, ExtCtrls, Controls, LMessages, LCLType, Graphics,
LCLIntf, Themes, ImgList, GraphType, Menus, Clipbrd, Dialogs, StdCtrls,
IDEExternToolIntf, IDEImagesIntf, MenuIntf, etSrcEditMarks, etQuickFixes;
IDEExternToolIntf, IDEImagesIntf, MenuIntf, etSrcEditMarks, etQuickFixes,
LazarusIDEStrConsts;
const
CustomViewCaption = '------------------------------';
@ -390,10 +391,10 @@ type
SearchPanel: TPanel;
SearchPrevSpeedButton: TSpeedButton;
ShowIDMenuItem: TMenuItem;
UnhideMsgTypeSeparatorMenuItem: TMenuItem;
procedure AboutToolMenuItemClick(Sender: TObject);
procedure AddFilterMenuItemClick(Sender: TObject);
procedure ClearHideMsgTypesMenuItemClick(Sender: TObject);
procedure ClearMenuItemClick(Sender: TObject);
procedure CopyAllMenuItemClick(Sender: TObject);
procedure CopyFilenameMenuItemClick(Sender: TObject);
procedure CopyMsgMenuItemClick(Sender: TObject);
@ -468,6 +469,7 @@ var
MsgClearMenuItem: TIDEMenuCommand;
MsgHideMsgOfTypeMenuItem: TIDEMenuCommand;
MsgUnhideMsgTypeMenuSection: TIDEMenuSection;
MsgUnhideMsgOfTypeMenuSection: TIDEMenuSection;
MsgClearHideMsgTypesMenuItem: TIDEMenuCommand;
MsgHideBelowMenuSection: TIDEMenuSection;
MsgHideWarningsMenuItem: TIDEMenuCommand;
@ -505,22 +507,22 @@ implementation
procedure RegisterStandardMessagesViewMenuItems;
var
Path: String;
Parent: TIDEMenuSection;
Root: TIDEMenuSection;
begin
MessagesMenuRoot := RegisterIDEMenuRoot(MessagesMenuRootName);
Path := MessagesMenuRoot.Name;
MsgFindMenuItem := RegisterIDEMenuCommand(Path, 'Find', 'Find ...');
MsgQuickFixMenuSection := RegisterIDEMenuSection(Path, 'Quick Fix');
MsgClearMenuItem := RegisterIDEMenuCommand(Path, 'Clear', lisClear);
MsgHideMsgOfTypeMenuItem:=RegisterIDEMenuCommand(Path,'HideMsgOfType','');
MsgUnhideMsgTypeMenuSection:=RegisterIDEMenuCommand(Parent,'UnhideMsgType');
Root:=MessagesMenuRoot;
MsgFindMenuItem := RegisterIDEMenuCommand(Root, 'Find', 'Find ...');
MsgQuickFixMenuSection := RegisterIDEMenuSection(Root, 'Quick Fix');
MsgClearMenuItem := RegisterIDEMenuCommand(Root, 'Clear', 'Clear');
MsgHideMsgOfTypeMenuItem:=RegisterIDEMenuCommand(Root,'HideMsgOfType','');
MsgUnhideMsgTypeMenuSection:=RegisterIDEMenuSection(Root,'UnhideMsgType');
Parent:=MsgUnhideMsgTypeMenuSection;
Parent.ChildsAsSubMenu:=true;
Parent.Caption:='Unhide message type';
MsgUnhideMsgOfTypeMenuSection:=RegisterIDEMenuSection(Parent,'UnhideMsgOfTypeSection');
MsgClearHideMsgTypesMenuItem:=RegisterIDEMenuCommand(Parent,'Unhide all','Unhide all');
MsgHideBelowMenuSection:=RegisterIDEMenuSection(Path,'Hide Below Section');
MsgHideBelowMenuSection:=RegisterIDEMenuSection(Root,'Hide Below Section');
Parent:=MsgHideBelowMenuSection;
Parent.ChildsAsSubMenu:=true;
Parent.Caption:='Hide non urgent messages ...';
@ -530,37 +532,37 @@ begin
MsgHideVerboseMenuItem:=RegisterIDEMenuCommand(Parent,'Hide verbose messages','Hide verbose messages');
MsgHideDebugMenuItem:=RegisterIDEMenuCommand(Parent,'Hide debug messages','Hide debug messages');
MsgHideNoneMenuItem:=RegisterIDEMenuCommand(Parent,'Hide none, do not hide by urgency','Hide none, do not hide by urgency');
MsgHideHintsWithoutPosMenuItem:=RegisterIDEMenuCommand(Path, 'Hide hints without source position', 'Hide hints without source position');
MsgSwitchFilterMenuSection:=RegisterIDEMenuSection(Path,'Switch Filter Section');
MsgHideHintsWithoutPosMenuItem:=RegisterIDEMenuCommand(Root, 'Hide hints without source position', 'Hide hints without source position');
MsgSwitchFilterMenuSection:=RegisterIDEMenuSection(Root,'Switch Filter Section');
Parent:=MsgSwitchFilterMenuSection;
Parent.ChildsAsSubMenu:=true;
Parent.Caption:='Switch Filter Settings ...';
MsgFiltersMenuSection:=RegisterIDEMenuSection(Parent,'Filters');
MsgAddFilterMenuItem:=RegisterIDEMenuCommand(Parent,'Add Filter','Add filter ...');
MsgCopyMenuSection:=RegisterIDEMenuSection(Path,'Copy');
MsgCopyMenuSection:=RegisterIDEMenuSection(Root,'Copy');
Parent:=MsgCopyMenuSection;
Parent.ChildsAsSubMenu:=true;
Parent.Caption:='Copy ...';
MsgCopyFilenameMenuItem:=RegisterIDEMenuCommand(Parent,'Filename','Copy file name to clipboard');
MsgCopyMsgMenuItem := RegisterIDEMenuCommand(Parent, 'Selected',lisCopySelectedMessagesToClipboard);
MsgCopyShownMenuItem: := RegisterIDEMenuCommand(Parent, 'Shown', 'Copy shown messages to clipboard');
MsgCopyAllMenuItem:=RegisterIDEMenuCommand(Parent,'All'.'Copy all/original messages to clipboard');
MsgSaveToFileMenuSection:=RegisterIDEMenuSection(Path,'Save');
MsgCopyShownMenuItem := RegisterIDEMenuCommand(Parent, 'Shown', 'Copy shown messages to clipboard');
MsgCopyAllMenuItem:=RegisterIDEMenuCommand(Parent,'All','Copy all/original messages to clipboard');
MsgSaveToFileMenuSection:=RegisterIDEMenuSection(Root,'Save');
Parent:=MsgSaveToFileMenuSection;
Parent.ChildsAsSubMenu:=true;
Parent.Caption:='Save ...';
MsgSaveShownToFileMenuItem:=RegisterIDEMenuCommand(Parent,'Save shown messages to file ...','Shown');
MsgSaveAllToFileMenuItem:=RegisterIDEMenuCommand(Parent,'Save all/original messages to file ...','All');
MsgFilenameStyleMenuSection:=RegisterIDEMenuSection(Path,'Filename Styles');
MsgFilenameStyleMenuSection:=RegisterIDEMenuSection(Root,'Filename Styles');
Parent:=MsgFilenameStyleMenuSection;
Parent.ChildsAsSubMenu:=true;
Parent.Caption:='Filename Style ...';
MsgFileStyleShortMenuItem:=RegisterIDEMenuCommand(Parent,'Short','Short, no path');
MsgFileStyleRelativeMenuItem:=RegisterIDEMenuCommand(Parent,'Relative','Relative');
MsgFileStyleFullMenuItem:=RegisterIDEMenuCommand(Parent,'Full','Full');
MsgTranslateMenuItem:=RegisterIDEMenuCommand(Path, 'Translate', 'Translate');
MsgShowIDMenuItem:=RegisterIDEMenuCommand(Path, 'ShowID', 'Show message type ID');
MsgAboutToolMenuItem:=RegisterIDEMenuCommand(Path, 'About', 'About Tool');
MsgTranslateMenuItem:=RegisterIDEMenuCommand(Root, 'Translate', 'Translate');
MsgShowIDMenuItem:=RegisterIDEMenuCommand(Root, 'ShowID', 'Show message type ID');
MsgAboutToolMenuItem:=RegisterIDEMenuCommand(Root, 'About', 'About Tool');
end;
function CompareHideMsgType(HideMsgType1, HideMsgType2: Pointer): integer;
@ -2923,19 +2925,18 @@ procedure TMessagesFrame.MsgCtrlPopupMenuPopup(Sender: TObject);
ExampleMsg: String;
s: String;
HideItem: TLMVFilterHideMsgType;
Item: TMenuItem;
i: Integer;
Item: TIDEMenuCommand;
begin
// create one menuitem per filter item
UnhideMsgTypeMenuItem.Visible:=MessagesCtrl.ActiveFilter.HideMsgTypeCount>0;
MsgUnhideMsgTypeMenuSection.Visible:=MessagesCtrl.ActiveFilter.HideMsgTypeCount>0;
for i:=0 to MessagesCtrl.ActiveFilter.HideMsgTypeCount-1 do begin
Item:=UnhideMsgTypeMenuItem.Items[i];
if Item=UnhideMsgTypeSeparatorMenuItem then begin
Item:=TMenuItem.Create(UnhideMsgTypeMenuItem);
if i>=MsgUnhideMsgOfTypeMenuSection.Count then begin
Item:=RegisterIDEMenuCommand(MsgUnhideMsgOfTypeMenuSection,'MsgUnhideOfType'+IntToStr(i),'');
Item.Tag:=i;
Item.OnClick:=@UnhideMsgTypeClick;
UnhideMsgTypeMenuItem.Insert(i,Item);
end;
end else
Item:=MsgUnhideMsgTypeMenuSection.Items[i] as TIDEMenuCommand;
HideItem:=MessagesCtrl.ActiveFilter.HideMsgTypes[i];
s:=HideItem.SubTool;
if HideItem.MsgID<>0 then
@ -2947,43 +2948,46 @@ procedure TMessagesFrame.MsgCtrlPopupMenuPopup(Sender: TObject);
end;
// delete old menu items
i:=MessagesCtrl.ActiveFilter.HideMsgTypeCount;
while UnhideMsgTypeSeparatorMenuItem.MenuIndex>i do
UnhideMsgTypeMenuItem.Delete(i);
while MsgUnhideMsgTypeMenuSection.Count>i do
MsgUnhideMsgTypeMenuSection[i].Free;
MsgClearHideMsgTypesMenuItem.OnClick:=@ClearHideMsgTypesMenuItemClick;
end;
procedure UpdateFilterItems;
var
i: Integer;
Filter: TLMsgViewFilter;
Item: TMenuItem;
Item: TIDEMenuCommand;
begin
for i:=0 to MessagesCtrl.FilterCount-1 do begin
Filter:=MessagesCtrl.Filters[i];
if SwitchFilterMenuItem.Items[i]=FilterSeparatorMenuItem then begin
Item:=TMenuItem.Create(SwitchFilterMenuItem);
if i>=MsgSwitchFilterMenuSection.Count then begin
Item:=RegisterIDEMenuCommand(MsgSwitchFilterMenuSection,'MsgSwitchFilter'+IntToStr(i),'');
Item.Tag:=i;
Item.OnClick:=@OnSwitchFilterClick;
SwitchFilterMenuItem.Insert(i,Item);
end else
Item:=SwitchFilterMenuItem.Items[i];
Item:=MsgSwitchFilterMenuSection[i] as TIDEMenuCommand;
Item.Caption:=Filter.Caption;
Item.Checked:=Filter=MessagesCtrl.ActiveFilter;
end;
// delete old menu items
i:=MessagesCtrl.FilterCount;
while FilterSeparatorMenuItem.MenuIndex>i do
SwitchFilterMenuItem.Delete(i);
while MsgSwitchFilterMenuSection.Count>i do
MsgSwitchFilterMenuSection[i].Free;
MsgAddFilterMenuItem.OnClick:=@AddFilterMenuItemClick;
end;
procedure UpdateQuickFixes(CurLine: TMessageLine);
begin
// delete old
QuickFixesMenuItem.Clear;
MsgQuickFixMenuSection.Clear;
// create items
if CurLine<>nil then begin
IDEQuickFixes.SetMsgLines(CurLine);
IDEQuickFixes.OnPopupMenu(QuickFixesMenuItem);
IDEQuickFixes.OnPopupMenu(MsgQuickFixMenuSection);
end;
QuickFixesMenuItem.Visible:=QuickFixesMenuItem.Count>0;
MsgQuickFixMenuSection.Visible:=MsgQuickFixMenuSection.Count>0;
end;
var
@ -2999,84 +3003,113 @@ var
CanHideMsgType: Boolean;
MinUrgency: TMessageLineUrgency;
begin
HasText:=false;
HasFilename:=false;
MsgType:='';
CanHideMsgType:=false;
Line:=nil;
HasViewContent:=false;
Running:=false;
MessagesMenuRoot.MenuItem:=MsgCtrlPopupMenu.Items;
MessagesMenuRoot.BeginUpdate;
try
HasText:=false;
HasFilename:=false;
MsgType:='';
CanHideMsgType:=false;
Line:=nil;
HasViewContent:=false;
Running:=false;
// check all
for i:=0 to MessagesCtrl.ViewCount-1 do begin
View:=MessagesCtrl.Views[i];
if View.HasContent then
HasViewContent:=true;
if View.Running then
Running:=true;
end;
// check selection
View:=MessagesCtrl.SelectedView;
if View<>nil then begin
LineNumber:=MessagesCtrl.SelectedLine;
if LineNumber>=0 then begin
Line:=View.Lines[LineNumber];
HasFilename:=Line.Filename<>'';
HasText:=Line.Msg<>'';
if (Line.SubTool<>'') and (Line.MsgID<>0) then begin
MsgType:=Line.SubTool+' '+IntToStr(Line.MsgID);
CanHideMsgType:=ord(Line.Urgency)<ord(mluError);
end;
// check all
for i:=0 to MessagesCtrl.ViewCount-1 do begin
View:=MessagesCtrl.Views[i];
if View.HasContent then
HasViewContent:=true;
if View.Running then
Running:=true;
end;
InfoSeparatorMenuItem.Visible:=true;
MsgAboutToolMenuItem.Caption:='About '+View.Caption;
MsgAboutToolMenuItem.Visible:=true;
end else begin
InfoSeparatorMenuItem.Visible:=false;
MsgAboutToolMenuItem.Visible:=false;
MsgFindMenuItem.OnClick:=@FindMenuItemClick;
MsgClearMenuItem.OnClick:=@ClearMenuItemClick;
// check selection
View:=MessagesCtrl.SelectedView;
if View<>nil then begin
LineNumber:=MessagesCtrl.SelectedLine;
if LineNumber>=0 then begin
Line:=View.Lines[LineNumber];
HasFilename:=Line.Filename<>'';
HasText:=Line.Msg<>'';
if (Line.SubTool<>'') and (Line.MsgID<>0) then begin
MsgType:=Line.SubTool+' '+IntToStr(Line.MsgID);
CanHideMsgType:=ord(Line.Urgency)<ord(mluError);
end;
end;
MsgAboutToolMenuItem.Caption:='About '+View.Caption;
MsgAboutToolMenuItem.Visible:=true;
end else begin
MsgAboutToolMenuItem.Visible:=false;
end;
MsgAboutToolMenuItem.OnClick:=@AboutToolMenuItemClick;
if CanHideMsgType then begin
MsgHideMsgOfTypeMenuItem.Caption:='Hide all messages of type '+MsgType;
MsgHideMsgOfTypeMenuItem.Visible:=true;
end else begin
MsgHideMsgOfTypeMenuItem.Visible:=false;
end;
MsgHideMsgOfTypeMenuItem.OnClick:=@HideMsgOfTypeMenuItemClick;
MsgHideHintsWithoutPosMenuItem.Checked:=MessagesCtrl.ActiveFilter.HideNotesWithoutPos;
MsgHideHintsWithoutPosMenuItem.OnClick:=@HideHintsWithoutPosMenuItemClick;
MsgCopyMsgMenuItem.Enabled:=HasText;
MsgCopyMsgMenuItem.OnClick:=@CopyMsgMenuItemClick;
MsgCopyFilenameMenuItem.Enabled:=HasFilename;
MsgCopyFilenameMenuItem.OnClick:=@CopyFilenameMenuItemClick;
MsgCopyAllMenuItem.Enabled:=not Running;
MsgCopyAllMenuItem.OnClick:=@CopyAllMenuItemClick;
MsgCopyShownMenuItem.Enabled:=HasViewContent;
MsgCopyShownMenuItem.OnClick:=@CopyShownMenuItemClick;
MsgSaveAllToFileMenuItem.Enabled:=not Running;
MsgSaveAllToFileMenuItem.OnClick:=@SaveAllToFileMenuItemClick;
MsgSaveShownToFileMenuItem.Enabled:=HasViewContent;
MsgSaveShownToFileMenuItem.OnClick:=@SaveShownToFileMenuItemClick;
MinUrgency:=MessagesCtrl.ActiveFilter.MinUrgency;
MsgHideWarningsMenuItem.Checked:=MinUrgency in [mluError..mluPanic];
MsgHideWarningsMenuItem.OnClick:=@HideUrgencyMenuItemClick;
MsgHideNotesMenuItem.Checked:=MinUrgency in [mluWarning,mluImportant];
MsgHideNotesMenuItem.OnClick:=@HideUrgencyMenuItemClick;
MsgHideHintsMenuItem.Checked:=MinUrgency=mluNote;
MsgHideHintsMenuItem.OnClick:=@HideUrgencyMenuItemClick;
MsgHideVerboseMenuItem.Checked:=MinUrgency=mluHint;
MsgHideVerboseMenuItem.OnClick:=@HideUrgencyMenuItemClick;
MsgHideDebugMenuItem.Checked:=MinUrgency in [mluProgress..mluVerbose];
MsgHideDebugMenuItem.OnClick:=@HideUrgencyMenuItemClick;
MsgHideNoneMenuItem.Checked:=MinUrgency=mluNone;
MsgHideNoneMenuItem.OnClick:=@HideUrgencyMenuItemClick;
MsgFileStyleShortMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsShort;
MsgFileStyleShortMenuItem.OnClick:=@FileStyleMenuItemClick;
MsgFileStyleRelativeMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsRelative;
MsgFileStyleRelativeMenuItem.OnClick:=@FileStyleMenuItemClick;
MsgFileStyleFullMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsFull;
MsgFileStyleFullMenuItem.OnClick:=@FileStyleMenuItemClick;
MsgTranslateMenuItem.OnClick:=@TranslateMenuItemClick;
MsgShowIDMenuItem.OnClick:=@ShowIDMenuItemClick;
UpdateUnhideItems;
UpdateFilterItems;
UpdateQuickFixes(Line);
finally
MessagesMenuRoot.EndUpdate;
end;
if CanHideMsgType then begin
HideMsgOfTypeMenuItem.Caption:='Hide all messages of type '+MsgType;
HideMsgOfTypeMenuItem.Visible:=true;
end else begin
HideMsgOfTypeMenuItem.Visible:=false;
end;
MsgHideHintsWithoutPosMenuItem.Checked:=MessagesCtrl.ActiveFilter.HideNotesWithoutPos;
MsgCopyMsgMenuItem.Enabled:=HasText;
MsgCopyFilenameMenuItem.Enabled:=HasFilename;
MsgCopyAllMenuItem.Enabled:=not Running;
MsgCopyShownMenuItem.Enabled:=HasViewContent;
MsgSaveAllToFileMenuItem.Enabled:=not Running;
MsgSaveShownToFileMenuItem.Enabled:=HasViewContent;
MinUrgency:=MessagesCtrl.ActiveFilter.MinUrgency;
MsgHideWarningsMenuItem.Checked:=MinUrgency in [mluError..mluPanic];
MsgHideNotesMenuItem.Checked:=MinUrgency in [mluWarning,mluImportant];
MsgHideHintsMenuItem.Checked:=MinUrgency=mluNote;
MsgHideVerboseMenuItem.Checked:=MinUrgency=mluHint;
MsgHideDebugMenuItem.Checked:=MinUrgency in [mluProgress..mluVerbose];
MsgHideNoneMenuItem.Checked:=MinUrgency=mluNone;
MsgFileStyleShortMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsShort;
MsgFileStyleRelativeMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsRelative;
MsgFileStyleFullMenuItem.Checked:=MessagesCtrl.FilenameStyle=mcfsFull;
UpdateUnhideItems;
UpdateFilterItems;
UpdateQuickFixes(Line);
end;
procedure TMessagesFrame.OnSwitchFilterClick(Sender: TObject);
var
Item: TMenuItem;
Filter: TLMsgViewFilter;
Item: TIDEMenuCommand;
begin
Item:=Sender as TMenuItem;
Item:=Sender as TIDEMenuCommand;
Filter:=MessagesCtrl.GetFilter(Item.Caption,false);
if Filter=nil then exit;
MessagesCtrl.ActiveFilter:=Filter;
@ -3144,7 +3177,7 @@ procedure TMessagesFrame.UnhideMsgTypeClick(Sender: TObject);
var
i: PtrInt;
begin
i:=TMenuItem(Sender).Tag;
i:=TIDEMenuCommand(Sender).Tag;
if i<MessagesCtrl.ActiveFilter.HideMsgTypeCount then
MessagesCtrl.ActiveFilter.DeleteHideMsgType(i);
end;
@ -3351,6 +3384,11 @@ begin
MessagesCtrl.ActiveFilter.ClearHideMsgTypes;
end;
procedure TMessagesFrame.ClearMenuItemClick(Sender: TObject);
begin
MessagesCtrl.ClearViews;
end;
function TMessagesFrame.GetViews(Index: integer): TLMsgWndView;
begin
Result:=MessagesCtrl.Views[Index];

View File

@ -49,7 +49,7 @@ interface
uses
Classes, SysUtils, IDEExternToolIntf, IDEMsgIntf, LazIDEIntf, IDEDialogs,
Menus, Dialogs, Controls, etFPCMsgParser, AbstractsMethodsDlg,
MenuIntf, Menus, Dialogs, Controls, etFPCMsgParser, AbstractsMethodsDlg,
CodeToolManager, CodeCache, CodeTree, CodeAtom, BasicCodeTools, LazLogger,
AvgLvlTree, LazFileUtils;
@ -106,20 +106,20 @@ type
TIDEQuickFixes = class(TMsgQuickFixes)
private
FParentMenuItem: TMenuItem;
fMenuItemToInfo: TPointerToPointerTree; // TMenuItem to TMenuItemInfo
FParentMenuItem: TIDEMenuSection;
fMenuItemToInfo: TPointerToPointerTree; // TIDEMenuCommand to TMenuItemInfo
procedure MenuItemClick(Sender: TObject);
public
constructor Create(aOwner: TComponent); override;
destructor Destroy; override;
procedure OnPopupMenu(aParentMenuItem: TMenuItem);
procedure OnPopupMenu(aParentMenuItem: TIDEMenuSection);
procedure SetMsgLines(aMsg: TMessageLine);
procedure AddMsgLine(aMsg: TMessageLine);
procedure ClearLines;
function AddMenuItem(Fix: TMsgQuickFix; Msg: TMessageLine; aCaption: string;
aTag: PtrInt=0): TMenuItem; override;
aTag: PtrInt=0): TIDEMenuCommand; override;
function OpenMsg(Msg: TMessageLine): boolean;
property ParentMenuItem: TMenuItem read FParentMenuItem write FParentMenuItem;
property ParentMenuItem: TIDEMenuSection read FParentMenuItem write FParentMenuItem;
end;
var
@ -130,7 +130,7 @@ implementation
type
TMenuItemInfo = class
public
MenuItem: TMenuItem;
MenuItem: TIDEMenuCommand;
Fix: TMsgQuickFix;
Msg: TMessageLine;
end;
@ -642,8 +642,10 @@ var
Info: TMenuItemInfo;
ListsMsgLines: TFPList;
MsgLines: TMessageLines;
Cmd: TIDEMenuCommand;
begin
Info:=TMenuItemInfo(fMenuItemToInfo[Sender]);
Cmd:=Sender as TIDEMenuCommand;
Info:=TMenuItemInfo(fMenuItemToInfo[Cmd]);
if Info=nil then exit;
try
Info.Fix.QuickFix(Self,Info.Msg);
@ -682,7 +684,7 @@ begin
inherited Destroy;
end;
procedure TIDEQuickFixes.OnPopupMenu(aParentMenuItem: TMenuItem);
procedure TIDEQuickFixes.OnPopupMenu(aParentMenuItem: TIDEMenuSection);
var
i: Integer;
begin
@ -721,7 +723,7 @@ begin
end;
function TIDEQuickFixes.AddMenuItem(Fix: TMsgQuickFix; Msg: TMessageLine;
aCaption: string; aTag: PtrInt): TMenuItem;
aCaption: string; aTag: PtrInt): TIDEMenuCommand;
var
Info: TMenuItemInfo;
begin
@ -730,16 +732,14 @@ begin
if (aCaption='') then
raise Exception.Create('missing Caption');
if (ParentMenuItem.Count>50) then exit(nil);
Result:=TMenuItem.Create(Self);
Result:=RegisterIDEMenuCommand(ParentMenuItem,
'MsgQuickFix'+IntToStr(ParentMenuItem.Count),aCaption,@MenuItemClick);
Result.Tag:=aTag;
Info:=TMenuItemInfo.Create;
Info.MenuItem:=Result;
Info.Fix:=Fix;
Info.Msg:=Msg;
Info.MenuItem:=Result;
fMenuItemToInfo[Result]:=Info;
Result.Caption:=aCaption;
Result.Tag:=aTag;
Result.OnClick:=@MenuItemClick;
ParentMenuItem.Add(Result);
end;
function TIDEQuickFixes.OpenMsg(Msg: TMessageLine): boolean;

View File

@ -51,7 +51,7 @@ uses
{$ELSE}
OutputFilter,
{$ENDIF}
LazarusIDEStrConsts, IDEOptionDefs;
LazarusIDEStrConsts, IDEOptionDefs, EditorOptions;
const
MaxExtTools = ecExtToolLast-ecExtToolFirst+1;
@ -634,6 +634,7 @@ end;
procedure TExternalToolDialog.AddButtonClick(Sender: TObject);
var
MsgResult: TModalResult;
{$IFDEF EnableNewExtTools}
NewTool: TExternalToolMenuItem;
{$ELSE}
@ -648,11 +649,13 @@ begin
end;
{$IFDEF EnableNewExtTools}
NewTool:=TExternalToolMenuItem.Create(nil);
MsgResult:=ShowExtToolOptionDlg(fTransferMacros, NewTool, EditorOpts.KeyMap);
{$ELSE}
NewTool:=TExternalToolOptions.Create;
MsgResult:=ShowExtToolOptionDlg(fTransferMacros, NewTool,
TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys);
{$ENDIF}
if ShowExtToolOptionDlg(fTransferMacros, NewTool,
TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys)=mrOk then
if MsgResult=mrOk then
begin
fExtToolList.Add(NewTool);
Listbox.Items.Add(ToolDescription(fExtToolList.Count-1));
@ -747,7 +750,12 @@ begin
i:=Listbox.ItemIndex;
if i<0 then exit;
if ShowExtToolOptionDlg(fTransferMacros,fExtToolList[i],
TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys)=mrOk then
{$IFDEF EnableNewExtTools}
EditorOpts.KeyMap
{$ELSE}
TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys
{$ENDIF}
)=mrOk then
begin
Listbox.Items[i]:=ToolDescription(i);
EnableButtons;

View File

@ -48,6 +48,7 @@ uses
IDECommands, FileProcs, TransferMacros, LazarusIDEStrConsts, EnvironmentOpts,
KeyMapping, IDEProcs
{$IFDEF EnableNewExtTools}
,LazConfigStorage, contnrs
{$ELSE}
,EditMsgScannersDlg
{$ENDIF}
@ -218,7 +219,7 @@ type
function ShowExtToolOptionDlg(TransferMacroList: TTransferMacroList;
ExternalToolOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
ExternalToolMenuItem: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
AllKeys: TKeyCommandRelationList):TModalResult;
implementation
@ -226,7 +227,7 @@ implementation
{$R *.lfm}
function ShowExtToolOptionDlg(TransferMacroList: TTransferMacroList;
ExternalToolOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
ExternalToolMenuItem: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
AllKeys: TKeyCommandRelationList):TModalResult;
var
ExternalToolOptionDlg: TExternalToolOptionDlg;
@ -235,11 +236,11 @@ begin
ExternalToolOptionDlg:=TExternalToolOptionDlg.Create(nil);
try
ExternalToolOptionDlg.fAllKeys:=AllKeys;
ExternalToolOptionDlg.Options:=ExternalToolOptions;
ExternalToolOptionDlg.Options:=ExternalToolMenuItem;
ExternalToolOptionDlg.MacroList:=TransferMacroList;
Result:=ExternalToolOptionDlg.ShowModal;
if Result=mrOk then
ExternalToolOptions.Assign(ExternalToolOptionDlg.Options);
ExternalToolMenuItem.Assign(ExternalToolOptionDlg.Options);
finally
ExternalToolOptionDlg.Free;
end;

View File

@ -34,13 +34,15 @@ interface
uses
Classes, SysUtils, types, math, AVL_Tree, LazLogger, LazFileUtils, LazUTF8,
Forms, Controls, ExtCtrls, ComCtrls, StdCtrls, Buttons, Dialogs, Menus, Clipbrd,
LvlGraphCtrl,
LazIDEIntf, ProjectIntf, IDEWindowIntf, PackageIntf, SrcEditorIntf,
IDEImagesIntf, IDECommands, IDEDialogs, IDEMsgIntf, TextTools,
Forms, Controls, ExtCtrls, ComCtrls, StdCtrls, Buttons, Dialogs, Menus,
Clipbrd, LvlGraphCtrl, LazIDEIntf, ProjectIntf, IDEWindowIntf, PackageIntf,
SrcEditorIntf, IDEImagesIntf, IDECommands, IDEDialogs, IDEMsgIntf, TextTools,
{$IFDEF EnableNewExtTools}
IDEExternToolIntf,
{$ENDIF}
CodeToolManager, DefineTemplates, CodeToolsStructs,
CTUnitGraph, CTUnitGroupGraph, FileProcs, CodeCache,
LazarusIDEStrConsts, UnusedUnitsDlg;
CTUnitGraph, CTUnitGroupGraph, FileProcs, CodeCache, LazarusIDEStrConsts,
UnusedUnitsDlg;
const
GroupPrefixProject = '-Project-';
@ -297,6 +299,17 @@ type
write SetPendingUnitDependencyRoute; // list of unit names, missing links are automatically found
end;
{$IFDEF EnableNewExtTools}
type
{ TQuickFixCircularUnitReference }
TQuickFixCircularUnitReference = class(TMsgQuickFix)
public
procedure CreateMenuItems(Fixes: TMsgQuickFixes); override;
procedure QuickFix(Fixes: TMsgQuickFixes; Msg: TMessageLine); override;
end;
{$ELSE}
type
{ TQuickFixCircularUnitReference }
@ -307,6 +320,7 @@ type
function IsApplicable(Line: TIDEMessageLine): boolean; override;
procedure Execute(const Msg: TIDEMessageLine; Step: TIMQuickFixStep); override;
end;
{$ENDIF}
var
UnitDependenciesWindow: TUnitDependenciesWindow;
@ -408,6 +422,48 @@ begin
inherited Destroy;
end;
{$IFDEF EnableNewExtTools}
{ TQuickFixCircularUnitReference }
procedure TQuickFixCircularUnitReference.CreateMenuItems(
Fixes: TMsgQuickFixes);
var
Msg: TMessageLine;
Code: TCodeBuffer;
begin
if Fixes.LineCount<>1 then exit;
Msg:=Fixes.Lines[0];
if not Msg.HasSourcePosition then exit;
if Msg.SubTool<>SubToolFPC then exit;
if Msg.MsgID<>10020 then exit;
Code:=CodeToolBoss.LoadFile(Msg.GetFullFilename,true,false);
if Code=nil then exit;
Fixes.AddMenuItem(Self,Msg,'Show unit dependencies');
end;
procedure TQuickFixCircularUnitReference.QuickFix(Fixes: TMsgQuickFixes;
Msg: TMessageLine);
var
UnitName1: String;
UnitName2: String;
Path: TStringList;
begin
if not TFPCParser.GetFPCMsgValues(Msg,UnitName1,UnitName2) then begin
debugln(['TQuickFixCircularUnitReference.QuickFix invalid message ',Msg.Msg]);
exit;
end;
ShowUnitDependencies(true,true);
Path:=TStringList.Create;
try
Path.Add(UnitName1);
Path.Add(UnitName2);
Path.Add(UnitName1);
UnitDependenciesWindow.PendingUnitDependencyRoute:=Path;
finally
Path.Free;
end;
end;
{$ELSE}
{ TQuickFixCircularUnitReference }
constructor TQuickFixCircularUnitReference.Create;
@ -467,6 +523,7 @@ begin
Path.Free;
end;
end;
{$ENDIF}
{ TUDNode }