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