#include "dbcloadsavewindow.h" #include "ui_dbcloadsavewindow.h" DBCLoadSaveWindow::DBCLoadSaveWindow(DBCHandler *handler, const QVector *frames, QWidget *parent) : QDialog(parent), ui(new Ui::DBCLoadSaveWindow) { dbcHandler = handler; referenceFrames = frames; ui->setupUi(this); QStringList header; header << "Filename" << "Associated Bus"; ui->tableFiles->setColumnCount(2); ui->tableFiles->setHorizontalHeaderLabels(header); ui->tableFiles->setColumnWidth(0, 355); ui->tableFiles->setColumnWidth(1, 125); connect(ui->btnEdit, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::editFile); connect(ui->btnLoad, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::loadFile); connect(ui->btnMoveDown, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::moveDown); connect(ui->btnMoveUp, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::moveUp); connect(ui->btnRemove, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::removeFile); connect(ui->btnSave, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::saveFile); editorWindow = new DBCMainEditor(handler, frames); } DBCLoadSaveWindow::~DBCLoadSaveWindow() { delete ui; } void DBCLoadSaveWindow::loadFile() { DBCFile *file = dbcHandler->loadDBCFile(-1); int idx = ui->tableFiles->rowCount(); ui->tableFiles->insertRow(ui->tableFiles->rowCount()); ui->tableFiles->setItem(idx, 0, new QTableWidgetItem(file->getFullFilename())); ui->tableFiles->setItem(idx, 1, new QTableWidgetItem("-1")); } void DBCLoadSaveWindow::saveFile() { int idx = ui->tableFiles->currentRow(); if (idx < 0) return; dbcHandler->saveDBCFile(idx); } void DBCLoadSaveWindow::removeFile() { int idx = ui->tableFiles->currentRow(); if (idx < 0) return; dbcHandler->removeDBCFile(idx); ui->tableFiles->removeRow(idx); } void DBCLoadSaveWindow::moveUp() { int idx = ui->tableFiles->currentRow(); if (idx < 1) return; dbcHandler->swapFiles(idx - 1, idx); swapTableRows(true); } void DBCLoadSaveWindow::moveDown() { int idx = ui->tableFiles->currentRow(); if (idx < 0) return; if (idx > (dbcHandler->getFileCount() - 2)) return; dbcHandler->swapFiles(idx, idx + 1); swapTableRows(false); } void DBCLoadSaveWindow::editFile() { int idx = ui->tableFiles->currentRow(); if (idx < 0) return; editorWindow->setFileIdx(idx); editorWindow->show(); } void DBCLoadSaveWindow::swapTableRows(bool up) { int idx = ui->tableFiles->currentRow(); const int destIdx = (up ? idx-1 : idx+1); Q_ASSERT(destIdx >= 0 && destIdx < ui->tableFiles->rowCount()); // take whole rows QList sourceItems = takeRow(idx); QList destItems = takeRow(destIdx); // set back in reverse order setRow(idx, destItems); setRow(destIdx, sourceItems); } QList DBCLoadSaveWindow::takeRow(int row) { QList rowItems; for (int col = 0; col < ui->tableFiles->columnCount(); ++col) { rowItems << ui->tableFiles->takeItem(row, col); } return rowItems; } void DBCLoadSaveWindow::setRow(int row, const QList& rowItems) { for (int col = 0; col < ui->tableFiles->columnCount(); ++col) { ui->tableFiles->setItem(row, col, rowItems.at(col)); } }