void FlowViewWindow::updatedFrames(int numFrames) { CANFrame thisFrame; if (numFrames == -1) //all frames deleted. Kill the display { ui->listFrameID->clear(); foundID.clear(); currentPosition = 0; refreshIDList(); updateFrameLabel(); removeAllGraphs(); memset(refBytes, 0, 8); memset(currBytes, 0, 8); updateDataView(); } else if (numFrames == -2) //all new set of frames. Reset { ui->listFrameID->clear(); foundID.clear(); currentPosition = 0; refreshIDList(); if (ui->listFrameID->count() > 0) { changeID(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } updateFrameLabel(); } else //just got some new frames. See if they are relevant. { int refID = frameCache[0].ID; bool needRefresh = false; for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++) { thisFrame = modelFrames->at(i); if (thisFrame.ID == refID) { frameCache.append(thisFrame); if (ui->cbLiveMode->checkState() == Qt::Checked) { currentPosition = frameCache.count() - 1; needRefresh = true; } } } if (needRefresh) { updateDataView(); if (ui->cbSync->checkState() == Qt::Checked) emit sendCenterTimeID(frameCache[currentPosition].ID, frameCache[currentPosition].timestamp / 1000000.0); } } }
void FramePlaybackWindow::btnLoadLive() { SequenceItem item; item.filename = "<CAPTURED DATA>"; item.currentLoopCount = 0; item.maxLoops = 1; item.data = QVector<CANFrame>(*modelFrames); //create a copy of the current frames from the main view qSort(item.data); //be sure it's all in time based order fillIDHash(item); if (ui->tblSequence->currentRow() == -1) { ui->tblSequence->setCurrentCell(0,0); } seqItems.append(item); int row = ui->tblSequence->rowCount(); ui->tblSequence->insertRow(row); ui->tblSequence->setItem(row, 0, new QTableWidgetItem(item.filename)); ui->tblSequence->setItem(row, 1, new QTableWidgetItem(QString::number(item.maxLoops))); if (currentSeqNum == -1) { currentSeqNum = 0; currentSeqItem = &seqItems[0]; playbackObject.setSequenceObject(currentSeqItem); } refreshIDList(); updateFrameLabel(); btnStopClick(); }
void FramePlaybackWindow::btnLoadFile() { QString filename; SequenceItem item; if (FrameFileIO::loadFrameFile(filename, &item.data)) { qSort(item.data); //sort by timestamp to be sure it's in order QStringList fileList = filename.split('/'); item.filename = fileList[fileList.length() - 1]; item.currentLoopCount = 0; item.maxLoops = 1; fillIDHash(item); if (ui->tblSequence->currentRow() == -1) { ui->tblSequence->setCurrentCell(0,0); } seqItems.append(item); int row = ui->tblSequence->rowCount(); ui->tblSequence->insertRow(row); ui->tblSequence->setItem(row, 0, new QTableWidgetItem(item.filename)); ui->tblSequence->setItem(row, 1, new QTableWidgetItem(QString::number(item.maxLoops))); qDebug() << currentSeqNum; if (currentSeqNum == -1) { currentSeqNum = 0; currentSeqItem = &seqItems[0]; playbackObject.setSequenceObject(currentSeqItem); } refreshIDList(); updateFrameLabel(); } }
void FramePlaybackWindow::seqTableCellClicked(int row, int col) { qDebug() << "Row: " << QString::number(row) << " Col: " << QString::number(col); if (currentSeqNum != row) { currentSeqNum = row; currentSeqItem = &seqItems[row]; refreshIDList(); } }
//remember, negative numbers are special -1 = all frames deleted, -2 = totally new set of frames. void FrameInfoWindow::updatedFrames(int numFrames) { if (numFrames == -1) //all frames deleted. Kill the display { ui->listFrameID->clear(); ui->treeDetails->clear(); refreshIDList(); } else if (numFrames == -2) //all new set of frames. Reset { refreshIDList(); if (ui->listFrameID->count() > 0) { updateDetailsWindow(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } } else //just got some new frames. See if they are relevant. { if (numFrames > modelFrames->count()) return; int currID = ui->listFrameID->currentItem()->text().toInt(NULL, 16); bool foundID = false; for (int x = modelFrames->count() - numFrames; x < modelFrames->count(); x++) { if (currID == modelFrames->at(x).ID) { foundID = true; break; } } if (foundID) { //the problem here is that it'll blast us out of the details as soon as this //happens. The only way to do this properly is to actually traverse //the details structure and change the text. We don't do that yet. //so, the line is commented out. If people need to see the updated //data they can click another ID and back and it'll be OK //updateDetailsWindow(ui->listFrameID->currentItem()->text()); } } }
void FrameInfoWindow::showEvent(QShowEvent* event) { QDialog::showEvent(event); readSettings(); refreshIDList(); if (ui->listFrameID->count() > 0) { updateDetailsWindow(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } }
void FlowViewWindow::showEvent(QShowEvent* event) { QDialog::showEvent(event); installEventFilter(this); readSettings(); refreshIDList(); if (ui->listFrameID->count() > 0) { changeID(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } updateFrameLabel(); qDebug() << "FlowView show event was processed"; }
void FramePlaybackWindow::btnStopClick() { isPlaying = false; playbackObject.stopPlayback(); if (seqItems.count() > 0) { currentSeqNum = 0; currentSeqItem = &seqItems[currentSeqNum]; } else { currentSeqNum = -1; currentSeqItem = NULL; } if (ui->tblSequence->rowCount() > 0) { ui->tblSequence->setCurrentCell(0, 0); refreshIDList(); } }
//remember, negative numbers are special -1 = all frames deleted, -2 = totally new set of frames. void FrameInfoWindow::updatedFrames(int numFrames) { if (numFrames == -1) //all frames deleted. Kill the display { //qDebug() << "Delete all frames in Info Window"; ui->listFrameID->clear(); ui->treeDetails->clear(); foundID.clear(); refreshIDList(); } else if (numFrames == -2) //all new set of frames. Reset { //qDebug() << "All new set of frames in Info Window"; ui->listFrameID->clear(); ui->treeDetails->clear(); foundID.clear(); refreshIDList(); if (ui->listFrameID->count() > 0) { updateDetailsWindow(ui->listFrameID->item(0)->text()); ui->listFrameID->setCurrentRow(0); } } else //just got some new frames. See if they are relevant. { //qDebug() << "Got frames in Info Window"; if (numFrames > modelFrames->count()) return; unsigned int currID = 0; if (ui->listFrameID->currentItem()) currID = (unsigned int)ui->listFrameID->currentItem()->text().toInt(NULL, 16); bool thisID = false; for (int x = modelFrames->count() - numFrames; x < modelFrames->count(); x++) { CANFrame thisFrame = modelFrames->at(x); unsigned int id = thisFrame.ID; if (!foundID.contains(id)) { foundID.append(id); ui->listFrameID->addItem(Utility::formatCANID(id, thisFrame.extended)); } if (currID == modelFrames->at(x).ID) { thisID = true; break; } } if (thisID) { //the problem here is that it'll blast us out of the details as soon as this //happens. The only way to do this properly is to actually traverse //the details structure and change the text. We don't do that yet. //so, the line is commented out. If people need to see the updated //data they can click another ID and back and it'll be OK //updateDetailsWindow(ui->listFrameID->currentItem()->text()); } //default is to sort in ascending order ui->listFrameID->sortItems(); ui->lblFrameID->setText(tr("Frame IDs: (") + QString::number(ui->listFrameID->count()) + tr(" unique ids)")); } }