diff options
author | Miguel Costa <miguel.costa@qt.io> | 2020-11-27 15:19:35 +0100 |
---|---|---|
committer | Miguel Costa <miguel.costa@qt.io> | 2020-12-17 13:19:52 +0000 |
commit | e6d1ff94f05b09be7ec040590d24141a93cd7049 (patch) | |
tree | c3b91fcc1958744f47313c2110c50df2952e6da8 | |
parent | cacba395bc4276267449146157a17aaee21f8801 (diff) |
Rework handling of project filters
Filters in VC projects are intended as a means to organize the project
files according to their type (i.e. extension). It is the users'
prerogative to create or remove filters in their projects; extensions
should not try to enforce the existence of specific filters with
non-standard semantics. As a consequence of the revised approach to
project filters, this change fixes errors occurring while adding Qt
resource files to a project.
Also in this change: fixed widget project template adding .ui file to
the Resource Files filter instead of the Form Files filter.
Task-number: QTVSADDINBUG-810
Task-number: QTVSADDINBUG-835
Change-Id: Ia305ba4ac7686abdff7162a97de19c22cc279dce
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r-- | src/qttemplates/console/console.vcxproj.filters | 9 | ||||
-rw-r--r-- | src/qttemplates/designer/designer.vcxproj.filters | 9 | ||||
-rw-r--r-- | src/qttemplates/empty/empty.vcxproj.filters | 11 | ||||
-rw-r--r-- | src/qttemplates/gui/gui.vcxproj.filters | 11 | ||||
-rw-r--r-- | src/qttemplates/lib/lib.vcxproj.filters | 9 | ||||
-rw-r--r-- | src/qttemplates/quick/quick.vcxproj.filters | 13 | ||||
-rw-r--r-- | src/qttemplates/server/server.vcxproj.filters | 9 | ||||
-rw-r--r-- | src/qtvstools/DteEventsHandler.cs | 79 |
8 files changed, 38 insertions, 112 deletions
diff --git a/src/qttemplates/console/console.vcxproj.filters b/src/qttemplates/console/console.vcxproj.filters index 421006ab..797f8df4 100644 --- a/src/qttemplates/console/console.vcxproj.filters +++ b/src/qttemplates/console/console.vcxproj.filters @@ -11,12 +11,11 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> <ItemGroup> diff --git a/src/qttemplates/designer/designer.vcxproj.filters b/src/qttemplates/designer/designer.vcxproj.filters index 4ee6edec..4ce26536 100644 --- a/src/qttemplates/designer/designer.vcxproj.filters +++ b/src/qttemplates/designer/designer.vcxproj.filters @@ -11,12 +11,11 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> <ItemGroup> diff --git a/src/qttemplates/empty/empty.vcxproj.filters b/src/qttemplates/empty/empty.vcxproj.filters index 7a7709fd..43551544 100644 --- a/src/qttemplates/empty/empty.vcxproj.filters +++ b/src/qttemplates/empty/empty.vcxproj.filters @@ -3,7 +3,7 @@ <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + <Extensions>qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> @@ -11,16 +11,15 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> <Filter Include="Form Files"> <UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier> <Extensions>ui</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> </Project> diff --git a/src/qttemplates/gui/gui.vcxproj.filters b/src/qttemplates/gui/gui.vcxproj.filters index 89d722d0..0e783c5e 100644 --- a/src/qttemplates/gui/gui.vcxproj.filters +++ b/src/qttemplates/gui/gui.vcxproj.filters @@ -11,16 +11,15 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> <Filter Include="Form Files"> <UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier> <Extensions>ui</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> <ItemGroup> @@ -28,7 +27,7 @@ <Filter>Resource Files</Filter> </QtRcc> <QtUic Include="$uifilename$"> - <Filter>Resource Files</Filter> + <Filter>Form Files</Filter> </QtUic> <QtMoc Include="$headerfilename$"> <Filter>Header Files</Filter> diff --git a/src/qttemplates/lib/lib.vcxproj.filters b/src/qttemplates/lib/lib.vcxproj.filters index e8012cfe..51555ca8 100644 --- a/src/qttemplates/lib/lib.vcxproj.filters +++ b/src/qttemplates/lib/lib.vcxproj.filters @@ -11,12 +11,11 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> <ItemGroup> diff --git a/src/qttemplates/quick/quick.vcxproj.filters b/src/qttemplates/quick/quick.vcxproj.filters index 350a3699..eeec1250 100644 --- a/src/qttemplates/quick/quick.vcxproj.filters +++ b/src/qttemplates/quick/quick.vcxproj.filters @@ -3,7 +3,7 @@ <ItemGroup> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + <Extensions>qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> </Filter> <Filter Include="Header Files"> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> @@ -11,12 +11,11 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;qml;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> <ItemGroup> @@ -27,7 +26,7 @@ <Filter>Resource Files</Filter> </QtRcc> <None Include="main.qml"> - <Filter>Resource Files</Filter> + <Filter>Source Files</Filter> </None> $FilterItems$ </ItemGroup> diff --git a/src/qttemplates/server/server.vcxproj.filters b/src/qttemplates/server/server.vcxproj.filters index 7a7709fd..e9f5f001 100644 --- a/src/qttemplates/server/server.vcxproj.filters +++ b/src/qttemplates/server/server.vcxproj.filters @@ -11,16 +11,15 @@ </Filter> <Filter Include="Resource Files"> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> </Filter> <Filter Include="Form Files"> <UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier> <Extensions>ui</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier> - <Extensions>qrc;*</Extensions> - <ParseFiles>false</ParseFiles> + <Filter Include="Translation Files"> + <UniqueIdentifier>{639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}</UniqueIdentifier> + <Extensions>ts</Extensions> </Filter> </ItemGroup> </Project> diff --git a/src/qtvstools/DteEventsHandler.cs b/src/qtvstools/DteEventsHandler.cs index 7f9ab891..256179fd 100644 --- a/src/qtvstools/DteEventsHandler.cs +++ b/src/qtvstools/DteEventsHandler.cs @@ -403,31 +403,11 @@ namespace QtVsTools var qtPro = QtProject.Create(project); if (!HelperFunctions.IsQtProject(project)) return; - VCFilter filter = null; var vcFile = GetVCFileFromProject(projectItem.Name, qtPro.VCProject); if (vcFile == null) return; try { - // Try to find the filter, the file is located in - // If the file is not inside any filter, move it to - // the according one, used by the Qt VS Tools - filter = (VCFilter) vcFile.Parent; - } catch { } - - try { - var ui = Filters.FormFiles(); - var qrc = Filters.ResourceFiles(); - var ts = Filters.TranslationFiles(); - var h = Filters.HeaderFiles(); - var src = Filters.SourceFiles(); - - var uiFilter = qtPro.FindFilterFromGuid(ui.UniqueIdentifier); - var tsFilter = qtPro.FindFilterFromGuid(ts.UniqueIdentifier); - var qrcFilter = qtPro.FindFilterFromGuid(qrc.UniqueIdentifier); - var hFilter = qtPro.FindFilterFromGuid(h.UniqueIdentifier); - var srcFilter = qtPro.FindFilterFromGuid(src.UniqueIdentifier); - if (HelperFunctions.IsSourceFile(vcFile.Name)) { if (vcFile.Name.StartsWith("moc_", StringComparison.OrdinalIgnoreCase)) return; @@ -446,78 +426,31 @@ namespace QtVsTools return; } } - if (filter == null && !HelperFunctions.IsInFilter(vcFile, src)) { - if (null == srcFilter && qtPro.VCProject.CanAddFilter(src.Name)) { - srcFilter = (VCFilter) qtPro.VCProject.AddFilter(src.Name); - srcFilter.Filter = src.Filter; - srcFilter.ParseFiles = src.ParseFiles; - srcFilter.UniqueIdentifier = src.UniqueIdentifier; - } - qtPro.RemoveItem(projectItem); - qtPro.AddFileToProject(vcFile.FullPath, src); - } if (HelperFunctions.HasQObjectDeclaration(vcFile)) { - HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); + if (!qtPro.IsQtMsBuildEnabled()) + HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); qtPro.AddMocStep(vcFile); } } else if (HelperFunctions.IsHeaderFile(vcFile.Name)) { if (vcFile.Name.StartsWith("ui_", StringComparison.OrdinalIgnoreCase)) return; - if (filter == null && !HelperFunctions.IsInFilter(vcFile, h)) { - if (null == hFilter && qtPro.VCProject.CanAddFilter(h.Name)) { - hFilter = (VCFilter) qtPro.VCProject.AddFilter(h.Name); - hFilter.Filter = h.Filter; - hFilter.ParseFiles = h.ParseFiles; - hFilter.UniqueIdentifier = h.UniqueIdentifier; - } - qtPro.RemoveItem(projectItem); - qtPro.AddFileToProject(vcFile.FullPath, h); - } if (HelperFunctions.HasQObjectDeclaration(vcFile)) { if (!qtPro.IsQtMsBuildEnabled()) HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); qtPro.AddMocStep(vcFile); } } else if (HelperFunctions.IsUicFile(vcFile.Name)) { - if (filter == null && !HelperFunctions.IsInFilter(vcFile, ui)) { - if (null == uiFilter && qtPro.VCProject.CanAddFilter(ui.Name)) { - uiFilter = (VCFilter) qtPro.VCProject.AddFilter(ui.Name); - uiFilter.Filter = ui.Filter; - uiFilter.ParseFiles = ui.ParseFiles; - uiFilter.UniqueIdentifier = ui.UniqueIdentifier; - } - qtPro.RemoveItem(projectItem); - qtPro.AddFileToProject(vcFile.FullPath, ui); - } - HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); + if (!qtPro.IsQtMsBuildEnabled()) + HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); qtPro.AddUic4BuildStep(vcFile); #if VS2017 || VS2019 QtProjectTracker.RefreshIntelliSense(project, runQtTools: true); #endif } else if (HelperFunctions.IsQrcFile(vcFile.Name)) { - if (filter == null && !HelperFunctions.IsInFilter(vcFile, qrc)) { - if (null == qrcFilter && qtPro.VCProject.CanAddFilter(qrc.Name)) { - qrcFilter = (VCFilter) qtPro.VCProject.AddFilter(qrc.Name); - qrcFilter.Filter = qrc.Filter; - qrcFilter.ParseFiles = qrc.ParseFiles; - qrcFilter.UniqueIdentifier = qrc.UniqueIdentifier; - } - qtPro.RemoveItem(projectItem); - qtPro.AddFileToProject(vcFile.FullPath, qrc); - } - HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); + if (!qtPro.IsQtMsBuildEnabled()) + HelperFunctions.EnsureCustomBuildToolAvailable(projectItem); qtPro.UpdateRccStep(vcFile, null); } else if (HelperFunctions.IsTranslationFile(vcFile.Name)) { - if (filter == null && !HelperFunctions.IsInFilter(vcFile, ts)) { - if (null == tsFilter && qtPro.VCProject.CanAddFilter(ts.Name)) { - tsFilter = (VCFilter) qtPro.VCProject.AddFilter(ts.Name); - tsFilter.Filter = ts.Filter; - tsFilter.ParseFiles = ts.ParseFiles; - tsFilter.UniqueIdentifier = ts.UniqueIdentifier; - } - qtPro.RemoveItem(projectItem); - qtPro.AddFileToProject(vcFile.FullPath, ts); - } } } catch { } } |