blob: 7444659b0bd206caec994949bde45a306b165e3d [file] [log] [blame]
Zack Rusin3438a522011-04-10 22:56:31 -04001#include "tracedialog.h"
2
3#include <QDebug>
4#include <QFileDialog>
5#include <QMessageBox>
6
7TraceDialog::TraceDialog(QWidget *parent)
8 : QDialog(parent)
9{
10 setupUi(this);
11
José Fonseca2cdc9402012-02-28 17:12:24 +000012 apiComboBox->addItem("GL");
13#ifdef Q_OS_WIN
14 apiComboBox->addItem("D3D7");
15 apiComboBox->addItem("D3D8");
16 apiComboBox->addItem("D3D9");
17 apiComboBox->addItem("D3D10");
José Fonseca889d32c2012-04-23 10:18:28 +010018 apiComboBox->addItem("D3D10_1");
19 apiComboBox->addItem("D3D11");
José Fonseca2cdc9402012-02-28 17:12:24 +000020#else
21 apiComboBox->addItem("EGL");
22#endif
23
Zack Rusin3438a522011-04-10 22:56:31 -040024 connect(browseButton, SIGNAL(clicked()),
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020025 this, SLOT(browseApplication()));
26 connect(browseWorkingDirButton, SIGNAL(clicked()),
27 this, SLOT(browseWorkingDir()));
Zack Rusin3438a522011-04-10 22:56:31 -040028}
29
Piotr Podsiadły654787e2016-09-13 09:53:48 +020030void TraceDialog::setApi(const QString &api)
31{
32 int index = apiComboBox->findText(api);
33 if(index >= 0)
34 apiComboBox->setCurrentIndex(index);
35}
36
José Fonseca2cdc9402012-02-28 17:12:24 +000037QString TraceDialog::api() const
38{
39 return apiComboBox->currentText().toLower();
40}
41
Piotr Podsiadły654787e2016-09-13 09:53:48 +020042void TraceDialog::setApplicationPath(const QString &path)
43{
44 applicationEdit->setText(path);
45}
46
Zack Rusin3438a522011-04-10 22:56:31 -040047QString TraceDialog::applicationPath() const
48{
49 return applicationEdit->text();
50}
51
Piotr Podsiadły654787e2016-09-13 09:53:48 +020052void TraceDialog::setWorkingDirPath(const QString &path)
53{
54 workingDirEdit->setText(path);
55}
56
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020057QString TraceDialog::workingDirPath() const
58{
59 QString workingDir = workingDirEdit->text();
60
61 if(workingDir.isEmpty()) {
62 return QDir::currentPath();
63 }
64
65 return workingDir;
66}
67
Piotr Podsiadły654787e2016-09-13 09:53:48 +020068void TraceDialog::setArguments(const QStringList &args)
69{
70 QString argsStr = args.join(";");
71 argumentsEdit->setText(argsStr);
72}
73
Zack Rusin3438a522011-04-10 22:56:31 -040074QStringList TraceDialog::arguments() const
75{
76 QStringList args =
Zack Rusinca164112011-04-11 02:23:09 -040077 argumentsEdit->text().split(';', QString::SkipEmptyParts);
Zack Rusin3438a522011-04-10 22:56:31 -040078 return args;
79}
80
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020081void TraceDialog::browseApplication()
Zack Rusin3438a522011-04-10 22:56:31 -040082{
83 QString fileName =
84 QFileDialog::getOpenFileName(
85 this,
86 tr("Find the application"),
87 QDir::currentPath());
88
Alexandr Akulichbb958032012-12-07 17:22:49 +060089 if (!fileName.isEmpty() && isFileOk(fileName)) {
Zack Rusin3438a522011-04-10 22:56:31 -040090 applicationEdit->setText(fileName);
91 }
92}
93
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +020094void TraceDialog::browseWorkingDir()
95{
96 QString path =
97 QFileDialog::getExistingDirectory(
98 this,
99 tr("Choose working directory"),
100 workingDirPath());
101
102 if(!path.isEmpty() && isDirOk(path)) {
103 workingDirEdit->setText(path);
104 }
105}
106
Zack Rusin3438a522011-04-10 22:56:31 -0400107void TraceDialog::accept()
108{
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +0200109 if (isFileOk(applicationEdit->text())
110 && isDirOk(workingDirPath())) {
Zack Rusin3438a522011-04-10 22:56:31 -0400111 QDialog::accept();
112 }
113}
114
115bool TraceDialog::isFileOk(const QString &fileName)
116{
117 QFileInfo fi(fileName);
118
119 if (!fi.exists()) {
120 QMessageBox::warning(this, tr("File Missing"),
121 tr("File '%1' doesn't exist.")
122 .arg(fi.fileName()));
123 return false;
124 }
125 if (!fi.isExecutable()) {
126 QMessageBox::warning(this, tr("Application Not Runnable"),
127 tr("File '%1' can't be executed.")
128 .arg(fi.fileName()));
129 return false;
130 }
131
132 return true;
133}
134
Piotr Podsiadłye8ca1802016-09-13 09:04:01 +0200135bool TraceDialog::isDirOk(const QString &path)
136{
137 QFileInfo fi(path);
138
139 if(!fi.exists()) {
140 QMessageBox::warning(this, tr("Directory Does Not Exist"),
141 tr("Directory '%1' doesn't exist.").
142 arg(fi.fileName()));
143 return false;
144 }
145
146 if(!fi.isDir()) {
147 QMessageBox::warning(this, tr("Directory Does Not Exist"),
148 tr("Path '%1' is not a directory").
149 arg(fi.fileName()));
150 return false;
151 }
152
153 return true;
154}
155
Zack Rusin3438a522011-04-10 22:56:31 -0400156#include "tracedialog.moc"