Added the ability to save all frame details within the details screen
to file.
This commit is contained in:
+58
-2
@@ -13,8 +13,10 @@ FrameInfoWindow::FrameInfoWindow(const QVector<CANFrame> *frames, QWidget *paren
|
|||||||
|
|
||||||
modelFrames = frames;
|
modelFrames = frames;
|
||||||
|
|
||||||
connect(ui->listFrameID, SIGNAL(currentTextChanged(QString)), this, SLOT(updateDetailsWindow(QString)));
|
connect(ui->listFrameID, &QListWidget::currentTextChanged, this, &FrameInfoWindow::updateDetailsWindow);
|
||||||
connect(MainWindow::getReference(), SIGNAL(framesUpdated(int)), this, SLOT(updatedFrames(int)));
|
connect(MainWindow::getReference(), &MainWindow::framesUpdated, this, &FrameInfoWindow::updatedFrames);
|
||||||
|
connect(ui->btnSave, &QAbstractButton::clicked, this, &FrameInfoWindow::saveDetails);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameInfoWindow::showEvent(QShowEvent* event)
|
void FrameInfoWindow::showEvent(QShowEvent* event)
|
||||||
@@ -230,7 +232,9 @@ void FrameInfoWindow::updateDetailsWindow(QString newID)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (frameCache.count() > 1)
|
||||||
avgInterval = avgInterval / (frameCache.count() - 1);
|
avgInterval = avgInterval / (frameCache.count() - 1);
|
||||||
|
else avgInterval = 0;
|
||||||
|
|
||||||
tempItem = new QTreeWidgetItem();
|
tempItem = new QTreeWidgetItem();
|
||||||
|
|
||||||
@@ -317,3 +321,55 @@ void FrameInfoWindow::refreshIDList()
|
|||||||
ui->listFrameID->sortItems();
|
ui->listFrameID->sortItems();
|
||||||
ui->lblFrameID->setText(tr("Frame IDs: (") + QString::number(ui->listFrameID->count()) + tr(" unique ids)"));
|
ui->lblFrameID->setText(tr("Frame IDs: (") + QString::number(ui->listFrameID->count()) + tr(" unique ids)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FrameInfoWindow::saveDetails()
|
||||||
|
{
|
||||||
|
QString filename;
|
||||||
|
QFileDialog dialog(this);
|
||||||
|
|
||||||
|
QStringList filters;
|
||||||
|
filters.append(QString(tr("Text File (*.txt)")));
|
||||||
|
|
||||||
|
dialog.setFileMode(QFileDialog::AnyFile);
|
||||||
|
dialog.setNameFilters(filters);
|
||||||
|
dialog.setViewMode(QFileDialog::Detail);
|
||||||
|
dialog.setAcceptMode(QFileDialog::AcceptSave);
|
||||||
|
|
||||||
|
if (dialog.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
filename = dialog.selectedFiles()[0];
|
||||||
|
if (!filename.contains('.')) filename += ".txt";
|
||||||
|
if (dialog.selectedNameFilter() == filters[0])
|
||||||
|
{
|
||||||
|
QFile *outFile = new QFile(filename);
|
||||||
|
|
||||||
|
if (!outFile->open(QIODevice::WriteOnly | QIODevice::Text))
|
||||||
|
{
|
||||||
|
delete outFile;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//go through all IDs, recalculate the data, and then save it to file
|
||||||
|
for (int i = 0; i < ui->listFrameID->count(); i++)
|
||||||
|
{
|
||||||
|
updateDetailsWindow(ui->listFrameID->item(i)->text());
|
||||||
|
dumpNode(ui->treeDetails->invisibleRootItem(), outFile, 0);
|
||||||
|
outFile->write("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
outFile->close();
|
||||||
|
delete outFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrameInfoWindow::dumpNode(QTreeWidgetItem* item, QFile *file, int indent)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < indent; i++) file->write("\t");
|
||||||
|
file->write(item->text(0).toUtf8());
|
||||||
|
file->write("\n");
|
||||||
|
for( int i = 0; i < item->childCount(); ++i )
|
||||||
|
dumpNode( item->child(i), file, indent + 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
#define FRAMEINFOWINDOW_H
|
#define FRAMEINFOWINDOW_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QFile>
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
|
#include <QTreeWidget>
|
||||||
#include "can_structs.h"
|
#include "can_structs.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
@@ -21,6 +23,7 @@ public:
|
|||||||
private slots:
|
private slots:
|
||||||
void updateDetailsWindow(QString);
|
void updateDetailsWindow(QString);
|
||||||
void updatedFrames(int);
|
void updatedFrames(int);
|
||||||
|
void saveDetails();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::FrameInfoWindow *ui;
|
Ui::FrameInfoWindow *ui;
|
||||||
@@ -33,6 +36,7 @@ private:
|
|||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
|
void dumpNode(QTreeWidgetItem* item, QFile *file, int indent);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FRAMEINFOWINDOW_H
|
#endif // FRAMEINFOWINDOW_H
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Detailed Frame Information</string>
|
<string>Detailed Frame Information</string>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
@@ -62,6 +64,15 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btnSave">
|
||||||
|
<property name="text">
|
||||||
|
<string>Save details to file</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|||||||
Reference in New Issue
Block a user