16
16
* Author: Benjamin Zeller <benjamin.zeller@canonical.com>
18
#include "ubuntuclickdialog.h"
19
#include "ui_ubuntuclickdialog.h"
20
#include "ubuntuconstants.h"
21
#include "clicktoolchain.h"
22
#include "ubuntukitmanager.h"
24
#include <QMessageBox>
18
#include "processoutputdialog.h"
19
#include "ui_processoutputdialog.h"
21
#include <texteditor/fontsettings.h>
22
#include <coreplugin/icore.h>
25
24
#include <QPushButton>
27
#include <projectexplorer/projectexplorer.h>
28
#include <projectexplorer/toolchainmanager.h>
29
#include <texteditor/fontsettings.h>
31
#include "ubuntucreatenewchrootdialog.h"
32
#include "clickchrootagent_interface.h"
35
29
namespace Internal {
37
UbuntuClickDialog::UbuntuClickDialog(QWidget *parent)
31
const char PROCESS_ERROR_EXIT_MESSAGE[] = "Task exited with errors, please check the output";
32
const char PROCESS_SUCCESS_EXIT_MESSAGE[] = "Task exited with no errors";
34
ProcessOutputDialog::ProcessOutputDialog(QWidget *parent)
39
,m_ui(new Ui::UbuntuClickDialog)
36
,m_ui(new Ui::ProcessOutputDialog)
41
38
m_ui->setupUi(this);
43
40
QFont f(TextEditor::FontSettings::defaultFixedFontFamily());
44
41
f.setStyleHint(QFont::TypeWriter);
45
42
m_ui->output->setFont(f);
46
m_ui->exitStatusLabel->setVisible(false);
44
connect(m_ui->checkBox, &QCheckBox::toggled, [this](bool checked){
45
m_ui->output->setVisible(checked);
49
resize(minimumSize());
52
m_ui->checkBox->setChecked(false);
48
54
m_process = new Utils::QtcProcess(this);
49
connect(m_process,SIGNAL(readyReadStandardOutput()),this,SLOT(on_clickReadyReadStandardOutput()));
50
connect(m_process,SIGNAL(readyReadStandardError()),this,SLOT(on_clickReadyReadStandardError()));
51
connect(m_process,SIGNAL(finished(int)),this,SLOT(on_clickFinished(int)));
55
connect(m_process,SIGNAL(readyReadStandardOutput()),this,SLOT(on_processReadyReadStandardOutput()));
56
connect(m_process,SIGNAL(readyReadStandardError()),this,SLOT(on_processReadyReadStandardError()));
57
connect(m_process,SIGNAL(finished(int)),this,SLOT(on_processFinished(int)));
59
//make sure the progressbar is not animating just yet
60
m_ui->progressBar->setRange(0, 1);
54
UbuntuClickDialog::~UbuntuClickDialog()
63
ProcessOutputDialog::~ProcessOutputDialog()
59
void UbuntuClickDialog::setParameters(const QList<ProjectExplorer::ProcessParameters> ¶ms)
68
void ProcessOutputDialog::setParameters(const QList<ProjectExplorer::ProcessParameters> ¶ms)
64
int UbuntuClickDialog::lastExitCode() const
73
int ProcessOutputDialog::lastExitCode() const
69
void UbuntuClickDialog::runClick( )
72
//change the button to cancel
74
m_buttonBox->addButton(QDialogButtonBox::Cancel);
76
disableCloseButton(true);
80
int UbuntuClickDialog::runClickModal(const ProjectExplorer::ProcessParameters ¶ms, QWidget *parent)
82
return runClickModal(QList<ProjectExplorer::ProcessParameters>()<<params,parent);
85
int UbuntuClickDialog::runClickModal(const QList<ProjectExplorer::ProcessParameters> ¶ms, QWidget *parent)
87
UbuntuClickDialog dlg( parent ? parent : Core::ICore::mainWindow());
78
int ProcessOutputDialog::runProcessModal(const ProjectExplorer::ProcessParameters ¶ms, QWidget *parent)
80
return runProcessModal(QList<ProjectExplorer::ProcessParameters>()<<params,parent);
83
int ProcessOutputDialog::runProcessModal(const QList<ProjectExplorer::ProcessParameters> ¶ms, QWidget *parent)
85
ProcessOutputDialog dlg( parent ? parent : Core::ICore::mainWindow());
88
86
dlg.setParameters(params);
89
QMetaObject::invokeMethod(&dlg,"runClick",Qt::QueuedConnection);
87
QMetaObject::invokeMethod(&dlg,"runTasks",Qt::QueuedConnection);
92
90
return dlg.m_exitCode;
95
bool UbuntuClickDialog::createClickChrootModal(bool redetectKits, const QString &arch, const QString &framework, QWidget *parent)
98
UbuntuClickTool::Target t;
99
if(!UbuntuCreateNewChrootDialog::getNewChrootTarget(&t,arch,framework,parent))
102
ProjectExplorer::ProcessParameters params;
103
UbuntuClickTool::parametersForCreateChroot(t,¶ms);
105
bool success = (runClickModal(params,parent) == 0);
108
ClickToolChain* tc = new ClickToolChain(t, ProjectExplorer::ToolChain::AutoDetection);
109
ProjectExplorer::ToolChainManager::registerToolChain(tc);
112
UbuntuKitManager::autoDetectKits();
118
int UbuntuClickDialog::maintainClickModal(const UbuntuClickTool::Target &target, const UbuntuClickTool::MaintainMode &mode)
120
return maintainClickModal(QList<UbuntuClickTool::Target>()<<target,mode);
123
int UbuntuClickDialog::maintainClickModal(const QList<UbuntuClickTool::Target> &targetList, const UbuntuClickTool::MaintainMode &mode)
125
QList<ProjectExplorer::ProcessParameters> paramList;
126
foreach(const UbuntuClickTool::Target &target, targetList) {
127
if(mode == UbuntuClickTool::Delete) {
128
QString title = tr(Constants::UBUNTU_CLICK_DELETE_TITLE);
129
QString text = tr(Constants::UBUNTU_CLICK_DELETE_MESSAGE);
130
if( QMessageBox::question(Core::ICore::mainWindow(),title,text) != QMessageBox::Yes )
133
if(UbuntuClickTool::clickChrootSuffix() == QLatin1String(Constants::UBUNTU_CLICK_CHROOT_DEFAULT_NAME)) {
134
ComUbuntuSdkClickChrootAgentInterface clickAgent(QStringLiteral("com.ubuntu.sdk.ClickChrootAgent"),
135
QStringLiteral("/com/ubuntu/sdk/ClickChrootAgent"),
136
QDBusConnection::sessionBus());
137
if(clickAgent.isValid()) {
138
QDBusPendingReply<bool> ret = clickAgent.releaseSession(target.framework,target.architecture);
140
qDebug()<<ret.error();
142
ret.waitForFinished();
147
ProjectExplorer::ProcessParameters params;
148
UbuntuClickTool::parametersForMaintainChroot(mode,target,¶ms);
152
return runClickModal(paramList);
155
void UbuntuClickDialog::done(int code)
157
if(code == QDialog::Rejected) {
158
if(m_process->state() != QProcess::NotRunning) {
159
//ask the user if he really wants to do that
160
QString title = tr(Constants::UBUNTU_CLICK_STOP_TITLE);
161
QString text = tr(Constants::UBUNTU_CLICK_STOP_MESSAGE);
162
if( QMessageBox::question(Core::ICore::mainWindow(),title,text)!= QMessageBox::Yes )
165
m_process->terminate();
166
m_process->waitForFinished(100);
169
m_ui->exitStatusLabel->setText(tr(Constants::UBUNTU_CLICK_STOP_WAIT_MESSAGE));
170
m_ui->exitStatusLabel->setVisible(true);
93
void ProcessOutputDialog::runTasks( )
96
disableCloseButton(true);
100
void ProcessOutputDialog::done(int code)
174
102
QDialog::done(code);
177
void UbuntuClickDialog::disableCloseButton(const bool &disabled)
105
void ProcessOutputDialog::disableCloseButton(const bool &disabled)
179
107
QPushButton* bt = m_ui->buttonBox->button(QDialogButtonBox::Close);
180
108
if(bt) bt->setDisabled(disabled);
183
void UbuntuClickDialog::nextTask()
111
void ProcessOutputDialog::nextTask()
185
113
if(m_tasks.length() <= 0)
117
m_ui->progressBar->setRange(0,0);
188
119
ProjectExplorer::ProcessParameters params = m_tasks.takeFirst();
189
120
params.resolveAll();
190
121
m_process->setCommand(params.command(),params.arguments());