OSDN Git Service

d8d733605fe036ad13e459e55588d0d4403837f2
[qt-creator-jp/qt-creator-jp.git] / src / plugins / qt4projectmanager / qt-desktop / qt4desktoptargetfactory.cpp
1 /**************************************************************************
2 **
3 ** This file is part of Qt Creator
4 **
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
6 **
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
8 **
9 ** No Commercial Usage
10 **
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 **
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights.  These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
31 **
32 **************************************************************************/
33
34 #include "qt4desktoptargetfactory.h"
35 #include "buildconfigurationinfo.h"
36 #include "qt4projectmanagerconstants.h"
37 #include "qt4project.h"
38 #include "qt4runconfiguration.h"
39 #include "qt4desktoptarget.h"
40
41 #include <projectexplorer/deployconfiguration.h>
42 #include <projectexplorer/projectexplorerconstants.h>
43 #include <projectexplorer/customexecutablerunconfiguration.h>
44 #include <projectexplorer/projectexplorerconstants.h>
45
46 #include <QtGui/QVBoxLayout>
47 #include <QtGui/QApplication>
48 #include <QtGui/QStyle>
49 #include <QtGui/QLabel>
50
51 using namespace Qt4ProjectManager;
52 using namespace Qt4ProjectManager::Internal;
53 using ProjectExplorer::idFromMap;
54
55 Qt4DesktopTargetFactory::Qt4DesktopTargetFactory(QObject *parent) :
56     Qt4BaseTargetFactory(parent)
57 {
58     connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
59             this, SIGNAL(supportedTargetIdsChanged()));
60 }
61
62 Qt4DesktopTargetFactory::~Qt4DesktopTargetFactory()
63 {
64 }
65
66 bool Qt4DesktopTargetFactory::supportsTargetId(const QString &id) const
67 {
68     return id == QLatin1String(Constants::DESKTOP_TARGET_ID);
69 }
70
71 QStringList Qt4DesktopTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
72 {
73     if (parent && !qobject_cast<Qt4Project *>(parent))
74         return QStringList();
75     if (!QtVersionManager::instance()->supportsTargetId(Constants::DESKTOP_TARGET_ID))
76         return QStringList();
77     return QStringList() << QLatin1String(Constants::DESKTOP_TARGET_ID);
78 }
79
80 QString Qt4DesktopTargetFactory::displayNameForId(const QString &id) const
81 {
82     if (id == QLatin1String(Constants::DESKTOP_TARGET_ID))
83         return Qt4DesktopTarget::defaultDisplayName();
84     return QString();
85 }
86
87 QIcon Qt4DesktopTargetFactory::iconForId(const QString &id) const
88 {
89     if (id == QLatin1String(Constants::DESKTOP_TARGET_ID))
90         return qApp->style()->standardIcon(QStyle::SP_ComputerIcon);
91     return QIcon();
92 }
93
94 bool Qt4DesktopTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
95 {
96     if (!qobject_cast<Qt4Project *>(parent))
97         return false;
98     return supportsTargetId(id);
99 }
100
101 bool Qt4DesktopTargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
102 {
103     return canCreate(parent, idFromMap(map));
104 }
105
106 ProjectExplorer::Target  *Qt4DesktopTargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
107 {
108     if (!canRestore(parent, map))
109         return 0;
110
111     Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
112     Qt4DesktopTarget *target = new Qt4DesktopTarget(qt4project, QLatin1String("transient ID"));
113
114     if (target->fromMap(map))
115         return target;
116     delete target;
117     return 0;
118 }
119
120 QString Qt4DesktopTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id)
121 {
122     if (id != QLatin1String(Constants::DESKTOP_TARGET_ID))
123         return QString();
124
125     // currently we can't have the build directory to be deeper than the source directory
126     // since that is broken in qmake
127     // Once qmake is fixed we can change that to have a top directory and
128     // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') )
129     return projectLocation + QLatin1String("-desktop");
130 }
131
132 QList<BuildConfigurationInfo> Qt4DesktopTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion)
133 {
134     Q_ASSERT(id == Constants::DESKTOP_TARGET_ID);
135     QList<BuildConfigurationInfo> infoList;
136     QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id, minimumQtVersion);
137
138     foreach (QtVersion *version, knownVersions) {
139         if (!version->isValid() || !version->toolChainAvailable())
140             continue;
141         QtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
142
143         QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), id);
144         infoList.append(BuildConfigurationInfo(version, config, QString(), dir));
145         infoList.append(BuildConfigurationInfo(version, config ^ QtVersion::DebugBuild, QString(), dir));
146     }
147     return infoList;
148 }
149
150  Qt4TargetSetupWidget *Qt4DesktopTargetFactory::createTargetSetupWidget(const QString &id, const QString &proFilePath, const QtVersionNumber &number, bool importEnabled, QList<BuildConfigurationInfo> importInfos)
151 {
152     Qt4DefaultTargetSetupWidget *widget
153             = static_cast<Qt4DefaultTargetSetupWidget *>(
154                 Qt4BaseTargetFactory::createTargetSetupWidget(id,  proFilePath,
155                                                               number,  importEnabled,
156                                                               importInfos));
157     if (widget)
158         widget->setShadowBuildCheckBoxVisible(true);
159     return widget;
160 }
161
162 ProjectExplorer::Target *Qt4DesktopTargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
163 {
164     if (!canCreate(parent, id))
165         return 0;
166
167     QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
168     if (knownVersions.isEmpty())
169         return 0;
170
171     QtVersion *qtVersion = knownVersions.first();
172     QtVersion::QmakeBuildConfigs config = qtVersion->defaultBuildConfig();
173
174     QList<BuildConfigurationInfo> infos;
175     infos.append(BuildConfigurationInfo(qtVersion, config, QString(), QString()));
176     infos.append(BuildConfigurationInfo(qtVersion, config ^ QtVersion::DebugBuild, QString(), QString()));
177
178     return create(parent, id, infos);
179 }
180
181 bool Qt4DesktopTargetFactory::isMobileTarget(const QString &id)
182 {
183     Q_UNUSED(id)
184     return false;
185 }
186
187 bool Qt4DesktopTargetFactory::supportsShadowBuilds(const QString &id)
188 {
189     Q_UNUSED(id);
190     return true;
191 }
192
193 ProjectExplorer::Target *Qt4DesktopTargetFactory::create(ProjectExplorer::Project *parent, const QString &id, const QList<BuildConfigurationInfo> &infos)
194 {
195     if (!canCreate(parent, id))
196         return 0;
197     if (infos.isEmpty())
198         return 0;
199     Qt4DesktopTarget *t = new Qt4DesktopTarget(static_cast<Qt4Project *>(parent), id);
200
201     foreach (const BuildConfigurationInfo &info, infos)
202         t->addQt4BuildConfiguration(msgBuildConfigurationName(info),
203                                     info.version, info.buildConfig,
204                                     info.additionalArguments, info.directory);
205
206     t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
207
208     t->createApplicationProFiles();
209
210     if (t->runConfigurations().isEmpty())
211         t->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(t));
212     return t;
213 }