Triage tool usability improvement (#2319)
* gitignore for triage tool * window header * Search filename / in files functionallity for triage tool * small codeclean
This commit is contained in:
parent
3f0ef01154
commit
91a4bcd71e
|
@ -0,0 +1,6 @@
|
||||||
|
moc_*.cpp
|
||||||
|
moc_*.h
|
||||||
|
ui_*.h
|
||||||
|
.qmake.stash
|
||||||
|
Makefile
|
||||||
|
triage
|
|
@ -5,8 +5,10 @@
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QDirIterator>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QMimeDatabase>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
@ -25,6 +27,14 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
if (!workFolder.exists()) {
|
if (!workFolder.exists()) {
|
||||||
workFolder.mkdir(WORK_FOLDER);
|
workFolder.mkdir(WORK_FOLDER);
|
||||||
}
|
}
|
||||||
|
fsmodel.setRootPath(WORK_FOLDER);
|
||||||
|
fsmodel.setReadOnly(true);
|
||||||
|
fsmodel.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
|
||||||
|
ui->directoryTree->setModel(&fsmodel);
|
||||||
|
QHeaderView * header = ui->directoryTree->header();
|
||||||
|
for(int i = 1; i < header->length(); ++i)
|
||||||
|
header->hideSection(i);
|
||||||
|
ui->directoryTree->setRootIndex(fsmodel.index(WORK_FOLDER));
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
@ -220,7 +230,11 @@ void MainWindow::showResult(QListWidgetItem *item)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
showSrcFile(fileName, url, lineNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::showSrcFile(const QString &fileName, const QString &url, const int lineNumber)
|
||||||
|
{
|
||||||
// Open file
|
// Open file
|
||||||
ui->code->setFocus();
|
ui->code->setFocus();
|
||||||
QFile f(fileName);
|
QFile f(fileName);
|
||||||
|
@ -236,5 +250,59 @@ void MainWindow::showResult(QListWidgetItem *item)
|
||||||
ui->edit1->setText(url);
|
ui->edit1->setText(url);
|
||||||
ui->edit2->setText(fileName);
|
ui->edit2->setText(fileName);
|
||||||
f.close();
|
f.close();
|
||||||
|
ui->directoryTree->setCurrentIndex(fsmodel.index(fileName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::fileTreeFilter(QString str) {
|
||||||
|
fsmodel.setNameFilters(QStringList{"*" + str + "*"});
|
||||||
|
fsmodel.setNameFilterDisables(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::findInFilesClicked() {
|
||||||
|
ui->tabWidget->setCurrentIndex(1);
|
||||||
|
ui->inFilesResult->clear();
|
||||||
|
const QString text = ui->lineEdit->text();
|
||||||
|
|
||||||
|
const QStringList filter {
|
||||||
|
"*.cpp","*.cxx","*.cc","*.c++","*.hpp","*.h","*.hxx","*.hh","*.tpp","*.txx","*.C","*.c","*.cl"
|
||||||
|
};
|
||||||
|
|
||||||
|
QMimeDatabase mimeDatabase;
|
||||||
|
QDirIterator it(WORK_FOLDER, filter, QDir::AllEntries | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
|
||||||
|
|
||||||
|
while (it.hasNext()) {
|
||||||
|
const QString fileName = it.next();
|
||||||
|
const QMimeType mimeType = mimeDatabase.mimeTypeForFile(fileName);
|
||||||
|
|
||||||
|
if (mimeType.isValid() && !mimeType.inherits(QStringLiteral("text/plain"))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QFile file(fileName);
|
||||||
|
if (file.open(QIODevice::ReadOnly)) {
|
||||||
|
QString line;
|
||||||
|
int lineN = 0;
|
||||||
|
QTextStream in(&file);
|
||||||
|
while (!in.atEnd()) {
|
||||||
|
++lineN;
|
||||||
|
line = in.readLine();
|
||||||
|
if (line.contains(text, Qt::CaseInsensitive)) {
|
||||||
|
ui->inFilesResult->addItem(fileName + ":" + QString::number(lineN));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::directorytreeDoubleClick() {
|
||||||
|
showSrcFile(fsmodel.filePath(ui->directoryTree->currentIndex()), "", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::searchResultsDoubleClick() {
|
||||||
|
QString filename = ui->inFilesResult->currentItem()->text();
|
||||||
|
const auto idx = filename.lastIndexOf(':');
|
||||||
|
const int line = filename.midRef(idx + 1).toInt();
|
||||||
|
showSrcFile(filename.left(idx), "", line);
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <QListWidgetItem>
|
#include <QListWidgetItem>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
#include <QFileSystemModel>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
@ -16,8 +17,8 @@ class MainWindow : public QMainWindow {
|
||||||
public:
|
public:
|
||||||
explicit MainWindow(QWidget *parent = Q_NULLPTR);
|
explicit MainWindow(QWidget *parent = Q_NULLPTR);
|
||||||
MainWindow(const MainWindow &) = delete;
|
MainWindow(const MainWindow &) = delete;
|
||||||
~MainWindow();
|
|
||||||
MainWindow &operator=(const MainWindow &) = delete;
|
MainWindow &operator=(const MainWindow &) = delete;
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void loadFile();
|
void loadFile();
|
||||||
|
@ -25,6 +26,10 @@ public slots:
|
||||||
void filter(QString filter);
|
void filter(QString filter);
|
||||||
void showResult(QListWidgetItem *item);
|
void showResult(QListWidgetItem *item);
|
||||||
void refreshResults();
|
void refreshResults();
|
||||||
|
void fileTreeFilter(QString str);
|
||||||
|
void findInFilesClicked();
|
||||||
|
void directorytreeDoubleClick();
|
||||||
|
void searchResultsDoubleClick();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
|
@ -33,8 +38,10 @@ private:
|
||||||
bool runProcess(const QString &programName, const QStringList & arguments);
|
bool runProcess(const QString &programName, const QStringList & arguments);
|
||||||
bool wget(const QString &url);
|
bool wget(const QString &url);
|
||||||
bool unpackArchive(const QString &archiveName);
|
bool unpackArchive(const QString &archiveName);
|
||||||
|
void showSrcFile(const QString &fileName, const QString &url, const int lineNumber);
|
||||||
|
|
||||||
QStringList mAllErrors;
|
QStringList mAllErrors;
|
||||||
|
QFileSystemModel fsmodel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>MainWindow</string>
|
<string>daca triage tool</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralWidget">
|
<widget class="QWidget" name="centralWidget">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
@ -122,6 +122,104 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="filesNavigatorLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>filter</string>
|
||||||
|
</property>
|
||||||
|
<property name="clearButtonEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="inFilesButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>In files</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="fsTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Filesystem</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QTreeView" name="directoryTree">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>341</width>
|
||||||
|
<height>381</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="itemsExpandable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="inFilesTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>In Files Result</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QListWidget" name="inFilesResult">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>341</width>
|
||||||
|
<height>381</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenuBar" name="menuBar">
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
@ -130,7 +228,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1057</width>
|
<width>1057</width>
|
||||||
<height>25</height>
|
<height>30</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -234,6 +332,70 @@
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>lineEdit</sender>
|
||||||
|
<signal>textChanged(QString)</signal>
|
||||||
|
<receiver>MainWindow</receiver>
|
||||||
|
<slot>fileTreeFilter(QString)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>940</x>
|
||||||
|
<y>275</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>528</x>
|
||||||
|
<y>268</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>inFilesButton</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>MainWindow</receiver>
|
||||||
|
<slot>findInFilesClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>776</x>
|
||||||
|
<y>68</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>413</x>
|
||||||
|
<y>268</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>directoryTree</sender>
|
||||||
|
<signal>doubleClicked(QModelIndex)</signal>
|
||||||
|
<receiver>MainWindow</receiver>
|
||||||
|
<slot>directorytreeDoubleClick()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>780</x>
|
||||||
|
<y>314</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>454</x>
|
||||||
|
<y>268</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>inFilesResult</sender>
|
||||||
|
<signal>doubleClicked(QModelIndex)</signal>
|
||||||
|
<receiver>MainWindow</receiver>
|
||||||
|
<slot>searchResultsDoubleClick()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>755</x>
|
||||||
|
<y>314</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>454</x>
|
||||||
|
<y>268</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<slots>
|
<slots>
|
||||||
<slot>loadFile()</slot>
|
<slot>loadFile()</slot>
|
||||||
|
@ -241,5 +403,9 @@
|
||||||
<slot>loadFromClipboard()</slot>
|
<slot>loadFromClipboard()</slot>
|
||||||
<slot>filter(QString)</slot>
|
<slot>filter(QString)</slot>
|
||||||
<slot>refreshResults()</slot>
|
<slot>refreshResults()</slot>
|
||||||
|
<slot>fileTreeFilter(QString)</slot>
|
||||||
|
<slot>findInFilesClicked()</slot>
|
||||||
|
<slot>directorytreeDoubleClick()</slot>
|
||||||
|
<slot>searchResultsDoubleClick()</slot>
|
||||||
</slots>
|
</slots>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
Loading…
Reference in New Issue