IDE: fixed save package as when mainunit is custom unit

git-svn-id: trunk@27488 -
This commit is contained in:
mattias 2010-09-26 22:00:05 +00:00
parent cc80ae5460
commit 766f240486
3 changed files with 87 additions and 68 deletions

View File

@ -1,51 +1,43 @@
{ $Id$ } { This file was automatically created by Lazarus. Do not edit!
{ This source is only used to compile and install the package.
/*************************************************************************** }
allsyneditunits.pp
dummy unit to compile all units unit allsyneditunits;
/***************************************************************************
}
unit AllSynEditUnits;
{$mode objfpc}{$H+}
interface interface
uses uses
SynTextDrawer, SynEditKeyCmds, SynEditTypes, SynEditStrConst, SynBeautifier, SynCompletion, SynDesignStringConstants, SynEdit,
SynEditSearch, SynEditMiscProcs, SynEditmiscClasses, SynEditTextbuffer, SynEditAutoComplete, SynEditExport, SynEditFoldedView, SynEditHighlighter,
SynEdit, SynCompletion, SynEditAutoComplete, SynEditHighlighterFoldBase, SynEditHighlighterXMLBase, SynEditKeyCmds,
SynEditLazDsgn, SynRegExpr, SynEditRegexSearch, SynEditExport, SynEditLazDsgn, SynEditLines, SynEditMarks, SynEditMarkup,
SynExportHTML, SynMemo, SynMacroRecorder, SynEditPlugins, SynEditMarkupBracket, SynEditMarkupCtrlMouseLink, SynEditMarkupHighAll,
SynPluginSyncronizedEditBase, SynPluginTemplateEdit, SynPluginSyncroEdit, SynEditMarkupSelection, SynEditMarkupSpecialLine, SynEditMarkupWordGroup,
SynEditHighlighter, SynEditHighlighterFoldBase, SynEditHighlighterXMLBase, SynEditMiscClasses, SynEditMiscProcs, SynEditMouseCmds, SynEditPlugins,
SynHighlighterAny, SynEditPointClasses, SynEditRegexSearch, SynEditSearch, SynEditStrConst,
SynhighlighterCPP, SynEditTextBase, SynEditTextBuffer, SynEditTextDoubleWidthChars,
SynHighlighterCss, SynEditTextTabExpander, SynEditTextTrimmer, SynEditTypes, SynExportHTML,
SynHighlighterHashEntries, SynGutter, SynGutterBase, SynGutterChanges, SynGutterCodeFolding,
SynhighlighterHTML, SynGutterLineNumber, SynGutterLineOverview, SynGutterMarks,
SynHighlighterJava, SynHighlighterAny, SynHighlighterCpp, SynHighlighterCss, SynHighlighterDiff,
SynHighlighterJScript, SynHighlighterHashEntries, SynHighlighterHTML, SynHighlighterJava,
SynHighlighterLFM, SynHighlighterJScript, SynHighlighterLFM, SynHighlighterMulti,
SynHighlighterMulti, SynHighlighterPas, SynHighlighterPerl, SynHighlighterPHP,
SynHighlighterPas, SynHighlighterPosition, SynHighlighterPython, SynHighlighterSQL,
SynHighlighterPerl, SynHighlighterTeX, synhighlighterunixshellscript, SynHighlighterVB,
SynHighlighterPHP, SynHighlighterXML, SynMacroRecorder, SynMemo, SynPluginSyncroEdit,
SynHighlighterPosition, SynPluginSyncronizedEditBase, SynPluginTemplateEdit,
SynHighlighterPython, SynPropertyEditObjectList, SynRegExpr, SynTextDrawer, LazarusPackageIntf;
SynHighlighterSQL,
SynHighlighterTeX,
SynHighlighterUNIXShellScript,
SynHighlighterVB,
SynHighlighterXML,
SynHighlighterDiff,
SynGutter, SynGutterChanges, SynGutterCodeFolding, SynGutterLineNumber,
SynGutterMarks, SynGutterLineOverview,
SynPropertyEditObjectList, SynDesignStringConstants;
implementation implementation
end. procedure Register;
begin
RegisterUnit('SynEdit', @SynEdit.Register);
RegisterUnit('synhighlighterunixshellscript', @synhighlighterunixshellscript.
Register);
end;
initialization
RegisterPackage('synedit1', @Register);
end.

View File

@ -702,6 +702,7 @@ type
procedure MoveFile(CurIndex, NewIndex: integer); procedure MoveFile(CurIndex, NewIndex: integer);
procedure SortFiles; procedure SortFiles;
function FixFilesCaseSensitivity: boolean; function FixFilesCaseSensitivity: boolean;
function MainUnitHasPkgName: boolean;
// 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;
@ -3234,6 +3235,11 @@ begin
end; end;
end; end;
function TLazPackage.MainUnitHasPkgName: boolean;
begin
Result:=(MainUnit=nil) or (SysUtils.CompareText(MainUnit.Unit_Name,Name)=0);
end;
procedure TLazPackage.RemoveRemovedDependency(Dependency: TPkgDependency); procedure TLazPackage.RemoveRemovedDependency(Dependency: TPkgDependency);
begin begin
Dependency.RemoveFromList(FFirstRemovedDependency,pdlRequires); Dependency.RemoveFromList(FFirstRemovedDependency,pdlRequires);

View File

@ -1156,6 +1156,7 @@ var
BrokenDependencies: TFPList; BrokenDependencies: TFPList;
RenameDependencies: Boolean; RenameDependencies: Boolean;
OldPkgName: String; OldPkgName: String;
NewMainUnitFileName: String;
procedure RenamePackageInProject; procedure RenamePackageInProject;
var var
@ -1203,6 +1204,10 @@ begin
end; end;
NewFileName:=CleanAndExpandFilename(SaveDialog.Filename); NewFileName:=CleanAndExpandFilename(SaveDialog.Filename);
NewPkgName:=ExtractFileNameOnly(NewFilename); NewPkgName:=ExtractFileNameOnly(NewFilename);
if APackage.MainUnitHasPkgName then
NewMainUnitFileName:=ChangeFileExt(NewFileName,'.pas')
else
NewMainUnitFileName:='';
// check file extension // check file extension
if ExtractFileExt(NewFilename)='' then begin if ExtractFileExt(NewFilename)='' then begin
@ -1245,15 +1250,18 @@ begin
if EnvironmentOptions.CharcaseFileAction = ccfaAutoRename then NewFileName:=LowerFilename; if EnvironmentOptions.CharcaseFileAction = ccfaAutoRename then NewFileName:=LowerFilename;
end; end;
end; end;
// check unit name conflict // check unit name conflict
PkgFile:=APackage.FindUnit(NewPkgName); if NewMainUnitFileName<>'' then
if PkgFile<>nil then begin begin
Result:=IDEMessageDialog(lisNameConflict, PkgFile:=APackage.FindUnit(NewPkgName);
lisThePackageAlreadyContainsAUnitWithThisName, if PkgFile<>nil then begin
mtWarning,[mbRetry,mbAbort]); Result:=IDEMessageDialog(lisNameConflict,
if Result=mrAbort then exit; lisThePackageAlreadyContainsAUnitWithThisName,
continue; // try again mtWarning,[mbRetry,mbAbort]);
if Result=mrAbort then exit;
continue; // try again
end;
end; end;
// check package name conflict // check package name conflict
@ -1269,7 +1277,8 @@ begin
end; end;
// check file name conflict with project // check file name conflict with project
if Project1.ProjectUnitWithFilename(NewFilename)<>nil then begin if (NewMainUnitFileName<>'')
and (Project1.ProjectUnitWithFilename(NewMainUnitFileName)<>nil) then begin
Result:=IDEMessageDialog(lisPkgMangFilenameIsUsedByProject, Result:=IDEMessageDialog(lisPkgMangFilenameIsUsedByProject,
Format(lisPkgMangTheFileNameIsPartOfTheCurrentProject, ['"', Format(lisPkgMangTheFileNameIsPartOfTheCurrentProject, ['"',
NewFilename, '"', #13]), NewFilename, '"', #13]),
@ -1279,17 +1288,20 @@ begin
end; end;
// check file name conflicts with files in other packages // check file name conflicts with files in other packages
PkgFile:=PackageGraph.FindFileInAllPackages(NewFilename,true,false); if (NewMainUnitFileName<>'') then
if PkgFile<>nil then begin begin
Result:=IDEMessageDialog(lisPkgMangFilenameIsUsedByOtherPackage, PkgFile:=PackageGraph.FindFileInAllPackages(NewMainUnitFileName,true,false);
Format(lisPkgMangTheFileNameIsUsedByThePackageInFile, ['"', if PkgFile<>nil then begin
NewFilename, '"', #13, '"', PkgFile.LazPackage.IDAsString, '"', Result:=IDEMessageDialog(lisPkgMangFilenameIsUsedByOtherPackage,
#13, '"', PkgFile.LazPackage.Filename, '"']), Format(lisPkgMangTheFileNameIsUsedByThePackageInFile, ['"',
mtWarning,[mbRetry,mbAbort]); NewFilename, '"', #13, '"', PkgFile.LazPackage.IDAsString, '"',
if Result=mrAbort then exit; #13, '"', PkgFile.LazPackage.Filename, '"']),
continue; // try again mtWarning,[mbRetry,mbAbort]);
if Result=mrAbort then exit;
continue; // try again
end;
end; end;
// check for broken dependencies // check for broken dependencies
BrokenDependencies:=PackageGraph.GetBrokenDependenciesWhenChangingPkgID( BrokenDependencies:=PackageGraph.GetBrokenDependenciesWhenChangingPkgID(
APackage,NewPkgName,APackage.Version); APackage,NewPkgName,APackage.Version);
@ -1307,14 +1319,23 @@ begin
end; end;
// check existing file // check existing file
if (CompareFilenames(NewFileName,OldPkgFilename)<>0) if (CompareFilenames(NewFileName,OldPkgFilename)<>0) then
and FileExistsUTF8(NewFileName) then begin begin
Result:=IDEMessageDialog(lisPkgMangReplaceFile, if FileExistsUTF8(NewFileName) then begin
Format(lisPkgMangReplaceExistingFile, ['"', NewFilename, '"']), Result:=IDEMessageDialog(lisPkgMangReplaceFile,
mtConfirmation,[mbOk,mbCancel]); Format(lisPkgMangReplaceExistingFile, ['"', NewFilename, '"']),
if Result<>mrOk then exit; mtConfirmation,[mbOk,mbCancel]);
if Result<>mrOk then exit;
end;
if FileExistsUTF8(NewMainUnitFileName) then
begin
Result:=IDEMessageDialog(lisPkgMangReplaceFile,
Format(lisPkgMangReplaceExistingFile, ['"', NewFilename, '"']),
mtConfirmation,[mbOk,mbCancel]);
if Result<>mrOk then exit;
end;
end; end;
// check if new file is read/writable // check if new file is read/writable
Result:=CheckCreatingFile(NewFileName,true); Result:=CheckCreatingFile(NewFileName,true);
if Result=mrAbort then exit; if Result=mrAbort then exit;