ui: Extended project setup to support creation and editing of Source Groups (issue #230)
* Turned QtProjectWizzard into window for Source Group ui * Clicking into FilePicker when empty will open dialog right away * Fixed environment variable use throughout all Source Group path values * Moved Preferences to QtPreferencesWindow bug id = 230 fortune cookie message = Zwischen dir und deinen Freunden besteht echte Freundschaft.
This commit is contained in:
@@ -25,18 +25,15 @@ QCheckBox:disabled {
|
||||
color: gray;
|
||||
}
|
||||
|
||||
#projectTitle {
|
||||
#sourceGroupTitle {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#projectTitle {
|
||||
background: white;
|
||||
padding: 5px;
|
||||
margin-left: 40px;
|
||||
}
|
||||
|
||||
#projectDescription {
|
||||
#sourceGroupDescription {
|
||||
font-size: 12px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
@@ -113,7 +110,7 @@ QCheckBox:disabled {
|
||||
border: 1px solid lightgray;
|
||||
border-radius: 8px;
|
||||
color: black;
|
||||
padding: 3px 5px 2px;
|
||||
padding: 3px 8px 2px;
|
||||
font-size: 14px;
|
||||
min-width: 5em;
|
||||
}
|
||||
@@ -148,7 +145,7 @@ QCheckBox:disabled {
|
||||
background: #CFD2E0;
|
||||
}
|
||||
|
||||
#projectContainer {
|
||||
#sourceGroupContainer {
|
||||
background: white;
|
||||
border: 1px solid lightgray;
|
||||
border-radius: 8px;
|
||||
@@ -156,7 +153,7 @@ QCheckBox:disabled {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
#projectButton {
|
||||
#sourceGroupButton {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
color: black;
|
||||
@@ -166,7 +163,7 @@ QCheckBox:disabled {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#projectButton:hover, #projectButton:checked {
|
||||
#sourceGroupButton:hover, #sourceGroupButton:checked {
|
||||
background: #CFD2E0;
|
||||
}
|
||||
|
||||
@@ -177,3 +174,57 @@ QCheckBox:disabled {
|
||||
color: black;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
#project_menu {
|
||||
border-left: 1px solid lightgray;
|
||||
}
|
||||
|
||||
#project_menu QListWidget {
|
||||
background: white;
|
||||
border: none;
|
||||
border-bottom: 1px solid lightgray;
|
||||
border-left: 1px solid lightgray;
|
||||
color: black;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#project_menu QListWidget::item, #project_menu #general_button {
|
||||
background: white;
|
||||
border: none;
|
||||
color: black;
|
||||
margin-top: 5px;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
|
||||
#project_menu #general_button {
|
||||
margin-top: 10px;
|
||||
font-size: 12px;
|
||||
text-align: left;
|
||||
border-left: 1px solid lightgray;
|
||||
padding: 4px 10px;
|
||||
}
|
||||
|
||||
#project_menu QLabel {
|
||||
background: white;
|
||||
font-weight: bold;
|
||||
border: none;
|
||||
color: black;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
padding: 3px 7px;
|
||||
border-left: 1px solid lightgray;
|
||||
}
|
||||
|
||||
#project_menu QListWidget::item:hover, #project_menu QListWidget::item:selected,
|
||||
#project_menu #general_button:hover, #project_menu #general_button:checked {
|
||||
background: #CFD2E0;
|
||||
color: black;
|
||||
}
|
||||
|
||||
#project_menu #action_button {
|
||||
background: white;
|
||||
border: none;
|
||||
color: white;
|
||||
margin: 5px;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
</source_paths>
|
||||
<standard>c++1z</standard>
|
||||
<type>C++ Source Group</type>
|
||||
<use_source_paths_for_header_search>0</use_source_paths_for_header_search>
|
||||
</source_group_afdfade2-4b42-49a6-961a-d4a563f2cf84>
|
||||
</source_groups>
|
||||
<version>4</version>
|
||||
|
||||
@@ -135,32 +135,30 @@ void IDECommunicationController::handleSetActiveTokenMessage(
|
||||
|
||||
void IDECommunicationController::handleCreateProjectMessage(const NetworkProtocolHelper::CreateProjectMessage& message)
|
||||
{
|
||||
if (message.valid)
|
||||
{
|
||||
if (message.ideId == "vs")
|
||||
{
|
||||
std::shared_ptr<MessageProjectNew> msg = std::make_shared<MessageProjectNew>();
|
||||
msg->setSolutionPath(message.solutionFileLocation);
|
||||
msg->ideId = message.ideId;
|
||||
MessageDispatchWhenLicenseValid(msg).dispatch();
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_ERROR_STREAM(<< "Unable to parse provided solution, unknown format");
|
||||
}
|
||||
}
|
||||
LOG_ERROR_STREAM(<< "Network Protocol CreateProjectMessage not supported anymore.");
|
||||
|
||||
// if (message.valid)
|
||||
// {
|
||||
// if (message.ideId == "vs")
|
||||
// {
|
||||
// std::shared_ptr<MessageProjectNew> msg = std::make_shared<MessageProjectNew>();
|
||||
// msg->setSolutionPath(message.solutionFileLocation);
|
||||
// msg->ideId = message.ideId;
|
||||
// MessageDispatchWhenLicenseValid(msg).dispatch();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// LOG_ERROR_STREAM(<< "Unable to parse provided solution, unknown format");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
void IDECommunicationController::handleCreateCDBProjectMessage(const NetworkProtocolHelper::CreateCDBProjectMessage& message)
|
||||
{
|
||||
if (message.valid)
|
||||
{
|
||||
std::shared_ptr<MessageProjectNew> msg = std::make_shared<MessageProjectNew>();
|
||||
msg->setSolutionPath(message.cdbFileLocation);
|
||||
msg->setHeaderPaths(message.headerPaths);
|
||||
msg->ideId = message.ideId;
|
||||
|
||||
MessageDispatchWhenLicenseValid(msg).dispatch();
|
||||
MessageDispatchWhenLicenseValid(
|
||||
std::make_shared<MessageProjectNew>(message.cdbFileLocation, message.headerPaths)).dispatch();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -177,6 +177,12 @@ std::vector<std::shared_ptr<SourceGroupSettings>> ProjectSettings::getAllSourceG
|
||||
continue;
|
||||
}
|
||||
|
||||
const std::string name = getValue<std::string>(key + "/name", "");
|
||||
if (name.size())
|
||||
{
|
||||
settings->setName(name);
|
||||
}
|
||||
|
||||
settings->setStandard(getValue<std::string>(key + "/standard", ""));
|
||||
settings->setSourcePaths(getPathValues(key + "/source_paths/source_path"));
|
||||
settings->setExcludePaths(getPathValues(key + "/exclude_paths/exclude_path"));
|
||||
@@ -188,7 +194,7 @@ std::vector<std::shared_ptr<SourceGroupSettings>> ProjectSettings::getAllSourceG
|
||||
return allSettings;
|
||||
}
|
||||
|
||||
void ProjectSettings::setAllSourceGroupSettings(std::vector<std::shared_ptr<SourceGroupSettings>> allSettings)
|
||||
void ProjectSettings::setAllSourceGroupSettings(const std::vector<std::shared_ptr<SourceGroupSettings>>& allSettings)
|
||||
{
|
||||
for (const std::string& key: m_config->getSublevelKeys("source_groups"))
|
||||
{
|
||||
@@ -201,6 +207,7 @@ void ProjectSettings::setAllSourceGroupSettings(std::vector<std::shared_ptr<Sour
|
||||
const SourceGroupType type = settings->getType();
|
||||
|
||||
setValue(key + "/type", sourceGroupTypeToString(type));
|
||||
setValue(key + "/name", settings->getName());
|
||||
setValue(key + "/standard", settings->getStandard());
|
||||
setPathValues(key + "/source_paths/source_path", settings->getSourcePaths());
|
||||
setPathValues(key + "/exclude_paths/exclude_path", settings->getExcludePaths());
|
||||
@@ -246,12 +253,13 @@ void ProjectSettings::setAllSourceGroupSettings(std::vector<std::shared_ptr<Sour
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<FilePath> ProjectSettings::makePathsAbsolute(const std::vector<FilePath>& paths) const
|
||||
std::vector<FilePath> ProjectSettings::makePathsExpandedAndAbsolute(const std::vector<FilePath>& paths) const
|
||||
{
|
||||
std::vector<FilePath> absPaths;
|
||||
std::vector<FilePath> p = expandPaths(paths);
|
||||
|
||||
std::vector<FilePath> absPaths;
|
||||
FilePath basePath = getProjectFileLocation();
|
||||
for (const FilePath& path : paths)
|
||||
for (const FilePath& path : p)
|
||||
{
|
||||
if (path.isAbsolute())
|
||||
{
|
||||
@@ -266,14 +274,16 @@ std::vector<FilePath> ProjectSettings::makePathsAbsolute(const std::vector<FileP
|
||||
return absPaths;
|
||||
}
|
||||
|
||||
FilePath ProjectSettings::makePathAbsolute(const FilePath& path) const
|
||||
FilePath ProjectSettings::makePathExpandedAndAbsolute(const FilePath& path) const
|
||||
{
|
||||
if (path.empty() || path.isAbsolute())
|
||||
FilePath p = expandPath(path);
|
||||
|
||||
if (p.empty() || p.isAbsolute())
|
||||
{
|
||||
return path;
|
||||
return p;
|
||||
}
|
||||
|
||||
return getProjectFileLocation().concat(path).canonical();
|
||||
return getProjectFileLocation().concat(p).canonical();
|
||||
}
|
||||
|
||||
SettingsMigrator ProjectSettings::getMigrations() const
|
||||
|
||||
@@ -38,10 +38,10 @@ public:
|
||||
std::string getDescription() const;
|
||||
|
||||
std::vector<std::shared_ptr<SourceGroupSettings>> getAllSourceGroupSettings() const;
|
||||
void setAllSourceGroupSettings(std::vector<std::shared_ptr<SourceGroupSettings>> allSettings);
|
||||
void setAllSourceGroupSettings(const std::vector<std::shared_ptr<SourceGroupSettings>>& allSettings);
|
||||
|
||||
std::vector<FilePath> makePathsAbsolute(const std::vector<FilePath>& paths) const;
|
||||
FilePath makePathAbsolute(const FilePath& path) const;
|
||||
std::vector<FilePath> makePathsExpandedAndAbsolute(const std::vector<FilePath>& paths) const;
|
||||
FilePath makePathExpandedAndAbsolute(const FilePath& path) const;
|
||||
|
||||
private:
|
||||
SettingsMigrator getMigrations() const;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
SourceGroupSettings::SourceGroupSettings(const std::string& id, SourceGroupType type, const ProjectSettings* projectSettings)
|
||||
: m_projectSettings(projectSettings)
|
||||
, m_id(id)
|
||||
, m_name(sourceGroupTypeToString(type))
|
||||
, m_type(type)
|
||||
, m_standard("")
|
||||
, m_sourcePaths(std::vector<FilePath>())
|
||||
@@ -21,6 +22,7 @@ bool SourceGroupSettings::equals(std::shared_ptr<SourceGroupSettings> other) con
|
||||
{
|
||||
return (
|
||||
m_id == other->m_id &&
|
||||
m_name == other->m_name &&
|
||||
m_type == other->m_type &&
|
||||
m_standard == other->m_standard &&
|
||||
utility::isPermutation(m_sourcePaths, other->m_sourcePaths) &&
|
||||
@@ -34,14 +36,34 @@ std::string SourceGroupSettings::getId() const
|
||||
return m_id;
|
||||
}
|
||||
|
||||
void SourceGroupSettings::setId(const std::string& id)
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
|
||||
std::string SourceGroupSettings::getName() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
void SourceGroupSettings::setName(const std::string& name)
|
||||
{
|
||||
m_name = name;
|
||||
}
|
||||
|
||||
FilePath SourceGroupSettings::getProjectFileLocation() const
|
||||
{
|
||||
return m_projectSettings->getProjectFileLocation();
|
||||
}
|
||||
|
||||
FilePath SourceGroupSettings::makePathAbsolute(const FilePath& path) const
|
||||
FilePath SourceGroupSettings::makePathExpandedAndAbsolute(const FilePath& path) const
|
||||
{
|
||||
return m_projectSettings->makePathAbsolute(path);
|
||||
return m_projectSettings->makePathExpandedAndAbsolute(path);
|
||||
}
|
||||
|
||||
std::vector<FilePath> SourceGroupSettings::makePathsExpandedAndAbsolute(const std::vector<FilePath>& paths) const
|
||||
{
|
||||
return m_projectSettings->makePathsExpandedAndAbsolute(paths);
|
||||
}
|
||||
|
||||
SourceGroupType SourceGroupSettings::getType() const
|
||||
@@ -68,9 +90,9 @@ std::vector<FilePath> SourceGroupSettings::getSourcePaths() const
|
||||
return m_sourcePaths;
|
||||
}
|
||||
|
||||
std::vector<FilePath> SourceGroupSettings::getAbsoluteSourcePaths() const
|
||||
std::vector<FilePath> SourceGroupSettings::getSourcePathsExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathsAbsolute(getSourcePaths());
|
||||
return m_projectSettings->makePathsExpandedAndAbsolute(getSourcePaths());
|
||||
}
|
||||
|
||||
void SourceGroupSettings::setSourcePaths(const std::vector<FilePath>& sourcePaths)
|
||||
@@ -83,9 +105,9 @@ std::vector<FilePath> SourceGroupSettings::getExcludePaths() const
|
||||
return m_excludePaths;
|
||||
}
|
||||
|
||||
std::vector<FilePath> SourceGroupSettings::getAbsoluteExcludePaths() const
|
||||
std::vector<FilePath> SourceGroupSettings::getExcludePathsExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathsAbsolute(getExcludePaths());
|
||||
return m_projectSettings->makePathsExpandedAndAbsolute(getExcludePaths());
|
||||
}
|
||||
|
||||
void SourceGroupSettings::setExcludePaths(const std::vector<FilePath>& excludePaths)
|
||||
|
||||
@@ -18,9 +18,14 @@ public:
|
||||
virtual bool equals(std::shared_ptr<SourceGroupSettings> other) const;
|
||||
|
||||
std::string getId() const;
|
||||
void setId(const std::string& id);
|
||||
|
||||
std::string getName() const;
|
||||
void setName(const std::string& name);
|
||||
|
||||
FilePath getProjectFileLocation() const;
|
||||
FilePath makePathAbsolute(const FilePath& path) const;
|
||||
FilePath makePathExpandedAndAbsolute(const FilePath& path) const;
|
||||
std::vector<FilePath> makePathsExpandedAndAbsolute(const std::vector<FilePath>& paths) const;
|
||||
|
||||
virtual std::vector<std::string> getAvailableLanguageStandards() const = 0;
|
||||
virtual SourceGroupType getType() const;
|
||||
@@ -29,11 +34,11 @@ public:
|
||||
void setStandard(const std::string& standard);
|
||||
|
||||
std::vector<FilePath> getSourcePaths() const;
|
||||
std::vector<FilePath> getAbsoluteSourcePaths() const;
|
||||
std::vector<FilePath> getSourcePathsExpandedAndAbsolute() const;
|
||||
void setSourcePaths(const std::vector<FilePath>& sourcePaths);
|
||||
|
||||
std::vector<FilePath> getExcludePaths() const;
|
||||
std::vector<FilePath> getAbsoluteExcludePaths() const;
|
||||
std::vector<FilePath> getExcludePathsExpandedAndAbsolute() const;
|
||||
void setExcludePaths(const std::vector<FilePath>& excludePaths);
|
||||
|
||||
std::vector<std::string> getSourceExtensions() const;
|
||||
@@ -46,7 +51,8 @@ private:
|
||||
virtual std::vector<std::string> getDefaultSourceExtensions() const = 0;
|
||||
virtual std::string getDefaultStandard() const = 0;
|
||||
|
||||
const std::string m_id;
|
||||
std::string m_id;
|
||||
std::string m_name;
|
||||
const SourceGroupType m_type;
|
||||
|
||||
std::string m_standard;
|
||||
|
||||
@@ -101,9 +101,9 @@ std::vector<FilePath> SourceGroupSettingsCxx::getHeaderSearchPaths() const
|
||||
return m_headerSearchPaths;
|
||||
}
|
||||
|
||||
std::vector<FilePath> SourceGroupSettingsCxx::getAbsoluteHeaderSearchPaths() const
|
||||
std::vector<FilePath> SourceGroupSettingsCxx::getHeaderSearchPathsExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathsAbsolute(getHeaderSearchPaths());
|
||||
return m_projectSettings->makePathsExpandedAndAbsolute(getHeaderSearchPaths());
|
||||
}
|
||||
|
||||
void SourceGroupSettingsCxx::setHeaderSearchPaths(const std::vector<FilePath>& headerSearchPaths)
|
||||
@@ -116,9 +116,9 @@ std::vector<FilePath> SourceGroupSettingsCxx::getFrameworkSearchPaths() const
|
||||
return m_frameworkSearchPaths;
|
||||
}
|
||||
|
||||
std::vector<FilePath> SourceGroupSettingsCxx::getAbsoluteFrameworkSearchPaths() const
|
||||
std::vector<FilePath> SourceGroupSettingsCxx::getFrameworkSearchPathsExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathsAbsolute(getFrameworkSearchPaths());
|
||||
return m_projectSettings->makePathsExpandedAndAbsolute(getFrameworkSearchPaths());
|
||||
}
|
||||
|
||||
void SourceGroupSettingsCxx::setFrameworkSearchPaths(const std::vector<FilePath>& frameworkSearchPaths)
|
||||
@@ -161,9 +161,9 @@ FilePath SourceGroupSettingsCxx::getCompilationDatabasePath() const
|
||||
return m_compilationDatabasePath;
|
||||
}
|
||||
|
||||
FilePath SourceGroupSettingsCxx::getAbsoluteCompilationDatabasePath() const
|
||||
FilePath SourceGroupSettingsCxx::getCompilationDatabasePathExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathAbsolute(getCompilationDatabasePath());
|
||||
return m_projectSettings->makePathExpandedAndAbsolute(getCompilationDatabasePath());
|
||||
}
|
||||
|
||||
void SourceGroupSettingsCxx::setCompilationDatabasePath(const FilePath& compilationDatabasePath)
|
||||
|
||||
@@ -15,11 +15,11 @@ public:
|
||||
virtual std::vector<std::string> getAvailableLanguageStandards() const;
|
||||
|
||||
std::vector<FilePath> getHeaderSearchPaths() const;
|
||||
std::vector<FilePath> getAbsoluteHeaderSearchPaths() const;
|
||||
std::vector<FilePath> getHeaderSearchPathsExpandedAndAbsolute() const;
|
||||
void setHeaderSearchPaths(const std::vector<FilePath>& headerSearchPaths);
|
||||
|
||||
std::vector<FilePath> getFrameworkSearchPaths() const;
|
||||
std::vector<FilePath> getAbsoluteFrameworkSearchPaths() const;
|
||||
std::vector<FilePath> getFrameworkSearchPathsExpandedAndAbsolute() const;
|
||||
void setFrameworkSearchPaths(const std::vector<FilePath>& frameworkSearchPaths);
|
||||
|
||||
std::vector<std::string> getCompilerFlags() const;
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
// deprecated end
|
||||
|
||||
FilePath getCompilationDatabasePath() const;
|
||||
FilePath getAbsoluteCompilationDatabasePath() const;
|
||||
FilePath getCompilationDatabasePathExpandedAndAbsolute() const;
|
||||
void setCompilationDatabasePath(const FilePath& compilationDatabasePath);
|
||||
|
||||
private:
|
||||
|
||||
@@ -39,9 +39,9 @@ std::vector<FilePath> SourceGroupSettingsJava::getClasspaths() const
|
||||
return m_classpaths;
|
||||
}
|
||||
|
||||
std::vector<FilePath> SourceGroupSettingsJava::getAbsoluteClasspaths() const
|
||||
std::vector<FilePath> SourceGroupSettingsJava::getClasspathsExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathsAbsolute(getClasspaths());
|
||||
return m_projectSettings->makePathsExpandedAndAbsolute(getClasspaths());
|
||||
}
|
||||
|
||||
void SourceGroupSettingsJava::setClasspaths(const std::vector<FilePath>& classpaths)
|
||||
@@ -54,9 +54,9 @@ FilePath SourceGroupSettingsJava::getMavenProjectFilePath() const
|
||||
return m_mavenProjectFilePath;
|
||||
}
|
||||
|
||||
FilePath SourceGroupSettingsJava::getAbsoluteMavenProjectFilePath() const
|
||||
FilePath SourceGroupSettingsJava::getMavenProjectFilePathExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathAbsolute(getMavenProjectFilePath());
|
||||
return m_projectSettings->makePathExpandedAndAbsolute(getMavenProjectFilePath());
|
||||
}
|
||||
|
||||
void SourceGroupSettingsJava::setMavenProjectFilePath(const FilePath& path)
|
||||
@@ -69,9 +69,9 @@ FilePath SourceGroupSettingsJava::getMavenDependenciesDirectory() const
|
||||
return m_mavenDependenciesDirectory;
|
||||
}
|
||||
|
||||
FilePath SourceGroupSettingsJava::getAbsoluteMavenDependenciesDirectory() const
|
||||
FilePath SourceGroupSettingsJava::getMavenDependenciesDirectoryExpandedAndAbsolute() const
|
||||
{
|
||||
return m_projectSettings->makePathAbsolute(getMavenDependenciesDirectory());
|
||||
return m_projectSettings->makePathExpandedAndAbsolute(getMavenDependenciesDirectory());
|
||||
}
|
||||
|
||||
void SourceGroupSettingsJava::setMavenDependenciesDirectory(const FilePath& path)
|
||||
|
||||
@@ -18,15 +18,15 @@ public:
|
||||
virtual std::vector<std::string> getAvailableLanguageStandards() const;
|
||||
|
||||
std::vector<FilePath> getClasspaths() const;
|
||||
std::vector<FilePath> getAbsoluteClasspaths() const;
|
||||
std::vector<FilePath> getClasspathsExpandedAndAbsolute() const;
|
||||
void setClasspaths(const std::vector<FilePath>& classpaths);
|
||||
|
||||
FilePath getMavenProjectFilePath() const;
|
||||
FilePath getAbsoluteMavenProjectFilePath() const;
|
||||
FilePath getMavenProjectFilePathExpandedAndAbsolute() const;
|
||||
void setMavenProjectFilePath(const FilePath& path);
|
||||
|
||||
FilePath getMavenDependenciesDirectory() const;
|
||||
FilePath getAbsoluteMavenDependenciesDirectory() const;
|
||||
FilePath getMavenDependenciesDirectoryExpandedAndAbsolute() const;
|
||||
void setMavenDependenciesDirectory(const FilePath& path);
|
||||
|
||||
bool getShouldIndexMavenTests() const;
|
||||
|
||||
@@ -27,17 +27,17 @@ std::string sourceGroupTypeToProjectSetupString(SourceGroupType v)
|
||||
switch (v)
|
||||
{
|
||||
case SOURCE_GROUP_C_EMPTY:
|
||||
return "Empty C Project";
|
||||
return "Empty C Source Group";
|
||||
case SOURCE_GROUP_CPP_EMPTY:
|
||||
return "Empty C++ Project";
|
||||
return "Empty C++ Source Group";
|
||||
case SOURCE_GROUP_CXX_CDB:
|
||||
return "C/C++ from Compilation Database";
|
||||
case SOURCE_GROUP_CXX_VS:
|
||||
return "C/C++ from Visual Studio";
|
||||
case SOURCE_GROUP_JAVA_EMPTY:
|
||||
return "Empty Java Project";
|
||||
return "Empty Java Source Group";
|
||||
case SOURCE_GROUP_JAVA_MAVEN:
|
||||
return "Java Project from Maven";
|
||||
return "Java Source Group from Maven";
|
||||
case SOURCE_GROUP_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -7,10 +7,9 @@ class MessageProjectNew
|
||||
: public Message<MessageProjectNew>
|
||||
{
|
||||
public:
|
||||
MessageProjectNew()
|
||||
: solutionPath("")
|
||||
, headerPaths()
|
||||
, ideId("")
|
||||
MessageProjectNew(const std::string cdbPath, const std::vector<std::string> headerPaths)
|
||||
: cdbPath(cdbPath)
|
||||
, headerPaths(headerPaths)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -19,44 +18,8 @@ public:
|
||||
return "MessageProjectNew";
|
||||
}
|
||||
|
||||
bool fromSolution() const
|
||||
{
|
||||
return solutionPath.size() > 0;
|
||||
}
|
||||
|
||||
bool fromCDB() const
|
||||
{
|
||||
if (solutionPath.length() > 0)
|
||||
{
|
||||
size_t pos = solutionPath.find_last_of('.');
|
||||
if (pos != std::string::npos)
|
||||
{
|
||||
std::string extension = solutionPath.substr(pos + 1);
|
||||
|
||||
return (extension == "json");
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void setSolutionPath(const std::string& path)
|
||||
{
|
||||
solutionPath = path;
|
||||
}
|
||||
|
||||
void setHeaderPaths(const std::vector<std::string>& headerPaths)
|
||||
{
|
||||
this->headerPaths = headerPaths;
|
||||
}
|
||||
|
||||
std::string solutionPath;
|
||||
std::vector<std::string> headerPaths;
|
||||
std::string ideId;
|
||||
const std::string cdbPath;
|
||||
const std::vector<std::string> headerPaths;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_PROJECT_NEW_H
|
||||
|
||||
@@ -30,7 +30,7 @@ SourceGroupType SourceGroupCxx::getType() const
|
||||
|
||||
bool SourceGroupCxx::prepareRefresh()
|
||||
{
|
||||
FilePath cdbPath = m_settings->getAbsoluteCompilationDatabasePath();
|
||||
FilePath cdbPath = m_settings->getCompilationDatabasePathExpandedAndAbsolute();
|
||||
if (!cdbPath.empty() && !cdbPath.exists())
|
||||
{
|
||||
MessageStatus("Can't refresh project").dispatch();
|
||||
@@ -56,19 +56,19 @@ void SourceGroupCxx::fetchAllSourceFilePaths()
|
||||
{
|
||||
std::vector<FilePath> sourcePaths;
|
||||
|
||||
FilePath cdbPath = m_settings->getAbsoluteCompilationDatabasePath();
|
||||
FilePath cdbPath = m_settings->getCompilationDatabasePathExpandedAndAbsolute();
|
||||
if (cdbPath.exists())
|
||||
{
|
||||
sourcePaths = IndexerCommandCxxCdb::getSourceFilesFromCDB(cdbPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
sourcePaths = m_settings->getAbsoluteSourcePaths();
|
||||
sourcePaths = m_settings->getSourcePathsExpandedAndAbsolute();
|
||||
}
|
||||
|
||||
m_sourceFilePathsToIndex.clear();
|
||||
FileManager fileManager;
|
||||
fileManager.update(sourcePaths, m_settings->getAbsoluteExcludePaths(), m_settings->getSourceExtensions());
|
||||
fileManager.update(sourcePaths, m_settings->getExcludePathsExpandedAndAbsolute(), m_settings->getSourceExtensions());
|
||||
m_allSourceFilePaths = fileManager.getAllSourceFilePaths();
|
||||
}
|
||||
|
||||
@@ -77,11 +77,11 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupCxx::getIndexerCommands(
|
||||
std::shared_ptr<ApplicationSettings> appSettings = ApplicationSettings::getInstance();
|
||||
|
||||
std::vector<FilePath> systemHeaderSearchPaths;
|
||||
utility::append(systemHeaderSearchPaths, m_settings->getAbsoluteHeaderSearchPaths());
|
||||
utility::append(systemHeaderSearchPaths, m_settings->getHeaderSearchPathsExpandedAndAbsolute());
|
||||
utility::append(systemHeaderSearchPaths, appSettings->getHeaderSearchPathsExpanded());
|
||||
|
||||
// Add the source paths as HeaderSearchPaths as well, so clang will also look here when searching include files.
|
||||
for (const FilePath& sourcePath: m_settings->getAbsoluteSourcePaths())
|
||||
for (const FilePath& sourcePath: m_settings->getSourcePathsExpandedAndAbsolute())
|
||||
{
|
||||
if (sourcePath.isDirectory())
|
||||
{
|
||||
@@ -93,7 +93,7 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupCxx::getIndexerCommands(
|
||||
if (m_settings->getUseSourcePathsForHeaderSearch())
|
||||
{
|
||||
std::vector<FilePath> headerSearchSubPaths;
|
||||
for (const FilePath& sourcePath : m_settings->getAbsoluteSourcePaths())
|
||||
for (const FilePath& sourcePath : m_settings->getSourcePathsExpandedAndAbsolute())
|
||||
{
|
||||
utility::append(headerSearchSubPaths, FileSystem::getSubDirectories(sourcePath));
|
||||
}
|
||||
@@ -102,13 +102,13 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupCxx::getIndexerCommands(
|
||||
}
|
||||
|
||||
std::vector<FilePath> frameworkSearchPaths;
|
||||
utility::append(frameworkSearchPaths, m_settings->getAbsoluteFrameworkSearchPaths());
|
||||
utility::append(frameworkSearchPaths, m_settings->getFrameworkSearchPathsExpandedAndAbsolute());
|
||||
utility::append(frameworkSearchPaths, appSettings->getFrameworkSearchPathsExpanded());
|
||||
|
||||
const std::vector<std::string> compilerFlags = m_settings->getCompilerFlags();
|
||||
|
||||
std::set<FilePath> indexedPaths;
|
||||
for (FilePath p: m_settings->getAbsoluteSourcePaths())
|
||||
for (FilePath p: m_settings->getSourcePathsExpandedAndAbsolute())
|
||||
{
|
||||
if (p.exists())
|
||||
{
|
||||
@@ -117,7 +117,7 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupCxx::getIndexerCommands(
|
||||
}
|
||||
|
||||
std::set<FilePath> excludedPaths;
|
||||
for (FilePath p: m_settings->getAbsoluteExcludePaths())
|
||||
for (FilePath p: m_settings->getExcludePathsExpandedAndAbsolute())
|
||||
{
|
||||
if (p.exists())
|
||||
{
|
||||
@@ -129,7 +129,7 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupCxx::getIndexerCommands(
|
||||
|
||||
const std::set<FilePath>& sourceFilePathsToIndex = (fullRefresh ? getAllSourceFilePaths() : getSourceFilePathsToIndex());
|
||||
|
||||
FilePath cdbPath = m_settings->getAbsoluteCompilationDatabasePath();
|
||||
FilePath cdbPath = m_settings->getCompilationDatabasePathExpandedAndAbsolute();
|
||||
if (cdbPath.exists())
|
||||
{
|
||||
std::string error;
|
||||
|
||||
@@ -156,24 +156,30 @@ add_files(
|
||||
qt/window/project_wizzard/QtProjectWizzardContent.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentCDBSource.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentCDBSource.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentData.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentData.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentExtensions.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentExtensions.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentFlags.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentFlags.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentLanguageAndStandard.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentLanguageAndStandard.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentPath.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentPath.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentPaths.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentPreferences.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentProjectData.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentProjectData.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSelect.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSimple.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSimple.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSourceGroupData.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSourceGroupData.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSummary.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentSummary.h
|
||||
qt/window/project_wizzard/QtProjectWizzardContentVS.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardContentVS.h
|
||||
qt/window/project_wizzard/QtProjectWizzardWindow.cpp
|
||||
qt/window/project_wizzard/QtProjectWizzardWindow.h
|
||||
|
||||
@@ -193,6 +199,8 @@ add_files(
|
||||
qt/window/QtLicense.h
|
||||
qt/window/QtMainWindow.cpp
|
||||
qt/window/QtMainWindow.h
|
||||
qt/window/QtPreferencesWindow.cpp
|
||||
qt/window/QtPreferencesWindow.h
|
||||
qt/window/QtSelectPathsDialog.cpp
|
||||
qt/window/QtSelectPathsDialog.h
|
||||
qt/window/QtSplashScreen.cpp
|
||||
|
||||
@@ -26,6 +26,7 @@ QtLocationPicker::QtLocationPicker(QWidget *parent)
|
||||
m_data->setAttribute(Qt::WA_MacShowFocusRect, 0);
|
||||
m_data->setObjectName("locationField");
|
||||
layout->addWidget(m_data);
|
||||
connect(m_data, SIGNAL(focus()), this, SLOT(handleFocus()));
|
||||
|
||||
m_button = new QtIconButton(
|
||||
(ResourcePaths::getGuiPath().str() + "window/dots.png").c_str(),
|
||||
@@ -68,6 +69,11 @@ void QtLocationPicker::clearText()
|
||||
m_data->clear();
|
||||
}
|
||||
|
||||
bool QtLocationPicker::pickDirectory() const
|
||||
{
|
||||
return m_pickDirectory;
|
||||
}
|
||||
|
||||
void QtLocationPicker::setPickDirectory(bool pickDirectory)
|
||||
{
|
||||
m_pickDirectory = pickDirectory;
|
||||
@@ -119,3 +125,11 @@ void QtLocationPicker::handleButtonPress()
|
||||
emit locationPicked();
|
||||
}
|
||||
}
|
||||
|
||||
void QtLocationPicker::handleFocus()
|
||||
{
|
||||
if (!m_data->text().size())
|
||||
{
|
||||
handleButtonPress();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,9 @@ public:
|
||||
void setText(QString text);
|
||||
void clearText();
|
||||
|
||||
bool pickDirectory() const;
|
||||
void setPickDirectory(bool pickDirectory);
|
||||
|
||||
void setFileFilter(const QString& fileFilter);
|
||||
|
||||
void setRelativeRootDirectory(const FilePath& dir);
|
||||
@@ -34,6 +36,7 @@ protected:
|
||||
|
||||
private slots:
|
||||
void handleButtonPress();
|
||||
void handleFocus();
|
||||
|
||||
private:
|
||||
QPushButton* m_button;
|
||||
|
||||
@@ -3,15 +3,6 @@
|
||||
#include "qt/window/QtMainWindow.h"
|
||||
|
||||
QtMainView::QtMainView()
|
||||
: m_editProjectFunctor(std::bind(&QtMainView::doEditProject, this))
|
||||
, m_createNewProjectFromSolutionFunctor(std::bind(&QtMainView::doCreateNewProjectFromSolution, this, std::placeholders::_1, std::placeholders::_2))
|
||||
, m_createNewProjectFromCDBFunctor(std::bind(&QtMainView::doCreateNewProjectFromCDB, this, std::placeholders::_1, std::placeholders::_2))
|
||||
, m_showStartScreenFunctor(std::bind(&QtMainView::doShowStartScreen, this))
|
||||
, m_hideStartScreenFunctor(std::bind(&QtMainView::doHideStartScreen, this))
|
||||
, m_setTitleFunctor(std::bind(&QtMainView::doSetTitle, this, std::placeholders::_1))
|
||||
, m_activateWindowFunctor(std::bind(&QtMainView::doActivateWindow, this))
|
||||
, m_updateRecentProjectMenuFunctor(std::bind(&QtMainView::doUpdateRecentProjectMenu, this))
|
||||
, m_forceLicenseScreenFunctor(std::bind(&QtMainView::doForceLicenseScreen, this, std::placeholders::_1))
|
||||
{
|
||||
m_window = std::make_shared<QtMainWindow>();
|
||||
m_window->show();
|
||||
@@ -86,22 +77,45 @@ void QtMainView::setStatusBar(QStatusBar* statusbar)
|
||||
|
||||
void QtMainView::hideStartScreen()
|
||||
{
|
||||
m_hideStartScreenFunctor();
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_window->hideStartScreen();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::setTitle(const std::string& title)
|
||||
{
|
||||
m_setTitleFunctor(title);
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_window->setWindowTitle(QString::fromStdString(title));
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::activateWindow()
|
||||
{
|
||||
m_activateWindowFunctor();
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
// It's platform dependent which of these commands does the right thing, for now we just use them all at once.
|
||||
m_window->setEnabled(true);
|
||||
m_window->raise();
|
||||
m_window->setFocus(Qt::ActiveWindowFocusReason);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::updateRecentProjectMenu()
|
||||
{
|
||||
m_updateRecentProjectMenuFunctor();
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_window->updateRecentProjectMenu();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::updateHistoryMenu(const std::vector<SearchMatch>& history)
|
||||
@@ -116,78 +130,45 @@ void QtMainView::updateHistoryMenu(const std::vector<SearchMatch>& history)
|
||||
|
||||
void QtMainView::handleMessage(MessageForceEnterLicense* message)
|
||||
{
|
||||
m_forceLicenseScreenFunctor(message->licenseExpired);
|
||||
bool expired = message->licenseExpired;
|
||||
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_window->forceEnterLicense(expired);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::handleMessage(MessageProjectEdit* message)
|
||||
{
|
||||
m_editProjectFunctor();
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_window->editProject();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::handleMessage(MessageProjectNew* message)
|
||||
{
|
||||
if (message->ideId.size() != 0 && message->solutionPath.size() != 0)
|
||||
{
|
||||
if (message->fromCDB() == false)
|
||||
std::string cdbPath = message->cdbPath;
|
||||
std::vector<std::string> headerPaths = message->headerPaths;
|
||||
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_createNewProjectFromSolutionFunctor(message->ideId, message->solutionPath);
|
||||
m_window->newProjectFromCDB(cdbPath, headerPaths);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_createNewProjectFromCDBFunctor(message->solutionPath, message->headerPaths);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void QtMainView::handleMessage(MessageShowStartScreen* message)
|
||||
{
|
||||
m_showStartScreenFunctor();
|
||||
}
|
||||
|
||||
void QtMainView::doEditProject()
|
||||
{
|
||||
m_window->editProject();
|
||||
}
|
||||
|
||||
void QtMainView::doCreateNewProjectFromSolution(const std::string& ideId, const std::string& solutionPath)
|
||||
{
|
||||
m_window->newProjectFromSolution(ideId, solutionPath);
|
||||
}
|
||||
|
||||
void QtMainView::doCreateNewProjectFromCDB(const std::string& filePath, const std::vector<std::string>& headerPaths)
|
||||
{
|
||||
m_window->newProjectFromCDB(filePath, headerPaths);
|
||||
}
|
||||
|
||||
void QtMainView::doShowStartScreen()
|
||||
{
|
||||
m_window->showStartScreen();
|
||||
}
|
||||
|
||||
void QtMainView::doHideStartScreen()
|
||||
{
|
||||
m_window->hideStartScreen();
|
||||
}
|
||||
|
||||
void QtMainView::doSetTitle(const std::string& title)
|
||||
{
|
||||
m_window->setWindowTitle(QString::fromStdString(title));
|
||||
}
|
||||
|
||||
void QtMainView::doActivateWindow()
|
||||
{
|
||||
// It's platform dependent which of these commands does the right thing, for now we just use them all at once.
|
||||
m_window->setEnabled(true);
|
||||
m_window->raise();
|
||||
m_window->setFocus(Qt::ActiveWindowFocusReason);
|
||||
}
|
||||
|
||||
void QtMainView::doUpdateRecentProjectMenu()
|
||||
{
|
||||
m_window->updateRecentProjectMenu();
|
||||
}
|
||||
|
||||
void QtMainView::doForceLicenseScreen(bool expired)
|
||||
{
|
||||
m_window->forceEnterLicense(expired);
|
||||
m_onQtThread(
|
||||
[=]()
|
||||
{
|
||||
m_window->showStartScreen();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -57,29 +57,9 @@ private:
|
||||
void handleMessage(MessageProjectNew* message);
|
||||
void handleMessage(MessageShowStartScreen* message);
|
||||
|
||||
void doEditProject();
|
||||
void doCreateNewProjectFromSolution(const std::string& ideId, const std::string& solutionPath);
|
||||
void doCreateNewProjectFromCDB(const std::string& filePath, const std::vector<std::string>& headerPaths);
|
||||
void doShowStartScreen();
|
||||
void doHideStartScreen();
|
||||
void doSetTitle(const std::string& title);
|
||||
void doActivateWindow();
|
||||
void doUpdateRecentProjectMenu();
|
||||
void doForceLicenseScreen(bool expired);
|
||||
|
||||
std::shared_ptr<QtMainWindow> m_window;
|
||||
std::vector<View*> m_views;
|
||||
|
||||
QtThreadedFunctor<> m_editProjectFunctor;
|
||||
QtThreadedFunctor<const std::string&, const std::string&> m_createNewProjectFromSolutionFunctor;
|
||||
QtThreadedFunctor<const std::string&, const std::vector<std::string>&> m_createNewProjectFromCDBFunctor;
|
||||
QtThreadedFunctor<> m_showStartScreenFunctor;
|
||||
QtThreadedFunctor<> m_hideStartScreenFunctor;
|
||||
QtThreadedFunctor<const std::string&> m_setTitleFunctor;
|
||||
QtThreadedFunctor<> m_activateWindowFunctor;
|
||||
QtThreadedFunctor<> m_updateRecentProjectMenuFunctor;
|
||||
QtThreadedFunctor<bool> m_forceLicenseScreenFunctor;
|
||||
|
||||
QtThreadedLambdaFunctor m_onQtThread;
|
||||
};
|
||||
|
||||
|
||||
@@ -11,20 +11,21 @@
|
||||
#include <QTimer>
|
||||
|
||||
#include "Application.h"
|
||||
#include "component/view/View.h"
|
||||
#include "component/controller/LogController.h"
|
||||
#include "component/view/CompositeView.h"
|
||||
#include "component/view/TabbedView.h"
|
||||
#include "component/controller/LogController.h"
|
||||
#include "component/view/View.h"
|
||||
#include "LicenseChecker.h"
|
||||
#include "qt/utility/QtContextMenu.h"
|
||||
#include "qt/utility/utilityQt.h"
|
||||
#include "qt/view/QtViewWidgetWrapper.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzard.h"
|
||||
#include "qt/window/QtStartScreen.h"
|
||||
#include "qt/window/QtAboutLicense.h"
|
||||
#include "qt/window/QtAbout.h"
|
||||
#include "qt/window/QtAboutLicense.h"
|
||||
#include "qt/window/QtKeyboardShortcuts.h"
|
||||
#include "qt/window/QtLicense.h"
|
||||
#include "qt/window/QtPreferencesWindow.h"
|
||||
#include "qt/window/QtStartScreen.h"
|
||||
#include "settings/ApplicationSettings.h"
|
||||
#include "utility/file/FileSystem.h"
|
||||
#include "utility/logging/logging.h"
|
||||
@@ -312,8 +313,8 @@ void QtMainWindow::about()
|
||||
|
||||
void QtMainWindow::openSettings()
|
||||
{
|
||||
QtProjectWizzard* wizzard = createWindow<QtProjectWizzard>();
|
||||
wizzard->showPreferences();
|
||||
QtPreferencesWindow* window = createWindow<QtPreferencesWindow>();
|
||||
window->setup();
|
||||
}
|
||||
|
||||
void QtMainWindow::showDocumentation()
|
||||
@@ -421,17 +422,15 @@ void QtMainWindow::newProject()
|
||||
wizzard->newProject();
|
||||
}
|
||||
|
||||
void QtMainWindow::newProjectFromSolution(const std::string& ideId, const std::string& solutionPath)
|
||||
{
|
||||
QtProjectWizzard* wizzard = createWindow<QtProjectWizzard>();
|
||||
wizzard->newProjectFromSolution(ideId, FilePath(solutionPath));
|
||||
}
|
||||
|
||||
void QtMainWindow::newProjectFromCDB(const std::string& filePath, const std::vector<std::string>& headerPaths)
|
||||
{
|
||||
QtProjectWizzard* wizzard = createWindow<QtProjectWizzard>();
|
||||
QtProjectWizzard* wizzard = dynamic_cast<QtProjectWizzard*>(m_windowStack.getTopWindow());
|
||||
if (!wizzard)
|
||||
{
|
||||
wizzard = createWindow<QtProjectWizzard>();
|
||||
}
|
||||
|
||||
std::vector<FilePath> headerFilePaths(headerPaths.size());
|
||||
std::vector<FilePath> headerFilePaths;
|
||||
for (const std::string& s: headerPaths)
|
||||
{
|
||||
headerFilePaths.push_back(FilePath(s));
|
||||
|
||||
@@ -94,7 +94,6 @@ public slots:
|
||||
void hideStartScreen();
|
||||
|
||||
void newProject();
|
||||
void newProjectFromSolution(const std::string& ideId, const std::string& solutionPath);
|
||||
void newProjectFromCDB(const std::string& filePath, const std::vector<std::string>& headerPaths);
|
||||
void openProject();
|
||||
void editProject();
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
#include "qt/window/QtPreferencesWindow.h"
|
||||
|
||||
#include "utility/messaging/type/MessageLoadProject.h"
|
||||
#include "utility/messaging/type/MessagePluginPortChange.h"
|
||||
#include "utility/messaging/type/MessageRefresh.h"
|
||||
#include "utility/messaging/type/MessageScrollSpeedChange.h"
|
||||
|
||||
#include "Application.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentPaths.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentPreferences.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentSummary.h"
|
||||
|
||||
QtPreferencesWindow::QtPreferencesWindow(QWidget* parent)
|
||||
: QtProjectWizzardWindow(parent)
|
||||
{
|
||||
// save old application settings so they can be compared later
|
||||
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
|
||||
m_appSettings.setHeaderSearchPaths(appSettings->getHeaderSearchPaths());
|
||||
m_appSettings.setFrameworkSearchPaths(appSettings->getFrameworkSearchPaths());
|
||||
m_appSettings.setScrollSpeed(appSettings->getScrollSpeed());
|
||||
m_appSettings.setSourcetrailPort(appSettings->getSourcetrailPort());
|
||||
m_appSettings.setPluginPort(appSettings->getPluginPort());
|
||||
|
||||
|
||||
QtProjectWizzardContentSummary* summary = new QtProjectWizzardContentSummary(this);
|
||||
summary->setIsForm(true);
|
||||
summary->addContent(new QtProjectWizzardContentPreferences(this));
|
||||
|
||||
summary->addContent(new QtProjectWizzardContentPathsHeaderSearchGlobal(this));
|
||||
if (QSysInfo::macVersion() != QSysInfo::MV_None)
|
||||
{
|
||||
summary->addContent(new QtProjectWizzardContentPathsFrameworkSearchGlobal(this));
|
||||
}
|
||||
|
||||
setPreferredSize(QSize(750, 500));
|
||||
setContent(summary);
|
||||
setScrollAble(content()->isScrollAble());
|
||||
}
|
||||
|
||||
QtPreferencesWindow::~QtPreferencesWindow()
|
||||
{
|
||||
}
|
||||
|
||||
void QtPreferencesWindow::windowReady()
|
||||
{
|
||||
QtProjectWizzardWindow::windowReady();
|
||||
|
||||
updateTitle("PREFERENCES");
|
||||
updateNextButton("Save");
|
||||
setPreviousVisible(false);
|
||||
|
||||
loadContent();
|
||||
}
|
||||
|
||||
void QtPreferencesWindow::handleNext()
|
||||
{
|
||||
if (!content()->check())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
saveContent();
|
||||
|
||||
bool appSettingsChanged = !(m_appSettings == *ApplicationSettings::getInstance().get());
|
||||
|
||||
if (m_appSettings.getScrollSpeed() != ApplicationSettings::getInstance()->getScrollSpeed())
|
||||
{
|
||||
MessageScrollSpeedChange(ApplicationSettings::getInstance()->getScrollSpeed()).dispatch();
|
||||
}
|
||||
|
||||
if (m_appSettings.getSourcetrailPort() != ApplicationSettings::getInstance()->getSourcetrailPort() ||
|
||||
m_appSettings.getPluginPort() != ApplicationSettings::getInstance()->getPluginPort())
|
||||
{
|
||||
MessagePluginPortChange().dispatch();
|
||||
}
|
||||
|
||||
Application::getInstance()->loadSettings();
|
||||
|
||||
if (appSettingsChanged)
|
||||
{
|
||||
Project* currentProject = Application::getInstance()->getCurrentProject().get();
|
||||
if (currentProject)
|
||||
{
|
||||
MessageLoadProject(currentProject->getProjectSettingsFilePath(), true).dispatch();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageRefresh().refreshUiOnly().dispatch();
|
||||
}
|
||||
|
||||
QtWindow::handleNext();
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
#ifndef QT_PREFERENCES_WINDOW_H
|
||||
#define QT_PREFERENCES_WINDOW_H
|
||||
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardWindow.h"
|
||||
|
||||
#include "settings/ApplicationSettings.h"
|
||||
|
||||
class QtPreferencesWindow
|
||||
: public QtProjectWizzardWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtPreferencesWindow(QWidget* parent = 0);
|
||||
virtual ~QtPreferencesWindow();
|
||||
|
||||
protected:
|
||||
virtual void windowReady() override;
|
||||
virtual void handleNext() override;
|
||||
|
||||
private:
|
||||
ApplicationSettings m_appSettings;
|
||||
};
|
||||
|
||||
#endif // QT_PREFERENCES_WINDOW_H
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "qt/window/QtSelectPathsDialog.h"
|
||||
|
||||
#include <set>
|
||||
|
||||
#include <QLabel>
|
||||
#include <QListWidget>
|
||||
#include <QPushButton>
|
||||
@@ -28,12 +30,14 @@ std::vector<FilePath> QtSelectPathsDialog::getPathsList() const
|
||||
|
||||
void QtSelectPathsDialog::setPathsList(const std::vector<FilePath>& paths, const std::vector<FilePath>& checkedPaths)
|
||||
{
|
||||
std::set<FilePath> checked(checkedPaths.begin(), checkedPaths.end());
|
||||
|
||||
for (FilePath s : paths)
|
||||
{
|
||||
QListWidgetItem* item = new QListWidgetItem(s.str().c_str(), m_list);
|
||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable); // set checkable flag
|
||||
|
||||
if (std::find(checkedPaths.begin(), checkedPaths.end(), s) == checkedPaths.end())
|
||||
if (checked.find(s) == checked.end())
|
||||
{
|
||||
item->setCheckState(Qt::Unchecked); // AND initialize check state
|
||||
}
|
||||
|
||||
@@ -186,6 +186,14 @@ void QtWindow::updateNextButton(QString text)
|
||||
}
|
||||
}
|
||||
|
||||
void QtWindow::updatePreviousButton(QString text)
|
||||
{
|
||||
if (m_previousButton)
|
||||
{
|
||||
m_previousButton->setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
void QtWindow::updateCloseButton(QString text)
|
||||
{
|
||||
if (m_closeButton)
|
||||
|
||||
@@ -35,6 +35,7 @@ public:
|
||||
void updateSubTitle(QString subTitle);
|
||||
|
||||
void updateNextButton(QString text);
|
||||
void updatePreviousButton(QString text);
|
||||
void updateCloseButton(QString text);
|
||||
|
||||
void setNextEnabled(bool enabled);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,41 +3,41 @@
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include "qt/window/QtWindowStack.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardWindow.h"
|
||||
#include "qt/window/QtWindow.h"
|
||||
|
||||
#include "settings/ApplicationSettings.h"
|
||||
#include "settings/ProjectSettings.h"
|
||||
|
||||
class QListWidget;
|
||||
class QPushButton;
|
||||
class QtProjectWizzardContent;
|
||||
class QtProjectWizzardContentSummary;
|
||||
class QtProjectWizzardWindow;
|
||||
|
||||
class QtProjectWizzard
|
||||
: public QtWindowStackElement
|
||||
: public QtProjectWizzardWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void finished();
|
||||
void canceled();
|
||||
|
||||
public:
|
||||
QtProjectWizzard(QWidget* parent = nullptr);
|
||||
|
||||
// QtWindowStackElement implementation
|
||||
virtual void showWindow() override;
|
||||
virtual void hideWindow() override;
|
||||
virtual QSize sizeHint() const override;
|
||||
|
||||
public slots:
|
||||
void newProject();
|
||||
|
||||
void newProjectFromSolution(const std::string& ideId, const FilePath& solutionPath);
|
||||
void newProjectFromCDB(const FilePath& filePath, const std::vector<FilePath>& headerPaths);
|
||||
void refreshProjectFromSolution(const std::string& ideId, const std::string& solutionPath);
|
||||
|
||||
void editProject(const FilePath& settingsPath);
|
||||
void editProject(std::shared_ptr<ProjectSettings> settings);
|
||||
void showPreferences();
|
||||
|
||||
protected:
|
||||
virtual void populateWindow(QWidget* widget) override;
|
||||
virtual void windowReady() override;
|
||||
|
||||
virtual void handlePrevious() override;
|
||||
|
||||
private:
|
||||
static bool applicationSettingsContainVisualStudioHeaderSearchPaths();
|
||||
@@ -48,26 +48,44 @@ private:
|
||||
QtProjectWizzardWindow* createWindowWithSummary(
|
||||
std::function<void(QtProjectWizzardWindow*, QtProjectWizzardContentSummary*)> func);
|
||||
|
||||
void updateSourceGroupList();
|
||||
bool canExitContent();
|
||||
|
||||
QtWindowStack m_windowStack;
|
||||
|
||||
std::shared_ptr<ProjectSettings> m_projectSettings;
|
||||
std::shared_ptr<SourceGroupSettings> m_sourceGroupSettings;
|
||||
std::vector<std::shared_ptr<SourceGroupSettings>> m_allSourceGroupSettings;
|
||||
std::shared_ptr<SourceGroupSettings> m_newSourceGroupSettings;
|
||||
ApplicationSettings m_appSettings;
|
||||
|
||||
bool m_editing;
|
||||
|
||||
QPushButton* m_generalButton;
|
||||
QPushButton* m_removeButton;
|
||||
QPushButton* m_duplicateButton;
|
||||
QListWidget* m_sourceGroupList;
|
||||
QWidget* m_contentWidget;
|
||||
|
||||
private slots:
|
||||
void generalButtonClicked();
|
||||
void selectedSourceGroupChanged(int index);
|
||||
void selectedSourceGroupNameChanged(QString name);
|
||||
void removeSelectedSourceGroup();
|
||||
void duplicateSelectedSourceGroup();
|
||||
|
||||
void cancelSourceGroup();
|
||||
|
||||
void cancelWizzard();
|
||||
void finishWizzard();
|
||||
|
||||
void windowStackChanged();
|
||||
|
||||
void newSourceGroup();
|
||||
void selectedProjectType(SourceGroupType sourceGroupType);
|
||||
|
||||
void emptyProject();
|
||||
void emptyProjectCDBVS();
|
||||
void emptyProjectCDB();
|
||||
void emptyProjectJavaMaven();
|
||||
void emptySourceGroup();
|
||||
void emptySourceGroupCDBVS();
|
||||
void emptySourceGroupCDB();
|
||||
|
||||
void sourcePaths();
|
||||
void headerSearchPaths();
|
||||
@@ -75,19 +93,14 @@ private slots:
|
||||
void headerSearchPathsDone();
|
||||
void frameworkSearchPaths();
|
||||
|
||||
void headerPathsCDB();
|
||||
|
||||
void sourcePathsJava();
|
||||
void sourcePathsJavaMaven();
|
||||
|
||||
void advancedSettingsCxx();
|
||||
void advancedSettingsJava();
|
||||
|
||||
void showSummary();
|
||||
void showSummaryJava();
|
||||
|
||||
void createSourceGroup();
|
||||
void createProject();
|
||||
void savePreferences();
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_H
|
||||
|
||||
@@ -67,7 +67,7 @@ void QtProjectWizzardContent::setIsInForm(bool isInForm)
|
||||
QLabel* QtProjectWizzardContent::createFormLabel(QString name) const
|
||||
{
|
||||
QLabel* label = new QLabel(name);
|
||||
label->setAlignment(Qt::AlignRight);
|
||||
label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||
label->setObjectName("label");
|
||||
label->setWordWrap(true);
|
||||
return label;
|
||||
@@ -81,10 +81,10 @@ QLabel* QtProjectWizzardContent::createFormTitle(QString name) const
|
||||
return label;
|
||||
}
|
||||
|
||||
QToolButton* QtProjectWizzardContent::createProjectButton(QString name, QString iconPath) const
|
||||
QToolButton* QtProjectWizzardContent::createSourceGroupButton(QString name, QString iconPath) const
|
||||
{
|
||||
QToolButton* button = new QToolButton();
|
||||
button->setObjectName("projectButton");
|
||||
button->setObjectName("sourceGroupButton");
|
||||
button->setText(name);
|
||||
button->setIcon(QPixmap(iconPath));
|
||||
button->setIconSize(QSize(64, 64));
|
||||
@@ -104,6 +104,7 @@ QPushButton* QtProjectWizzardContent::addFilesButton(QString name, QGridLayout*
|
||||
{
|
||||
QPushButton* button = new QPushButton(name);
|
||||
button->setObjectName("windowButton");
|
||||
button->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
|
||||
if (layout)
|
||||
{
|
||||
layout->addWidget(button, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignRight | Qt::AlignTop);
|
||||
@@ -113,6 +114,19 @@ QPushButton* QtProjectWizzardContent::addFilesButton(QString name, QGridLayout*
|
||||
return button;
|
||||
}
|
||||
|
||||
QFrame* QtProjectWizzardContent::addSeparator(QGridLayout* layout, int row) const
|
||||
{
|
||||
QFrame* separator = new QFrame();
|
||||
separator->setFrameShape(QFrame::HLine);
|
||||
|
||||
QPalette palette = separator->palette();
|
||||
palette.setColor(QPalette::WindowText, Qt::lightGray);
|
||||
separator->setPalette(palette);
|
||||
|
||||
layout->addWidget(separator, row, 0, 1, -1);
|
||||
return separator;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContent::filesButtonClicked()
|
||||
{
|
||||
m_window->saveContent();
|
||||
|
||||
@@ -39,10 +39,11 @@ public:
|
||||
protected:
|
||||
QLabel* createFormLabel(QString name) const;
|
||||
QLabel* createFormTitle(QString name) const;
|
||||
QToolButton* createProjectButton(QString name, QString iconPath) const;
|
||||
QToolButton* createSourceGroupButton(QString name, QString iconPath) const;
|
||||
|
||||
QtHelpButton* addHelpButton(QString helpString, QGridLayout* layout, int row) const;
|
||||
QPushButton* addFilesButton(QString name, QGridLayout* layout, int row) const;
|
||||
QFrame* addSeparator(QGridLayout* layout, int row) const;
|
||||
|
||||
QtProjectWizzardWindow* m_window;
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ void QtProjectWizzardContentCDBSource::populate(QGridLayout* layout, int& row)
|
||||
layout->setRowStretch(row, 0);
|
||||
|
||||
m_text = new QLabel("");
|
||||
m_text->setWordWrap(true);
|
||||
layout->addWidget(m_text, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignTop);
|
||||
|
||||
addFilesButton("show source files", layout, row + 1);
|
||||
@@ -32,42 +33,47 @@ void QtProjectWizzardContentCDBSource::load()
|
||||
m_fileNames.clear();
|
||||
|
||||
const FilePath projectPath = m_settings->getProjectFileLocation();
|
||||
std::vector<FilePath> excludePaths = m_settings->getAbsoluteExcludePaths();
|
||||
std::vector<FilePath> excludePaths = m_settings->getExcludePathsExpandedAndAbsolute();
|
||||
|
||||
std::shared_ptr<SourceGroupSettingsCxx> cxxSettings = std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_settings);
|
||||
if (cxxSettings)
|
||||
{
|
||||
std::vector<FilePath> filePaths =
|
||||
IndexerCommandCxxCdb::getSourceFilesFromCDB(cxxSettings->getAbsoluteCompilationDatabasePath());
|
||||
|
||||
for (FilePath path : filePaths)
|
||||
FilePath cdbPath = cxxSettings->getCompilationDatabasePathExpandedAndAbsolute();
|
||||
if (!cdbPath.empty() && cdbPath.exists())
|
||||
{
|
||||
bool excluded = false;
|
||||
for (FilePath p : excludePaths)
|
||||
std::vector<FilePath> filePaths =
|
||||
IndexerCommandCxxCdb::getSourceFilesFromCDB(cdbPath);
|
||||
|
||||
for (FilePath path : filePaths)
|
||||
{
|
||||
if (p == path || p.contains(path))
|
||||
bool excluded = false;
|
||||
for (FilePath p : excludePaths)
|
||||
{
|
||||
excluded = true;
|
||||
break;
|
||||
if (p == path || p.contains(path))
|
||||
{
|
||||
excluded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (excluded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (excluded)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (projectPath.exists())
|
||||
{
|
||||
path = path.relativeTo(projectPath);
|
||||
}
|
||||
if (projectPath.exists())
|
||||
{
|
||||
path = path.relativeTo(projectPath);
|
||||
}
|
||||
|
||||
m_fileNames.push_back(path.str());
|
||||
m_fileNames.push_back(path.str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (m_text)
|
||||
{
|
||||
m_text->setText(QString::number(m_fileNames.size()) + " source files were found in the compilation database.");
|
||||
m_text->setText("<b>" + QString::number(m_fileNames.size()) + "</b> source files were found in the compilation database.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,373 +0,0 @@
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentData.h"
|
||||
|
||||
#include <QFormLayout>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "settings/SourceGroupSettingsCxx.h"
|
||||
#include "utility/messaging/type/MessageIDECreateCDB.h"
|
||||
#include "utility/logging/logging.h"
|
||||
|
||||
QtProjectWizzardContentData::QtProjectWizzardContentData(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window,
|
||||
bool disableNameEditing
|
||||
)
|
||||
: QtProjectWizzardContent(window)
|
||||
, m_projectSettings(projectSettings)
|
||||
, m_sourceGroupSettings(sourceGroupSettings)
|
||||
, m_disableNameEditing(disableNameEditing)
|
||||
, m_projectName(nullptr)
|
||||
, m_projectFileLocation(nullptr)
|
||||
, m_language(nullptr)
|
||||
, m_standard(nullptr)
|
||||
, m_buildFilePicker(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentData::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
row++;
|
||||
}
|
||||
|
||||
addNameAndLocation(layout, row);
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row++, 20);
|
||||
}
|
||||
|
||||
addLanguageAndStandard(layout, row);
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentData::load()
|
||||
{
|
||||
if (m_projectName)
|
||||
{
|
||||
m_projectName->setText(QString::fromStdString(m_projectSettings->getProjectName()));
|
||||
m_projectFileLocation->setText(QString::fromStdString(m_projectSettings->getProjectFileLocation().str()));
|
||||
}
|
||||
|
||||
if (m_language)
|
||||
{
|
||||
LanguageType type = getLanguageTypeForSourceGroupType(m_sourceGroupSettings->getType());
|
||||
|
||||
if (type == LANGUAGE_UNKNOWN)
|
||||
{
|
||||
LOG_ERROR("No language type defined");
|
||||
return;
|
||||
}
|
||||
|
||||
m_language->setText(languageTypeToString(type).c_str());
|
||||
|
||||
m_standard->clear();
|
||||
std::vector<std::string> standards = m_sourceGroupSettings->getAvailableLanguageStandards();
|
||||
for (size_t i = 0; i < standards.size(); i++)
|
||||
{
|
||||
m_standard->insertItem(i, standards[i].c_str());
|
||||
}
|
||||
|
||||
m_standard->setCurrentText(QString::fromStdString(m_sourceGroupSettings->getStandard()));
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentData::save()
|
||||
{
|
||||
if (m_projectName)
|
||||
{
|
||||
m_projectSettings->setProjectName(m_projectName->text().toStdString());
|
||||
m_projectSettings->setProjectFileLocation(FilePath(m_projectFileLocation->getText().toStdString()));
|
||||
}
|
||||
|
||||
if (m_standard)
|
||||
{
|
||||
m_sourceGroupSettings->setStandard(m_standard->currentText().toStdString());
|
||||
}
|
||||
}
|
||||
|
||||
bool QtProjectWizzardContentData::check()
|
||||
{
|
||||
if (!m_projectName)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (m_projectName->text().isEmpty())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please enter a project name.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_projectFileLocation->getText().isEmpty())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please define the location for the Sourcetrail project file.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<FilePath> paths = FilePath(m_projectFileLocation->getText().toStdString()).expandEnvironmentVariables();
|
||||
if (paths.size() != 1 || !paths[0].exists())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("The specified location does not exist.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentData::addNameAndLocation(QGridLayout* layout, int& row)
|
||||
{
|
||||
QLabel* nameLabel = createFormLabel("Sourcetrail Project Name");
|
||||
m_projectName = new QLineEdit();
|
||||
m_projectName->setObjectName("name");
|
||||
m_projectName->setAttribute(Qt::WA_MacShowFocusRect, 0);
|
||||
m_projectName->setEnabled(!m_disableNameEditing);
|
||||
|
||||
layout->addWidget(nameLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_projectName, row, QtProjectWizzardWindow::BACK_COL);
|
||||
layout->setRowMinimumHeight(row, 30);
|
||||
row++;
|
||||
|
||||
QLabel* locationLabel = createFormLabel("Sourcetrail Project Location");
|
||||
m_projectFileLocation = new QtLocationPicker(this);
|
||||
m_projectFileLocation->setPickDirectory(true);
|
||||
m_projectFileLocation->setEnabled(!m_disableNameEditing);
|
||||
|
||||
layout->addWidget(locationLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_projectFileLocation, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignTop);
|
||||
addHelpButton("The directory where Sourcetrail project files will be saved to.", layout, row);
|
||||
layout->setRowMinimumHeight(row, 30);
|
||||
row++;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentData::addLanguageAndStandard(QGridLayout* layout, int& row)
|
||||
{
|
||||
m_language = new QLabel();
|
||||
layout->addWidget(createFormLabel("Language"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_language, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
|
||||
row++;
|
||||
|
||||
m_standard = new QComboBox();
|
||||
layout->addWidget(createFormLabel("Standard"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_standard, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
|
||||
row++;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentData::addBuildFilePicker(
|
||||
QGridLayout* layout, int& row, const QString& name, const QString& filter)
|
||||
{
|
||||
QLabel* label = createFormLabel(name);
|
||||
layout->addWidget(label, row, QtProjectWizzardWindow::FRONT_COL);
|
||||
|
||||
m_buildFilePicker = new QtLocationPicker(this);
|
||||
m_buildFilePicker->setFileFilter(filter);
|
||||
connect(m_buildFilePicker, SIGNAL(locationPicked()), this, SLOT(pickedCDBPath()));
|
||||
|
||||
layout->addWidget(m_buildFilePicker, row, QtProjectWizzardWindow::BACK_COL);
|
||||
|
||||
row++;
|
||||
|
||||
QLabel* description = new QLabel(
|
||||
"Sourcetrail will use all include paths and compiler flags from the compilation database and stay up-to-date "
|
||||
"with changes on refresh.", this);
|
||||
description->setObjectName("description");
|
||||
description->setWordWrap(true);
|
||||
layout->addWidget(description, row, QtProjectWizzardWindow::BACK_COL);
|
||||
|
||||
row++;
|
||||
}
|
||||
|
||||
|
||||
QtProjectWizzardContentDataCDB::QtProjectWizzardContentDataCDB(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window,
|
||||
bool disableNameEditing
|
||||
)
|
||||
: QtProjectWizzardContentData(projectSettings, sourceGroupSettings, window, disableNameEditing)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentDataCDB::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
row++;
|
||||
}
|
||||
|
||||
addNameAndLocation(layout, row);
|
||||
|
||||
layout->setRowMinimumHeight(row++, 20);
|
||||
|
||||
QString name = "Compilation Database (compile_commands.json)";
|
||||
QString filter = "JSON Compilation Database (*.json)";
|
||||
addBuildFilePicker(layout, row, name, filter);
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentDataCDB::load()
|
||||
{
|
||||
QtProjectWizzardContentData::load();
|
||||
std::shared_ptr<SourceGroupSettingsCxx> cxxSettings = std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_sourceGroupSettings);
|
||||
if (cxxSettings)
|
||||
{
|
||||
m_buildFilePicker->setText(QString::fromStdString(cxxSettings->getCompilationDatabasePath().str()));
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentDataCDB::save()
|
||||
{
|
||||
QtProjectWizzardContentData::save();
|
||||
|
||||
FilePath path(m_buildFilePicker->getText().toStdString());
|
||||
FilePath absPath = m_projectSettings->makePathAbsolute(m_projectSettings->expandPath(path)); // maybe we can use SourceGroupSettings for this... that's where the the cdb path is stored.
|
||||
if (!absPath.exists() || absPath.extension() != ".json")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::shared_ptr<SourceGroupSettingsCxx> cxxSettings = std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_sourceGroupSettings);
|
||||
if (cxxSettings)
|
||||
{
|
||||
cxxSettings->setCompilationDatabasePath(path);
|
||||
}
|
||||
}
|
||||
|
||||
bool QtProjectWizzardContentDataCDB::check()
|
||||
{
|
||||
if (!QtProjectWizzardContentData::check())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
FilePath path(m_buildFilePicker->getText().toStdString());
|
||||
FilePath absPath = m_projectSettings->makePathAbsolute(m_projectSettings->expandPath(path));
|
||||
if (!absPath.exists() || absPath.extension() != ".json")
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please enter a valid compilation database file (*.json).");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentDataCDB::pickedCDBPath()
|
||||
{
|
||||
FilePath projectPath = m_projectSettings->getProjectFileLocation();
|
||||
if (m_projectFileLocation)
|
||||
{
|
||||
projectPath = FilePath(m_projectFileLocation->getText().toStdString());
|
||||
}
|
||||
|
||||
FilePath cdbPath(m_buildFilePicker->getText().toStdString());
|
||||
|
||||
if (!projectPath.empty() && !cdbPath.empty())
|
||||
{
|
||||
FilePath relPath(cdbPath.relativeTo(projectPath));
|
||||
if (relPath.str().size() < cdbPath.str().size())
|
||||
{
|
||||
m_buildFilePicker->setText(relPath.str().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
m_window->saveContent();
|
||||
m_window->loadContent();
|
||||
}
|
||||
|
||||
|
||||
QtProjectWizzardContentDataCDBVS::QtProjectWizzardContentDataCDBVS(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window
|
||||
)
|
||||
: QtProjectWizzardContentDataCDB(projectSettings, sourceGroupSettings, window, false)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentDataCDBVS::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
row++;
|
||||
}
|
||||
|
||||
QLabel* nameLabel = createFormLabel("Create Compilation Database");
|
||||
layout->addWidget(nameLabel, row, QtProjectWizzardWindow::FRONT_COL);
|
||||
|
||||
addHelpButton("To create a new Compilation Database from a Visual Studio Solution, this Solution has to be open in Visual Studio.\n\
|
||||
Sourcetrail will call Visual Studio to open the 'Create Compilation Database' dialog.\
|
||||
Please follow the instructions in Visual Studio to complete the process.\n\
|
||||
Note: Sourcetrail's Visual Studio plugin has to be installed. Visual Studio has to be running with an eligible Solution, containing C/C++ projects, loaded.", layout, row);
|
||||
|
||||
QLabel* descriptionLabel = createFormLabel("Call Visual Studio to create a Compilation Database from the loaded Solution.");
|
||||
descriptionLabel->setObjectName("description");
|
||||
descriptionLabel->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
||||
layout->addWidget(descriptionLabel, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
|
||||
QPushButton* button = new QPushButton("Create CDB");
|
||||
button->setObjectName("windowButton");
|
||||
layout->addWidget(button, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
|
||||
QLabel* skipLabel = createFormLabel("*Skip this step if you already have a Compilation Database for your Solution.");
|
||||
skipLabel->setObjectName("description");
|
||||
skipLabel->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
||||
layout->addWidget(skipLabel, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
|
||||
|
||||
QFrame* separator = new QFrame();
|
||||
separator->setFrameShape(QFrame::HLine);
|
||||
|
||||
QPalette palette = separator->palette();
|
||||
palette.setColor(QPalette::WindowText, Qt::lightGray);
|
||||
separator->setPalette(palette);
|
||||
|
||||
layout->addWidget(separator, row++, 0, 1, -1);
|
||||
|
||||
|
||||
connect(button, SIGNAL(clicked()), this, SLOT(handleVSCDBClicked()));
|
||||
|
||||
addNameAndLocation(layout, row);
|
||||
|
||||
layout->setRowMinimumHeight(row++, 20);
|
||||
|
||||
QString name = "Compilation Database";
|
||||
QString filter = "JSON Compilation Database (*.json)";
|
||||
addBuildFilePicker(layout, row, name, filter);
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentDataCDBVS::handleVSCDBClicked()
|
||||
{
|
||||
MessageIDECreateCDB().dispatch();
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
#ifndef QT_PROJECT_WIZZARD_CONTENT_DATA_H
|
||||
#define QT_PROJECT_WIZZARD_CONTENT_DATA_H
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QLabel>
|
||||
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
#include "qt/element/QtLocationPicker.h"
|
||||
|
||||
class ProjectSettings;
|
||||
class SourceGroupSettings;
|
||||
|
||||
class QtProjectWizzardContentData
|
||||
: public QtProjectWizzardContent
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentData(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window,
|
||||
bool disableNameEditing = false);
|
||||
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
virtual bool check() override;
|
||||
|
||||
protected:
|
||||
virtual void addNameAndLocation(QGridLayout* layout, int& row);
|
||||
virtual void addLanguageAndStandard(QGridLayout* layout, int& row);
|
||||
virtual void addBuildFilePicker(QGridLayout* layout, int& row, const QString& name, const QString& filter);
|
||||
|
||||
std::shared_ptr<ProjectSettings> m_projectSettings;
|
||||
std::shared_ptr<SourceGroupSettings> m_sourceGroupSettings;
|
||||
|
||||
bool m_disableNameEditing;
|
||||
QLineEdit* m_projectName;
|
||||
QtLocationPicker* m_projectFileLocation;
|
||||
|
||||
QLabel* m_language;
|
||||
QComboBox* m_standard;
|
||||
|
||||
QtLocationPicker* m_buildFilePicker;
|
||||
};
|
||||
|
||||
|
||||
class QtProjectWizzardContentDataCDB
|
||||
: public QtProjectWizzardContentData
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentDataCDB(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window,
|
||||
bool disableNameEditing = false);
|
||||
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
virtual bool check() override;
|
||||
|
||||
private slots:
|
||||
void pickedCDBPath();
|
||||
};
|
||||
|
||||
|
||||
class QtProjectWizzardContentDataCDBVS
|
||||
: public QtProjectWizzardContentDataCDB
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentDataCDBVS(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window);
|
||||
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
private slots:
|
||||
void handleVSCDBClicked();
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_CONTENT_DATA_H
|
||||
@@ -16,8 +16,7 @@ QtProjectWizzardContentExtensions::QtProjectWizzardContentExtensions(
|
||||
void QtProjectWizzardContentExtensions::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
QLabel* sourceLabel = createFormLabel("Source File Extensions");
|
||||
sourceLabel->setObjectName("label");
|
||||
layout->addWidget(sourceLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(sourceLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignTop);
|
||||
|
||||
addHelpButton("Define extensions for source files including the dot e.g. .cpp", layout, row);
|
||||
|
||||
|
||||
@@ -14,8 +14,7 @@ QtProjectWizzardContentFlags::QtProjectWizzardContentFlags(std::shared_ptr<Sourc
|
||||
void QtProjectWizzardContentFlags::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
QLabel* label = createFormLabel("Compiler Flags");
|
||||
label->setObjectName("label");
|
||||
layout->addWidget(label, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(label, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignTop);
|
||||
|
||||
addHelpButton("Define compiler flags used during indexing including the dash (e.g. use \"-D RELEASE\" to add a #define for \"RELEASE\").", layout, row);
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentLanguageAndStandard.h"
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QLabel>
|
||||
|
||||
#include "settings/SourceGroupSettings.h"
|
||||
#include "utility/logging/logging.h"
|
||||
|
||||
QtProjectWizzardContentLanguageAndStandard::QtProjectWizzardContentLanguageAndStandard(
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window
|
||||
)
|
||||
: QtProjectWizzardContent(window)
|
||||
, m_sourceGroupSettings(sourceGroupSettings)
|
||||
, m_language(nullptr)
|
||||
, m_standard(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentLanguageAndStandard::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
row++;
|
||||
}
|
||||
|
||||
m_language = new QLabel();
|
||||
layout->addWidget(createFormLabel("Language"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_language, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
|
||||
row++;
|
||||
|
||||
m_standard = new QComboBox();
|
||||
layout->addWidget(createFormLabel("Standard"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_standard, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft);
|
||||
row++;
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentLanguageAndStandard::load()
|
||||
{
|
||||
LanguageType type = getLanguageTypeForSourceGroupType(m_sourceGroupSettings->getType());
|
||||
|
||||
if (type == LANGUAGE_UNKNOWN)
|
||||
{
|
||||
LOG_ERROR("No language type defined");
|
||||
return;
|
||||
}
|
||||
|
||||
m_language->setText(languageTypeToString(type).c_str());
|
||||
|
||||
m_standard->clear();
|
||||
std::vector<std::string> standards = m_sourceGroupSettings->getAvailableLanguageStandards();
|
||||
for (size_t i = 0; i < standards.size(); i++)
|
||||
{
|
||||
m_standard->insertItem(i, standards[i].c_str());
|
||||
}
|
||||
|
||||
m_standard->setCurrentText(QString::fromStdString(m_sourceGroupSettings->getStandard()));
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentLanguageAndStandard::save()
|
||||
{
|
||||
m_sourceGroupSettings->setStandard(m_standard->currentText().toStdString());
|
||||
}
|
||||
|
||||
bool QtProjectWizzardContentLanguageAndStandard::check()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef QT_PROJECT_WIZZARD_CONTENT_LANGUAGE_AND_STANDARD
|
||||
#define QT_PROJECT_WIZZARD_CONTENT_LANGUAGE_AND_STANDARD
|
||||
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
|
||||
class QComboBox;
|
||||
class QLabel;
|
||||
class SourceGroupSettings;
|
||||
|
||||
class QtProjectWizzardContentLanguageAndStandard
|
||||
: public QtProjectWizzardContent
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentLanguageAndStandard(
|
||||
std::shared_ptr<SourceGroupSettings> sourceGroupSettings,
|
||||
QtProjectWizzardWindow* window);
|
||||
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
virtual bool check() override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<SourceGroupSettings> m_sourceGroupSettings;
|
||||
|
||||
QLabel* m_language;
|
||||
QComboBox* m_standard;
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_CONTENT_LANGUAGE_AND_STANDARD
|
||||
@@ -6,14 +6,15 @@
|
||||
#include <QMessageBox>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "Application.h"
|
||||
#include "component/view/DialogView.h"
|
||||
#include "qt/element/QtLocationPicker.h"
|
||||
#include "settings/ApplicationSettings.h"
|
||||
#include "settings/SourceGroupSettingsCxx.h"
|
||||
#include "settings/SourceGroupSettingsJava.h"
|
||||
#include "utility/file/FileManager.h"
|
||||
#include "utility/messaging/type/MessageStatus.h"
|
||||
#include "utility/utilityMaven.h"
|
||||
#include "Application.h"
|
||||
|
||||
QtProjectWizzardContentPath::QtProjectWizzardContentPath(std::shared_ptr<SourceGroupSettings> settings, QtProjectWizzardWindow* window)
|
||||
: QtProjectWizzardContent(window)
|
||||
@@ -46,10 +47,42 @@ void QtProjectWizzardContentPath::populate(QGridLayout* layout, int& row)
|
||||
|
||||
bool QtProjectWizzardContentPath::check()
|
||||
{
|
||||
if (m_picker->getText().isEmpty())
|
||||
QString error;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (m_picker->getText().isEmpty())
|
||||
{
|
||||
error = "Please define a path at \"" + m_titleString + "\".";
|
||||
break;
|
||||
}
|
||||
|
||||
FilePath path = m_settings->makePathExpandedAndAbsolute(FilePath(m_picker->getText().toStdString()));
|
||||
|
||||
if (m_picker->pickDirectory())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (!path.exists())
|
||||
{
|
||||
error = "The entered path does not exist at \"" + m_titleString + "\".";
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_fileEndings.find(path.extension()) == m_fileEndings.end())
|
||||
{
|
||||
error = "The entered path does have a correct file ending at \"" + m_titleString + "\".";
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (error.size())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please define the location for the \"" + m_titleString + "\".");
|
||||
msgBox.setText(error);
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
@@ -67,17 +100,82 @@ void QtProjectWizzardContentPath::setHelpString(const QString& help)
|
||||
m_helpString = help;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentPath::setFileEndings(const std::set<std::string>& fileEndings)
|
||||
{
|
||||
m_fileEndings = fileEndings;
|
||||
}
|
||||
|
||||
|
||||
QtProjectWizzardContentPathCDB::QtProjectWizzardContentPathCDB(
|
||||
std::shared_ptr<SourceGroupSettings> settings, QtProjectWizzardWindow* window
|
||||
)
|
||||
: QtProjectWizzardContentPath(settings, window)
|
||||
{
|
||||
setTitleString("Compilation Database (compile_commands.json)");
|
||||
setHelpString(
|
||||
"Sourcetrail will use all include paths and compiler flags from the compilation database and stay up-to-date "
|
||||
"with changes on refresh.<br />"
|
||||
"<br />"
|
||||
"You can make use of environment variables with ${ENV_VAR}."
|
||||
);
|
||||
setFileEndings({ ".json" });
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentPathCDB::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
QtProjectWizzardContentPath::populate(layout, row);
|
||||
m_picker->setPickDirectory(false);
|
||||
m_picker->setFileFilter("JSON Compilation Database (*.json)");
|
||||
connect(m_picker, SIGNAL(locationPicked()), this, SLOT(pickedCDBPath()));
|
||||
|
||||
QLabel* description = new QLabel(
|
||||
"Sourcetrail will use all include paths and compiler flags from the compilation database and stay up-to-date "
|
||||
"with changes on refresh.", this);
|
||||
description->setObjectName("description");
|
||||
description->setWordWrap(true);
|
||||
layout->addWidget(description, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentPathCDB::load()
|
||||
{
|
||||
std::shared_ptr<SourceGroupSettingsCxx> cxxSettings =
|
||||
std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_settings);
|
||||
if (cxxSettings)
|
||||
{
|
||||
m_picker->setText(QString::fromStdString(cxxSettings->getCompilationDatabasePath().str()));
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentPathCDB::save()
|
||||
{
|
||||
std::shared_ptr<SourceGroupSettingsCxx> cxxSettings =
|
||||
std::dynamic_pointer_cast<SourceGroupSettingsCxx>(m_settings);
|
||||
if (cxxSettings)
|
||||
{
|
||||
cxxSettings->setCompilationDatabasePath(FilePath(m_picker->getText().toStdString()));
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentPathCDB::pickedCDBPath()
|
||||
{
|
||||
m_window->saveContent();
|
||||
m_window->loadContent();
|
||||
}
|
||||
|
||||
|
||||
QtProjectWizzardContentPathSourceMaven::QtProjectWizzardContentPathSourceMaven(
|
||||
std::shared_ptr<SourceGroupSettings> settings, QtProjectWizzardWindow* window
|
||||
)
|
||||
: QtProjectWizzardContentPath(settings, window)
|
||||
{
|
||||
setTitleString("Maven Project File");
|
||||
setTitleString("Maven Project File (pom.xml)");
|
||||
setHelpString(
|
||||
"Enter the path to the main .pom file of your Maven project.<br />"
|
||||
"Enter the path to the main pom.xml file of your Maven project.<br />"
|
||||
"<br />"
|
||||
"You can make use of environment variables with ${ENV_VAR}."
|
||||
);
|
||||
setFileEndings({ ".xml" });
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentPathSourceMaven::populate(QGridLayout* layout, int& row)
|
||||
@@ -124,7 +222,7 @@ std::vector<std::string> QtProjectWizzardContentPathSourceMaven::getFileNames()
|
||||
std::shared_ptr<SourceGroupSettingsJava> javaSettings = std::dynamic_pointer_cast<SourceGroupSettingsJava>(m_settings);
|
||||
|
||||
const FilePath mavenPath = ApplicationSettings::getInstance()->getMavenPath();
|
||||
const FilePath mavenProjectRoot = javaSettings->getAbsoluteMavenProjectFilePath().parentDirectory();
|
||||
const FilePath mavenProjectRoot = javaSettings->getMavenProjectFilePathExpandedAndAbsolute().parentDirectory();
|
||||
|
||||
std::vector<std::string> list;
|
||||
std::shared_ptr<DialogView> dialogView = Application::getInstance()->getDialogView();
|
||||
@@ -153,7 +251,7 @@ std::vector<std::string> QtProjectWizzardContentPathSourceMaven::getFileNames()
|
||||
FileManager fileManager;
|
||||
fileManager.update(
|
||||
sourceDirectories,
|
||||
m_settings->getAbsoluteExcludePaths(),
|
||||
m_settings->getExcludePathsExpandedAndAbsolute(),
|
||||
m_settings->getSourceExtensions()
|
||||
);
|
||||
|
||||
@@ -174,6 +272,7 @@ std::vector<std::string> QtProjectWizzardContentPathSourceMaven::getFileNames()
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
QtProjectWizzardContentPathDependenciesMaven::QtProjectWizzardContentPathDependenciesMaven(
|
||||
std::shared_ptr<SourceGroupSettings> settings, QtProjectWizzardWindow* window
|
||||
)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef QT_PROJECT_WIZZARD_CONTENT_PATH_H
|
||||
#define QT_PROJECT_WIZZARD_CONTENT_PATH_H
|
||||
|
||||
#include <set>
|
||||
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
|
||||
class QCheckBox;
|
||||
@@ -27,6 +29,8 @@ protected:
|
||||
void setTitleString(const QString& title);
|
||||
void setHelpString(const QString& help);
|
||||
|
||||
void setFileEndings(const std::set<std::string>& fileEndings);
|
||||
|
||||
std::shared_ptr<SourceGroupSettings> m_settings;
|
||||
|
||||
QtLocationPicker* m_picker;
|
||||
@@ -36,18 +40,38 @@ protected:
|
||||
private:
|
||||
QString m_titleString;
|
||||
QString m_helpString;
|
||||
std::set<std::string> m_fileEndings;
|
||||
};
|
||||
|
||||
|
||||
class QtProjectWizzardContentPathCDB
|
||||
: public QtProjectWizzardContentPath
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentPathCDB(std::shared_ptr<SourceGroupSettings> settings, QtProjectWizzardWindow* window);
|
||||
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
|
||||
private slots:
|
||||
void pickedCDBPath();
|
||||
};
|
||||
|
||||
|
||||
class QtProjectWizzardContentPathSourceMaven
|
||||
: public QtProjectWizzardContentPath
|
||||
{
|
||||
public:
|
||||
QtProjectWizzardContentPathSourceMaven(std::shared_ptr<SourceGroupSettings> settings, QtProjectWizzardWindow* window);
|
||||
|
||||
// QtSettingsWindow implementation
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
|
||||
@@ -57,6 +81,7 @@ private:
|
||||
QCheckBox* m_shouldIndexTests;
|
||||
};
|
||||
|
||||
|
||||
class QtProjectWizzardContentPathDependenciesMaven
|
||||
: public QtProjectWizzardContentPath
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@ void QtProjectWizzardContentPaths::populate(QGridLayout* layout, int& row)
|
||||
|
||||
m_list = new QtDirectoryListBox(this, m_titleString);
|
||||
|
||||
if (m_makePathsRelativeToProjectFileLocation)
|
||||
if (m_makePathsRelativeToProjectFileLocation && m_settings)
|
||||
{
|
||||
m_list->setRelativeRootDirectory(m_settings->getProjectFileLocation());
|
||||
}
|
||||
@@ -59,29 +59,26 @@ bool QtProjectWizzardContentPaths::check()
|
||||
{
|
||||
QString missingPaths;
|
||||
|
||||
for (const FilePath& path : m_list->getList())
|
||||
std::vector<FilePath> paths = m_list->getList();
|
||||
if (m_settings)
|
||||
{
|
||||
std::vector<FilePath> expandedPaths = path.expandEnvironmentVariables();
|
||||
for (FilePath expandedPath: path.expandEnvironmentVariables())
|
||||
{
|
||||
if (m_settings)
|
||||
{
|
||||
expandedPath = m_settings->makePathAbsolute(expandedPath);
|
||||
}
|
||||
paths = m_settings->makePathsExpandedAndAbsolute(paths);
|
||||
}
|
||||
|
||||
if (!expandedPath.exists())
|
||||
{
|
||||
missingPaths.append(expandedPath.str().c_str());
|
||||
missingPaths.append("\n");
|
||||
break;
|
||||
}
|
||||
for (const FilePath& path : paths)
|
||||
{
|
||||
if (!path.exists())
|
||||
{
|
||||
missingPaths.append(path.str().c_str());
|
||||
missingPaths.append("\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!missingPaths.isEmpty())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Some provided paths do not exist.");
|
||||
msgBox.setText("Some provided paths do not exist at \"" + m_titleString + "\".");
|
||||
msgBox.setDetailedText(missingPaths);
|
||||
msgBox.exec();
|
||||
return false;
|
||||
@@ -174,8 +171,8 @@ std::vector<std::string> QtProjectWizzardContentPathsSource::getFileNames() cons
|
||||
{
|
||||
FileManager fileManager;
|
||||
fileManager.update(
|
||||
m_settings->getAbsoluteSourcePaths(),
|
||||
m_settings->getAbsoluteExcludePaths(),
|
||||
m_settings->getSourcePathsExpandedAndAbsolute(),
|
||||
m_settings->getExcludePathsExpandedAndAbsolute(),
|
||||
m_settings->getSourceExtensions()
|
||||
);
|
||||
|
||||
@@ -263,7 +260,15 @@ void QtProjectWizzardContentPathsCDBHeader::buttonClicked()
|
||||
|
||||
if (!m_filesDialog)
|
||||
{
|
||||
std::vector<std::string> fileNames = getFileNames();
|
||||
FilePath cdbPath = dynamic_cast<SourceGroupSettingsCxx*>(m_settings.get())->getCompilationDatabasePathExpandedAndAbsolute();
|
||||
if (!cdbPath.exists())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("The provided Compilation Database path does not exist.");
|
||||
msgBox.setDetailedText(QString::fromStdString(cdbPath.str()));
|
||||
msgBox.exec();
|
||||
return;
|
||||
}
|
||||
|
||||
m_filesDialog = std::make_shared<QtSelectPathsDialog>(
|
||||
"Select from Include Paths",
|
||||
@@ -271,19 +276,16 @@ void QtProjectWizzardContentPathsCDBHeader::buttonClicked()
|
||||
"paths containing the header files you want to index with Sourcetrail.");
|
||||
m_filesDialog->setup();
|
||||
|
||||
|
||||
utility::CompilationDatabase cdb(
|
||||
dynamic_cast<SourceGroupSettingsCxx*>(m_settings.get())->getAbsoluteCompilationDatabasePath().str());
|
||||
|
||||
std::vector<FilePath> cdbHeaderPaths = cdb.getAllHeaderPaths();
|
||||
std::vector<FilePath> sourcePaths = m_settings->getSourcePaths();
|
||||
|
||||
cdbHeaderPaths = utility::unique(utility::concat(sourcePaths, cdbHeaderPaths));
|
||||
|
||||
dynamic_cast<QtSelectPathsDialog*>(m_filesDialog.get())->setPathsList(cdbHeaderPaths, sourcePaths);
|
||||
|
||||
connect(m_filesDialog.get(), SIGNAL(finished()), this, SLOT(savedFilesDialog()));
|
||||
connect(m_filesDialog.get(), SIGNAL(canceled()), this, SLOT(closedFilesDialog()));
|
||||
|
||||
|
||||
utility::CompilationDatabase cdb(cdbPath.str());
|
||||
|
||||
std::vector<FilePath> sourcePaths = m_settings->getSourcePaths();
|
||||
std::vector<FilePath> cdbHeaderPaths = utility::unique(utility::concat(sourcePaths, cdb.getAllHeaderPaths()));
|
||||
|
||||
dynamic_cast<QtSelectPathsDialog*>(m_filesDialog.get())->setPathsList(cdbHeaderPaths, sourcePaths);
|
||||
}
|
||||
|
||||
m_filesDialog->showWindow();
|
||||
|
||||
@@ -339,6 +339,8 @@ void QtProjectWizzardContentPreferences::save()
|
||||
{
|
||||
appSettings->setMavenPath(FilePath(m_mavenPath->getText().toStdString()));
|
||||
}
|
||||
|
||||
appSettings->save();
|
||||
}
|
||||
|
||||
bool QtProjectWizzardContentPreferences::check()
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentProjectData.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "settings/ProjectSettings.h"
|
||||
|
||||
QtProjectWizzardContentProjectData::QtProjectWizzardContentProjectData(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
QtProjectWizzardWindow* window,
|
||||
bool disableNameEditing
|
||||
)
|
||||
: QtProjectWizzardContent(window)
|
||||
, m_projectSettings(projectSettings)
|
||||
, m_disableNameEditing(disableNameEditing)
|
||||
, m_projectName(nullptr)
|
||||
, m_projectFileLocation(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentProjectData::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
row++;
|
||||
}
|
||||
|
||||
QLabel* nameLabel = createFormLabel("Sourcetrail Project Name");
|
||||
m_projectName = new QLineEdit();
|
||||
m_projectName->setObjectName("name");
|
||||
m_projectName->setAttribute(Qt::WA_MacShowFocusRect, 0);
|
||||
m_projectName->setEnabled(!m_disableNameEditing);
|
||||
|
||||
layout->addWidget(nameLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_projectName, row, QtProjectWizzardWindow::BACK_COL);
|
||||
layout->setRowMinimumHeight(row, 30);
|
||||
row++;
|
||||
|
||||
QLabel* locationLabel = createFormLabel("Sourcetrail Project Location");
|
||||
m_projectFileLocation = new QtLocationPicker(this);
|
||||
m_projectFileLocation->setPickDirectory(true);
|
||||
m_projectFileLocation->setEnabled(!m_disableNameEditing);
|
||||
|
||||
layout->addWidget(locationLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_projectFileLocation, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignTop);
|
||||
addHelpButton("The directory where Sourcetrail project files will be saved to.", layout, row);
|
||||
layout->setRowMinimumHeight(row, 30);
|
||||
row++;
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentProjectData::load()
|
||||
{
|
||||
m_projectName->setText(QString::fromStdString(m_projectSettings->getProjectName()));
|
||||
m_projectFileLocation->setText(QString::fromStdString(m_projectSettings->getProjectFileLocation().str()));
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentProjectData::save()
|
||||
{
|
||||
m_projectSettings->setProjectName(m_projectName->text().toStdString());
|
||||
m_projectSettings->setProjectFileLocation(FilePath(m_projectFileLocation->getText().toStdString()));
|
||||
}
|
||||
|
||||
bool QtProjectWizzardContentProjectData::check()
|
||||
{
|
||||
if (m_projectName->text().isEmpty())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please enter a project name.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_projectFileLocation->getText().isEmpty())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please define the location for the Sourcetrail project file.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<FilePath> paths = FilePath(m_projectFileLocation->getText().toStdString()).expandEnvironmentVariables();
|
||||
if (paths.size() != 1 || !paths[0].exists())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("The specified location does not exist.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef QT_PROJECT_WIZZARD_CONTENT_PROJECT_DATA_H
|
||||
#define QT_PROJECT_WIZZARD_CONTENT_PROJECT_DATA_H
|
||||
|
||||
#include "qt/element/QtLocationPicker.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
|
||||
class ProjectSettings;
|
||||
|
||||
class QtProjectWizzardContentProjectData
|
||||
: public QtProjectWizzardContent
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentProjectData(
|
||||
std::shared_ptr<ProjectSettings> projectSettings,
|
||||
QtProjectWizzardWindow* window,
|
||||
bool disableNameEditing = false);
|
||||
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
virtual bool check() override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<ProjectSettings> m_projectSettings;
|
||||
|
||||
bool m_disableNameEditing;
|
||||
QLineEdit* m_projectName;
|
||||
QtLocationPicker* m_projectFileLocation;
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_CONTENT_PROJECT_DATA_H
|
||||
@@ -19,49 +19,49 @@ QtProjectWizzardContentSelect::QtProjectWizzardContentSelect(
|
||||
|
||||
void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
struct ProjectInfo
|
||||
struct SourceGroupInfo
|
||||
{
|
||||
ProjectInfo(SourceGroupType type) :type(type) {}
|
||||
SourceGroupInfo(SourceGroupType type) :type(type) {}
|
||||
const SourceGroupType type;
|
||||
};
|
||||
|
||||
// define which kind of projects are available for each language
|
||||
std::map<LanguageType, std::vector<ProjectInfo>> projectInfos;
|
||||
projectInfos[LANGUAGE_C].push_back(ProjectInfo(SOURCE_GROUP_C_EMPTY));
|
||||
projectInfos[LANGUAGE_C].push_back(ProjectInfo(SOURCE_GROUP_CXX_CDB));
|
||||
projectInfos[LANGUAGE_C].push_back(ProjectInfo(SOURCE_GROUP_CXX_VS));
|
||||
projectInfos[LANGUAGE_CPP].push_back(ProjectInfo(SOURCE_GROUP_CPP_EMPTY));
|
||||
projectInfos[LANGUAGE_CPP].push_back(ProjectInfo(SOURCE_GROUP_CXX_CDB));
|
||||
projectInfos[LANGUAGE_CPP].push_back(ProjectInfo(SOURCE_GROUP_CXX_VS));
|
||||
projectInfos[LANGUAGE_JAVA].push_back(ProjectInfo(SOURCE_GROUP_JAVA_EMPTY));
|
||||
projectInfos[LANGUAGE_JAVA].push_back(ProjectInfo(SOURCE_GROUP_JAVA_MAVEN));
|
||||
// define which kind of source groups are available for each language
|
||||
std::map<LanguageType, std::vector<SourceGroupInfo>> sourceGroupInfos;
|
||||
sourceGroupInfos[LANGUAGE_C].push_back(SourceGroupInfo(SOURCE_GROUP_C_EMPTY));
|
||||
sourceGroupInfos[LANGUAGE_C].push_back(SourceGroupInfo(SOURCE_GROUP_CXX_CDB));
|
||||
sourceGroupInfos[LANGUAGE_C].push_back(SourceGroupInfo(SOURCE_GROUP_CXX_VS));
|
||||
sourceGroupInfos[LANGUAGE_CPP].push_back(SourceGroupInfo(SOURCE_GROUP_CPP_EMPTY));
|
||||
sourceGroupInfos[LANGUAGE_CPP].push_back(SourceGroupInfo(SOURCE_GROUP_CXX_CDB));
|
||||
sourceGroupInfos[LANGUAGE_CPP].push_back(SourceGroupInfo(SOURCE_GROUP_CXX_VS));
|
||||
sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_EMPTY));
|
||||
sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_MAVEN));
|
||||
|
||||
// define which icons should be used for which kind of project
|
||||
m_projectTypeIconName[SOURCE_GROUP_C_EMPTY] = "empty_icon";
|
||||
m_projectTypeIconName[SOURCE_GROUP_CPP_EMPTY] = "empty_icon";
|
||||
m_projectTypeIconName[SOURCE_GROUP_CXX_CDB] = "cdb_icon";
|
||||
m_projectTypeIconName[SOURCE_GROUP_CXX_VS] = "vs_icon";
|
||||
m_projectTypeIconName[SOURCE_GROUP_JAVA_EMPTY] = "empty_icon";
|
||||
m_projectTypeIconName[SOURCE_GROUP_JAVA_MAVEN] = "mvn_icon";
|
||||
// define which icons should be used for which kind of source group
|
||||
m_sourceGroupTypeIconName[SOURCE_GROUP_C_EMPTY] = "empty_icon";
|
||||
m_sourceGroupTypeIconName[SOURCE_GROUP_CPP_EMPTY] = "empty_icon";
|
||||
m_sourceGroupTypeIconName[SOURCE_GROUP_CXX_CDB] = "cdb_icon";
|
||||
m_sourceGroupTypeIconName[SOURCE_GROUP_CXX_VS] = "vs_icon";
|
||||
m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_EMPTY] = "empty_icon";
|
||||
m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_MAVEN] = "mvn_icon";
|
||||
|
||||
// define descriptions for each kind of project
|
||||
m_projectTypeDescriptions[SOURCE_GROUP_C_EMPTY] = "Create a new Sourcetrail project by defining which C files will be indexed.";
|
||||
m_projectTypeDescriptions[SOURCE_GROUP_CPP_EMPTY] = "Create a new Sourcetrail project by defining which C++ files will be indexed.";
|
||||
m_projectTypeDescriptions[SOURCE_GROUP_CXX_CDB] = "Create a project from an existing Compilation Database (compile_commands.json). They can be created from Make and "
|
||||
// define descriptions for each kind of Source Group
|
||||
m_sourceGroupTypeDescriptions[SOURCE_GROUP_C_EMPTY] = "Create a new Sourcetrail Source Group by defining which C files will be indexed.";
|
||||
m_sourceGroupTypeDescriptions[SOURCE_GROUP_CPP_EMPTY] = "Create a new Sourcetrail Source Group by defining which C++ files will be indexed.";
|
||||
m_sourceGroupTypeDescriptions[SOURCE_GROUP_CXX_CDB] = "Create a Source Group from an existing Compilation Database (compile_commands.json). They can be created from Make and "
|
||||
"CMake projects. Have a look at the <a href=\"https://sourcetrail.com/documentation/#CreateAProjectFromCompilationDatabase\">"
|
||||
"documentation</a> to find out more.";
|
||||
m_projectTypeDescriptions[SOURCE_GROUP_CXX_VS] = "Create a new project from an existing Visual Studio Solution file. "
|
||||
m_sourceGroupTypeDescriptions[SOURCE_GROUP_CXX_VS] = "Create a new Source Group from an existing Visual Studio Solution file. "
|
||||
"<b>Note: Requires a running Visual Studio instance with the "
|
||||
"<a href=\"https://sourcetrail.com/documentation/index.html#VisualStudio\">Visual Studio plugin</a> installed.";
|
||||
m_projectTypeDescriptions[SOURCE_GROUP_JAVA_EMPTY] = "Create a new Sourcetrail project by defining which Java files will be indexed.";
|
||||
m_projectTypeDescriptions[SOURCE_GROUP_JAVA_MAVEN] = "Create a new project from an existing Maven project.";
|
||||
m_sourceGroupTypeDescriptions[SOURCE_GROUP_JAVA_EMPTY] = "Create a new Sourcetrail Source Group by defining which Java files will be indexed.";
|
||||
m_sourceGroupTypeDescriptions[SOURCE_GROUP_JAVA_MAVEN] = "Create a new Source Group from an existing Maven project.";
|
||||
|
||||
QVBoxLayout* vlayout = new QVBoxLayout();
|
||||
vlayout->setContentsMargins(0, 30, 0, 0);
|
||||
vlayout->setSpacing(10);
|
||||
|
||||
m_languages = new QButtonGroup();
|
||||
for (auto it: projectInfos)
|
||||
for (auto it: sourceGroupInfos)
|
||||
{
|
||||
QPushButton* b = new QPushButton(languageTypeToString(it.first).c_str(), this);
|
||||
b->setObjectName("menuButton");
|
||||
@@ -97,29 +97,29 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
|
||||
}
|
||||
|
||||
m_window->setNextEnabled(false);
|
||||
m_title->setText("Project Types - " + m_languages->checkedButton()->text());
|
||||
m_title->setText("Source Group Types - " + m_languages->checkedButton()->text());
|
||||
m_description->setText("");
|
||||
}
|
||||
);
|
||||
|
||||
QHBoxLayout* hlayout = new QHBoxLayout();
|
||||
|
||||
for (auto languageIt: projectInfos)
|
||||
for (auto languageIt: sourceGroupInfos)
|
||||
{
|
||||
QButtonGroup* projectButtons = new QButtonGroup(this);
|
||||
QButtonGroup* sourceGroupButtons = new QButtonGroup(this);
|
||||
|
||||
for (auto projectIt: languageIt.second)
|
||||
for (auto sourceGroupIt: languageIt.second)
|
||||
{
|
||||
QToolButton* b = createProjectButton(
|
||||
utility::insertLineBreaksAtBlankSpaces(sourceGroupTypeToProjectSetupString(projectIt.type), 15).c_str(),
|
||||
(ResourcePaths::getGuiPath().str() + "icon/" + m_projectTypeIconName[projectIt.type] + ".png").c_str()
|
||||
QToolButton* b = createSourceGroupButton(
|
||||
utility::insertLineBreaksAtBlankSpaces(sourceGroupTypeToProjectSetupString(sourceGroupIt.type), 15).c_str(),
|
||||
(ResourcePaths::getGuiPath().str() + "icon/" + m_sourceGroupTypeIconName[sourceGroupIt.type] + ".png").c_str()
|
||||
);
|
||||
b->setProperty("source_group_type", int(projectIt.type));
|
||||
projectButtons->addButton(b);
|
||||
b->setProperty("source_group_type", int(sourceGroupIt.type));
|
||||
sourceGroupButtons->addButton(b);
|
||||
hlayout->addWidget(b);
|
||||
}
|
||||
|
||||
m_buttons[languageIt.first] = projectButtons;
|
||||
m_buttons[languageIt.first] = sourceGroupButtons;
|
||||
}
|
||||
|
||||
for (auto it: m_buttons)
|
||||
@@ -135,7 +135,7 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
|
||||
selectedType = SourceGroupType(selectedTypeInt);
|
||||
}
|
||||
|
||||
m_description->setText(m_projectTypeDescriptions[selectedType].c_str());
|
||||
m_description->setText(m_sourceGroupTypeDescriptions[selectedType].c_str());
|
||||
|
||||
m_window->setNextEnabled(true);
|
||||
}
|
||||
@@ -144,7 +144,7 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
|
||||
|
||||
QFrame* container = new QFrame();
|
||||
container->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||
container->setObjectName("projectContainer");
|
||||
container->setObjectName("sourceGroupContainer");
|
||||
container->setLayout(hlayout);
|
||||
|
||||
layout->addWidget(container, 0, QtProjectWizzardWindow::BACK_COL);
|
||||
@@ -152,11 +152,11 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
|
||||
m_description = new QLabel(" \n \n");
|
||||
m_description->setWordWrap(true);
|
||||
m_description->setOpenExternalLinks(true);
|
||||
m_description->setObjectName("projectDescription");
|
||||
m_description->setObjectName("sourceGroupDescription");
|
||||
layout->addWidget(m_description, 1, QtProjectWizzardWindow::BACK_COL);
|
||||
|
||||
m_title = new QLabel("Project Types");
|
||||
m_title->setObjectName("projectTitle");
|
||||
m_title = new QLabel("Source Group Types");
|
||||
m_title->setObjectName("sourceGroupTitle");
|
||||
|
||||
layout->addWidget(m_title, 0, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft | Qt::AlignTop);
|
||||
|
||||
@@ -191,21 +191,21 @@ void QtProjectWizzardContentSelect::save()
|
||||
|
||||
bool QtProjectWizzardContentSelect::check()
|
||||
{
|
||||
bool projectChosen = false;
|
||||
bool sourceGroupChosen = false;
|
||||
|
||||
for (auto it: m_buttons)
|
||||
{
|
||||
if (it.second->checkedId() != -1)
|
||||
{
|
||||
projectChosen = true;
|
||||
sourceGroupChosen = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!projectChosen)
|
||||
if (!sourceGroupChosen)
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please choose a method of creating a new project.");
|
||||
msgBox.setText("Please choose a method of creating a new Source Group.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -32,8 +32,8 @@ private:
|
||||
QLabel* m_title;
|
||||
QLabel* m_description;
|
||||
|
||||
std::map<SourceGroupType, std::string> m_projectTypeIconName;
|
||||
std::map<SourceGroupType, std::string> m_projectTypeDescriptions;
|
||||
std::map<SourceGroupType, std::string> m_sourceGroupTypeIconName;
|
||||
std::map<SourceGroupType, std::string> m_sourceGroupTypeDescriptions;
|
||||
|
||||
std::vector<std::string> m_solutionDescription;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentSourceGroupData.h"
|
||||
|
||||
#include <QLineEdit>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "settings/SourceGroupSettings.h"
|
||||
|
||||
QtProjectWizzardContentSourceGroupData::QtProjectWizzardContentSourceGroupData(
|
||||
std::shared_ptr<SourceGroupSettings> settings,
|
||||
QtProjectWizzardWindow* window
|
||||
)
|
||||
: QtProjectWizzardContent(window)
|
||||
, m_settings(settings)
|
||||
, m_name(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentSourceGroupData::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
row++;
|
||||
}
|
||||
|
||||
QLabel* nameLabel = createFormLabel("Source Group Name");
|
||||
m_name = new QLineEdit();
|
||||
m_name->setObjectName("name");
|
||||
m_name->setAttribute(Qt::WA_MacShowFocusRect, 0);
|
||||
connect(m_name, SIGNAL(textEdited(QString)), this, SLOT(editedName(QString)));
|
||||
|
||||
layout->addWidget(nameLabel, row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
|
||||
layout->addWidget(m_name, row, QtProjectWizzardWindow::BACK_COL);
|
||||
layout->setRowMinimumHeight(row, 30);
|
||||
row++;
|
||||
|
||||
if (!isInForm())
|
||||
{
|
||||
layout->setRowMinimumHeight(row, 15);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentSourceGroupData::load()
|
||||
{
|
||||
m_name->setText(QString::fromStdString(m_settings->getName()));
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentSourceGroupData::save()
|
||||
{
|
||||
m_settings->setName(m_name->text().toStdString());
|
||||
}
|
||||
|
||||
bool QtProjectWizzardContentSourceGroupData::check()
|
||||
{
|
||||
if (m_name->text().isEmpty())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("Please enter a source group name.");
|
||||
msgBox.exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentSourceGroupData::editedName(QString name)
|
||||
{
|
||||
emit nameUpdated(name);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
#ifndef QT_PROJECT_WIZZARD_CONTENT_SOURCE_GROUP_DATA_H
|
||||
#define QT_PROJECT_WIZZARD_CONTENT_SOURCE_GROUP_DATA_H
|
||||
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
|
||||
class QLineEdit;
|
||||
class SourceGroupSettings;
|
||||
|
||||
class QtProjectWizzardContentSourceGroupData
|
||||
: public QtProjectWizzardContent
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentSourceGroupData(
|
||||
std::shared_ptr<SourceGroupSettings> settings,
|
||||
QtProjectWizzardWindow* window);
|
||||
|
||||
// QtProjectWizzardContent implementation
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
virtual void load() override;
|
||||
virtual void save() override;
|
||||
virtual bool check() override;
|
||||
|
||||
signals:
|
||||
void nameUpdated(QString);
|
||||
|
||||
private slots:
|
||||
void editedName(QString name);
|
||||
|
||||
private:
|
||||
std::shared_ptr<SourceGroupSettings> m_settings;
|
||||
|
||||
QLineEdit* m_name;
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_CONTENT_SOURCE_GROUP_DATA_H
|
||||
@@ -36,7 +36,7 @@ void QtProjectWizzardContentSummary::populate(QGridLayout* layout, int& row)
|
||||
return;
|
||||
}
|
||||
|
||||
layout->setRowMinimumHeight(row++, 20);
|
||||
layout->setRowMinimumHeight(row++, 10);
|
||||
|
||||
for (QtProjectWizzardContent* content : m_contents)
|
||||
{
|
||||
@@ -50,7 +50,7 @@ void QtProjectWizzardContentSummary::populate(QGridLayout* layout, int& row)
|
||||
}
|
||||
}
|
||||
|
||||
layout->setRowMinimumHeight(row, 20);
|
||||
layout->setRowMinimumHeight(row, 10);
|
||||
layout->setRowStretch(row, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContentVS.h"
|
||||
|
||||
#include "utility/messaging/type/MessageIDECreateCDB.h"
|
||||
|
||||
QtProjectWizzardContentVS::QtProjectWizzardContentVS(QtProjectWizzardWindow* window)
|
||||
: QtProjectWizzardContent(window)
|
||||
{
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentVS::populate(QGridLayout* layout, int& row)
|
||||
{
|
||||
QLabel* nameLabel = createFormLabel("Create Compilation Database");
|
||||
layout->addWidget(nameLabel, row, QtProjectWizzardWindow::FRONT_COL);
|
||||
|
||||
addHelpButton("To create a new Compilation Database from a Visual Studio Solution, this Solution has to be open in Visual Studio.\n\
|
||||
Sourcetrail will call Visual Studio to open the 'Create Compilation Database' dialog.\
|
||||
Please follow the instructions in Visual Studio to complete the process.\n\
|
||||
Note: Sourcetrail's Visual Studio plugin has to be installed. Visual Studio has to be running with an eligible Solution, containing C/C++ projects, loaded.", layout, row);
|
||||
|
||||
QLabel* descriptionLabel = createFormLabel("Call Visual Studio to create a Compilation Database from the loaded Solution.");
|
||||
descriptionLabel->setObjectName("description");
|
||||
descriptionLabel->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
||||
layout->addWidget(descriptionLabel, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
|
||||
QPushButton* button = new QPushButton("Create CDB");
|
||||
button->setObjectName("windowButton");
|
||||
layout->addWidget(button, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
|
||||
QLabel* skipLabel = createFormLabel("*Skip this step if you already have a Compilation Database for your Solution.");
|
||||
skipLabel->setObjectName("description");
|
||||
skipLabel->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
||||
layout->addWidget(skipLabel, row, QtProjectWizzardWindow::BACK_COL);
|
||||
row++;
|
||||
|
||||
addSeparator(layout, row++);
|
||||
|
||||
connect(button, SIGNAL(clicked()), this, SLOT(handleVSCDBClicked()));
|
||||
}
|
||||
|
||||
void QtProjectWizzardContentVS::handleVSCDBClicked()
|
||||
{
|
||||
MessageIDECreateCDB().dispatch();
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef QT_PROJECT_WIZZARD_CONTENT_VS_H
|
||||
#define QT_PROJECT_WIZZARD_CONTENT_VS_H
|
||||
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
|
||||
class QtProjectWizzardContentVS
|
||||
: public QtProjectWizzardContent
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardContentVS(QtProjectWizzardWindow* window);
|
||||
|
||||
virtual void populate(QGridLayout* layout, int& row) override;
|
||||
|
||||
private slots:
|
||||
void handleVSCDBClicked();
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_CONTENT_VS_H
|
||||
@@ -8,9 +8,10 @@
|
||||
#include "qt/utility/utilityQt.h"
|
||||
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
|
||||
|
||||
QtProjectWizzardWindow::QtProjectWizzardWindow(QWidget *parent)
|
||||
QtProjectWizzardWindow::QtProjectWizzardWindow(QWidget *parent, bool showSeparator)
|
||||
: QtWindow(parent)
|
||||
, m_content(nullptr)
|
||||
, m_showSeparator(showSeparator)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -31,7 +32,6 @@ QtProjectWizzardContent* QtProjectWizzardWindow::content() const
|
||||
void QtProjectWizzardWindow::setContent(QtProjectWizzardContent* content)
|
||||
{
|
||||
m_content = content;
|
||||
setScrollAble(content->isScrollAble());
|
||||
}
|
||||
|
||||
void QtProjectWizzardWindow::setPreferredSize(QSize size)
|
||||
@@ -67,7 +67,7 @@ void QtProjectWizzardWindow::populateWindow(QWidget* widget)
|
||||
separator->setFrameShape(QFrame::VLine);
|
||||
|
||||
QPalette palette = separator->palette();
|
||||
palette.setColor(QPalette::WindowText, Qt::lightGray);
|
||||
palette.setColor(QPalette::WindowText, m_showSeparator ? Qt::lightGray : Qt::transparent);
|
||||
separator->setPalette(palette);
|
||||
|
||||
layout->addWidget(separator, 0, LINE_COL, -1, 1);
|
||||
@@ -82,24 +82,32 @@ void QtProjectWizzardWindow::populateWindow(QWidget* widget)
|
||||
|
||||
void QtProjectWizzardWindow::windowReady()
|
||||
{
|
||||
updateTitle("NEW PROJECT");
|
||||
updateTitle("NEW SOURCE GROUP");
|
||||
|
||||
m_content->windowReady();
|
||||
}
|
||||
|
||||
void QtProjectWizzardWindow::handleNext()
|
||||
{
|
||||
saveContent();
|
||||
|
||||
if (m_content->check())
|
||||
if (m_content)
|
||||
{
|
||||
emit next();
|
||||
saveContent();
|
||||
|
||||
if (!m_content->check())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
emit next();
|
||||
}
|
||||
|
||||
void QtProjectWizzardWindow::handlePrevious()
|
||||
{
|
||||
m_content->save();
|
||||
if (m_content)
|
||||
{
|
||||
m_content->save();
|
||||
}
|
||||
|
||||
emit previous();
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ class QtProjectWizzardWindow
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtProjectWizzardWindow(QWidget *parent);
|
||||
QtProjectWizzardWindow(QWidget* parent, bool showSeparator = true);
|
||||
virtual QSize sizeHint() const override;
|
||||
|
||||
QtProjectWizzardContent* content() const;
|
||||
@@ -38,6 +38,7 @@ protected:
|
||||
private:
|
||||
QtProjectWizzardContent* m_content;
|
||||
QSize m_preferredSize;
|
||||
bool m_showSeparator;
|
||||
};
|
||||
|
||||
#endif // QT_PROJECT_WIZZARD_WINDOW_H
|
||||
|
||||
@@ -49,25 +49,25 @@ bool SourceGroupJava::prepareIndexing()
|
||||
void SourceGroupJava::fetchAllSourceFilePaths()
|
||||
{
|
||||
std::vector<FilePath> sourcePaths;
|
||||
if (m_settings->getAbsoluteMavenProjectFilePath().exists())
|
||||
if (m_settings->getMavenProjectFilePathExpandedAndAbsolute().exists())
|
||||
{
|
||||
std::shared_ptr<DialogView> dialogView = Application::getInstance()->getDialogView();
|
||||
dialogView->showUnknownProgressDialog("Preparing Project", "Maven\nFetching Source Directories");
|
||||
|
||||
const FilePath mavenPath(ApplicationSettings::getInstance()->getMavenPath());
|
||||
const FilePath projectRootPath = m_settings->getAbsoluteMavenProjectFilePath().parentDirectory();
|
||||
const FilePath projectRootPath = m_settings->getMavenProjectFilePathExpandedAndAbsolute().parentDirectory();
|
||||
sourcePaths = utility::mavenGetAllDirectoriesFromEffectivePom(mavenPath, projectRootPath, m_settings->getShouldIndexMavenTests());
|
||||
|
||||
dialogView->hideUnknownProgressDialog();
|
||||
}
|
||||
else
|
||||
{
|
||||
sourcePaths = m_settings->getAbsoluteSourcePaths();
|
||||
sourcePaths = m_settings->getSourcePathsExpandedAndAbsolute();
|
||||
}
|
||||
|
||||
m_sourceFilePathsToIndex.clear();
|
||||
FileManager fileManager;
|
||||
fileManager.update(sourcePaths, m_settings->getAbsoluteExcludePaths(), m_settings->getSourceExtensions());
|
||||
fileManager.update(sourcePaths, m_settings->getExcludePathsExpandedAndAbsolute(), m_settings->getSourceExtensions());
|
||||
m_allSourceFilePaths = fileManager.getAllSourceFilePaths();
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupJava::getIndexerCommands
|
||||
std::vector<FilePath> classPath = getClassPath();
|
||||
|
||||
std::set<FilePath> indexedPaths;
|
||||
for (FilePath p: m_settings->getAbsoluteSourcePaths())
|
||||
for (FilePath p: m_settings->getSourcePathsExpandedAndAbsolute())
|
||||
{
|
||||
if (p.exists())
|
||||
{
|
||||
@@ -85,7 +85,7 @@ std::vector<std::shared_ptr<IndexerCommand>> SourceGroupJava::getIndexerCommands
|
||||
}
|
||||
|
||||
std::set<FilePath> excludedPaths;
|
||||
for (FilePath p: m_settings->getAbsoluteExcludePaths())
|
||||
for (FilePath p: m_settings->getExcludePathsExpandedAndAbsolute())
|
||||
{
|
||||
if (p.exists())
|
||||
{
|
||||
@@ -135,10 +135,10 @@ bool SourceGroupJava::prepareJavaEnvironment()
|
||||
|
||||
bool SourceGroupJava::prepareMavenData()
|
||||
{
|
||||
if (m_settings && m_settings->getAbsoluteMavenProjectFilePath().exists())
|
||||
if (m_settings && m_settings->getMavenProjectFilePathExpandedAndAbsolute().exists())
|
||||
{
|
||||
const FilePath mavenPath = ApplicationSettings::getInstance()->getMavenPath();
|
||||
const FilePath projectRootPath = m_settings->getAbsoluteMavenProjectFilePath().parentDirectory();
|
||||
const FilePath projectRootPath = m_settings->getMavenProjectFilePathExpandedAndAbsolute().parentDirectory();
|
||||
|
||||
std::shared_ptr<DialogView> dialogView = Application::getInstance()->getDialogView();
|
||||
dialogView->showUnknownProgressDialog("Preparing Project", "Maven\nGenerating Source Files");
|
||||
@@ -164,7 +164,7 @@ bool SourceGroupJava::prepareMavenData()
|
||||
dialogView->showUnknownProgressDialog("Preparing Project", "Maven\nExporting Dependencies");
|
||||
|
||||
utility::mavenCopyDependencies(
|
||||
mavenPath, projectRootPath, m_settings->getAbsoluteMavenDependenciesDirectory()
|
||||
mavenPath, projectRootPath, m_settings->getMavenDependenciesDirectoryExpandedAndAbsolute()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ std::vector<FilePath> SourceGroupJava::getClassPath()
|
||||
{
|
||||
std::vector<FilePath> classPath;
|
||||
|
||||
for (const FilePath& p: m_settings->getAbsoluteClasspaths())
|
||||
for (const FilePath& p: m_settings->getClasspathsExpandedAndAbsolute())
|
||||
{
|
||||
if (p.exists())
|
||||
{
|
||||
@@ -184,12 +184,12 @@ std::vector<FilePath> SourceGroupJava::getClassPath()
|
||||
}
|
||||
}
|
||||
|
||||
if (m_settings->getAbsoluteMavenDependenciesDirectory().exists())
|
||||
if (m_settings->getMavenDependenciesDirectoryExpandedAndAbsolute().exists())
|
||||
{
|
||||
utility::append(
|
||||
classPath,
|
||||
FileSystem::getFilePathsFromDirectory(
|
||||
m_settings->getAbsoluteMavenDependenciesDirectory(),
|
||||
m_settings->getMavenDependenciesDirectoryExpandedAndAbsolute(),
|
||||
utility::createVectorFromElements<std::string>(".jar")
|
||||
)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user