Browse Source

Clion: Added a global path to the CLion exe

tags/2021-05-28
tpoole 7 years ago
parent
commit
a75f023ca5
4 changed files with 88 additions and 23 deletions
  1. +41
    -12
      extras/Projucer/Source/Application/Windows/jucer_GlobalSearchPathsWindowComponent.h
  2. +12
    -10
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h
  3. +34
    -1
      extras/Projucer/Source/Settings/jucer_StoredSettings.cpp
  4. +1
    -0
      extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h

+ 41
- 12
extras/Projucer/Source/Application/Windows/jucer_GlobalSearchPathsWindowComponent.h View File

@@ -34,16 +34,20 @@ class GlobalSearchPathsWindowComponent : public Component,
public: public:
GlobalSearchPathsWindowComponent() GlobalSearchPathsWindowComponent()
: modulesLabel ("modulesLabel", "Modules"), : modulesLabel ("modulesLabel", "Modules"),
sdksLabel ("sdksLabel", "SDKs")
sdksLabel ("sdksLabel", "SDKs"),
cLionLabel ("cLionLabel", "CLion")
{ {
addAndMakeVisible (modulesLabel); addAndMakeVisible (modulesLabel);
addAndMakeVisible (sdksLabel); addAndMakeVisible (sdksLabel);
addAndMakeVisible (cLionLabel);
modulesLabel.setFont (Font (18.0f, Font::FontStyleFlags::bold)); modulesLabel.setFont (Font (18.0f, Font::FontStyleFlags::bold));
sdksLabel.setFont (Font (18.0f, Font::FontStyleFlags::bold));
sdksLabel .setFont (Font (18.0f, Font::FontStyleFlags::bold));
cLionLabel .setFont (Font (18.0f, Font::FontStyleFlags::bold));
modulesLabel.setJustificationType (Justification::centredLeft); modulesLabel.setJustificationType (Justification::centredLeft);
sdksLabel.setJustificationType (Justification::centredLeft);
sdksLabel .setJustificationType (Justification::centredLeft);
cLionLabel .setJustificationType (Justification::centredLeft);
addAndMakeVisible (info); addAndMakeVisible (info);
info.setInfoToDisplay ("Use this dropdown to set the global paths for different OSes. " info.setInfoToDisplay ("Use this dropdown to set the global paths for different OSes. "
@@ -85,10 +89,13 @@ public:
modulesLabel.setBounds (b.removeFromTop (20)); modulesLabel.setBounds (b.removeFromTop (20));
b.removeFromTop (20); b.removeFromTop (20);
auto i = 0;
for (auto propertyComponent : pathPropertyComponents)
auto thisOS = TargetOS::getThisOS();
auto selectedOS = getSelectedOS();
const int numComps = pathPropertyComponents.size();
for (int i = 0; i < numComps; ++i)
{ {
propertyComponent->setBounds (b.removeFromTop (propertyComponent->getPreferredHeight()));
pathPropertyComponents[i]->setBounds (b.removeFromTop (pathPropertyComponents[i]->getPreferredHeight()));
b.removeFromTop (5); b.removeFromTop (5);
if (i == 1) if (i == 1)
@@ -98,12 +105,17 @@ public:
b.removeFromTop (20); b.removeFromTop (20);
} }
++i;
if (selectedOS == thisOS && i == numComps - 2)
{
b.removeFromTop (15);
cLionLabel.setBounds (b.removeFromTop (20));
b.removeFromTop (20);
}
} }
} }
private: private:
Label modulesLabel, sdksLabel;
Label modulesLabel, sdksLabel, cLionLabel;
OwnedArray<PropertyComponent> pathPropertyComponents; OwnedArray<PropertyComponent> pathPropertyComponents;
ComboBox osSelector; ComboBox osSelector;
InfoButton info; InfoButton info;
@@ -113,11 +125,8 @@ private:
updateFilePathPropertyComponents(); updateFilePathPropertyComponents();
} }
void updateFilePathPropertyComponents()
TargetOS::OS getSelectedOS() const
{ {
pathPropertyComponents.clear();
auto thisOS = TargetOS::getThisOS();
auto selectedOS = TargetOS::unknown; auto selectedOS = TargetOS::unknown;
switch (osSelector.getSelectedId()) switch (osSelector.getSelectedId())
@@ -128,6 +137,16 @@ private:
default: break; default: break;
} }
return selectedOS;
}
void updateFilePathPropertyComponents()
{
pathPropertyComponents.clear();
const auto thisOS = TargetOS::getThisOS();
const auto selectedOS = getSelectedOS();
auto& settings = getAppSettings(); auto& settings = getAppSettings();
if (selectedOS == thisOS) if (selectedOS == thisOS)
@@ -160,6 +179,16 @@ private:
"Android SDK", true))); "Android SDK", true)));
addAndMakeVisible (pathPropertyComponents.add (new FilePathPropertyComponent (settings.getStoredPath (Ids::androidNDKPath), addAndMakeVisible (pathPropertyComponents.add (new FilePathPropertyComponent (settings.getStoredPath (Ids::androidNDKPath),
"Android NDK", true))); "Android NDK", true)));
#if JUCE_MAC
String exeLabel ("app");
#elif JUCE_WINDOWS
String exeLabel ("executable");
#else
String exeLabel ("startup script");
#endif
addAndMakeVisible (pathPropertyComponents.add (new FilePathPropertyComponent (settings.getStoredPath (Ids::clionExePath),
"CLion " + exeLabel, false)));
} }
else else
{ {


+ 12
- 10
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h View File

@@ -109,6 +109,8 @@ public:
static Identifier exporterName ("XCODE_MAC"); static Identifier exporterName ("XCODE_MAC");
#elif JUCE_WINDOWS #elif JUCE_WINDOWS
static Identifier exporterName ("CODEBLOCKS_WINDOWS"); static Identifier exporterName ("CODEBLOCKS_WINDOWS");
#elif JUCE_LINUX
static Identifier exporterName ("LINUX_MAKE");
#else #else
static Identifier exporterName; static Identifier exporterName;
#endif #endif
@@ -121,7 +123,7 @@ public:
bool launchProject() override bool launchProject() override
{ {
return getCLionExecutable().startAsProcess (getTargetFolder().getFullPathName());
return getCLionExecutable().startAsProcess (getTargetFolder().getFullPathName().quoted());
} }
String getDescription() override String getDescription() override
@@ -148,7 +150,7 @@ public:
<< newLine << newLine
<< "Not all features of all the exporters are currently supported. Notable omissions are AUv3 " << "Not all features of all the exporters are currently supported. Notable omissions are AUv3 "
<< "plug-ins, embedding resources and fat binaries on MacOS, and adding application icons. On " << "plug-ins, embedding resources and fat binaries on MacOS, and adding application icons. On "
<< "Windows CLion requires a GCC-based compiler like MinGW.";
<< "Windows the CLion exporter requires a GCC-based compiler like MinGW.";
return description; return description;
} }
@@ -225,17 +227,17 @@ private:
//============================================================================== //==============================================================================
static File getCLionExecutable() static File getCLionExecutable()
{ {
#if JUCE_MAC
return { "/Applications/CLion.app/Contents/MacOS/clion" };
#elif JUCE_WINDOWS
auto regValue = WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Applications\\clion64.exe\\shell\\open\\command\\", {}, {});
auto openCmd = StringArray::fromTokens (regValue, true);
File clionExe (getAppSettings()
.getStoredPath (Ids::clionExePath)
.toString()
.replace ("${user.home}", File::getSpecialLocation (File::userHomeDirectory).getFullPathName()));
if (! openCmd.isEmpty())
return { openCmd[0].unquoted() };
#if JUCE_MAC
if (clionExe.getFileName().endsWith (".app"))
clionExe = clionExe.getChildFile ("Contents/MacOS/clion");
#endif #endif
return {};
return clionExe;
} }
//============================================================================== //==============================================================================


+ 34
- 1
extras/Projucer/Source/Settings/jucer_StoredSettings.cpp View File

@@ -295,7 +295,7 @@ Value StoredSettings::getFallbackPathForOS (const Identifier& key, DependencyPat
else if (key == Ids::aaxPath) else if (key == Ids::aaxPath)
{ {
if (os == TargetOS::windows) v = "C:\\SDKs\\AAX"; if (os == TargetOS::windows) v = "C:\\SDKs\\AAX";
else if (os == TargetOS::osx) v = "~/SDKs/AAX" ;
else if (os == TargetOS::osx) v = "~/SDKs/AAX";
else jassertfalse; // no AAX on this OS! else jassertfalse; // no AAX on this OS!
} }
else if (key == Ids::androidSDKPath) else if (key == Ids::androidSDKPath)
@@ -306,6 +306,29 @@ Value StoredSettings::getFallbackPathForOS (const Identifier& key, DependencyPat
{ {
v = "${user.home}/Library/Android/sdk/ndk-bundle"; v = "${user.home}/Library/Android/sdk/ndk-bundle";
} }
else if (key == Ids::clionExePath)
{
if (os == TargetOS::windows)
{
#if JUCE_WINDOWS
auto regValue = WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Applications\\clion64.exe\\shell\\open\\command\\", {}, {});
auto openCmd = StringArray::fromTokens (regValue, true);
if (! openCmd.isEmpty())
return Value (openCmd[0].unquoted());
#endif
v = "C:\\Program Files\\JetBrains\\CLion YYYY.MM.DD\\bin\\clion64.exe";
}
else if (os == TargetOS::osx)
{
v = "/Applications/CLion.app";
}
else
{
v = "${user.home}/clion/bin/clion.sh";
}
}
} }
return v; return v;
@@ -357,6 +380,16 @@ bool StoredSettings::isGlobalPathValid (const File& relativeTo, const Identifier
{ {
fileToCheckFor = {}; fileToCheckFor = {};
} }
else if (key == Ids::clionExePath)
{
#if JUCE_MAC
fileToCheckFor = path.trim().endsWith (".app") ? "Contents/MacOS/clion" : "../clion";
#elif JUCE_WIDOWS
fileToCheckFor = "../clion64.exe";
#else
fileToCheckFor = "../clion.sh";
#endif
}
else else
{ {
// didn't recognise the key provided! // didn't recognise the key provided!


+ 1
- 0
extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h View File

@@ -221,6 +221,7 @@ namespace Ids
DECLARE_ID (clionMakefileEnabled); DECLARE_ID (clionMakefileEnabled);
DECLARE_ID (clionXcodeEnabled); DECLARE_ID (clionXcodeEnabled);
DECLARE_ID (clionCodeBlocksEnabled); DECLARE_ID (clionCodeBlocksEnabled);
DECLARE_ID (clionExePath);
DECLARE_ID (font); DECLARE_ID (font);
DECLARE_ID (colour); DECLARE_ID (colour);
DECLARE_ID (userNotes); DECLARE_ID (userNotes);


Loading…
Cancel
Save