Skip to content

Commit 24193bc

Browse files
committed
add custom dialog for diffing
1 parent 5937dee commit 24193bc

6 files changed

+132
-14
lines changed

src/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ set(hotspot_SRCS
4848
perfoutputwidget.cpp
4949
perfoutputwidgettext.cpp
5050
perfoutputwidgetkonsole.cpp
51+
diffdialog.cpp
5152

5253
# ui files:
5354
mainwindow.ui
@@ -65,6 +66,7 @@ set(hotspot_SRCS
6566
settingsdialog.ui
6667
flamegraphsettings.ui
6768
debuginfoddialog.ui
69+
diffdialog.ui
6870

6971
# resources:
7072
resources.qrc

src/diffdialog.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "diffdialog.h"
2+
#include "ui_diffdialog.h"
3+
4+
DiffDialog::DiffDialog(QWidget* parent)
5+
: QDialog(parent)
6+
, ui(new Ui::DiffDialog)
7+
{
8+
ui->setupUi(this);
9+
const auto filterString = QLatin1String("perf*.data\nperf.data*");
10+
ui->file_a->setFilter(filterString);
11+
ui->file_b->setFilter(filterString);
12+
13+
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accepted);
14+
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::close);
15+
}
16+
17+
DiffDialog::~DiffDialog() = default;
18+
19+
QString DiffDialog::fileA() const
20+
{
21+
return ui->file_a->url().path();
22+
}
23+
24+
QString DiffDialog::fileB() const
25+
{
26+
return ui->file_b->url().path();
27+
}

src/diffdialog.h

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef DIFFDIALOG_H
2+
#define DIFFDIALOG_H
3+
4+
#include <QDialog>
5+
6+
namespace Ui {
7+
class DiffDialog;
8+
}
9+
10+
class DiffDialog : public QDialog
11+
{
12+
public:
13+
explicit DiffDialog(QWidget* parent = nullptr);
14+
~DiffDialog();
15+
16+
QString fileA() const;
17+
QString fileB() const;
18+
19+
private:
20+
QScopedPointer<Ui::DiffDialog> ui;
21+
};
22+
23+
#endif // DIFFDIALOG_H

src/diffdialog.ui

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>DiffDialog</class>
4+
<widget class="QDialog" name="DiffDialog">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>400</width>
10+
<height>300</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Diff two files</string>
15+
</property>
16+
<property name="sizeGripEnabled">
17+
<bool>false</bool>
18+
</property>
19+
<layout class="QFormLayout" name="formLayout">
20+
<property name="leftMargin">
21+
<number>6</number>
22+
</property>
23+
<property name="topMargin">
24+
<number>6</number>
25+
</property>
26+
<property name="rightMargin">
27+
<number>6</number>
28+
</property>
29+
<property name="bottomMargin">
30+
<number>6</number>
31+
</property>
32+
<item row="0" column="0">
33+
<widget class="QLabel" name="label">
34+
<property name="text">
35+
<string>File A:</string>
36+
</property>
37+
</widget>
38+
</item>
39+
<item row="1" column="0">
40+
<widget class="QLabel" name="label_2">
41+
<property name="text">
42+
<string>File B:</string>
43+
</property>
44+
</widget>
45+
</item>
46+
<item row="0" column="1">
47+
<widget class="KUrlRequester" name="file_a"/>
48+
</item>
49+
<item row="1" column="1">
50+
<widget class="KUrlRequester" name="file_b"/>
51+
</item>
52+
<item row="2" column="1">
53+
<widget class="QDialogButtonBox" name="buttonBox">
54+
<property name="standardButtons">
55+
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Open</set>
56+
</property>
57+
</widget>
58+
</item>
59+
</layout>
60+
</widget>
61+
<customwidgets>
62+
<customwidget>
63+
<class>KUrlRequester</class>
64+
<extends>QWidget</extends>
65+
<header>kurlrequester.h</header>
66+
</customwidget>
67+
</customwidgets>
68+
<resources/>
69+
<connections/>
70+
</ui>

src/mainwindow.cpp

+8-14
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@
2626
*/
2727

2828
#include "mainwindow.h"
29+
#include "diffdialog.h"
2930
#include "recordpage.h"
3031
#include "resultspage.h"
3132
#include "settings.h"
33+
#include "settingsdialog.h"
3234
#include "startpage.h"
3335
#include "ui_mainwindow.h"
34-
#include "settingsdialog.h"
3536
#include "ui_settingsdialog.h"
3637

3738
#include <QApplication>
@@ -115,6 +116,7 @@ MainWindow::MainWindow(QWidget* parent)
115116
, m_recordPage(new RecordPage(this))
116117
, m_resultsPage(new ResultsPage(m_parser, this))
117118
, m_settingsDialog(new SettingsDialog(this))
119+
, m_diffDialog(new DiffDialog(this))
118120
{
119121
ui->setupUi(this);
120122

@@ -148,21 +150,13 @@ MainWindow::MainWindow(QWidget* parent)
148150
connect(m_startPage, &StartPage::recordButtonClicked, this, &MainWindow::onRecordButtonClicked);
149151
connect(m_startPage, &StartPage::stopParseButtonClicked, this,
150152
static_cast<void (MainWindow::*)()>(&MainWindow::clear));
151-
connect(m_startPage, &StartPage::diffButtonClicked, this, [this] {
152-
const auto fileNameA = QFileDialog::getOpenFileName(this, tr("Open File A"), QDir::currentPath(),
153-
tr("Data Files (perf*.data perf.data.*);;All Files (*)"));
154-
if (fileNameA.isEmpty()) {
155-
return;
156-
}
157153

158-
const auto fileNameB = QFileDialog::getOpenFileName(this, tr("Open File B"), QDir::currentPath(),
159-
tr("Data Files (perf*.data perf.data.*);;All Files (*)"));
160-
if (fileNameB.isEmpty()) {
161-
return;
162-
}
163-
164-
openFile(fileNameA, false, fileNameB);
154+
connect(m_startPage, &StartPage::diffButtonClicked, this, [this] { m_diffDialog->open(); });
155+
connect(m_diffDialog, &QDialog::accepted, this, [this] {
156+
m_diffDialog->close();
157+
openFile(m_diffDialog->fileA(), false, m_diffDialog->fileB());
165158
});
159+
166160
connect(m_parser, &PerfParser::progress, m_startPage, &StartPage::onParseFileProgress);
167161
connect(this, &MainWindow::openFileError, m_startPage, &StartPage::onOpenFileError);
168162
connect(m_recordPage, &RecordPage::homeButtonClicked, this, &MainWindow::onHomeButtonClicked);

src/mainwindow.h

+2
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class StartPage;
4646
class ResultsPage;
4747
class RecordPage;
4848
class SettingsDialog;
49+
class DiffDialog;
4950

5051
class MainWindow : public KParts::MainWindow
5152
{
@@ -90,6 +91,7 @@ public slots:
9091
RecordPage* m_recordPage;
9192
ResultsPage* m_resultsPage;
9293
SettingsDialog* m_settingsDialog;
94+
DiffDialog* m_diffDialog;
9395

9496
QString m_lastUsedSettings;
9597
KRecentFilesAction* m_recentFilesAction = nullptr;

0 commit comments

Comments
 (0)