IDE: codebrowser: menu item add package to package of unit in src editor

git-svn-id: trunk@21513 -
This commit is contained in:
mattias 2009-09-01 10:42:46 +00:00
parent a9ffff9a88
commit 31ed9af15f
4 changed files with 104 additions and 27 deletions

View File

@ -1,7 +1,7 @@
object CodeBrowserView: TCodeBrowserView
Left = 315
Left = 325
Height = 563
Top = 203
Top = 251
Width = 623
ActiveControl = ScopeComboBox
Caption = 'CodeBrowserView'
@ -394,6 +394,10 @@ object CodeBrowserView: TCodeBrowserView
Caption = 'AddPkgToProjectMenuItem'
OnClick = AddPkgToProjectMenuItemClick
end
object AddPkgToCurUnitMenuItem: TMenuItem
Caption = 'AddPkgToCurUnitMenuItem'
OnClick = AddPkgToCurUnitMenuItemClick
end
object UseSeparatorMenuItem: TMenuItem
Caption = '-'
end

View File

@ -1,8 +1,8 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TCodeBrowserView','FORMDATA',[
'TPF0'#16'TCodeBrowserView'#15'CodeBrowserView'#4'Left'#3';'#1#6'Height'#3'3'
+#2#3'Top'#3#203#0#5'Width'#3'o'#2#13'ActiveControl'#7#13'ScopeComboBox'#7'Ca'
'TPF0'#16'TCodeBrowserView'#15'CodeBrowserView'#4'Left'#3'E'#1#6'Height'#3'3'
+#2#3'Top'#3#251#0#5'Width'#3'o'#2#13'ActiveControl'#7#13'ScopeComboBox'#7'Ca'
+'ption'#6#15'CodeBrowserView'#12'ClientHeight'#3'3'#2#11'ClientWidth'#3'o'#2
+#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#10'LCLVersion'#6
+#6'0.9.29'#0#9'TGroupBox'#13'ScopeGroupBox'#4'Left'#2#6#6'Height'#2'<'#3'Top'
@ -146,22 +146,24 @@ LazarusResources.Add('TCodeBrowserView','FORMDATA',[
+'dentifierMenuItem'#7'OnClick'#7#27'CopyIdentifierMenuItemClick'#0#0#9'TMenu'
+'Item'#21'CopySeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#23'AddPk'
+'gToProjectMenuItem'#7'Caption'#6#23'AddPkgToProjectMenuItem'#7'OnClick'#7#28
+'AddPkgToProjectMenuItemClick'#0#0#9'TMenuItem'#20'UseSeparatorMenuItem'#7'C'
+'aption'#6#1'-'#0#0#9'TMenuItem'#25'ExpandAllPackagesMenuItem'#7'Caption'#6
+#25'ExpandAllPackagesMenuItem'#7'OnClick'#7#30'ExpandAllPackagesMenuItemClic'
+'k'#0#0#9'TMenuItem'#27'CollapseAllPackagesMenuItem'#7'Caption'#6#27'Collaps'
+'eAllPackagesMenuItem'#7'OnClick'#7' CollapseAllPackagesMenuItemClick'#0#0#9
+'TMenuItem'#28'AllPackagesSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuIt'
+'em'#22'ExpandAllUnitsMenuItem'#7'Caption'#6#22'ExpandAllUnitsMenuItem'#7'On'
+'Click'#7#27'ExpandAllUnitsMenuItemClick'#0#0#9'TMenuItem'#24'CollapseAllUni'
+'tsMenuItem'#7'Caption'#6#24'CollapseAllUnitsMenuItem'#7'OnClick'#7#29'Colla'
+'pseAllUnitsMenuItemClick'#0#0#9'TMenuItem'#25'AllUnitsSeparatorMenuItem'#7
+'Caption'#6#1'-'#0#0#9'TMenuItem'#24'ExpandAllClassesMenuItem'#7'Caption'#6
+#24'ExpandAllClassesMenuItem'#7'OnClick'#7#29'ExpandAllClassesMenuItemClick'
+#0#0#9'TMenuItem'#26'CollapseAllClassesMenuItem'#7'Caption'#6#26'CollapseAll'
+'ClassesMenuItem'#7'OnClick'#7#31'CollapseAllClassesMenuItemClick'#0#0#9'TMe'
+'nuItem'#27'AllClassesSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'
+#14'ExportMenuItem'#7'Caption'#6#14'ExportMenuItem'#7'OnClick'#7#19'ExportMe'
+'nuItemClick'#0#0#0#10'TIdleTimer'#10'IdleTimer1'#7'OnTimer'#7#15'IdleTimer1'
+'Timer'#4'left'#3'^'#1#3'top'#3#196#0#0#0#0
+'AddPkgToProjectMenuItemClick'#0#0#9'TMenuItem'#23'AddPkgToCurUnitMenuItem'#7
+'Caption'#6#23'AddPkgToCurUnitMenuItem'#7'OnClick'#7#28'AddPkgToCurUnitMenuI'
+'temClick'#0#0#9'TMenuItem'#20'UseSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9
+'TMenuItem'#25'ExpandAllPackagesMenuItem'#7'Caption'#6#25'ExpandAllPackagesM'
+'enuItem'#7'OnClick'#7#30'ExpandAllPackagesMenuItemClick'#0#0#9'TMenuItem'#27
+'CollapseAllPackagesMenuItem'#7'Caption'#6#27'CollapseAllPackagesMenuItem'#7
+'OnClick'#7' CollapseAllPackagesMenuItemClick'#0#0#9'TMenuItem'#28'AllPackag'
+'esSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#22'ExpandAllUnitsMe'
+'nuItem'#7'Caption'#6#22'ExpandAllUnitsMenuItem'#7'OnClick'#7#27'ExpandAllUn'
+'itsMenuItemClick'#0#0#9'TMenuItem'#24'CollapseAllUnitsMenuItem'#7'Caption'#6
+#24'CollapseAllUnitsMenuItem'#7'OnClick'#7#29'CollapseAllUnitsMenuItemClick'
+#0#0#9'TMenuItem'#25'AllUnitsSeparatorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMen'
+'uItem'#24'ExpandAllClassesMenuItem'#7'Caption'#6#24'ExpandAllClassesMenuIte'
+'m'#7'OnClick'#7#29'ExpandAllClassesMenuItemClick'#0#0#9'TMenuItem'#26'Colla'
+'pseAllClassesMenuItem'#7'Caption'#6#26'CollapseAllClassesMenuItem'#7'OnClic'
+'k'#7#31'CollapseAllClassesMenuItemClick'#0#0#9'TMenuItem'#27'AllClassesSepa'
+'ratorMenuItem'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#14'ExportMenuItem'#7'Capt'
+'ion'#6#14'ExportMenuItem'#7'OnClick'#7#19'ExportMenuItemClick'#0#0#0#10'TId'
+'leTimer'#10'IdleTimer1'#7'OnTimer'#7#15'IdleTimer1Timer'#4'left'#3'^'#1#3't'
+'op'#3#196#0#0#0#0
]);

View File

@ -52,8 +52,8 @@ uses
CodeToolManager, PascalParserTool, LinkScanner, FileProcs, CodeIndex,
StdCodeTools,
// IDEIntf
IDEDialogs, LazConfigStorage, Project, PackageIntf, IDECommands, LazIDEIntf,
DialogProcs,
SrcEditorIntf, IDEDialogs, LazConfigStorage, Project, PackageIntf,
IDECommands, LazIDEIntf, DialogProcs,
// IDE
PackageSystem, PackageDefs, LazarusIDEStrConsts, IDEOptionDefs,
BasePkgManager, AddToProjectDlg, EnvironmentOpts, Menus;
@ -172,6 +172,7 @@ type
BrowseTreeView: TTreeView;
IdleTimer1: TIdleTimer;
AddPkgToProjectMenuItem: TMenuItem;
AddPkgToCurUnitMenuItem: TMenuItem;
UseSeparatorMenuItem: TMenuItem;
ShowEmptyNodesCheckBox: TCheckBox;
CollapseAllClassesMenuItem: TMenuItem;
@ -208,6 +209,7 @@ type
UnitFilterBeginsSpeedButton: TSpeedButton;
UnitFilterContainsSpeedButton: TSpeedButton;
UnitFilterEdit: TEdit;
procedure AddPkgToCurUnitMenuItemClick(Sender: TObject);
procedure AddPkgToProjectMenuItemClick(Sender: TObject);
procedure BrowseTreeViewMouseDown(Sender: TOBject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
@ -316,6 +318,7 @@ type
procedure CopyNode(TVNode: TTreeNode; NodeType: TCopyNodeType);
procedure InvalidateStage(AStage: TCodeBrowserWorkStage);
function GetSelectedPackage: TLazPackage;
function GetCurPackageInSrcEditor: TLazPackage;
procedure OpenTVNode(TVNode: TTreeNode);
public
procedure BeginUpdate;
@ -409,7 +412,8 @@ begin
ExportMenuItem.Caption:=lisExport;
OpenMenuItem.Caption:=lisHintOpen;
AddPkgToProjectMenuItem.Caption:=lisAddPackageDependencyToProject;
AddPkgToCurUnitMenuItem.Caption:=lisAddPackageDependencyToActiveUnit;
PackageFilterBeginsSpeedButton.Caption:=lisBegins;
PackageFilterBeginsSpeedButton.Hint:=lisPackageNameBeginsWith;
PackageFilterContainsSpeedButton.Caption:=lisContains;
@ -466,6 +470,8 @@ var
UnitList: TCodeBrowserUnitList;
EnableAddPkgToProject: Boolean;
APackage: TLazPackage;
EnableAddPkgToCurUnit: Boolean;
TargetPackage: TLazPackage;
begin
ExpandAllPackagesMenuItem.Visible:=Options.HasLevel(cblPackages);
CollapseAllPackagesMenuItem.Visible:=ExpandAllPackagesMenuItem.Visible;
@ -482,8 +488,9 @@ begin
TVNode:=BrowseTreeView.Selected;
Node:=nil;
if TVNode<>nil then
Node:=TOBject(TVNode.Data);
Node:=TObject(TVNode.Data);
EnableAddPkgToProject:=false;
EnableAddPkgToCurUnit:=false;
if Node<>nil then begin
if Node is TCodeBrowserNode then
Identifier:=TCodeBrowserNode(Node).Identifier
@ -502,8 +509,22 @@ begin
// package
APackage:=PackageGraph.FindAPackageWithName(UnitList.Owner,nil);
if APackage<>nil then begin
if Project1.FindDependencyByName(APackage.Name)=nil then
// check if package can be added to project
if Project1.FindDependencyByName(APackage.Name)=nil then begin
EnableAddPkgToProject:=true;
AddPkgToProjectMenuItem.Caption:=Format(lisAddPackageToProject, [
APackage.Name]);
end;
// check if package can be added to package of src editor unit
TargetPackage:=GetCurPackageInSrcEditor;
if (TargetPackage<>nil)
and (SysUtils.CompareText(TargetPackage.Name,APackage.Name)<>0)
and (TargetPackage.FindDependencyByName(APackage.Name)=nil) then begin
EnableAddPkgToCurUnit:=true;
AddPkgToCurUnitMenuItem.Caption:=Format(
lisAddPackageToPackage, [APackage.Name,
TargetPackage.Name]);
end;
end;
end;
end;
@ -516,12 +537,15 @@ begin
CopySeparatorMenuItem.Visible:=true;
AddPkgToProjectMenuItem.Enabled:=EnableAddPkgToProject;
AddPkgToProjectMenuItem.Visible:=true;
AddPkgToCurUnitMenuItem.Enabled:=EnableAddPkgToCurUnit;
AddPkgToCurUnitMenuItem.Visible:=true;
end else begin
OpenMenuItem.Visible:=false;
CopyDescriptionMenuItem.Visible:=false;
CopyIdentifierMenuItem.Visible:=false;
CopySeparatorMenuItem.Visible:=false;
AddPkgToProjectMenuItem.Visible:=false;
AddPkgToCurUnitMenuItem.Visible:=false;
end;
end;
@ -2214,6 +2238,29 @@ begin
Result:=PackageGraph.FindAPackageWithName(UnitList.Owner,nil);
end;
function TCodeBrowserView.GetCurPackageInSrcEditor: TLazPackage;
var
SrcEdit: TSourceEditorInterface;
Owners: TFPList;
i: Integer;
begin
Result:=nil;
SrcEdit:=SourceEditorWindow.ActiveEditor;
if SrcEdit=nil then exit;
Owners:=PkgBoss.GetOwnersOfUnit(SrcEdit.FileName);
try
if (Owners=nil) then exit;
for i:=0 to Owners.Count-1 do begin
if TObject(Owners[i]) is TLazPackage then begin
Result:=TLazPackage(Owners[i]);
exit;
end;
end;
finally
Owners.Free;
end;
end;
procedure TCodeBrowserView.OpenTVNode(TVNode: TTreeNode);
var
NodeData: TObject;
@ -2417,6 +2464,27 @@ begin
PkgBoss.AddProjectDependency(Project1,APackage);
end;
procedure TCodeBrowserView.AddPkgToCurUnitMenuItemClick(Sender: TObject);
var
APackage: TLazPackage;
TargetPackage: TLazPackage;
List: TFPList;
begin
APackage:=GetSelectedPackage;
if APackage=nil then exit;
TargetPackage:=GetCurPackageInSrcEditor;
if TargetPackage=nil then exit;
List:=TFPList.Create;
try
List.Add(TargetPackage);
if PkgBoss.AddDependencyToOwners(List,APackage)=mrOk then begin
PackageEditingInterface.DoOpenPackageWithName(TargetPackage.Name,[],false);
end;
finally
List.Free;
end;
end;
{ TCodeBrowserViewOptions }
procedure TCodeBrowserViewOptions.SetModified(const AValue: boolean);

View File

@ -4465,6 +4465,9 @@ resourcestring
lisInsertPrintShortTag = 'Insert PrintShort tag';
lisAutomaticallyInvokeAfterPoint = 'Automatically invoke after point';
lisShowEmptyUnitsPackages = 'Show empty units/packages';
lisAddPackageDependencyToActiveUnit = 'Add package dependency to active unit';
lisAddPackageToProject = 'Add package %s to project';
lisAddPackageToPackage = 'Add package %s to package %s';
implementation