implemented sort package files

git-svn-id: trunk@4849 -
This commit is contained in:
mattias 2003-11-27 20:51:13 +00:00
parent 2f74ed4559
commit 94fc75e267
5 changed files with 114 additions and 8 deletions

View File

@ -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;

View File

@ -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...';

View File

@ -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);

View File

@ -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);

View File

@ -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);