mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 19:00:59 +02:00
implemented sort package files
git-svn-id: trunk@4849 -
This commit is contained in:
parent
2f74ed4559
commit
94fc75e267
@ -1176,8 +1176,8 @@ begin
|
|||||||
ecSaveProjectAs : Result:= lisMenuSaveProjectAs;
|
ecSaveProjectAs : Result:= lisMenuSaveProjectAs;
|
||||||
ecPublishProject : Result:= lisMenuPublishProject;
|
ecPublishProject : Result:= lisMenuPublishProject;
|
||||||
ecProjectInspector : Result:= lisMenuProjectInspector;
|
ecProjectInspector : Result:= lisMenuProjectInspector;
|
||||||
ecAddCurUnitToProj : Result:= lisMenuAddUnitToProject;
|
ecAddCurUnitToProj : Result:= lisMenuAddToProject;
|
||||||
ecRemoveFromProj : Result:= lisMenuRemoveUnitFromProject;
|
ecRemoveFromProj : Result:= lisMenuRemoveFromProject;
|
||||||
ecViewProjectSource : Result:= lisMenuViewSource;
|
ecViewProjectSource : Result:= lisMenuViewSource;
|
||||||
ecViewProjectTodos : Result:= lisMenuViewProjectTodos;
|
ecViewProjectTodos : Result:= lisMenuViewProjectTodos;
|
||||||
ecProjectOptions : Result:= lisMenuProjectOptions;
|
ecProjectOptions : Result:= lisMenuProjectOptions;
|
||||||
|
@ -193,8 +193,8 @@ resourcestring
|
|||||||
lisMenuSaveProjectAs = 'Save Project As...';
|
lisMenuSaveProjectAs = 'Save Project As...';
|
||||||
lisMenuPublishProject = 'Publish Project';
|
lisMenuPublishProject = 'Publish Project';
|
||||||
lisMenuProjectInspector = 'Project Inspector';
|
lisMenuProjectInspector = 'Project Inspector';
|
||||||
lisMenuAddUnitToProject = 'Add active unit to Project';
|
lisMenuAddToProject = 'Add editor file to Project';
|
||||||
lisMenuRemoveUnitFromProject = 'Remove from Project';
|
lisMenuRemoveFromProject = 'Remove from Project';
|
||||||
lisMenuViewSource = 'View Source';
|
lisMenuViewSource = 'View Source';
|
||||||
lisMenuViewProjectTodos = 'View ToDo List';
|
lisMenuViewProjectTodos = 'View ToDo List';
|
||||||
lisMenuProjectOptions = 'Project Options...';
|
lisMenuProjectOptions = 'Project Options...';
|
||||||
|
@ -1116,12 +1116,12 @@ begin
|
|||||||
|
|
||||||
itmProjectAddTo := TMenuItem.Create(Self);
|
itmProjectAddTo := TMenuItem.Create(Self);
|
||||||
itmProjectAddTo.Name:='itmProjectAddTo';
|
itmProjectAddTo.Name:='itmProjectAddTo';
|
||||||
itmProjectAddTo.Caption := lisMenuAddUnitToProject;
|
itmProjectAddTo.Caption := lisMenuAddToProject;
|
||||||
mnuProject.Add(itmProjectAddTo);
|
mnuProject.Add(itmProjectAddTo);
|
||||||
|
|
||||||
itmProjectRemoveFrom := TMenuItem.Create(Self);
|
itmProjectRemoveFrom := TMenuItem.Create(Self);
|
||||||
itmProjectRemoveFrom.Name:='itmProjectRemoveFrom';
|
itmProjectRemoveFrom.Name:='itmProjectRemoveFrom';
|
||||||
itmProjectRemoveFrom.Caption := lisMenuRemoveUnitFromProject;
|
itmProjectRemoveFrom.Caption := lisMenuRemoveFromProject;
|
||||||
mnuProject.Add(itmProjectRemoveFrom);
|
mnuProject.Add(itmProjectRemoveFrom);
|
||||||
|
|
||||||
mnuProject.Add(CreateMenuSeparator);
|
mnuProject.Add(CreateMenuSeparator);
|
||||||
|
@ -611,6 +611,7 @@ type
|
|||||||
function GetIncludePath(RelativeToBaseDir: boolean): string;
|
function GetIncludePath(RelativeToBaseDir: boolean): string;
|
||||||
function NeedsDefineTemplates: boolean;
|
function NeedsDefineTemplates: boolean;
|
||||||
// files
|
// files
|
||||||
|
function IndexOfPkgFile(PkgFile: TPkgFile): integer;
|
||||||
procedure ShortenFilename(var ExpandedFilename: string; UseUp: boolean);
|
procedure ShortenFilename(var ExpandedFilename: string; UseUp: boolean);
|
||||||
procedure LongenFilename(var AFilename: string);
|
procedure LongenFilename(var AFilename: string);
|
||||||
function FindPkgFile(const AFilename: string;
|
function FindPkgFile(const AFilename: string;
|
||||||
@ -626,6 +627,8 @@ type
|
|||||||
procedure RemoveFile(PkgFile: TPkgFile);
|
procedure RemoveFile(PkgFile: TPkgFile);
|
||||||
procedure UnremovePkgFile(PkgFile: TPkgFile);
|
procedure UnremovePkgFile(PkgFile: TPkgFile);
|
||||||
function GetFileDialogInitialDir(const DefaultDirectory: string): string;
|
function GetFileDialogInitialDir(const DefaultDirectory: string): string;
|
||||||
|
procedure MoveFile(CurIndex, NewIndex: integer);
|
||||||
|
procedure SortFiles;
|
||||||
// required dependencies (plus removed required dependencies)
|
// required dependencies (plus removed required dependencies)
|
||||||
function FindDependencyByName(const PkgName: string): TPkgDependency;
|
function FindDependencyByName(const PkgName: string): TPkgDependency;
|
||||||
function RequiredDepByIndex(Index: integer): TPkgDependency;
|
function RequiredDepByIndex(Index: integer): TPkgDependency;
|
||||||
@ -767,6 +770,7 @@ function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
|
|||||||
function CompareUnitsTree(UnitTree1, UnitTree2: TPkgUnitsTree): integer;
|
function CompareUnitsTree(UnitTree1, UnitTree2: TPkgUnitsTree): integer;
|
||||||
function ComparePackageWithUnitsTree(Package: TLazPackage;
|
function ComparePackageWithUnitsTree(Package: TLazPackage;
|
||||||
UnitTree: TPkgUnitsTree): integer;
|
UnitTree: TPkgUnitsTree): integer;
|
||||||
|
function ComparePkgFilesAlphabetically(PkgFile1, PkgFile2: TPkgFile): integer;
|
||||||
|
|
||||||
function GetUsageOptionsList(PackageList: TList): TList;
|
function GetUsageOptionsList(PackageList: TList): TList;
|
||||||
|
|
||||||
@ -984,6 +988,13 @@ begin
|
|||||||
Result:=Package.Compare(UnitTree.LazPackage);
|
Result:=Package.Compare(UnitTree.LazPackage);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ComparePkgFilesAlphabetically(PkgFile1, PkgFile2: TPkgFile): integer;
|
||||||
|
begin
|
||||||
|
Result:=AnsiCompareText(PkgFile1.UnitName,PkgFile2.UnitName);
|
||||||
|
if Result<>0 then exit;
|
||||||
|
Result:=CompareFilenames(PkgFile1.FileName,PkgFile2.FileName);
|
||||||
|
end;
|
||||||
|
|
||||||
function GetUsageOptionsList(PackageList: TList): TList;
|
function GetUsageOptionsList(PackageList: TList): TList;
|
||||||
var
|
var
|
||||||
Cnt: Integer;
|
Cnt: Integer;
|
||||||
@ -2482,6 +2493,35 @@ begin
|
|||||||
Result:=Directory;
|
Result:=Directory;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TLazPackage.MoveFile(CurIndex, NewIndex: integer);
|
||||||
|
begin
|
||||||
|
if CurIndex=NewIndex then exit;
|
||||||
|
FFiles.Move(CurIndex,NewIndex);
|
||||||
|
Modified:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TLazPackage.SortFiles;
|
||||||
|
var
|
||||||
|
NewList: TList;
|
||||||
|
Cnt: Integer;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
if FileCount=0 then exit;
|
||||||
|
NewList:=TList.Create;
|
||||||
|
try
|
||||||
|
Cnt:=FileCount;
|
||||||
|
NewList.Assign(FFiles);
|
||||||
|
NewList.Sort(@ComparePkgFilesAlphabetically);
|
||||||
|
i:=Cnt-1;
|
||||||
|
while (i>=0) and (NewList[i]=FFiles[i]) do dec(i);
|
||||||
|
if i<0 then exit;
|
||||||
|
FFiles.Assign(NewList);
|
||||||
|
Modified:=true;
|
||||||
|
finally
|
||||||
|
NewList.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TLazPackage.RemoveRemovedDependency(Dependency: TPkgDependency);
|
procedure TLazPackage.RemoveRemovedDependency(Dependency: TPkgDependency);
|
||||||
begin
|
begin
|
||||||
Dependency.RemoveFromList(FFirstRemovedDependency,pdlRequires);
|
Dependency.RemoveFromList(FFirstRemovedDependency,pdlRequires);
|
||||||
@ -2645,6 +2685,12 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TLazPackage.IndexOfPkgFile(PkgFile: TPkgFile): integer;
|
||||||
|
begin
|
||||||
|
Result:=FileCount-1;
|
||||||
|
while (Files[Result]<>PkgFile) do dec(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TPkgComponent }
|
{ TPkgComponent }
|
||||||
|
|
||||||
procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile);
|
procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile);
|
||||||
|
@ -135,6 +135,8 @@ type
|
|||||||
procedure MoreBitBtnClick(Sender: TObject);
|
procedure MoreBitBtnClick(Sender: TObject);
|
||||||
procedure MoveDependencyUpClick(Sender: TObject);
|
procedure MoveDependencyUpClick(Sender: TObject);
|
||||||
procedure MoveDependencyDownClick(Sender: TObject);
|
procedure MoveDependencyDownClick(Sender: TObject);
|
||||||
|
procedure MoveFileUpMenuItemClick(Sender: TObject);
|
||||||
|
procedure MoveFileDownMenuItemClick(Sender: TObject);
|
||||||
procedure OpenFileMenuItemClick(Sender: TObject);
|
procedure OpenFileMenuItemClick(Sender: TObject);
|
||||||
procedure OptionsBitBtnClick(Sender: TObject);
|
procedure OptionsBitBtnClick(Sender: TObject);
|
||||||
procedure PackageEditorFormClose(Sender: TObject; var Action: TCloseAction);
|
procedure PackageEditorFormClose(Sender: TObject; var Action: TCloseAction);
|
||||||
@ -148,6 +150,7 @@ type
|
|||||||
procedure RevertClick(Sender: TObject);
|
procedure RevertClick(Sender: TObject);
|
||||||
procedure SaveBitBtnClick(Sender: TObject);
|
procedure SaveBitBtnClick(Sender: TObject);
|
||||||
procedure SaveAsClick(Sender: TObject);
|
procedure SaveAsClick(Sender: TObject);
|
||||||
|
procedure SortFilesMenuItemClick(Sender: TObject);
|
||||||
procedure UninstallClick(Sender: TObject);
|
procedure UninstallClick(Sender: TObject);
|
||||||
procedure UseMaxVersionCheckBoxClick(Sender: TObject);
|
procedure UseMaxVersionCheckBoxClick(Sender: TObject);
|
||||||
procedure UseMinVersionCheckBoxClick(Sender: TObject);
|
procedure UseMinVersionCheckBoxClick(Sender: TObject);
|
||||||
@ -181,6 +184,8 @@ type
|
|||||||
procedure DoCompile(CompileClean, CompileRequired: boolean);
|
procedure DoCompile(CompileClean, CompileRequired: boolean);
|
||||||
procedure DoRevert;
|
procedure DoRevert;
|
||||||
procedure DoPublishProject;
|
procedure DoPublishProject;
|
||||||
|
procedure DoMoveCurrentFile(Offset: integer);
|
||||||
|
procedure DoSortFiles;
|
||||||
public
|
public
|
||||||
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
|
property LazPackage: TLazPackage read FLazPackage write SetLazPackage;
|
||||||
end;
|
end;
|
||||||
@ -406,6 +411,8 @@ var
|
|||||||
CurDependency: TPkgDependency;
|
CurDependency: TPkgDependency;
|
||||||
Removed: boolean;
|
Removed: boolean;
|
||||||
CurFile: TPkgFile;
|
CurFile: TPkgFile;
|
||||||
|
Writable: Boolean;
|
||||||
|
FileIndex: Integer;
|
||||||
|
|
||||||
function AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent;
|
function AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent;
|
||||||
EnabledFlag: boolean): TMenuItem;
|
EnabledFlag: boolean): TMenuItem;
|
||||||
@ -459,16 +466,23 @@ var
|
|||||||
begin
|
begin
|
||||||
ItemCnt:=0;
|
ItemCnt:=0;
|
||||||
CurDependency:=GetCurrentDependency(Removed);
|
CurDependency:=GetCurrentDependency(Removed);
|
||||||
|
Writable:=(not LazPackage.ReadOnly);
|
||||||
if CurDependency=nil then
|
if CurDependency=nil then
|
||||||
CurFile:=GetCurrentFile(Removed)
|
CurFile:=GetCurrentFile(Removed)
|
||||||
else
|
else
|
||||||
CurFile:=nil;
|
CurFile:=nil;
|
||||||
|
|
||||||
if CurFile<>nil then begin
|
if CurFile<>nil then begin
|
||||||
|
FileIndex:=LazPackage.IndexOfPkgFile(CurFile);
|
||||||
if not Removed then begin
|
if not Removed then begin
|
||||||
AddPopupMenuItem(lisOpenFile, @OpenFileMenuItemClick, true);
|
AddPopupMenuItem(lisOpenFile, @OpenFileMenuItemClick, true);
|
||||||
AddPopupMenuItem(lisPckEditRemoveFile, @RemoveBitBtnClick,
|
AddPopupMenuItem(lisPckEditRemoveFile, @RemoveBitBtnClick,
|
||||||
RemoveBitBtn.Enabled);
|
RemoveBitBtn.Enabled);
|
||||||
|
AddPopupMenuItem('Move file up', @MoveFileUpMenuItemClick,
|
||||||
|
(FileIndex>0) and Writable);
|
||||||
|
AddPopupMenuItem('Move file down', @MoveFileDownMenuItemClick,
|
||||||
|
(FileIndex<LazPackage.FileCount-1) and Writable);
|
||||||
|
AddPopupMenuItem('Sort files', @SortFilesMenuItemClick, Writable);
|
||||||
AddFileTypeMenuItem;
|
AddFileTypeMenuItem;
|
||||||
end else begin
|
end else begin
|
||||||
AddPopupMenuItem(lisOpenFile, @OpenFileMenuItemClick, true);
|
AddPopupMenuItem(lisOpenFile, @OpenFileMenuItemClick, true);
|
||||||
@ -484,10 +498,10 @@ begin
|
|||||||
RemoveBitBtn.Enabled);
|
RemoveBitBtn.Enabled);
|
||||||
AddPopupMenuItem(lisPckEditMoveDependencyUp, @MoveDependencyUpClick,
|
AddPopupMenuItem(lisPckEditMoveDependencyUp, @MoveDependencyUpClick,
|
||||||
(CurDependency.PrevRequiresDependency<>nil)
|
(CurDependency.PrevRequiresDependency<>nil)
|
||||||
and (not LazPackage.ReadOnly));
|
and Writable);
|
||||||
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
|
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
|
||||||
(CurDependency.NextRequiresDependency<>nil)
|
(CurDependency.NextRequiresDependency<>nil)
|
||||||
and (not LazPackage.ReadOnly));
|
and Writable);
|
||||||
end else begin
|
end else begin
|
||||||
AddPopupMenuItem(lisMenuOpenPackage, @OpenFileMenuItemClick, true);
|
AddPopupMenuItem(lisMenuOpenPackage, @OpenFileMenuItemClick, true);
|
||||||
AddPopupMenuItem(lisPckEditReAddDependency, @ReAddMenuItemClick,
|
AddPopupMenuItem(lisPckEditReAddDependency, @ReAddMenuItemClick,
|
||||||
@ -597,6 +611,16 @@ begin
|
|||||||
FilesTreeView.EndUpdate;
|
FilesTreeView.EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPackageEditorForm.MoveFileUpMenuItemClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
DoMoveCurrentFile(-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPackageEditorForm.MoveFileDownMenuItemClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
DoMoveCurrentFile(1);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TPackageEditorForm.OpenFileMenuItemClick(Sender: TObject);
|
procedure TPackageEditorForm.OpenFileMenuItemClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
CurNode: TTreeNode;
|
CurNode: TTreeNode;
|
||||||
@ -759,6 +783,11 @@ begin
|
|||||||
DoSave(true);
|
DoSave(true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPackageEditorForm.SortFilesMenuItemClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
DoSortFiles;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TPackageEditorForm.UninstallClick(Sender: TObject);
|
procedure TPackageEditorForm.UninstallClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
PackageEditors.UninstallPackage(LazPackage);
|
PackageEditors.UninstallPackage(LazPackage);
|
||||||
@ -1778,6 +1807,37 @@ begin
|
|||||||
UpdateAll;
|
UpdateAll;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPackageEditorForm.DoMoveCurrentFile(Offset: integer);
|
||||||
|
var
|
||||||
|
Removed: boolean;
|
||||||
|
CurFile: TPkgFile;
|
||||||
|
OldIndex: Integer;
|
||||||
|
NewIndex: Integer;
|
||||||
|
TreeSelection: TStringList;
|
||||||
|
begin
|
||||||
|
CurFile:=GetCurrentFile(Removed);
|
||||||
|
if (CurFile=nil) or Removed then exit;
|
||||||
|
OldIndex:=LazPackage.IndexOfPkgFile(CurFile);
|
||||||
|
NewIndex:=OldIndex+Offset;
|
||||||
|
if (NewIndex<0) or (NewIndex>=LazPackage.FileCount) then exit;
|
||||||
|
TreeSelection:=StoreCurrentTreeSelection;
|
||||||
|
LazPackage.MoveFile(OldIndex,NewIndex);
|
||||||
|
UpdateFiles;
|
||||||
|
ApplyTreeSelection(TreeSelection,true);
|
||||||
|
UpdateButtons;
|
||||||
|
UpdateStatusBar;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPackageEditorForm.DoSortFiles;
|
||||||
|
var
|
||||||
|
TreeSelection: TStringList;
|
||||||
|
begin
|
||||||
|
TreeSelection:=StoreCurrentTreeSelection;
|
||||||
|
LazPackage.SortFiles;
|
||||||
|
UpdateAll;
|
||||||
|
ApplyTreeSelection(TreeSelection,true);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TPackageEditorForm.Create(TheOwner: TComponent);
|
constructor TPackageEditorForm.Create(TheOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited Create(TheOwner);
|
inherited Create(TheOwner);
|
||||||
|
Loading…
Reference in New Issue
Block a user