1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-05 03:50:07 +00:00

Projucer: Add Visual Studio 2022 exporter

This commit is contained in:
ed 2021-09-23 12:32:31 +01:00
parent 525a92e47b
commit 8aabde7680
2 changed files with 102 additions and 56 deletions

View file

@ -1935,3 +1935,48 @@ public:
JUCE_DECLARE_NON_COPYABLE (MSVCProjectExporterVC2019)
};
//==============================================================================
class MSVCProjectExporterVC2022 : public MSVCProjectExporterBase
{
public:
MSVCProjectExporterVC2022 (Project& p, const ValueTree& t)
: MSVCProjectExporterBase (p, t, getTargetFolderName())
{
name = getDisplayName();
targetPlatformVersion.setDefault (getDefaultWindowsTargetPlatformVersion());
platformToolsetValue.setDefault (getDefaultToolset());
}
static String getDisplayName() { return "Visual Studio 2022"; }
static String getValueTreeTypeName() { return "VS2022"; }
static String getTargetFolderName() { return "VisualStudio2022"; }
Identifier getExporterIdentifier() const override { return getValueTreeTypeName(); }
int getVisualStudioVersion() const override { return 17; }
String getSolutionComment() const override { return "# Visual Studio 2022"; }
String getToolsVersion() const override { return "17.0"; }
String getDefaultToolset() const override { return "v143"; }
String getDefaultWindowsTargetPlatformVersion() const override { return "10.0"; }
static MSVCProjectExporterVC2022* createForSettings (Project& projectToUse, const ValueTree& settingsToUse)
{
if (settingsToUse.hasType (getValueTreeTypeName()))
return new MSVCProjectExporterVC2022 (projectToUse, settingsToUse);
return nullptr;
}
void createExporterProperties (PropertyListBuilder& props) override
{
static const char* toolsetNames[] = { "v140", "v140_xp", "v141", "v141_xp", "v142", "v143" };
const var toolsets[] = { "v140", "v140_xp", "v141", "v141_xp", "v142", "v143" };
addToolsetProperty (props, toolsetNames, toolsets, numElementsInArray (toolsets));
MSVCProjectExporterBase::createExporterProperties (props);
}
JUCE_DECLARE_NON_COPYABLE (MSVCProjectExporterVC2022)
};

View file

@ -38,20 +38,28 @@
#include "../Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h"
//==============================================================================
static auto createIcon (const void* iconData, size_t iconDataSize)
{
Image image (Image::ARGB, 200, 200, true);
Graphics g (image);
std::unique_ptr<Drawable> svgDrawable (Drawable::createFromImageData (iconData, iconDataSize));
svgDrawable->drawWithin (g, image.getBounds().toFloat(), RectanglePlacement::fillDestination, 1.0f);
return image;
}
template <typename Exporter>
static ProjectExporter::ExporterTypeInfo createExporterTypeInfo (const void* iconData, size_t iconDataSize)
{
return { Exporter::getValueTreeTypeName(),
Exporter::getDisplayName(),
Exporter::getTargetFolderName(),
createIcon (iconData, iconDataSize) };
}
std::vector<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypeInfos()
{
auto createIcon = [] (const void* iconData, size_t iconDataSize)
{
Image image (Image::ARGB, 200, 200, true);
Graphics g (image);
std::unique_ptr<Drawable> svgDrawable (Drawable::createFromImageData (iconData, iconDataSize));
svgDrawable->drawWithin (g, image.getBounds().toFloat(), RectanglePlacement::fillDestination, 1.0f);
return image;
};
using namespace BinaryData;
static std::vector<ProjectExporter::ExporterTypeInfo> infos
@ -65,28 +73,14 @@ std::vector<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypeI
XcodeProjectExporter::getTargetFolderNameiOS(),
createIcon (export_xcode_svg, (size_t) export_xcode_svgSize) },
{ MSVCProjectExporterVC2019::getValueTreeTypeName(),
MSVCProjectExporterVC2019::getDisplayName(),
MSVCProjectExporterVC2019::getTargetFolderName(),
createIcon (export_visualStudio_svg, export_visualStudio_svgSize) },
{ MSVCProjectExporterVC2017::getValueTreeTypeName(),
MSVCProjectExporterVC2017::getDisplayName(),
MSVCProjectExporterVC2017::getTargetFolderName(),
createIcon (export_visualStudio_svg, export_visualStudio_svgSize) },
{ MSVCProjectExporterVC2015::getValueTreeTypeName(),
MSVCProjectExporterVC2015::getDisplayName(),
MSVCProjectExporterVC2015::getTargetFolderName(),
createIcon (export_visualStudio_svg, export_visualStudio_svgSize) },
createExporterTypeInfo<MSVCProjectExporterVC2022> (export_visualStudio_svg, export_visualStudio_svgSize),
createExporterTypeInfo<MSVCProjectExporterVC2019> (export_visualStudio_svg, export_visualStudio_svgSize),
createExporterTypeInfo<MSVCProjectExporterVC2017> (export_visualStudio_svg, export_visualStudio_svgSize),
createExporterTypeInfo<MSVCProjectExporterVC2015> (export_visualStudio_svg, export_visualStudio_svgSize),
{ MakefileProjectExporter::getValueTreeTypeName(),
MakefileProjectExporter::getDisplayName(),
MakefileProjectExporter::getTargetFolderName(),
createIcon (export_linux_svg, export_linux_svgSize) },
createExporterTypeInfo<MakefileProjectExporter> (export_linux_svg, export_linux_svgSize),
{ AndroidProjectExporter::getValueTreeTypeName(),
AndroidProjectExporter::getDisplayName(),
AndroidProjectExporter::getTargetFolderName(),
createIcon (export_android_svg, export_android_svgSize) },
createExporterTypeInfo<AndroidProjectExporter> (export_android_svg, export_android_svgSize),
{ CodeBlocksProjectExporter::getValueTreeTypeNameWindows(),
CodeBlocksProjectExporter::getDisplayNameWindows(),
@ -97,10 +91,7 @@ std::vector<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypeI
CodeBlocksProjectExporter::getTargetFolderNameLinux(),
createIcon (export_codeBlocks_svg, export_codeBlocks_svgSize) },
{ CLionProjectExporter::getValueTreeTypeName(),
CLionProjectExporter::getDisplayName(),
CLionProjectExporter::getTargetFolderName(),
createIcon (export_clion_svg, export_clion_svgSize) }
createExporterTypeInfo<CLionProjectExporter> (export_clion_svg, export_clion_svgSize)
};
return infos;
@ -110,13 +101,8 @@ ProjectExporter::ExporterTypeInfo ProjectExporter::getTypeInfoForExporter (const
{
auto typeInfos = getExporterTypeInfos();
auto predicate = [exporterIdentifier] (const ProjectExporter::ExporterTypeInfo& info)
{
return info.identifier == exporterIdentifier;
};
auto iter = std::find_if (typeInfos.begin(), typeInfos.end(),
std::move (predicate));
[exporterIdentifier] (const ProjectExporter::ExporterTypeInfo& info) { return info.identifier == exporterIdentifier; });
if (iter != typeInfos.end())
return *iter;
@ -130,7 +116,7 @@ ProjectExporter::ExporterTypeInfo ProjectExporter::getCurrentPlatformExporterTyp
#if JUCE_MAC
return ProjectExporter::getTypeInfoForExporter (XcodeProjectExporter::getValueTreeTypeNameMac());
#elif JUCE_WINDOWS
return ProjectExporter::getTypeInfoForExporter (MSVCProjectExporterVC2019::getValueTreeTypeName());
return ProjectExporter::getTypeInfoForExporter (MSVCProjectExporterVC2022::getValueTreeTypeName());
#elif JUCE_LINUX || JUCE_BSD
return ProjectExporter::getTypeInfoForExporter (MakefileProjectExporter::getValueTreeTypeName());
#else
@ -149,21 +135,35 @@ std::unique_ptr<ProjectExporter> ProjectExporter::createNewExporter (Project& pr
return exporter;
}
template <typename T> struct Tag {};
static std::unique_ptr<ProjectExporter> tryCreatingExporter (Project&, const ValueTree&) { return nullptr; }
template <typename Exporter, typename... Exporters>
static std::unique_ptr<ProjectExporter> tryCreatingExporter (Project& project,
const ValueTree& settings,
Tag<Exporter>,
Tag<Exporters>... exporters)
{
if (auto* exporter = Exporter::createForSettings (project, settings))
return rawToUniquePtr (exporter);
return tryCreatingExporter (project, settings, exporters...);
}
std::unique_ptr<ProjectExporter> ProjectExporter::createExporterFromSettings (Project& project, const ValueTree& settings)
{
std::unique_ptr<ProjectExporter> exporter;
exporter.reset (XcodeProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MSVCProjectExporterVC2019::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MSVCProjectExporterVC2017::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MSVCProjectExporterVC2015::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MakefileProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (AndroidProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (CodeBlocksProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (CLionProjectExporter::createForSettings (project, settings));
jassert (exporter != nullptr);
return exporter;
return tryCreatingExporter (project,
settings,
Tag<XcodeProjectExporter>{},
Tag<MSVCProjectExporterVC2022>{},
Tag<MSVCProjectExporterVC2019>{},
Tag<MSVCProjectExporterVC2017>{},
Tag<MSVCProjectExporterVC2015>{},
Tag<MakefileProjectExporter>{},
Tag<AndroidProjectExporter>{},
Tag<CodeBlocksProjectExporter>{},
Tag<CLionProjectExporter>{});
}
bool ProjectExporter::canProjectBeLaunched (Project* project)
@ -176,6 +176,7 @@ bool ProjectExporter::canProjectBeLaunched (Project* project)
XcodeProjectExporter::getValueTreeTypeNameMac(),
XcodeProjectExporter::getValueTreeTypeNameiOS(),
#elif JUCE_WINDOWS
MSVCProjectExporterVC2022::getValueTreeTypeName(),
MSVCProjectExporterVC2019::getValueTreeTypeName(),
MSVCProjectExporterVC2017::getValueTreeTypeName(),
MSVCProjectExporterVC2015::getValueTreeTypeName(),