Mercurial > public > ostc_companion
view editlogdialog.cpp @ 4:e30f00f760d3 default tip
Cleanup OSTC label and removed url
The computer type will now show OSTC 4/5 instead of only 4. The url has
been removed because it is no longer maintained. The ui header have been
deleted because they are generated files shich should not be under
version controll. Delete locally if you want to force an update of the
dialog layout.
| author | Ideenmodellierer |
|---|---|
| date | Sun, 30 Nov 2025 18:37:32 +0100 |
| parents | 0b3630a29ad8 |
| children |
line wrap: on
line source
#include "editlogdialog.h" #include "ui_LogEditor.h" #include "MainWindow.h" // Needed to propagare retranslate() #include "Utils/Log.h" #include "HardwareOperations.h" #include <QApplication> #include <QDialogButtonBox> #include <QDir> #include <QLibraryInfo> #include <QPushButton> #include <QTranslator> #include <QTableWidget> #ifdef Q_OS_WIN # define NOMINMAX 1 # include <Windows.h> # undef NOMINMAX #endif #define HEADER2OFFSET 0x400 EditLogDialog::EditLogDialog(QWidget* parent, HardwareOperations *op) : QDialog(parent), _ui(new Ui::editLogWnd), _op(op) { uint32_t index, index2; uint32_t sizeY = 0; _ui->setupUi(this); QTableWidget* headerView = _ui->SectorView; QTableWidget* sampleView = _ui->SampleView; _ui->textBrowser_2->setTabStopDistance( QFontMetricsF(_ui->textBrowser_2->font()).horizontalAdvance(' ') * 4 ); headerView->horizontalHeader()->setMinimumSectionSize(8); headerView->verticalHeader()->setMinimumSectionSize(8); headerView->horizontalHeader()->setDefaultSectionSize(8); headerView->verticalHeader()->setDefaultSectionSize(8); headerView->setColumnWidth(0,8); headerView->setRowHeight(0,8); headerView->horizontalHeader()->hide(); headerView->verticalHeader()->hide(); sampleView->horizontalHeader()->setMinimumSectionSize(8); sampleView->verticalHeader()->setMinimumSectionSize(8); sampleView->horizontalHeader()->setDefaultSectionSize(8); sampleView->verticalHeader()->setDefaultSectionSize(8); sampleView->setColumnWidth(0,8); sampleView->setRowHeight(0,8); sampleView->horizontalHeader()->hide(); sampleView->verticalHeader()->hide(); headerView->setRowCount(16); headerView->setColumnCount(16); sampleView->setRowCount(12); sampleView->setColumnCount(16); HeaderBuffer = new unsigned char[0x8000*8 + 1]; // 64k Headerbuffer + lastDiveindex SampleBuffer = new unsigned char[0xC00000 + 4]; // 12MB Samplebuffer + nextSampleAddr headerView->resize(8*16+2,8*16+2); sampleView->resize(8*16+2,8*12+2); sizeY = (uint32_t)(headerView->geometry().width()) / 16; if(sizeY < 8) { sizeY = 8; } for(index = 0; index <16; index++) { headerView->setColumnWidth(index,sizeY); headerView->setRowHeight(index,sizeY); for(index2 = 0; index2 < 16; index2++) { item[index * 16 + index2] = new QTableWidgetItem(" "); headerView->setItem(index, index2, item[index * 16 + index2]); } } for(index = 0; index <12; index++) { sampleView->setColumnWidth(index,sizeY); sampleView->setRowHeight(index,sizeY); for(index2 = 0; index2 < 16; index2++) { sampleitem[index * 16 + index2] = new QTableWidgetItem(" "); sampleView->setItem(index, index2, sampleitem[index * 16 + index2]); } } headerView->show(); headerView->setShowGrid(true); sampleView->show(); sampleView->setShowGrid(true); } EditLogDialog::~EditLogDialog() { uint32_t index; for(index = 0; index <256; index++) { delete item[index]; } for(index = 0; index <192; index++) { delete sampleitem[index]; } delete _ui; delete HeaderBuffer; delete SampleBuffer; } void EditLogDialog::on_WriteAllHeader_clicked() { _op->writeAllHeader(HeaderBuffer); } void EditLogDialog::on_pushButton_clicked() { Q_ASSERT( _op ); HeaderBuffer[0] = 0; try { LOG_INFO(tr("Request All Headers...")); _op->getAllHeader(HeaderBuffer); } catch(const std::exception& e) { LOG_INFO( QString("<bg><font color='red'>%1</font></color>: %2") .arg(tr("Error")) .arg(e.what()) ); } if(HeaderBuffer[0] != 0) { LOG_INFO(tr("Got something")); updateHeaderStatus(); } } void EditLogDialog::on_HeaderUsage_valueChanged(int value) { } void EditLogDialog::on_ReadAllSamples_clicked() { try { LOG_INFO(tr("Request All Samples...")); _op->getAllSamples(SampleBuffer); } catch(const std::exception& e) { LOG_INFO( QString("<bg><font color='red'>%1</font></color>: %2") .arg(tr("Error")) .arg(e.what()) ); } } void EditLogDialog::on_WriteAllSamples_clicked() { try { LOG_INFO(tr("Request All Samples...")); _op->writeAllSamples(SampleBuffer); } catch(const std::exception& e) { LOG_INFO( QString("<bg><font color='red'>%1</font></color>: %2") .arg(tr("Error")) .arg(e.what()) ); } } void EditLogDialog::on_pushButton_2_clicked() { qint64 length; QFile dumpFile; dumpFile.setFileName("Log_Dump.bin"); if( ! dumpFile.open(QIODevice::WriteOnly) ) { LOG_THROW( "Cannot create dump file " ); } else { length = 0x8000*8 + 1; dumpFile.write((const char*)HeaderBuffer,length); length = 0xC00000 + 4; dumpFile.write((const char*)SampleBuffer,length); dumpFile.close(); } } void EditLogDialog::on_LoadDump_clicked() { qint64 length; QFile dumpFile; dumpFile.setFileName("Log_Dump.bin"); if( ! dumpFile.open(QIODevice::ReadOnly) ) { LOG_THROW( "Cannot read dump file " ); } else { length = 0x8000*8 + 1; dumpFile.read((char*)HeaderBuffer,length); length = 0xC00000 + 4; dumpFile.read((char*)SampleBuffer,length); dumpFile.close(); updateHeaderStatus(); updateSampleStatus(); } } void EditLogDialog::updateHeaderStatus() { QProgressBar* w = _ui->HeaderUsage; QTableWidget* sv = _ui->SectorView; SLogbookHeader* LogInfo; SSmallHeader* smallHeader; unsigned char HeaderInUse = 0; uint32_t index, index2; uint32_t sampleStartAddr, sampleEndAddr, sampleLength; int row; int colum; for(index = 0; index < 16; index++) { for(index2 = 0; index2 < 16; index2++) { if((HeaderBuffer[(0x800 * (index * 16 + index2 )) + HEADER2OFFSET] == 0xFA) && (HeaderBuffer[(0x800 * (index * 16 + index2 )) + HEADER2OFFSET + 1] == 0xFA)) { HeaderInUse++; LogInfo = (SLogbookHeader*)(HeaderBuffer+(0x800 * (index*16+index2))+0x400); sampleEndAddr = (LogInfo->profileLength[2]<<16) + (LogInfo->profileLength[1]<<8) + LogInfo->profileLength[0]; if( sampleEndAddr == 0) { sv->item(index,index2)->setBackground(Qt::black); } else { LogInfo = (SLogbookHeader*)(HeaderBuffer+(0x800 * (index*16+index2))); sampleStartAddr = (LogInfo->pBeginProfileData[2]<<16) + (LogInfo->pBeginProfileData[1]<<8) + LogInfo->pBeginProfileData[0]; smallHeader = (SSmallHeader*) &SampleBuffer[sampleStartAddr-0x100000]; sampleLength = (smallHeader->profileLength[2] << 16)+ (smallHeader->profileLength[1] << 8) + smallHeader->profileLength[0]; if(sampleLength == sampleEndAddr) // - sampleStartAddr)) { sv->item(index,index2)->setBackground(Qt::green); } else { sv->item(index,index2)->setBackground(Qt::red); } } } else { sv->item(index,index2)->setBackground(Qt::white); } } } row =(HeaderBuffer[(0x8000 * 8)])/16; colum =(HeaderBuffer[(0x8000 * 8)] % 16); sv->item(row,colum)->setBackground(Qt::blue); w->setMaximum(256); w->setValue(HeaderInUse); } void EditLogDialog::on_SectorView_cellClicked(int row, int column) { } void EditLogDialog::updateSampleStatus() { uint8_t row,colum; uint32_t index; QTableWidget* sv = _ui->SampleView; QProgressBar* w = _ui->SampleUsage; uint8_t SamplesInUse = 0; for(index = 0; index < 192; index++) { row = index / 16; colum =index % 16; if(SampleBuffer[index * 0x10000] != 0xFF) /* used */ { SamplesInUse++; if(SampleBuffer[index * 0x10000 + 0xFFFF] == 0xFF) /* open */ { sv->item(row,colum)->setBackground(Qt::blue); } else { sv->item(row,colum)->setBackground(Qt::green); /* closed */ } } else { sv->item(row,colum)->setBackground(Qt::white); /* empty */ } } w->setMaximum(192); w->setValue(SamplesInUse); } void EditLogDialog::on_SectorView_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { SLogbookHeader* LogInfo; SLogbookHeader* LogInfo2nd; QTextEdit* tf = _ui->textBrowser_2; QString InfoText; QTableWidget* sv = _ui->SampleView; uint32_t sampleAddrStart = 0; uint32_t sampleAddrEnd = 0; uint8_t rowidx, columidx; tf->setReadOnly(true); LogInfo = (SLogbookHeader*)(HeaderBuffer+(0x800 * (currentRow*16+currentColumn))); LogInfo2nd = (SLogbookHeader*)(HeaderBuffer+(0x800 * (currentRow*16+currentColumn)) +0x400); updateSampleStatus(); if(LogInfo->diveHeaderStart == 0xFAFA) { sampleAddrStart = (LogInfo->pBeginProfileData[2]<<16) + (LogInfo->pBeginProfileData[1]<<8) + LogInfo->pBeginProfileData[0]; sampleAddrEnd = (LogInfo2nd->pEndProfileData[2]<<16) + (LogInfo2nd->pEndProfileData[1]<<8) + LogInfo2nd->pEndProfileData[0]; // InfoText.sprintf("Header: %d \nNummer: %d\nSamplestart 0x%x\nSampleend 0x%x", currentRow*16+currentColumn, LogInfo->diveNumber,sampleAddrStart,sampleAddrEnd); InfoText = QString::asprintf( "Header: %d \nNummer: %d\nSamplestart 0x%x\nSampleend 0x%x", currentRow*16 + currentColumn, LogInfo->diveNumber, sampleAddrStart, sampleAddrEnd ); sampleAddrStart = (LogInfo->pBeginProfileData[2]<<16) + (LogInfo->pBeginProfileData[1]<<8) + LogInfo->pBeginProfileData[0]; if(sampleAddrStart != 0) { sampleAddrStart -= 0x100000; /* substract memory offset */ sampleAddrStart /= 0x10000; /* calc sector */ sv->item(sampleAddrStart / 16, sampleAddrStart % 16)->setBackground(Qt::magenta); } else { sv->item(0, 0)->setBackground(Qt::black); } } else { InfoText = QString::asprintf("Empty"); } tf->setPlainText((InfoText)); } void EditLogDialog::on_SampleView_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { uint16_t sampleSector; uint8_t headerRow, headerColumn; SLogbookHeader* LogInfo; SLogbookHeader* LogInfo2nd; uint32_t sectorStart, sectorEnd; uint32_t sampleAddrStart, sampleAddrEnd; QTableWidget* headerView = _ui->SectorView; sampleSector = currentRow * 16 + currentColumn; sectorStart = sampleSector * 0x10000 + 0x100000; sectorEnd = sectorStart +0xFFFF; if(SampleBuffer[sectorStart - 0x100000] != 0xFF) // is buffer used? { updateHeaderStatus(); for(headerRow = 0; headerRow < 16; headerRow++) { for(headerColumn = 0; headerColumn < 16; headerColumn++) { LogInfo = (SLogbookHeader*)(HeaderBuffer+(0x800 * (headerRow*16+headerColumn))); LogInfo2nd = (SLogbookHeader*)(HeaderBuffer+(0x800 * (headerRow*16+headerColumn)) +0x400); sampleAddrStart = (LogInfo->pBeginProfileData[2]<<16) + (LogInfo->pBeginProfileData[1]<<8) + LogInfo->pBeginProfileData[0]; sampleAddrEnd = (LogInfo2nd->pEndProfileData[2]<<16) + (LogInfo2nd->pEndProfileData[1]<<8) + LogInfo2nd->pEndProfileData[0]; if(((sampleAddrStart >= sectorStart)&&(sampleAddrStart < sectorEnd) || (sampleAddrEnd >= sectorStart)&&(sampleAddrEnd < sectorEnd))) { headerView->item(headerRow, headerColumn)->setBackground(Qt::magenta); } } } } }
