Commit 2fd286cc authored by hjk's avatar hjk

ProjectExplorer: Use runnable contents for appoutputpane re-use

Change-Id: I6dd4b9258321a23462bb6488b132aa9f3d1ed5c2
Reviewed-by: default avatarTobias Hunger <tobias.hunger@theqtcompany.com>
parent e4dca97f
......@@ -719,4 +719,12 @@ AnalyzerRunControl *AnalyzerManager::createRunControl(RunConfiguration *runConfi
return 0;
}
bool operator==(const AnalyzerConnection &c1, const AnalyzerConnection &c2)
{
return c1.connParams == c2.connParams
&& c1.analyzerHost == c2.analyzerHost
&& c1.analyzerSocket == c2.analyzerSocket
&& c1.analyzerPort == c2.analyzerPort;
}
} // namespace Analyzer
......@@ -44,6 +44,8 @@ public:
quint16 analyzerPort = 0;
};
ANALYZER_EXPORT bool operator==(const AnalyzerConnection &c1, const AnalyzerConnection &c2);
} // namespace Analyzer
#endif // ANALYZERSTARTPARAMETERS_H
......@@ -42,6 +42,17 @@ struct ANDROID_EXPORT AndroidRunnable
QString deviceSerialNumber;
};
inline bool operator==(const AndroidRunnable &r1, const AndroidRunnable &r2)
{
return r1.packageName == r2.packageName
&& r1.intentName == r2.intentName
&& r1.commandLineArguments == r2.commandLineArguments
&& r1.environment == r2.environment
&& r1.beforeStartADBCommands == r2.beforeStartADBCommands
&& r1.afterFinishADBCommands == r2.afterFinishADBCommands
&& r1.deviceSerialNumber == r2.deviceSerialNumber;
}
} // namespace Android
#endif // ANDROIDRUNNABLE_H
......@@ -398,7 +398,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
const int size = m_runControlTabs.size();
for (int i = 0; i < size; i++) {
RunControlTab &tab =m_runControlTabs[i];
if (tab.runControl->sameRunConfiguration(rc) && !tab.runControl->isRunning()) {
if (rc->canReUseOutputPane(tab.runControl)) {
// Reuse this tab
delete tab.runControl;
tab.runControl = rc;
......
......@@ -168,6 +168,7 @@ SOURCES += projectexplorer.cpp \
environmentaspectwidget.cpp \
gcctoolchain.cpp \
importwidget.cpp \
runnables.cpp \
localenvironmentaspect.cpp \
osparser.cpp \
projectimporter.cpp \
......
......@@ -127,7 +127,7 @@ QtcPlugin {
"projectwizardpage.cpp", "projectwizardpage.h", "projectwizardpage.ui",
"propertiespanel.cpp", "propertiespanel.h",
"removetaskhandler.cpp", "removetaskhandler.h",
"runnables.h",
"runnables.cpp", "runnables.h",
"runconfiguration.cpp", "runconfiguration.h",
"runconfigurationaspects.cpp", "runconfigurationaspects.h",
"runconfigurationmodel.cpp", "runconfigurationmodel.h",
......
......@@ -655,6 +655,14 @@ Project *RunControl::project() const
return d->project.data();
}
bool RunControl::canReUseOutputPane(const RunControl *other) const
{
if (other->isRunning())
return false;
return d->runnable == other->d->runnable;
}
ProcessHandle RunControl::applicationProcessHandle() const
{
return d->applicationProcessHandle;
......@@ -723,11 +731,6 @@ bool RunControl::showPromptToStopDialog(const QString &title,
return close;
}
bool RunControl::sameRunConfiguration(const RunControl *other) const
{
return other->d->runConfiguration.data() == d->runConfiguration.data();
}
void RunControl::bringApplicationToForeground(qint64 pid)
{
#ifdef Q_OS_OSX
......@@ -760,4 +763,9 @@ void RunControl::appendMessage(const QString &msg, Utils::OutputFormat format)
emit appendMessage(this, msg, format);
}
bool Runnable::operator==(const Runnable &other) const
{
return d ? d->equals(other.d) : (other.d.get() == 0);
}
} // namespace ProjectExplorer
......@@ -158,6 +158,7 @@ class PROJECTEXPLORER_EXPORT ClonableConcept
public:
virtual ~ClonableConcept() {}
virtual ClonableConcept *clone() const = 0;
virtual bool equals(const std::unique_ptr<ClonableConcept> &other) const = 0;
};
template <class T>
......@@ -167,6 +168,12 @@ public:
ClonableModel(const T &data) : m_data(data) {}
ClonableConcept *clone() const override { return new ClonableModel(*this); }
bool equals(const std::unique_ptr<ClonableConcept> &other) const override
{
auto that = dynamic_cast<const ClonableModel<T> *>(other.get());
return that && m_data == that->m_data;
}
T m_data;
};
......@@ -188,6 +195,8 @@ public:
return static_cast<ClonableModel<T> *>(d.get())->m_data;
}
bool operator==(const Runnable &other) const;
private:
std::unique_ptr<ClonableConcept> d;
};
......@@ -363,7 +372,7 @@ public:
RunConfiguration *runConfiguration() const;
Project *project() const;
bool sameRunConfiguration(const RunControl *other) const;
bool canReUseOutputPane(const RunControl *other) const;
Utils::OutputFormatter *outputFormatter();
Core::Id runMode() const;
......
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "runnables.h"
namespace ProjectExplorer {
bool operator==(const StandardRunnable &r1, const StandardRunnable &r2)
{
return r1.executable == r2.executable
&& r1.commandLineArguments == r2.commandLineArguments
&& r1.workingDirectory == r2.workingDirectory
&& r1.environment == r2.environment;
}
} // namespace ProjectExplorer
......@@ -45,6 +45,8 @@ public:
ApplicationLauncher::Mode runMode;
};
PROJECTEXPLORER_EXPORT bool operator==(const StandardRunnable &r1, const StandardRunnable &r2);
} // namespace ProjectExplorer
#endif // PROJECTEXPLORER_RUNNABLES_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment