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

View File

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

View File

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

View File

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

View File

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