2009-02-25 09:15:00 +01:00
|
|
|
/**************************************************************************
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-06-17 00:01:27 +10:00
|
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Commercial Usage
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
|
|
|
|
** accordance with the Qt Commercial License Agreement provided with the
|
|
|
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
|
|
|
** a written agreement between you and Nokia.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** GNU Lesser General Public License Usage
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
|
|
|
** General Public License version 2.1 as published by the Free Software
|
|
|
|
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
|
|
|
|
** packaging of this file. Please review the following information to
|
|
|
|
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
|
|
|
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** If you are unsure which license is appropriate for your use, please
|
2009-08-14 09:30:56 +02:00
|
|
|
** contact the sales department at http://qt.nokia.com/contact.
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
**************************************************************************/
|
2008-12-02 16:19:05 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
#include "project.h"
|
2008-12-02 16:19:05 +01:00
|
|
|
|
2009-09-29 11:39:55 +02:00
|
|
|
#include "persistentsettings.h"
|
|
|
|
|
#include "buildconfiguration.h"
|
|
|
|
|
#include "environment.h"
|
|
|
|
|
#include "projectnodes.h"
|
2008-12-02 16:19:05 +01:00
|
|
|
#include "buildstep.h"
|
2008-12-02 12:01:29 +01:00
|
|
|
#include "projectexplorer.h"
|
|
|
|
|
#include "runconfiguration.h"
|
|
|
|
|
#include "editorconfiguration.h"
|
|
|
|
|
|
|
|
|
|
#include <coreplugin/ifile.h>
|
|
|
|
|
#include <extensionsystem/pluginmanager.h>
|
2008-12-09 15:25:01 +01:00
|
|
|
#include <utils/qtcassert.h>
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#include <QtCore/QDebug>
|
2008-12-09 15:25:01 +01:00
|
|
|
#include <QtCore/QTextCodec>
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
using namespace ProjectExplorer;
|
2009-04-20 16:29:46 +02:00
|
|
|
using namespace ProjectExplorer::Internal;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2010-01-14 19:08:43 +01:00
|
|
|
namespace {
|
|
|
|
|
const char * const PROJECT_FILE_POSTFIX(".user");
|
2010-01-19 16:33:44 +01:00
|
|
|
|
|
|
|
|
const char * const ACTIVE_BC_KEY("ProjectExplorer.Project.ActiveBuildConfiguration");
|
|
|
|
|
const char * const BC_KEY_PREFIX("ProjectExplorer.Project.BuildConfiguration.");
|
|
|
|
|
const char * const BC_COUNT_KEY("ProjectExplorer.Project.BuildConfigurationCount");
|
|
|
|
|
|
|
|
|
|
const char * const ACTIVE_RC_KEY("ProjectExplorer.Project.ActiveRunConfiguration");
|
|
|
|
|
const char * const RC_KEY_PREFIX("ProjectExplorer.Project.RunConfiguration.");
|
|
|
|
|
const char * const RC_COUNT_KEY("ProjectExplorer.Project.RunConfigurationCount");
|
|
|
|
|
|
2010-01-14 16:24:21 +01:00
|
|
|
const char * const EDITOR_SETTINGS_KEY("ProjectExplorer.Project.EditorSettings");
|
2010-01-14 19:08:43 +01:00
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
|
// Project
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Project::Project() :
|
|
|
|
|
m_activeBuildConfiguration(0),
|
|
|
|
|
m_activeRunConfiguration(0),
|
|
|
|
|
m_editorConfiguration(new EditorConfiguration())
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2009-01-16 16:30:22 +01:00
|
|
|
Project::~Project()
|
|
|
|
|
{
|
2010-01-14 19:08:43 +01:00
|
|
|
qDeleteAll(m_buildConfigurations);
|
2009-10-09 18:46:44 +02:00
|
|
|
qDeleteAll(m_runConfigurations);
|
2009-01-16 16:30:22 +01:00
|
|
|
delete m_editorConfiguration;
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-14 19:08:43 +01:00
|
|
|
QString Project::makeUnique(const QString &preferredName, const QStringList &usedNames)
|
2009-10-07 13:18:26 +02:00
|
|
|
{
|
2010-01-14 19:08:43 +01:00
|
|
|
if (!usedNames.contains(preferredName))
|
|
|
|
|
return preferredName;
|
2009-10-07 13:18:26 +02:00
|
|
|
int i = 2;
|
2010-01-14 19:08:43 +01:00
|
|
|
QString tryName = preferredName + QString::number(i);
|
2009-10-07 13:18:26 +02:00
|
|
|
while (usedNames.contains(tryName))
|
2010-01-14 19:08:43 +01:00
|
|
|
tryName = preferredName + QString::number(++i);
|
2009-10-07 13:18:26 +02:00
|
|
|
return tryName;
|
|
|
|
|
}
|
|
|
|
|
|
2009-09-24 16:02:02 +02:00
|
|
|
void Project::addBuildConfiguration(BuildConfiguration *configuration)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2010-01-15 11:54:11 +01:00
|
|
|
QTC_ASSERT(configuration && !m_buildConfigurations.contains(configuration), return);
|
2010-01-15 10:54:29 +01:00
|
|
|
|
2009-09-24 16:02:02 +02:00
|
|
|
// Check that we don't have a configuration with the same displayName
|
|
|
|
|
QString configurationDisplayName = configuration->displayName();
|
|
|
|
|
QStringList displayNames;
|
2010-01-14 19:08:43 +01:00
|
|
|
foreach (const BuildConfiguration *bc, m_buildConfigurations)
|
2009-09-24 16:02:02 +02:00
|
|
|
displayNames << bc->displayName();
|
2009-10-07 13:18:26 +02:00
|
|
|
configurationDisplayName = makeUnique(configurationDisplayName, displayNames);
|
2009-09-24 16:02:02 +02:00
|
|
|
configuration->setDisplayName(configurationDisplayName);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-09-24 16:02:02 +02:00
|
|
|
// add it
|
2010-01-14 19:08:43 +01:00
|
|
|
m_buildConfigurations.push_back(configuration);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-12-14 18:03:33 +01:00
|
|
|
emit addedBuildConfiguration(configuration);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-09-24 16:02:02 +02:00
|
|
|
void Project::removeBuildConfiguration(BuildConfiguration *configuration)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2009-09-24 16:02:02 +02:00
|
|
|
//todo: this might be error prone
|
2010-01-14 19:08:43 +01:00
|
|
|
if (!m_buildConfigurations.contains(configuration))
|
2008-12-02 12:01:29 +01:00
|
|
|
return;
|
|
|
|
|
|
2010-01-14 19:08:43 +01:00
|
|
|
m_buildConfigurations.removeOne(configuration);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-12-14 18:03:33 +01:00
|
|
|
emit removedBuildConfiguration(configuration);
|
2009-10-08 20:01:07 +02:00
|
|
|
delete configuration;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-09-24 16:02:02 +02:00
|
|
|
QList<BuildConfiguration *> Project::buildConfigurations() const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2010-01-14 19:08:43 +01:00
|
|
|
return m_buildConfigurations;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
BuildConfiguration *Project::activeBuildConfiguration() const
|
|
|
|
|
{
|
|
|
|
|
return m_activeBuildConfiguration;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Project::setActiveBuildConfiguration(BuildConfiguration *configuration)
|
|
|
|
|
{
|
|
|
|
|
if (!configuration ||
|
|
|
|
|
m_activeBuildConfiguration == configuration ||
|
|
|
|
|
!m_buildConfigurations.contains(configuration))
|
|
|
|
|
return;
|
|
|
|
|
m_activeBuildConfiguration = configuration;
|
|
|
|
|
emit activeBuildConfigurationChanged();
|
|
|
|
|
}
|
|
|
|
|
|
2009-05-06 16:33:43 +02:00
|
|
|
bool Project::hasBuildSettings() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
void Project::saveSettings()
|
|
|
|
|
{
|
|
|
|
|
PersistentSettingsWriter writer;
|
2010-01-19 16:33:44 +01:00
|
|
|
QVariantMap map(toMap());
|
|
|
|
|
for (QVariantMap::const_iterator i = map.constBegin(); i != map.constEnd(); ++i)
|
|
|
|
|
writer.saveValue(i.key(), i.value());
|
|
|
|
|
|
2010-01-14 19:08:43 +01:00
|
|
|
writer.save(file()->fileName() + QLatin1String(PROJECT_FILE_POSTFIX), "QtCreatorProject");
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-07-03 16:46:01 +02:00
|
|
|
bool Project::restoreSettings()
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
PersistentSettingsReader reader;
|
2010-01-14 19:08:43 +01:00
|
|
|
reader.load(file()->fileName() + QLatin1String(PROJECT_FILE_POSTFIX));
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
QVariantMap map(reader.restoreValues());
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
return fromMap(map);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-08-06 15:31:32 +02:00
|
|
|
QList<BuildConfigWidget*> Project::subConfigWidgets()
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2009-08-06 15:31:32 +02:00
|
|
|
return QList<BuildConfigWidget*>();
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
QVariantMap Project::toMap() const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2009-11-24 15:36:31 +01:00
|
|
|
const QList<BuildConfiguration *> bcs = buildConfigurations();
|
|
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
QVariantMap map;
|
|
|
|
|
map.insert(QLatin1String(ACTIVE_BC_KEY), bcs.indexOf(m_activeBuildConfiguration));
|
|
|
|
|
map.insert(QLatin1String(BC_COUNT_KEY), bcs.size());
|
|
|
|
|
for (int i = 0; i < bcs.size(); ++i)
|
|
|
|
|
map.insert(QString::fromLatin1(BC_KEY_PREFIX) + QString::number(i), bcs.at(i)->toMap());
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
const QList<RunConfiguration *> rcs = runConfigurations();
|
|
|
|
|
map.insert(QLatin1String(ACTIVE_RC_KEY), rcs.indexOf(m_activeRunConfiguration));
|
|
|
|
|
map.insert(QLatin1String(RC_COUNT_KEY), rcs.size());
|
|
|
|
|
for (int i = 0; i < rcs.size(); ++i)
|
|
|
|
|
map.insert(QString::fromLatin1(RC_KEY_PREFIX) + QString::number(i), rcs.at(i)->toMap());
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
map.insert(QLatin1String(EDITOR_SETTINGS_KEY), m_editorConfiguration->toMap());
|
|
|
|
|
|
|
|
|
|
return map;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
bool Project::fromMap(const QVariantMap &map)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2010-01-19 16:33:44 +01:00
|
|
|
if (map.contains(QLatin1String(EDITOR_SETTINGS_KEY))) {
|
|
|
|
|
QVariantMap values(map.value(QLatin1String(EDITOR_SETTINGS_KEY)).toMap());
|
|
|
|
|
if (!m_editorConfiguration->fromMap(values))
|
|
|
|
|
return false;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
bool ok;
|
|
|
|
|
int maxI(map.value(QLatin1String(BC_COUNT_KEY), 0).toInt(&ok));
|
|
|
|
|
if (!ok || maxI < 0)
|
|
|
|
|
maxI = 0;
|
|
|
|
|
int activeConfiguration(map.value(QLatin1String(ACTIVE_BC_KEY), 0).toInt(&ok));
|
|
|
|
|
if (!ok || activeConfiguration < 0)
|
|
|
|
|
activeConfiguration = 0;
|
|
|
|
|
if (0 > activeConfiguration || maxI < activeConfiguration)
|
|
|
|
|
activeConfiguration = 0;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < maxI; ++i) {
|
|
|
|
|
const QString key(QString::fromLatin1(BC_KEY_PREFIX) + QString::number(i));
|
|
|
|
|
if (!map.contains(key))
|
|
|
|
|
return false;
|
|
|
|
|
if (!buildConfigurationFactory()->canRestore(this, map.value(key).toMap()))
|
|
|
|
|
return false;
|
|
|
|
|
BuildConfiguration *bc(buildConfigurationFactory()->restore(this, map.value(key).toMap()));
|
|
|
|
|
if (!bc)
|
|
|
|
|
continue;
|
|
|
|
|
addBuildConfiguration(bc);
|
|
|
|
|
if (i == activeConfiguration)
|
|
|
|
|
setActiveBuildConfiguration(bc);
|
2009-11-30 13:58:06 +01:00
|
|
|
}
|
2010-01-19 16:33:44 +01:00
|
|
|
if (!activeBuildConfiguration() && !m_buildConfigurations.isEmpty())
|
|
|
|
|
setActiveBuildConfiguration(m_buildConfigurations.at(0));
|
2009-11-24 15:36:31 +01:00
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
maxI = map.value(QLatin1String(RC_COUNT_KEY), 0).toInt(&ok);
|
|
|
|
|
if (!ok || maxI < 0)
|
|
|
|
|
maxI = 0;
|
|
|
|
|
activeConfiguration = map.value(QLatin1String(ACTIVE_RC_KEY), 0).toInt(&ok);
|
|
|
|
|
if (!ok || activeConfiguration < 0)
|
|
|
|
|
activeConfiguration = 0;
|
|
|
|
|
if (0 > activeConfiguration || maxI < activeConfiguration)
|
|
|
|
|
activeConfiguration = 0;
|
|
|
|
|
|
|
|
|
|
QList<IRunConfigurationFactory *>
|
|
|
|
|
factories(ExtensionSystem::PluginManager::instance()->
|
|
|
|
|
getObjects<IRunConfigurationFactory>());
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < maxI; ++i) {
|
|
|
|
|
const QString key(QString::fromLatin1(RC_KEY_PREFIX) + QString::number(i));
|
|
|
|
|
if (!map.contains(key))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
QVariantMap valueMap(map.value(key).toMap());
|
|
|
|
|
IRunConfigurationFactory *factory(0);
|
|
|
|
|
foreach (IRunConfigurationFactory *f, factories) {
|
|
|
|
|
if (!f->canRestore(this, valueMap))
|
|
|
|
|
continue;
|
|
|
|
|
factory = f;
|
2008-12-02 12:01:29 +01:00
|
|
|
break;
|
|
|
|
|
}
|
2010-01-19 16:33:44 +01:00
|
|
|
if (!factory)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
RunConfiguration *rc(factory->restore(this, valueMap));
|
|
|
|
|
if (!rc)
|
|
|
|
|
return false;
|
|
|
|
|
addRunConfiguration(rc);
|
|
|
|
|
if (i == activeConfiguration)
|
|
|
|
|
setActiveRunConfiguration(rc);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
2010-01-19 16:33:44 +01:00
|
|
|
|
2010-01-19 13:41:02 +01:00
|
|
|
if (!activeRunConfiguration() && !m_runConfigurations.isEmpty())
|
2008-12-02 12:01:29 +01:00
|
|
|
setActiveRunConfiguration(m_runConfigurations.at(0));
|
2010-01-14 16:24:21 +01:00
|
|
|
|
2010-01-19 16:33:44 +01:00
|
|
|
return true;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-10-08 18:37:18 +02:00
|
|
|
QList<RunConfiguration *> Project::runConfigurations() const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
return m_runConfigurations;
|
|
|
|
|
}
|
|
|
|
|
|
2009-10-08 18:37:18 +02:00
|
|
|
void Project::addRunConfiguration(RunConfiguration* runConfiguration)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2010-01-15 11:54:11 +01:00
|
|
|
QTC_ASSERT(runConfiguration && !m_runConfigurations.contains(runConfiguration), return);
|
2010-01-15 10:54:29 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
m_runConfigurations.push_back(runConfiguration);
|
2010-01-20 16:17:26 +01:00
|
|
|
emit addedRunConfiguration(runConfiguration);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-10-08 18:37:18 +02:00
|
|
|
void Project::removeRunConfiguration(RunConfiguration* runConfiguration)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2008-12-17 15:51:48 +01:00
|
|
|
if(!m_runConfigurations.contains(runConfiguration)) {
|
2010-01-07 18:17:24 +01:00
|
|
|
qWarning()<<"Not removing runConfiguration"<<runConfiguration->displayName()<<"becasue it doesn't exist";
|
2008-12-17 15:51:48 +01:00
|
|
|
return;
|
2009-09-24 16:02:02 +02:00
|
|
|
}
|
2009-04-15 14:52:31 +02:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
if (m_activeRunConfiguration == runConfiguration) {
|
2009-04-15 14:52:31 +02:00
|
|
|
if (m_runConfigurations.size() <= 1)
|
2009-10-08 18:37:18 +02:00
|
|
|
setActiveRunConfiguration(0);
|
2009-04-15 14:52:31 +02:00
|
|
|
else if (m_runConfigurations.at(0) == m_activeRunConfiguration)
|
|
|
|
|
setActiveRunConfiguration(m_runConfigurations.at(1));
|
2008-12-02 12:01:29 +01:00
|
|
|
else
|
|
|
|
|
setActiveRunConfiguration(m_runConfigurations.at(0));
|
|
|
|
|
}
|
2009-04-15 14:52:31 +02:00
|
|
|
|
|
|
|
|
m_runConfigurations.removeOne(runConfiguration);
|
2010-01-20 16:17:26 +01:00
|
|
|
emit removedRunConfiguration(runConfiguration);
|
2009-10-09 18:46:44 +02:00
|
|
|
delete runConfiguration;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-10-08 18:37:18 +02:00
|
|
|
RunConfiguration* Project::activeRunConfiguration() const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
return m_activeRunConfiguration;
|
|
|
|
|
}
|
|
|
|
|
|
2009-10-08 18:37:18 +02:00
|
|
|
void Project::setActiveRunConfiguration(RunConfiguration* runConfiguration)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
if (runConfiguration == m_activeRunConfiguration)
|
|
|
|
|
return;
|
2008-12-17 15:51:48 +01:00
|
|
|
Q_ASSERT(m_runConfigurations.contains(runConfiguration) || runConfiguration == 0);
|
2008-12-02 12:01:29 +01:00
|
|
|
m_activeRunConfiguration = runConfiguration;
|
|
|
|
|
emit activeRunConfigurationChanged();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EditorConfiguration *Project::editorConfiguration() const
|
|
|
|
|
{
|
|
|
|
|
return m_editorConfiguration;
|
|
|
|
|
}
|
|
|
|
|
|
2009-05-05 18:21:40 +02:00
|
|
|
QByteArray Project::predefinedMacros(const QString &) const
|
2009-05-04 18:22:40 +02:00
|
|
|
{
|
|
|
|
|
return QByteArray();
|
|
|
|
|
}
|
|
|
|
|
|
2009-05-05 18:21:40 +02:00
|
|
|
QStringList Project::includePaths(const QString &) const
|
2009-05-04 18:22:40 +02:00
|
|
|
{
|
|
|
|
|
return QStringList();
|
|
|
|
|
}
|
|
|
|
|
|
2009-05-05 18:21:40 +02:00
|
|
|
QStringList Project::frameworkPaths(const QString &) const
|
2009-05-04 18:22:40 +02:00
|
|
|
{
|
|
|
|
|
return QStringList();
|
|
|
|
|
}
|
2009-12-03 16:23:15 +01:00
|
|
|
|
|
|
|
|
QString Project::generatedUiHeader(const QString & /* formFile */) const
|
|
|
|
|
{
|
|
|
|
|
return QString();
|
|
|
|
|
}
|
|
|
|
|
|