From 476fb73f6b8f6ff38d53c8ec14830a49f6e0c366 Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Wed, 21 Aug 2024 15:32:35 -0400 Subject: [PATCH 1/8] gui: Resume emulation after populating var list, refresh list when debugging --- gui/qt/basicdebugger.cpp | 8 +- gui/qt/debugger.cpp | 12 +- gui/qt/mainwindow.cpp | 259 +++++++++++++++++++++----------------- gui/qt/mainwindow.h | 2 + gui/qt/mainwindow.ui | 16 ++- gui/qt/sendinghandler.cpp | 7 +- gui/qt/sendinghandler.h | 1 + 7 files changed, 174 insertions(+), 131 deletions(-) diff --git a/gui/qt/basicdebugger.cpp b/gui/qt/basicdebugger.cpp index f09b6299e..5f506e4ef 100644 --- a/gui/qt/basicdebugger.cpp +++ b/gui/qt/basicdebugger.cpp @@ -56,8 +56,6 @@ void MainWindow::debugBasic(bool enable) { // disable other debugger / var list ui->buttonSend->setEnabled(!enable); - ui->buttonReceiveFiles->setEnabled(!enable); - ui->buttonReceiveFile->setEnabled(!enable); ui->buttonResendFiles->setEnabled(!enable); ui->buttonRun->setEnabled(!enable); } @@ -79,7 +77,7 @@ void MainWindow::debugBasicDisable() { void MainWindow::debugBasicToggle() { bool state = guiDebugBasic; - if (guiDebug || guiReceive || guiSend) { + if (guiDebug || guiSend) { return; } @@ -388,6 +386,10 @@ MainWindow::debug_basic_status_t MainWindow::debugBasicUpdate(bool force) { return DBG_BASIC_NO_EXECUTING_PRGM; } + if (guiReceive) { + varShow(); + } + const int begPC = static_cast(mem_peek_long(DBG_BASIC_BEGPC)); const int curPC = static_cast(mem_peek_long(DBG_BASIC_CURPC)); const int endPC = static_cast(mem_peek_long(DBG_BASIC_ENDPC)); diff --git a/gui/qt/debugger.cpp b/gui/qt/debugger.cpp index 1c4042de5..b83be523f 100644 --- a/gui/qt/debugger.cpp +++ b/gui/qt/debugger.cpp @@ -638,11 +638,7 @@ void MainWindow::debugGuiState(bool state) { ui->fpStack->setEnabled(state && m_normalOs); ui->buttonSend->setEnabled(!state); - ui->buttonRefreshList->setEnabled(!state); - ui->emuVarView->setEnabled(!state); ui->buttonResendFiles->setEnabled(!state); - ui->buttonReceiveFiles->setEnabled(!state && guiReceive); - ui->buttonReceiveFile->setEnabled(!state && guiReceive); QList docks = findChildren(); foreach (QDockWidget* dock, docks) { @@ -676,10 +672,6 @@ void MainWindow::debugToggle() { return; } - if (guiReceive) { - varToggle(); - } - if (state) { debugSync(); debugDisable(); @@ -870,6 +862,10 @@ void MainWindow::debugPopulate() { disasmUpdateAddr(m_prevDisasmAddr = cpu.registers.PC, true); memUpdate(); + + if (guiReceive) { + varShow(); + } } // ------------------------------------------------ diff --git a/gui/qt/mainwindow.cpp b/gui/qt/mainwindow.cpp index d22195ac3..ba2732fac 100644 --- a/gui/qt/mainwindow.cpp +++ b/gui/qt/mainwindow.cpp @@ -259,7 +259,8 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U // linking connect(ui->buttonSend, &QPushButton::clicked, this, &MainWindow::varSelect); connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::varSelect); - connect(ui->buttonRefreshList, &QPushButton::clicked, this, &MainWindow::varToggle); + connect(ui->buttonEnableVarList, &QPushButton::clicked, this, &MainWindow::varToggle); + connect(ui->buttonRefreshVarList, &QPushButton::clicked, this, &MainWindow::varShow); connect(ui->buttonReceiveFile, &QPushButton::clicked, this, &MainWindow::varSaveSelected); connect(ui->buttonReceiveFiles, &QPushButton::clicked, this, &MainWindow::varSaveSelectedFiles); connect(ui->buttonResendFiles, &QPushButton::clicked, this, &MainWindow::varResend); @@ -415,6 +416,7 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U connect(sendingHandler, &SendingHandler::cancelTransfer, &emu, &EmuThread::cancelTransfer, Qt::QueuedConnection); connect(&emu, &EmuThread::linkProgress, sendingHandler, &SendingHandler::linkProgress, Qt::QueuedConnection); connect(sendingHandler, &SendingHandler::loadEquateFile, this, &MainWindow::equatesAddFile); + connect(sendingHandler, &SendingHandler::sendFinished, this, [this] { if (guiReceive) { varShow(); } }); // memory editors connect(ui->buttonFlashSearch, &QPushButton::clicked, [this]{ memSearchEdit(ui->flashEdit); }); @@ -904,6 +906,8 @@ void MainWindow::translateExtras(int init) { actionToggleConsole->setText(TXT_TOGGLE_CONSOLE); #endif } + + varShow(); } void MainWindow::darkModeSwitch(bool darkMode) { @@ -1703,7 +1707,7 @@ void MainWindow::lcdCopy() { void MainWindow::recordAnimated() { static QString path; - if (guiDebug || guiReceive || guiSend) { + if (guiDebug || guiDebugBasic || guiSend) { return; } @@ -1875,15 +1879,20 @@ void MainWindow::pauseEmu(Qt::ApplicationState state) { // Linking things // ------------------------------------------------ -void MainWindow::varToggle() { - if (guiReceive) { - varShow(); - emu.unblock(); +void MainWindow::varReceive(std::function recvAction) { + if (guiDebug || guiDebugBasic) { + recvAction(false); } else { + m_recvAction = std::move(recvAction); emu.receive(); } } +void MainWindow::varToggle() { + guiReceive = !guiReceive; + varShow(); +} + void MainWindow::varSelect() { if (guiDebug) { return; @@ -1943,111 +1952,118 @@ void MainWindow::emuBlocked(int req) { case EmuThread::RequestPause: break; case EmuThread::RequestReceive: - varShow(); + if (m_recvAction) { + m_recvAction(true); + m_recvAction = nullptr; + } else { + emu.unblock(); + } break; } } void MainWindow::varShow() { - calc_var_t var; - - if (guiSend || guiDebug || guiDebugBasic) { - return; - } - - guiReceive = !guiReceive; - - ui->emuVarView->setRowCount(0); - ui->emuVarView->setSortingEnabled(false); - if (!guiReceive) { - ui->buttonRefreshList->setText(tr("View Calculator Variables")); + m_recvAction = nullptr; + ui->emuVarView->setRowCount(0); + ui->emuVarView->setSortingEnabled(false); + ui->buttonEnableVarList->setText(tr("View Calculator Variables")); + ui->buttonRefreshVarList->setEnabled(false); ui->buttonReceiveFiles->setEnabled(false); ui->buttonReceiveFile->setEnabled(false); - ui->buttonRun->setEnabled(true); - ui->buttonSend->setEnabled(true); ui->emuVarView->setEnabled(false); - ui->buttonResendFiles->setEnabled(true); } else { - ui->buttonRefreshList->setText(tr("Resume emulation")); - ui->buttonSend->setEnabled(false); - ui->buttonReceiveFiles->setEnabled(true); - ui->buttonReceiveFile->setEnabled(true); - ui->buttonResendFiles->setEnabled(false); - ui->buttonRun->setEnabled(false); - ui->emuVarView->setEnabled(true); - - vat_search_init(&var); - while (vat_search_next(&var)) { - if (var.named || var.size > 2) { - int row; - - row = ui->emuVarView->rowCount(); - ui->emuVarView->setRowCount(row + 1); - - bool var_preview_needs_gray = false; - QString var_value; - if (var.size <= 2) { - var_value = tr("Empty"); - var_preview_needs_gray = true; - } else if (calc_var_is_asmprog(&var)) { - var_value = tr("Can't preview this"); - var_preview_needs_gray = true; - } else if (calc_var_is_internal(&var) && var.name[0] != '#') { // # is previewable - var_value = tr("Can't preview this OS variable"); - var_preview_needs_gray = true; - } else { - try { - var_value = QString::fromStdString(calc_var_content_string(var)).trimmed().replace("\n", " \\ "); - if (var_value.size() > 50) { - var_value.truncate(50); - var_value += QStringLiteral(" [...]"); - } - } catch(...) { + if (m_recvAction) { + return; + } + + varReceive([this](bool isBlocked) { + calc_var_t var; + + ui->emuVarView->setRowCount(0); + ui->emuVarView->setSortingEnabled(false); + ui->buttonEnableVarList->setText(tr("Hide Calculator Variables")); + ui->buttonRefreshVarList->setEnabled(true); + ui->buttonReceiveFiles->setEnabled(true); + ui->buttonReceiveFile->setEnabled(true); + ui->emuVarView->setEnabled(true); + + vat_search_init(&var); + while (vat_search_next(&var)) { + if (var.named || var.size > 2) { + int row; + + row = ui->emuVarView->rowCount(); + ui->emuVarView->setRowCount(row + 1); + + bool var_preview_needs_gray = false; + QString var_value; + if (var.size <= 2) { + var_value = tr("Empty"); + var_preview_needs_gray = true; + } else if (calc_var_is_asmprog(&var)) { var_value = tr("Can't preview this"); var_preview_needs_gray = true; + } else if (calc_var_is_internal(&var) && var.name[0] != '#') { // # is previewable + var_value = tr("Can't preview this OS variable"); + var_preview_needs_gray = true; + } else { + try { + var_value = QString::fromStdString(calc_var_content_string(var)).trimmed().replace("\n", " \\ "); + if (var_value.size() > 50) { + var_value.truncate(50); + var_value += QStringLiteral(" [...]"); + } + } catch (...) { + var_value = tr("Can't preview this"); + var_preview_needs_gray = true; + } } - } - // Do not translate - things rely on those names. - QString var_type_str = calc_var_type_names[var.type]; - if (calc_var_is_asmprog(&var)) { - var_type_str += QStringLiteral(" (ASM)"); - } + // Do not translate - things rely on those names. + QString var_type_str = calc_var_type_names[var.type]; + if (calc_var_is_asmprog(&var)) { + var_type_str += QStringLiteral(" (ASM)"); + } - QTableWidgetItem *var_name = new QTableWidgetItem(calc_var_name_to_utf8(var.name, var.namelen, var.named)); - QTableWidgetItem *var_location = new QTableWidgetItem(var.archived ? tr("Archive") : QStringLiteral("RAM")); - QTableWidgetItem *var_type = new QTableWidgetItem(var_type_str); - QTableWidgetItem *var_preview = new QTableWidgetItem(var_value); - QTableWidgetItem *var_size = new QTableWidgetItem(); + QTableWidgetItem *var_name = new QTableWidgetItem(calc_var_name_to_utf8(var.name, var.namelen, var.named)); + QTableWidgetItem *var_location = new QTableWidgetItem(var.archived ? tr("Archive") : QStringLiteral("RAM")); + QTableWidgetItem *var_type = new QTableWidgetItem(var_type_str); + QTableWidgetItem *var_preview = new QTableWidgetItem(var_value); + QTableWidgetItem *var_size = new QTableWidgetItem(); - // Attach var index (hidden) to the name. Needed elsewhere - var_name->setData(Qt::UserRole, QVariant::fromValue(var)); - var_size->setData(Qt::DisplayRole, var.size); + // Attach var index (hidden) to the name. Needed elsewhere + var_name->setData(Qt::UserRole, QVariant::fromValue(var)); + var_size->setData(Qt::DisplayRole, var.size); - var_name->setCheckState(Qt::Unchecked); + var_name->setCheckState(Qt::Unchecked); - if (var_preview_needs_gray) { - var_preview->setFont(varPreviewItalicFont); - var_preview->setForeground(Qt::gray); - } else { - var_preview->setFont(varPreviewCEFont); - } + if (var_preview_needs_gray) { + var_preview->setFont(varPreviewItalicFont); + var_preview->setForeground(Qt::gray); + } else { + var_preview->setFont(varPreviewCEFont); + } - ui->emuVarView->setItem(row, VAR_NAME_COL, var_name); - ui->emuVarView->setItem(row, VAR_LOCATION_COL, var_location); - ui->emuVarView->setItem(row, VAR_TYPE_COL, var_type); - ui->emuVarView->setItem(row, VAR_SIZE_COL, var_size); - ui->emuVarView->setItem(row, VAR_PREVIEW_COL, var_preview); + ui->emuVarView->setItem(row, VAR_NAME_COL, var_name); + ui->emuVarView->setItem(row, VAR_LOCATION_COL, var_location); + ui->emuVarView->setItem(row, VAR_TYPE_COL, var_type); + ui->emuVarView->setItem(row, VAR_SIZE_COL, var_size); + ui->emuVarView->setItem(row, VAR_PREVIEW_COL, var_preview); + } } - } - ui->emuVarView->resizeColumnToContents(VAR_NAME_COL); - ui->emuVarView->resizeColumnToContents(VAR_LOCATION_COL); - ui->emuVarView->resizeColumnToContents(VAR_TYPE_COL); - ui->emuVarView->resizeColumnToContents(VAR_SIZE_COL); - } + if (isBlocked) { + emu.unblock(); + } + + ui->emuVarView->resizeColumnToContents(VAR_NAME_COL); + ui->emuVarView->resizeColumnToContents(VAR_LOCATION_COL); + ui->emuVarView->resizeColumnToContents(VAR_TYPE_COL); + ui->emuVarView->resizeColumnToContents(VAR_SIZE_COL); - ui->emuVarView->setSortingEnabled(true); + ui->emuVarView->setSortingEnabled(true); + }); + } } void MainWindow::varSaveSelected() { @@ -2063,11 +2079,17 @@ void MainWindow::varSaveSelected() { } else { fileNames = varDialog(QFileDialog::AcceptSave, tr("TI Group (*.8cg);;All Files (*.*)"), QStringLiteral("8cg")); if (fileNames.size() == 1) { - if (emu_receive_variable(fileNames.first().toUtf8(), selectedVars.constData(), selectedVars.size()) != LINK_GOOD) { - QMessageBox::critical(this, MSG_ERROR, tr("Transfer error, see console for information:\nFile: ") + fileNames.first()); - } else { - QMessageBox::information(this, MSG_INFORMATION, tr("Transfer completed successfully.")); - } + varReceive([this, fileName = std::move(fileNames.first()), selectedVars = std::move(selectedVars)](bool isBlocked) { + int status = emu_receive_variable(fileName.toUtf8(), selectedVars.constData(), selectedVars.size()); + if (isBlocked) { + emu.unblock(); + } + if (status != LINK_GOOD) { + QMessageBox::critical(this, MSG_ERROR, tr("Transfer error, see console for information:\nFile: ") + fileName); + } else { + QMessageBox::information(this, MSG_INFORMATION, tr("Transfer completed successfully.")); + } + }); } } } @@ -2099,32 +2121,38 @@ void MainWindow::varSaveSelectedFiles() { return; } - QString name; - QString filename; + varReceive([this, dir = dialog.directory().absolutePath()](bool isBlocked) { + QString name; + QString filename; + bool good = true; - for (int currRow = 0; currRow < ui->emuVarView->rowCount(); currRow++) { - if (ui->emuVarView->item(currRow, VAR_NAME_COL)->checkState() == Qt::Checked) { - calc_var_t var = ui->emuVarView->item(currRow, VAR_NAME_COL)->data(Qt::UserRole).value(); - if (calc_var_is_list(&var)) { - // Remove any linked formula before generating filename - var.name[var.namelen - 1] = 0; - } + for (int currRow = 0; currRow < ui->emuVarView->rowCount(); currRow++) { + if (ui->emuVarView->item(currRow, VAR_NAME_COL)->checkState() == Qt::Checked) { + calc_var_t var = ui->emuVarView->item(currRow, VAR_NAME_COL)->data(Qt::UserRole).value(); + if (calc_var_is_list(&var)) { + // Remove any linked formula before generating filename + var.name[var.namelen - 1] = 0; + } - name = QString(calc_var_name_to_utf8(var.name, var.namelen, var.named)); - filename = dialog.directory().absolutePath() + "/" + name + "." + m_varExtensions[var.type1]; + name = QString(calc_var_name_to_utf8(var.name, var.namelen, var.named)); + filename = dir + "/" + name + "." + m_varExtensions[var.type1]; - if (emu_receive_variable(filename.toStdString().c_str(), &var, 1) != LINK_GOOD) { - good = 0; - break; + if (emu_receive_variable(filename.toStdString().c_str(), &var, 1) != LINK_GOOD) { + good = false; + break; + } } } - } + if (isBlocked) { + emu.unblock(); + } - if (good) { - QMessageBox::information(this, MSG_INFORMATION, tr("Transfer completed successfully.")); - } else { - QMessageBox::critical(this, MSG_ERROR, tr("Transfer error, see console for information:\nFile: ") + filename); - } + if (good) { + QMessageBox::information(this, MSG_INFORMATION, tr("Transfer completed successfully.")); + } else { + QMessageBox::critical(this, MSG_ERROR, tr("Transfer error, see console for information:\nFile: ") + filename); + } + }); } void MainWindow::varResend() { @@ -2560,7 +2588,6 @@ void MainWindow::contextVars(const QPoint& posa) { QAction *selectedItem = contextMenu.exec(ui->emuVarView->mapToGlobal(posa)); if (selectedItem == launch) { - varToggle(); varLaunch(&var); } } diff --git a/gui/qt/mainwindow.h b/gui/qt/mainwindow.h index 07ebfa126..9917dc0d8 100644 --- a/gui/qt/mainwindow.h +++ b/gui/qt/mainwindow.h @@ -473,6 +473,7 @@ class MainWindow : public QMainWindow { // linking QStringList varDialog(QFileDialog::AcceptMode mode, const QString &filter, const QString &suffix); + void varReceive(std::function recvAction); void varShow(); void varPressed(QTableWidgetItem *item); void varLaunch(const calc_var_t *prgm); @@ -606,6 +607,7 @@ class MainWindow : public QMainWindow { QDir m_dir; QStringList m_equateFiles; + std::function m_recvAction; bool m_uiEditMode = false; bool m_portable = false; diff --git a/gui/qt/mainwindow.ui b/gui/qt/mainwindow.ui index 49a187844..aec093f7e 100644 --- a/gui/qt/mainwindow.ui +++ b/gui/qt/mainwindow.ui @@ -6811,7 +6811,7 @@ 0 - + 0 @@ -6830,6 +6830,20 @@ + + + + Refresh + + + + + + + :/icons/resources/icons/refresh.png:/icons/resources/icons/refresh.png + + + diff --git a/gui/qt/sendinghandler.cpp b/gui/qt/sendinghandler.cpp index fb5cd5f30..c063f67fe 100644 --- a/gui/qt/sendinghandler.cpp +++ b/gui/qt/sendinghandler.cpp @@ -83,7 +83,7 @@ SendingHandler::SendingHandler(QObject *parent, QPushButton *cancelBtn, QProgres } void SendingHandler::dropOccured(QDropEvent *e, int location) { - if (guiSend || guiReceive || guiDebug || guiDebugBasic) { + if (guiSend || guiDebug || guiDebugBasic) { e->ignore(); return; } @@ -137,7 +137,7 @@ void SendingHandler::removeRow() { } bool SendingHandler::dragOccured(QDragEnterEvent *e) { - if (guiSend || guiReceive || guiDebug || guiDebugBasic) { + if (guiSend || guiDebug || guiDebugBasic) { e->ignore(); return false; } @@ -178,6 +178,7 @@ void SendingHandler::linkProgress(int value, int total) { m_progressBar->setValue(0); } guiSend = false; + emit sendFinished(); } void SendingHandler::addFile(const QString &file, bool select) { @@ -230,7 +231,7 @@ void SendingHandler::addFile(const QString &file, bool select) { void SendingHandler::sendFiles(const QStringList &fileNames, int location) { QStringList list = fileNames; - if (guiSend || guiReceive || guiDebug || guiDebugBasic || !list.size()) { + if (guiSend || guiDebug || guiDebugBasic || !list.size()) { return; } diff --git a/gui/qt/sendinghandler.h b/gui/qt/sendinghandler.h index c1a54e208..96be1c632 100644 --- a/gui/qt/sendinghandler.h +++ b/gui/qt/sendinghandler.h @@ -40,6 +40,7 @@ public slots: void send(const QStringList &names, int location); void loadEquateFile(const QString &path); void cancelTransfer(); + void sendFinished(); private: void checkDirForEquateFiles(QString &dirPath); From 078ed30da2b14b347567034f0b677c280e4d39ae Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Thu, 22 Aug 2024 01:29:34 -0400 Subject: [PATCH 2/8] gui: Change variable list to use custom data model, support retranslation --- core/vat.c | 2 +- core/vat.h | 2 +- gui/qt/CEmu.pro | 2 + gui/qt/CMakeLists.txt | 1 + gui/qt/mainwindow.cpp | 156 +++++++++++----------------------- gui/qt/mainwindow.h | 16 +--- gui/qt/mainwindow.ui | 29 +------ gui/qt/vartablemodel.cpp | 179 +++++++++++++++++++++++++++++++++++++++ gui/qt/vartablemodel.h | 52 ++++++++++++ 9 files changed, 290 insertions(+), 149 deletions(-) create mode 100644 gui/qt/vartablemodel.cpp create mode 100644 gui/qt/vartablemodel.h diff --git a/core/vat.c b/core/vat.c index f2caef2c0..dc63d76d9 100644 --- a/core/vat.c +++ b/core/vat.c @@ -81,7 +81,7 @@ static void hex_byte(char **dest, uint8_t byte) { *(*dest)++ = hex_char(byte >> 0); } -const char *calc_var_name_to_utf8(uint8_t name[8], uint8_t namelen, bool named) { +const char *calc_var_name_to_utf8(const uint8_t name[8], uint8_t namelen, bool named) { static char buffer[26]; char *dest = buffer; uint8_t i = 0; diff --git a/core/vat.h b/core/vat.h index d1d03ca2e..76b5e366a 100644 --- a/core/vat.h +++ b/core/vat.h @@ -54,7 +54,7 @@ typedef enum calc_var_type { } calc_var_type_t; extern const char *calc_var_type_names[0x40]; -const char *calc_var_name_to_utf8(uint8_t name[8], uint8_t namelen, bool named); +const char *calc_var_name_to_utf8(const uint8_t name[8], uint8_t namelen, bool named); typedef struct calc_var { uint32_t vat, address; diff --git a/gui/qt/CEmu.pro b/gui/qt/CEmu.pro index 1290112df..ee030439c 100644 --- a/gui/qt/CEmu.pro +++ b/gui/qt/CEmu.pro @@ -269,6 +269,7 @@ SOURCES += \ tivars_lib_cpp/src/TypeHandlers/STH_ExactRadical.cpp \ tivars_lib_cpp/src/TypeHandlers/STH_ExactPi.cpp \ tivars_lib_cpp/src/TypeHandlers/STH_FP.cpp \ + vartablemodel.cpp \ visualizerwidget.cpp \ debugger/visualizerdisplaywidget.cpp \ memorywidget.cpp \ @@ -368,6 +369,7 @@ HEADERS += \ tivars_lib_cpp/src/TIVarType.h \ tivars_lib_cpp/src/TIVarTypes.h \ tivars_lib_cpp/src/TypeHandlers/TypeHandlers.h \ + vartablemodel.h \ visualizerwidget.h \ debugger/visualizerdisplaywidget.h \ archive/extractor.h \ diff --git a/gui/qt/CMakeLists.txt b/gui/qt/CMakeLists.txt index 0290ce4f0..4554c1f9e 100644 --- a/gui/qt/CMakeLists.txt +++ b/gui/qt/CMakeLists.txt @@ -197,6 +197,7 @@ set(CEmu_Sources tivars_lib_cpp/src/TypeHandlers/TypeHandlers.h tivars_lib_cpp/src/tivarslib_utils.cpp tivars_lib_cpp/src/tivarslib_utils.h utils.cpp utils.h + vartablemodel.cpp vartablemodel.h visualizerwidget.cpp visualizerwidget.h ${CEmu_Resources} ) diff --git a/gui/qt/mainwindow.cpp b/gui/qt/mainwindow.cpp index ba2732fac..813c20361 100644 --- a/gui/qt/mainwindow.cpp +++ b/gui/qt/mainwindow.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -120,9 +121,6 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U ui->console->setMaximumBlockCount(1000); - varPreviewCEFont = QFont(QStringLiteral("TICELarge"), 11); - varPreviewItalicFont.setItalic(true); - setWindowTitle(QStringLiteral("CEmu | ") + opts.idString); connect(keypadBridge, &QtKeypadBridge::keyStateChanged, ui->keypadWidget, &KeypadWidget::changeKeyState); @@ -140,6 +138,12 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U ui->statusBar->addWidget(m_btnCancelTranser); sendingHandler = new SendingHandler(this, m_btnCancelTranser, m_progressBar, ui->varLoadedView); + m_varTableModel = new VarTableModel(ui->emuVarView); + QSortFilterProxyModel *varTableSortModel = new QSortFilterProxyModel(m_varTableModel); + varTableSortModel->setSourceModel(m_varTableModel); + ui->emuVarView->setModel(varTableSortModel); + ui->emuVarView->sortByColumn(VarTableModel::VAR_NAME_COL, Qt::AscendingOrder); + // emulator -> gui (Should be queued) connect(&emu, &EmuThread::consoleStr, this, &MainWindow::consoleStr, Qt::UniqueConnection); connect(&emu, &EmuThread::consoleClear, this, &MainWindow::consoleClear, Qt::QueuedConnection); @@ -396,8 +400,8 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U connect(ui->ramBytes, static_cast(&QSpinBox::valueChanged), ui->ramEdit, &HexWidget::setBytesPerLine); connect(ui->ramAscii, &QToolButton::toggled, [this](bool set){ ui->ramEdit->setAsciiArea(set); }); connect(ui->flashAscii, &QToolButton::toggled, [this](bool set){ ui->flashEdit->setAsciiArea(set); }); - connect(ui->emuVarView, &QTableWidget::itemDoubleClicked, this, &MainWindow::varPressed); - connect(ui->emuVarView, &QTableWidget::customContextMenuRequested, this, &MainWindow::contextVars); + connect(ui->emuVarView, &QTableView::doubleClicked, this, &MainWindow::varPressed); + connect(ui->emuVarView, &QTableView::customContextMenuRequested, this, &MainWindow::contextVars); connect(ui->buttonAddSlot, &QPushButton::clicked, this, &MainWindow::stateAddNew); connect(ui->actionExportCEmuImage, &QAction::triggered, this, &MainWindow::bootImageExport); connect(ui->lcd, &LCDWidget::sendROM, this, &MainWindow::setRom); @@ -821,7 +825,10 @@ void MainWindow::translateExtras(int init) { dock->setWindowTitle(__TXT_AUTOTESTER); } } + + m_varTableModel->retranslate(); } + varUpdate(); TXT_MEM_DOCK = __TXT_MEM_DOCK; TXT_VISUALIZER_DOCK = __TXT_VISUALIZER_DOCK; @@ -906,8 +913,6 @@ void MainWindow::translateExtras(int init) { actionToggleConsole->setText(TXT_TOGGLE_CONSOLE); #endif } - - varShow(); } void MainWindow::darkModeSwitch(bool darkMode) { @@ -1890,6 +1895,7 @@ void MainWindow::varReceive(std::function recvAction) { void MainWindow::varToggle() { guiReceive = !guiReceive; + varUpdate(); varShow(); } @@ -1924,8 +1930,12 @@ QStringList MainWindow::varDialog(QFileDialog::AcceptMode mode, const QString &n return QStringList(); } -void MainWindow::varPressed(QTableWidgetItem *item) { - calc_var_t var = ui->emuVarView->item(item->row(), VAR_NAME_COL)->data(Qt::UserRole).value(); +void MainWindow::varPressed(const QModelIndex &index) { + QModelIndex nameIndex = index.siblingAtColumn(VarTableModel::VAR_NAME_COL); + if (!nameIndex.isValid()) { + return; + } + calc_var_t var = nameIndex.data(Qt::UserRole).value(); if (var.size <= 2 || calc_var_is_asmprog(&var)) { return; } else if (!calc_var_is_internal(&var) || var.name[0] == '#') { @@ -1937,7 +1947,7 @@ void MainWindow::varPressed(QTableWidgetItem *item) { } bool isHexAppVar = var.type == CALC_VAR_TYPE_APP_VAR && !calc_var_is_python_appvar(&var); BasicCodeViewerWindow *codePopup = new BasicCodeViewerWindow(this, !isHexAppVar); - codePopup->setVariableName(ui->emuVarView->item(item->row(), VAR_NAME_COL)->text()); + codePopup->setVariableName(nameIndex.data().toString()); codePopup->setWindowModality(Qt::NonModal); codePopup->setAttribute(Qt::WA_DeleteOnClose); codePopup->setOriginalCode(QString::fromStdString(str), calc_var_is_tokenized(&var)); @@ -1962,106 +1972,34 @@ void MainWindow::emuBlocked(int req) { } } +void MainWindow::varUpdate() { + ui->buttonEnableVarList->setText(guiReceive ? tr("Hide Calculator Variables") : tr("View Calculator Variables")); + ui->buttonRefreshVarList->setEnabled(guiReceive); + ui->buttonReceiveFiles->setEnabled(guiReceive); + ui->buttonReceiveFile->setEnabled(guiReceive); + ui->emuVarView->setEnabled(guiReceive); +} + void MainWindow::varShow() { if (!guiReceive) { m_recvAction = nullptr; - ui->emuVarView->setRowCount(0); - ui->emuVarView->setSortingEnabled(false); - ui->buttonEnableVarList->setText(tr("View Calculator Variables")); - ui->buttonRefreshVarList->setEnabled(false); - ui->buttonReceiveFiles->setEnabled(false); - ui->buttonReceiveFile->setEnabled(false); - ui->emuVarView->setEnabled(false); + + m_varTableModel->clear(); } else { if (m_recvAction) { return; } varReceive([this](bool isBlocked) { - calc_var_t var; - - ui->emuVarView->setRowCount(0); - ui->emuVarView->setSortingEnabled(false); - ui->buttonEnableVarList->setText(tr("Hide Calculator Variables")); - ui->buttonRefreshVarList->setEnabled(true); - ui->buttonReceiveFiles->setEnabled(true); - ui->buttonReceiveFile->setEnabled(true); - ui->emuVarView->setEnabled(true); - - vat_search_init(&var); - while (vat_search_next(&var)) { - if (var.named || var.size > 2) { - int row; - - row = ui->emuVarView->rowCount(); - ui->emuVarView->setRowCount(row + 1); - - bool var_preview_needs_gray = false; - QString var_value; - if (var.size <= 2) { - var_value = tr("Empty"); - var_preview_needs_gray = true; - } else if (calc_var_is_asmprog(&var)) { - var_value = tr("Can't preview this"); - var_preview_needs_gray = true; - } else if (calc_var_is_internal(&var) && var.name[0] != '#') { // # is previewable - var_value = tr("Can't preview this OS variable"); - var_preview_needs_gray = true; - } else { - try { - var_value = QString::fromStdString(calc_var_content_string(var)).trimmed().replace("\n", " \\ "); - if (var_value.size() > 50) { - var_value.truncate(50); - var_value += QStringLiteral(" [...]"); - } - } catch (...) { - var_value = tr("Can't preview this"); - var_preview_needs_gray = true; - } - } - - // Do not translate - things rely on those names. - QString var_type_str = calc_var_type_names[var.type]; - if (calc_var_is_asmprog(&var)) { - var_type_str += QStringLiteral(" (ASM)"); - } - - QTableWidgetItem *var_name = new QTableWidgetItem(calc_var_name_to_utf8(var.name, var.namelen, var.named)); - QTableWidgetItem *var_location = new QTableWidgetItem(var.archived ? tr("Archive") : QStringLiteral("RAM")); - QTableWidgetItem *var_type = new QTableWidgetItem(var_type_str); - QTableWidgetItem *var_preview = new QTableWidgetItem(var_value); - QTableWidgetItem *var_size = new QTableWidgetItem(); - - // Attach var index (hidden) to the name. Needed elsewhere - var_name->setData(Qt::UserRole, QVariant::fromValue(var)); - var_size->setData(Qt::DisplayRole, var.size); - - var_name->setCheckState(Qt::Unchecked); - - if (var_preview_needs_gray) { - var_preview->setFont(varPreviewItalicFont); - var_preview->setForeground(Qt::gray); - } else { - var_preview->setFont(varPreviewCEFont); - } - - ui->emuVarView->setItem(row, VAR_NAME_COL, var_name); - ui->emuVarView->setItem(row, VAR_LOCATION_COL, var_location); - ui->emuVarView->setItem(row, VAR_TYPE_COL, var_type); - ui->emuVarView->setItem(row, VAR_SIZE_COL, var_size); - ui->emuVarView->setItem(row, VAR_PREVIEW_COL, var_preview); - } - } + m_varTableModel->refresh(); if (isBlocked) { emu.unblock(); } - ui->emuVarView->resizeColumnToContents(VAR_NAME_COL); - ui->emuVarView->resizeColumnToContents(VAR_LOCATION_COL); - ui->emuVarView->resizeColumnToContents(VAR_TYPE_COL); - ui->emuVarView->resizeColumnToContents(VAR_SIZE_COL); - - ui->emuVarView->setSortingEnabled(true); + ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_NAME_COL); + ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_LOCATION_COL); + ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_TYPE_COL); + ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_SIZE_COL); }); } } @@ -2069,9 +2007,10 @@ void MainWindow::varShow() { void MainWindow::varSaveSelected() { QVector selectedVars; QStringList fileNames; - for (int currRow = 0; currRow < ui->emuVarView->rowCount(); currRow++) { - if (ui->emuVarView->item(currRow, VAR_NAME_COL)->checkState() == Qt::Checked) { - selectedVars.append(ui->emuVarView->item(currRow, VAR_NAME_COL)->data(Qt::UserRole).value()); + for (int currRow = 0; currRow < ui->emuVarView->model()->rowCount(); currRow++) { + QModelIndex nameIndex = ui->emuVarView->model()->index(currRow, VarTableModel::VAR_NAME_COL); + if (nameIndex.data(Qt::CheckStateRole) == Qt::Checked) { + selectedVars.append(nameIndex.data(Qt::UserRole).value()); } } if (selectedVars.size() < 2) { @@ -2102,8 +2041,8 @@ void MainWindow::varSaveSelectedFiles() { dialog.setDirectory(m_dir); int good = 0; - for (int currRow = 0; currRow < ui->emuVarView->rowCount(); currRow++) { - if (ui->emuVarView->item(currRow, VAR_NAME_COL)->checkState() == Qt::Checked) { + for (int currRow = 0; currRow < ui->emuVarView->model()->rowCount(); currRow++) { + if (ui->emuVarView->model()->index(currRow, VarTableModel::VAR_NAME_COL).data(Qt::CheckStateRole) == Qt::Checked) { good = 1; break; } @@ -2126,9 +2065,10 @@ void MainWindow::varSaveSelectedFiles() { QString filename; bool good = true; - for (int currRow = 0; currRow < ui->emuVarView->rowCount(); currRow++) { - if (ui->emuVarView->item(currRow, VAR_NAME_COL)->checkState() == Qt::Checked) { - calc_var_t var = ui->emuVarView->item(currRow, VAR_NAME_COL)->data(Qt::UserRole).value(); + for (int currRow = 0; currRow < ui->emuVarView->model()->rowCount(); currRow++) { + QModelIndex nameIndex = ui->emuVarView->model()->index(currRow, VarTableModel::VAR_NAME_COL); + if (nameIndex.data(Qt::CheckStateRole) == Qt::Checked) { + calc_var_t var = nameIndex.data(Qt::UserRole).value(); if (calc_var_is_list(&var)) { // Remove any linked formula before generating filename var.name[var.namelen - 1] = 0; @@ -2575,12 +2515,12 @@ void MainWindow::varLaunch(const calc_var_t *prgm) { } void MainWindow::contextVars(const QPoint& posa) { - int row = ui->emuVarView->rowAt(posa.y()); - if (row < 0) { + QModelIndex nameIndex = ui->emuVarView->indexAt(posa).siblingAtColumn(VarTableModel::VAR_NAME_COL); + if (!nameIndex.isValid()) { return; } - const calc_var_t var = ui->emuVarView->item(row, VAR_NAME_COL)->data(Qt::UserRole).value(); + const calc_var_t var = nameIndex.data(Qt::UserRole).value(); QMenu contextMenu; QAction *launch = contextMenu.addAction(tr("Launch program")); diff --git a/gui/qt/mainwindow.h b/gui/qt/mainwindow.h index 9917dc0d8..457a0333a 100644 --- a/gui/qt/mainwindow.h +++ b/gui/qt/mainwindow.h @@ -10,6 +10,7 @@ #include "keyhistorywidget.h" #include "dockwidget.h" #include "datawidget.h" +#include "vartablemodel.h" #include "keypad/qtkeypadbridge.h" #include "debugger/hexwidget.h" #include "debugger/disasm.h" @@ -150,14 +151,6 @@ class MainWindow : public QMainWindow { VAT_TYPE_COL }; - enum { - VAR_NAME_COL, - VAR_LOCATION_COL, - VAR_TYPE_COL, - VAR_SIZE_COL, - VAR_PREVIEW_COL - }; - enum { RECENT_REMOVE_COL, RECENT_RESEND_COL, @@ -474,8 +467,9 @@ class MainWindow : public QMainWindow { // linking QStringList varDialog(QFileDialog::AcceptMode mode, const QString &filter, const QString &suffix); void varReceive(std::function recvAction); + void varUpdate(); void varShow(); - void varPressed(QTableWidgetItem *item); + void varPressed(const QModelIndex &index); void varLaunch(const calc_var_t *prgm); void varSelect(); void varSaveSelected(); @@ -607,6 +601,7 @@ class MainWindow : public QMainWindow { QDir m_dir; QStringList m_equateFiles; + VarTableModel *m_varTableModel; std::function m_recvAction; bool m_uiEditMode = false; @@ -718,9 +713,6 @@ class MainWindow : public QMainWindow { QString m_styleForMode[2]; - QFont varPreviewCEFont; - QFont varPreviewItalicFont; - static const char *m_varExtensions[]; // Settings definitions diff --git a/gui/qt/mainwindow.ui b/gui/qt/mainwindow.ui index aec093f7e..b726ce715 100644 --- a/gui/qt/mainwindow.ui +++ b/gui/qt/mainwindow.ui @@ -6822,7 +6822,7 @@ Qt::TabFocus - View calc variables + @@ -6909,7 +6909,7 @@ - + false @@ -6976,31 +6976,6 @@ false - - - Name - - - - - Location - - - - - Type - - - - - Size - - - - - Preview - - diff --git a/gui/qt/vartablemodel.cpp b/gui/qt/vartablemodel.cpp new file mode 100644 index 000000000..a3d81630a --- /dev/null +++ b/gui/qt/vartablemodel.cpp @@ -0,0 +1,179 @@ +#include "vartablemodel.h" + +#include "../../core/vat.h" +#include "utils.h" + +#include + +Q_DECLARE_METATYPE(calc_var_t) + +VarTableModel::VarData::VarData(const calc_var_t &var) : info(var), data(reinterpret_cast(var.data), var.size), checked(Qt::Unchecked) { + info.data = reinterpret_cast(data.data()); + updatePreview(); +} + +void VarTableModel::VarData::updatePreview() { + previewValid = true; + if (info.size <= 2) { + preview = tr("Empty"); + previewValid = false; + } else if (calc_var_is_asmprog(&info)) { + preview = tr("Can't preview this"); + previewValid = false; + } else if (calc_var_is_internal(&info) && info.name[0] != '#') { // # is previewable + preview = tr("Can't preview this OS variable"); + previewValid = false; + } else { + try { + preview = QString::fromStdString(calc_var_content_string(info)).trimmed().replace("\n", " \\ "); + if (preview.size() > 50) { + preview.truncate(50); + preview += QStringLiteral(" [...]"); + } + } catch (...) { + preview = tr("Can't preview this"); + previewValid = false; + } + } +} + +VarTableModel::VarTableModel(QObject *parent) : QAbstractTableModel(parent) { + varPreviewCEFont = QFont(QStringLiteral("TICELarge"), 11); + varPreviewItalicFont.setItalic(true); +} + +void VarTableModel::clear() { + beginResetModel(); + vars.clear(); + endResetModel(); +} + +void VarTableModel::refresh() { + calc_var_t var; + + clear(); + + vat_search_init(&var); + while (vat_search_next(&var)) { + if (var.named || var.size > 2) { + int row = vars.size(); + beginInsertRows(QModelIndex(), row, row); + vars.push_back(VarData(var)); + endInsertRows(); + } + } +} + +void VarTableModel::retranslate() { + if (!vars.empty()) { + for (VarData &var : vars) { + var.updatePreview(); + } + emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); + } + emit headerDataChanged(Qt::Horizontal, 0, columnCount() - 1); +} + +QVariant VarTableModel::data(const QModelIndex &index, int role) const { + if (!index.isValid()) { + return QVariant(); + } + const VarData &var = vars[index.row()]; + switch (role) { + case Qt::DisplayRole: + switch (index.column()) { + case VAR_NAME_COL: + return QString::fromUtf8(calc_var_name_to_utf8(var.info.name, var.info.namelen, var.info.named)); + case VAR_LOCATION_COL: + return var.info.archived ? tr("Archive") : QStringLiteral("RAM"); + case VAR_TYPE_COL: + { + // Do not translate - things rely on those names. + QString var_type_str = calc_var_type_names[var.info.type]; + if (calc_var_is_asmprog(&var.info)) { + var_type_str += QStringLiteral(" (ASM)"); + } + return var_type_str; + } + case VAR_SIZE_COL: + return var.info.size; + case VAR_PREVIEW_COL: + return var.preview; + default: + return QVariant(); + }; + case Qt::FontRole: + if (index.column() == VAR_PREVIEW_COL) { + return var.previewValid ? varPreviewCEFont : varPreviewItalicFont; + } + return QVariant(); + case Qt::ForegroundRole: + if (index.column() == VAR_PREVIEW_COL && !var.previewValid) { + return QBrush(Qt::gray); + } + return QVariant(); + case Qt::CheckStateRole: + if (index.column() == VAR_NAME_COL) { + return var.checked; + } + return QVariant(); + case Qt::UserRole: + return QVariant::fromValue(var.info); + default: + return QVariant(); + }; +} + +bool VarTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { + if (index.isValid() && index.column() == VAR_NAME_COL && role == Qt::CheckStateRole) { + vars[index.row()].checked = qvariant_cast(value); + emit dataChanged(index, index, { Qt::CheckStateRole }); + return true; + } + return false; +} + +QVariant VarTableModel::headerData(int section, Qt::Orientation orientation, int role) const { + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { + switch (section) { + case VAR_NAME_COL: + return tr("Name"); + case VAR_LOCATION_COL: + return tr("Location"); + case VAR_TYPE_COL: + return tr("Type"); + case VAR_SIZE_COL: + return tr("Size"); + case VAR_PREVIEW_COL: + return tr("Preview"); + default: + return QVariant(); + } + } + return QVariant(); +} + +Qt::ItemFlags VarTableModel::flags(const QModelIndex &index) const { + if (!index.isValid()) { + return Qt::NoItemFlags; + } + Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemNeverHasChildren; + if (index.column() == VAR_NAME_COL) { + flags |= Qt::ItemIsUserCheckable; + } + return flags; +} + +int VarTableModel::rowCount(const QModelIndex &parent) const { + if (parent.isValid()) { + return 0; + } + return vars.size(); +} + +int VarTableModel::columnCount(const QModelIndex &parent) const { + if (parent.isValid()) { + return 0; + } + return VAR_NUM_COLS; +} \ No newline at end of file diff --git a/gui/qt/vartablemodel.h b/gui/qt/vartablemodel.h new file mode 100644 index 000000000..b33c6668e --- /dev/null +++ b/gui/qt/vartablemodel.h @@ -0,0 +1,52 @@ +#ifndef VARTABLEMODEL_H +#define VARTABLEMODEL_H + +#include "../../core/vat.h" + +#include +#include + +class VarTableModel : public QAbstractTableModel { + Q_OBJECT + +public: + enum { + VAR_NAME_COL, + VAR_LOCATION_COL, + VAR_TYPE_COL, + VAR_SIZE_COL, + VAR_PREVIEW_COL, + VAR_NUM_COLS + }; + + explicit VarTableModel(QObject *parent = Q_NULLPTR); + + void clear(); + void refresh(); + void retranslate(); + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + +private: + struct VarData { + explicit VarData(const calc_var_t &var); + void updatePreview(); + + calc_var_t info; + QByteArray data; + QString preview; + bool previewValid; + Qt::CheckState checked; + }; + + QVector vars; + QFont varPreviewItalicFont; + QFont varPreviewCEFont; +}; + +#endif // VARTABLEMODEL_H From 59a24427197dff4d063a51e7fd315b2f16fb297b Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Thu, 22 Aug 2024 01:30:51 -0400 Subject: [PATCH 3/8] gui: Update translation files to reflect moved and removed strings --- gui/qt/i18n/es_ES.qm | Bin 55610 -> 55452 bytes gui/qt/i18n/es_ES.ts | 820 ++++++++++++++++++++---------------------- gui/qt/i18n/fr_FR.qm | Bin 58000 -> 57798 bytes gui/qt/i18n/fr_FR.ts | 820 ++++++++++++++++++++---------------------- gui/qt/i18n/nl_NL.qm | Bin 56658 -> 56462 bytes gui/qt/i18n/nl_NL.ts | 820 ++++++++++++++++++++---------------------- gui/qt/i18n/zh_CN.qm | Bin 39056 -> 38968 bytes gui/qt/i18n/zh_CN.ts | 821 ++++++++++++++++++++----------------------- 8 files changed, 1524 insertions(+), 1757 deletions(-) diff --git a/gui/qt/i18n/es_ES.qm b/gui/qt/i18n/es_ES.qm index f22c7bae7a180ca1c9ff2f9b2b4828784f7c2707..e4cc705eaa0d931767ed612e4855049825948043 100644 GIT binary patch delta 4201 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 MainWindow - - + + Keypad Teclado - + Variables Variables - + Watchpoints Puntos de observación - - + Size El Tamaño - + OS Variables Variables del SO @@ -100,52 +99,52 @@ Cambiar la identificación del certificado de la calculadora - + Resend selected Reenviar seleccionado - + Save transferred file paths on exit Guardar las rutas de los archivos transferidos al salir - - - + + + Capture Foto - + Screenshot Copia de LCD - - - - + + + + Settings Ajustes - + General General - + Automatically save and restore state Automáticamente guardar y restaurar estado - + ROM Image Imagen de ROM - + Debug Depurar @@ -160,23 +159,23 @@ Restablecer Varios - - + + Show ASCII Mostrar ASCII - + Cannot locate calculator ID in the certificate. This is usually due to an improper ROM dump. Please try another ROM dump using a physical calculator. No se puede encontrar la identificación de la calculadora. - + CEmu Change Certificate ID Cambiar la identificación de la calculadora - + Old ID: Identificación anterior: @@ -255,77 +254,68 @@ NMI activado - + Run Ejecutar - + No Basic Program Executing. Ningún programa de BASIC ejecutandose. - + Executing Program: Ejecutando el programa: - + Equate files (*.inc *.lab *.map) Equiparar archivos (*.inc *.lab *.map) - + All Files (*.*) Todos los archivos (*.*) - - + Copy Address Copiar dirección - + Copy Data Copiar datos - + Goto VAT Memory View Ir a la vista de la memoria del VAT - + Goto Disasm View Ir a Desmontaje - - - + Toggle Breakpoint Alternar este punto de interrupción - - - + Toggle Write Watchpoint Alternar este punto de observación de escritura - - - + Toggle Read Watchpoint Alternar este punto de mira leído - - - + Toggle Read/Write Watchpoint Alternar este punto de mira de lectura / escritura @@ -344,51 +334,46 @@ - - + + Goto Ir a - - + + Disassembly Desensam - - Preview - Previsualización - - - + Always show on top of other windows Siempre mostrar encima de otras ventanas - + File Locations Ubicación de archivos - + Saved Image Imagen guardada - + Skin Aspecto - + Scale: Tamaño: - + Keypad Skin Color Color de teclado @@ -411,11 +396,12 @@ + Refresh Refrescar - + Clear Limpiar @@ -434,7 +420,7 @@ - + Port Monitor Monitor de puerto @@ -470,22 +456,22 @@ - + Memory Memoria - + dock ensamblar - + console consola - + Auto scroll Desplazamiento automático @@ -661,90 +647,77 @@ - - View calc variables - Ver variables de la calculadora - - - + Selected Seleccionado - + Send files to calc Enviar archivos - + Tab between opcode / operands Tab entre opcode / operando - + Space between operands Espacio entre operandos - + Keypad Mapping Asignación del teclado - + Change Instance ID Cambiar ID de CEmu - Emulate physical LCD SPI drawing - Emular SPI LCD real - - - + Auto. save and restore debug state Guardar y restaurar automáticamente - Emulate Pre-Revision I (IM 2) - Emular Pre-Revisión I (IM 2) - - - + Record animated PNG Grabar PNG animado - + Ctrl+Shift+X Ctrl+Shift+X - + Reset calculator Restablecer calculadora - + Save state Guardar Estado - + Restore state Restaurar estado - + Reload ROM Recargar ROM - + Screen Pantalla - + Reload Rom Recargar Rom @@ -758,45 +731,45 @@ Dirección - + Automatically check for updates Verificar actualizaciones automáticamente - + Use portable configuration Usar configuración portátil - + Open debugger on reset or nmi Abrir el depurador al reiniciar o NMI - + Enable software commands Habilitar comandos de software - - + + % % - - + + Change path Cambiar ruta - + Saved Debug Depuración guardada - + Breakpoints Los puntos de interrupción @@ -817,8 +790,8 @@ - - + + Frame skip: Salto de frames: @@ -830,13 +803,13 @@ - + Stop Terminar - + Add Insertar @@ -858,22 +831,22 @@ Congelar - + Save selected Guardar la sélection - + Throttle: Aceleración: - + Text size: Tamaño del texto: - + Key bindings Atajos del teclado @@ -904,28 +877,28 @@ Sincronizar cambios - + Rom setup wizard... Configuración de ROM... - - + + Take PNG screenshot Tomar captura PNG - + Record animated GIF Grabar en GIF - + Check for updates... Buscar actualizaciones... - + About Qt Información de Qt @@ -935,7 +908,7 @@ Interrupciones - + Display Monitor @@ -945,8 +918,8 @@ Brillo - - + + Console Consola @@ -954,22 +927,16 @@ - - + Name Nombre - - - Type - Tipo - - - + + Remove Eliminar @@ -996,14 +963,14 @@ - - + + Search Buscar - - + + Sync Changes Sincronizar cambios @@ -1013,27 +980,27 @@ Memoria RAM - + Memory View Memoria - + &File &Archivo - + Open... Abrir... - + Exit Salir - + Setup wizard Asistente de configuración @@ -1044,13 +1011,13 @@ - + Debug Control Control de depuración - + CPU Status Estado de la CPU @@ -1087,7 +1054,7 @@ - + Timers Temporizadores @@ -1175,7 +1142,7 @@ - + OS Stacks Pilas de OS @@ -1191,7 +1158,7 @@ - + Miscellaneous Miscelneos @@ -1237,7 +1204,7 @@ - + AutoTester Probador automático @@ -1257,70 +1224,65 @@ Calculadora Reciba - + View Calculator Variables Ver variables de la calculadora - + Save group Guardar grupo - - Location - Ubicación - - - + Calculator Send Calculadora Enviar - + Resend Reenviar - + Path Ruta - + Save PNG Guardar PNG - + Copy PNG Copiar PNG - + Screen Recording Grabación de pantalla - - + + Record Grabar - + Optimize Optimizar - + Configuration Configuración - + TI-Basic Debug Depuración de TI-Basic @@ -1360,42 +1322,42 @@ Parser temporario - + Pause emulation on focus change Emulación de pausa cuando el interruptor - + Allow dock grouped dragging Permitir arrastrar grupos de pantallas - + Natural Natural - + Custom Personalizado - + Emulation Emulación - + Display / Emulation Speed LCD / Velocidad de Emulación - + Actual FPS: FPS real: - + Update status: Actualización del estado : @@ -1410,344 +1372,340 @@ - + Upscaling: - + Nearest Neighbor - + Bilinear - + Sharp Bilinear - + Fullscreen: - + Stretch - + Preserve Aspect - + Integer Scale - + SmartPad SmartPad - + ASIC revision: - + sec - + Auto - + Rev A - + Rev I - + Rev M - + Current: - + Emulate Python Edition - + Emulate DMA to LCD memory - + Emulate LCD gamma - + Emulate LCD response time - + Debugging Depuración - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) Algunas vistas de depuración solo tienen sentido cuando están en el contexto del funcionamiento normal del sistema operativo (puede no ser el caso cuando se ejecutan algunos programas ASM, por ejemplo) - + Assume normal OS operation Asumir el funcionamiento normal del OS - + May cause problems if boot code is incompatible. Use only if you know what you're doing. - + Allow any ASIC revision - + Show data column Mostrar columna de datos - + Use implicit mode Use el modo implícito - Opcode / operand space - Espacio opcode/operando - - - + Use uppercase font Use letras mayúsculas - + Show address column Mostrar columna de dirección - + Bold disassembly symbols Símbolos de desensamblaje en negrita - - + + State Estado - + Load Carga - + Save Salvar - + Edit Editar - - + + Reset Reiniciar - + Export Exportar - + Import Importar - + Language Idioma - + &Calculator &Calculadora - + Extras Extras - + Ctrl+Shift+O Ctrl+Shift+O - + Ctrl+Shift+Q Ctrl+Shift+Q - - + + About CEmu Información de CEmu - + ROM image Imagen de ROM - - + + Calculator state Estado de la calculadora - - + + Debug state Estado de depuración - + New CEmu instance Nuevo CEmu - + Show key history Historia del teclado - + Bootable CEmu image CEmu imagen - + Hide menu bar Ocultar barra de menú - + Copy screen to clipboard Copiar la pantalla al portapapeles - + Ctrl+Shift+C Ctrl+Shift+C - + Reset GUI docks Restablecer GUI - + Reset CEmu Restablecer CEmu - + English - + Français - + Nederlands - + Español - - + + Window configuration Configuración de disposición - + Report a bug / give feedback Informar un error / dar feedback - + Hide status bar Ocultar barra de estado - - + + RAM image Imagen de RAM - + 简体中文 - + Simplified Chinese 简体中文 - + Docks Pantallas - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1760,37 +1718,37 @@ CEmu usa una interfaz de pantalla personalizable. Arrastra y suelta para mover p (Aviso: según su versión, puede arrastrar pestañas agrupadas o una pestaña individual desde su título o barra de pestañas, respectivamente) - - + + PNG images (*.png) Imagenes de PNG (*.png) - - + + Select saved image to restore from Seleccione una imagen guardada para restaurar - - + + CEmu images (*.ce);;All files (*.*) CEmu imágenes (*.ce);;Todos los archivos (*.*) - + Information Información - + Set image to save to Establecer imagen para guardar - - + + Emulated Speed: Velocidad Emulada: @@ -1810,191 +1768,166 @@ CEmu usa una interfaz de pantalla personalizable. Arrastra y suelta para mover p <b>Hay un error cuando buscar actualizaciones de CEmu.</b><br/>Sin embargo ir a<a href='https://github.com/CE-Programming/CEmu/releases/latest'></a>para comprobar. - + Recording... Grabación... - + Stop Recording Terminar de grabar - - Can't preview this OS variable - No se puede obtener una vista previa de esta variable de la OS - - - + Select at least one file to transfer Seleccionar al menos un archivo a transferir - + Actual FPS: FPS real: - + Run/Stop Ejecutar / Terminar - + Reload Recargar - + Keypress History Historia del teclado - + Clear History Borrar - + Save Screen Guardar Pantalla - + Failed to save screenshot. Error al guardar la captura de pantalla. - + Saving Recording... Guardando la grabación... - + Save Recorded PNG Guardar PNG grabados - + A failure occured during PNG recording. Error al guardar la captura de pantalla. - + Stop Recording... Terminar de grabar... - + Saving... Guardar... - + Saving Animated PNG... Guardar PNG animado... - + Record animated PNG... Grabar PNG animado... - + Copy version Copiar versión - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Autores principales:<br>%3<br>Otros contribuidores incluyen:<br>%4<br>Traducciones proporcionadas por:<br>%5<br>Muchas gracias a los siguientes proyectos: %6<br>Los íconos dentro del programa son cortesía de %7.<br><br>CEmu tiene licencia bajo el %8, y no es un producto de TI ni está afiliado / endosado por TI.<br><br> - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] Texte redirigé vers la sortie standard. Utilisez le bouton radio pour activer. - TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;All Files (*.*) - TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;Todos Archivos (*.*) - - - - Empty - Vacío - - - - - Can't preview this - No se puede previsualizar - - - - Archive - Archivo - - - + Select at least two files to group Seleccione al menos dos archivos - + TI Group (*.8cg);;All Files (*.*) Grupo TI (*.8cg);;Todos los archivos (*.*) - - + + Transfer error, see console for information: File: Error de transferencia, consulte la consola para obtener información: Archivo: - - + + Transfer completed successfully. La transferencia se completó exitosamente. - + Error. No config loaded Error. Sin configuración cargadas - + Error. Couldn't follow the test sequence defined in the configuration Error. No se pudo seguir la secuencia de prueba definido en la configuración - + Error. Unknown one - wat? Error. Desconocido uno? - + See the test config file format and make sure values are correct and referenced files are there. Vea el formato de archivo de configuración de prueba y asegúrese de que los valores sean correctos. - + Make sure you have entered a valid start/size pair or preset. Asegúrate de que los valores sean correctos. - + Could not convert those values into numbers No se pudieron convertir esos valores en números - + Could not retrieve this memory chunk No se pudo recuperar este fragmento de memoria - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. La imagen no parece ser de un CE. ¿Quieres intentar cargarlo de todos modos? Esto puede causar inestabilidad. @@ -2004,135 +1937,135 @@ Archivo: Establecer contador de programa - + Run Until Ejecutar hasta - - Goto Disassembly View - Ir a Desmontaje - - - + Enter image path Ingrese ruta de la imagen - + Please choose a json file or type its path. Elija un archivo json o escriba su ruta. - + No translation available for this language :( No hay traducción disponible para este idioma :( - + Add memory view Agregar vista de memoria - + Add memory visualizer Agregar pantalla de memoria - + Memory Visualizer Pantalla de memoria - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu no pudo escribir en la ubicación de configuración estándar. El modo portátil ha sido activado. - + ROM images (*.rom) Imagen de ROM (*.rom) - + Set ROM image to save to Establecer imagen de ROM para guarda - + RAM images (*.ram) Imagen de RAM (*.ram) - + Set RAM image to save to Establecer imagen de RAM para guarda - + Select RAM image to load Seleccionar imagen de RAM - + RAM images (*.ram);;All files (*.*) Imagen de RAM (*.ram);;Todos los archivos (*.*) - + Saving failed. Please check write permissions in settings directory. Error de guardado. - + Auto (%0) - + Current: %0 (change requires reset) - - + + N/A N/A - + Version copied! Versión copiada! - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) Variable de TI (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) - + + Hide Calculator Variables + + + + Couldn't go to where the JSON file is. No se pudo encontrar el archivo JSON. - + Couldn't read JSON file. No se pudo abrir el archivo de JSON. - + Unable to open the file. No se puede abrir el archivo. - + Test results Resultados de la prueba - + Out of %2 tests attempted: %4 passed %6 failed @@ -2141,25 +2074,22 @@ El modo portátil ha sido activado. %6 fallado - + Launch program Ejecute el programa - - - - + Goto Memory View Ir a la memoria - + CEmu Change ID Cambio de ID de CEmu - + New ID: Nueva ID: @@ -2179,12 +2109,12 @@ El modo portátil ha sido activado. Información de depuración (* .ini);;Todos archivos (*. *) - + Enable UI edit mode Habilitar modo de edición - + Warning Advertencia @@ -2243,55 +2173,50 @@ La imagen de inicio debe colocarse en el mismo directorio que el ejecutable CEmu No se puede establecer un disposición teclas personalizado. - + Keep migratable settings Mantener la configuración migrable - + This version of CEmu is not compatible with your settings, probably made by an older version. Would you like to erase them to prevent any unexpected behavior? Esta versión de CEmu no es compatible con tu configuración, probablemente hecha con una versión anterior. ¿Te gustaría borrarlos para evitar cualquier comportamiento inesperado? - + Window Config (*.ini) Configuración (*.ini) - + Save window configuration Guardar configuración de disposición - + Window Config (*.ini);;All files (*.*) Configuración (*.ini);;Todos los archivos (*.*) - + Natural keymap is not exportable El mapa de teclas natural no es exportable - + Keymap Config (*.ini) Configuración de asignación (*.ini) - + Save keymap configuration Guardar la configuración de asignaciónes del teclado - + Check for updates Buscar actualizaciones - - - Resume emulation - Reanudar emulación - Input Address (Or Equate): @@ -2308,46 +2233,18 @@ La imagen de inicio debe colocarse en el mismo directorio que el ejecutable CEmu Texto no encontrado. - + Error Error - + Toggle Windows Console Activar la consola de Windows QObject - - Transfer error - Error de transferencia - - - Transfer Error, see console for information. - Error de transferencia, consulte la consola para obtener información. - - - Transfer Warning, see console for information. - Advertencia de transferencia, consulte la consola para obtener información. - - - Transfer Error, see console for information. -File: - Error de transferencia, consulte la consola para obtener información. -Archivo: - - - Transfer warning - Advertencia de transferencia - - - Transfer Warning, see console for information. -File: - Advertencia de transferencia, consulte la consola para obtener información. -Archivo: - Transfer issue @@ -2362,101 +2259,97 @@ Archivo: RomSelection - + CEmu Setup Configuración de CEmu - + Welcome to CEmu! In order to get started, you will need to provide a ROM image. You can either create one here, or select one from your computer. Bienvenido a CEmu! Para comenzar, deberá proporcionar una imagen ROM. Puede crear uno aquí o seleccionar uno de su computadora. - + To run the program, select Asm( from the catalog by pressing [2nd] then [0], and then pressing enter at the following prompt. You do not need the Asm( part if you're on OS 5.3 or later. Note that if you're on OS 5.5 or later, you will need to use an assembly program launcher instead (like a shell, or AsmHook, both of which can be installed through arTIfiCE first). Para ejecutar el programa, seleccione Asm( en el catálogo pulsando [2], luego [0] y, a continuación, pulse Enter cuando aparezca el siguiente mensaje. No necesitas la parte Asm( si estás en OS 5.3 o más. Tenga en cuenta que si está en OS 5.5 o más, necesitará utilizar un lanzador de programas ASM en su lugar (como un shell, o AsmHook, ambos pueden ser instalados a través de arTIfiCE primero). - + Using your computer's calculator connectivity software, copy all the variables prefixed with "ROMData" to your computer. Drag and drop all of them into the box below. Usando el software de conectividad de la calculadora de su computadora, copie todas las variables con el prefijo "ROMData" a su computadora. Arrastra y suelta en el cuadro abajo. - + Drop ROM segments here Suelta segmentos de ROM aquí - + Browse... Vistazo... - + Note: In most countries, it is illegal to share or download ROM images for devices you do not own. Nota: En la mayoría de los países, es ilegal compartir o descargar imágenes ROM para dispositivos que no tiene. - - - + + + ... ... - + Create a ROM image from your calculator Crea una imagen ROM de tu calculadora - + Cancel and close Cancelar y cerrar - + Click this button to save the dumper program to your computer, then send the program to your real calculator. Use este botón para guardar el programa de descarga en su computadora, luego envíe el programa a su calculadora real. - + Save Program... Guardar programa ... - To run the program, select Asm( from the catalog by pressing [2nd][0], and then pressing enter at the following prompt. - Para ejecutar el programa, seleccione Asm ( del catálogo, presionando [2nd] [0], y luego presione [enter] en el siguiente mensaje. - - - - + + Back Previo - + Choose a place to save your ROM image. Once complete, CEmu will load automatically. Elija un lugar para guardar su imagen ROM. Cuando se complete, CEmu se cargará automáticamente. - + CEmu ROM Selection Elija una imagen de ROM - + CEmu Version: Versión de CEmu: - + Next Continuar - + Browse my computer for a ROM image Elija la imagen ROM de su computerdora @@ -2518,6 +2411,55 @@ File: Archivo: + + VarTableModel + + + Empty + Vacío + + + + + Can't preview this + No se puede previsualizar + + + + Can't preview this OS variable + No se puede obtener una vista previa de esta variable de la OS + + + + Archive + Archivo + + + + Name + Nombre + + + + Location + Ubicación + + + + Type + Tipo + + + + Size + El Tamaño + + + + Preview + Previsualización + + VisualizerDisplayWidget @@ -2554,52 +2496,52 @@ Archivo: Cambiar configuración - + Current LCD State Estado actual del LCD - + 8bpp Buffer 1 - + 8bpp Buffer 2 - + Palette View Vista de la paleta - + Base Address Dirección base - + Scale Amplitud - + Width Anchura - + Height Altura - + Grid Cuadrícula - + Submit Enviar diff --git a/gui/qt/i18n/fr_FR.qm b/gui/qt/i18n/fr_FR.qm index b9c516b017adf92fb110aaef61e64894fe7e116b..91f0b68a3cdc12eefa400184c191f4eabf7836d6 100644 GIT binary patch delta 4353 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 OZ}-J6^R){{EdCGYQYWqe delta 4293 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 MainWindow - - + + Keypad Clavier - + Variables Variables - - + Size Taille - + Resend selected Renvoyer la sélection - + Save transferred file paths on exit Sauver les chemins des transferts en quittant - - - + + + Capture Capture - + Screenshot Capture d'écran - - - - + + + + Settings Paramètres - + General Général - + Automatically save and restore state Automatiquement sauver et reprendre l'état - + ROM Image Image ROM - + Debug Débogage @@ -143,23 +142,23 @@ Reset (autre) - - + + Show ASCII Voir l'ASCII - + Cannot locate calculator ID in the certificate. This is usually due to an improper ROM dump. Please try another ROM dump using a physical calculator. Impossible de trouver l'ID de la calculatrice dans le certificat. Ceci est généralement dû à un dump de ROM incomplet. Veuillez retenter un dump de ROM. - + CEmu Change Certificate ID Changement d'ID certificat - + Old ID: Ancien ID: @@ -238,44 +237,43 @@ NMI déclenché - + Run Lancer - + No Basic Program Executing. Aucun programme Basic en cours d'exécution - + Executing Program: Lancement du programme : - + Equate files (*.inc *.lab *.map) Fichier d'equates (*.inc *.lab *.map) - + All Files (*.*) Tous les fichiers (*.*) - - + Copy Address Copier l'adresse - + Copy Data Copier les données - + Goto VAT Memory View Localiser en mémoire VAT @@ -294,51 +292,46 @@ - - + + Goto Aller à - - + + Disassembly Désassemblage - - Preview - Aperçu - - - + Always show on top of other windows Toujours afficher au premier plan - + File Locations Emplacements des fichiers - + Saved Image Image sauvé - + Skin - + Scale: Échelle : - + Keypad Skin Color Couleur du skin du clavier @@ -361,11 +354,12 @@ + Refresh Actualiser - + Clear Effacer @@ -384,7 +378,7 @@ - + Port Monitor Moniteur de ports @@ -420,22 +414,22 @@ - + Memory Mémoire - + dock - + console - + Auto scroll Auto-défilement @@ -446,7 +440,7 @@ - + TI-Basic Debug Débuggage TI-Basic @@ -677,272 +671,259 @@ Hash (CRC) : - - View calc variables - Voir les variables de la calculatrice - - - + Selected Sélectionné - + Send files to calc Envoyer des fichiers à la calculatrice - + Upscaling: Agrandissement : - + Nearest Neighbor Plus proche voisin - + Bilinear Bilinéaire - + Sharp Bilinear Bilinéaire net - + Fullscreen: Plein-écran : - + Stretch Étirer - + Preserve Aspect Garder le ratio H/L - + Integer Scale À échelle entière - + Natural Naturel - + SmartPad SmartPad - + Custom Personnalisé - + ASIC revision: Révision de l'ASIC : - + Auto - + Rev A - + Rev I - + Rev M - + Current: Actuelle : - + Emulate Python Edition Émuler l'Édition Python - + Emulate DMA to LCD memory Émuler le DMA vers la mémoire LCD - + Emulate LCD gamma Émuler le gamma du LCD - + Emulate LCD response time Émuler le temps de réponse du LCD - + May cause problems if boot code is incompatible. Use only if you know what you're doing. Peut causer des problèmes si le boot-code est incompatible. À utiliser uniquement si vous savez ce que vous faites. - + Allow any ASIC revision Autoriser n'importe quelle révision d'ASIC - + Tab between opcode / operands Tab entre opcode / opérandes - + Space between operands Espace entre opérandes - + Keypad Mapping Associations de touches - + Change Instance ID Changer l'ID de l'instance - + 简体中文 - + Simplified Chinese 简体中文 - + Update status: Mise à jour du statut : - + sec - Emulate physical LCD SPI drawing - Émuler le dessin du LCD par le SPI - - - + Auto. save and restore debug state Auto. sauver et charger l'état de débogage - Emulate Pre-Revision I (IM 2) - Émulation de révision pre-I (IM 2) - - - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) Certaines fenêtres de débogage n'ont de sens que lorsque l'OS est en train de s'exécuter (et non pas lors de l'exécution de certains programmes ASM, par exemple) - + Assume normal OS operation Supposer que l'OS est en cours d'exécution - + Extras Extras - + Record animated PNG Capture PNG animé - + Reset calculator Réinitialiser la calculatrice - + Save state Sauver l'état - + Restore state Restaurer l'état - + Reload ROM Recharger la ROM - - + + Calculator state État de la calculatrice - - + + Window configuration Configuration de la fenêtre - + Report a bug / give feedback Faire part d'un bug / suggestion - + Hide status bar Cacher la barre de statut - + Bootable CEmu image Image CEmu bootable - + Hide menu bar Cacher la barre de menu - + Screen Écran - + Ctrl+Shift+X - + Reload Rom Recharger la ROM @@ -956,49 +937,44 @@ Adresse - + Automatically check for updates Vérifier automatiquement les mises à jour - + Use portable configuration Utiliser une configuration portable - + Open debugger on reset or nmi Ouvrir le débuggeur lors d'un reset ou NMI - + Enable software commands Activer les commandes logicielles - - + + % - - Location - Emplacement - - - + Path Chemin - - + + Change path Changer de dossier - + Saved Debug Débogage sauvé @@ -1015,7 +991,7 @@ - + Breakpoints Points d'arrêt @@ -1026,13 +1002,13 @@ - + Watchpoints Watchpoints - + OS Variables Variables d'OS @@ -1054,7 +1030,7 @@ - + OS Stacks Piles (stacks) de l'OS @@ -1115,22 +1091,22 @@ Registres - + New CEmu instance Nouvelle instance de CEmu - + Show key history Afficher l'historique des touches - + Copy screen to clipboard Capturer l'écran dans le presse-papier - + Ctrl+Shift+C @@ -1140,8 +1116,8 @@ État / drapeaux (flags) - - + + Frame skip: Saut d'image: @@ -1153,13 +1129,13 @@ - + Stop Arrêter - + Add Ajouter @@ -1181,22 +1157,22 @@ Geler - + Save selected Enregistrer la sélection - + Throttle: Limite : - + Text size: Taille du texte: - + Key bindings Raccourcis clavier @@ -1227,28 +1203,28 @@ Synchroniser les changements - + Rom setup wizard... Assistant de config. de la ROM... - - + + Take PNG screenshot Prendre une capture d'écran PNG - + Record animated GIF Prendre une capture GIF - + Check for updates... Vérifier les mises à jour... - + About Qt À propos de Qt @@ -1258,7 +1234,7 @@ Interruptions - + Display Écran @@ -1268,8 +1244,8 @@ Luminosité - - + + Console Console @@ -1277,22 +1253,16 @@ - - + Name Nom - - - Type - Type - - - + + Remove Supprimer @@ -1319,14 +1289,14 @@ - - + + Search Recherche - - + + Sync Changes Synchroniser les changements @@ -1336,27 +1306,27 @@ - + Memory View Vue mémoire - + &File &Fichier - + Open... Ouvrir... - + Exit Quitter - + Setup wizard Assistant de configuration @@ -1377,19 +1347,19 @@ - + Timers Timers - + Debug Control Contrôle de debug - + CPU Status Etat du CPU @@ -1456,13 +1426,13 @@ - + Miscellaneous Divers - + AutoTester @@ -1487,233 +1457,229 @@ Réception calculatrice - + View Calculator Variables Voir les variables de la calculatrice - + Save group Enregistrer le groupe - + Calculator Send Envoi calculatrice - + Resend Renvoi - + Save PNG Enregistrer en PNG - + Copy PNG Copier en PNG - + Screen Recording Enregistrement d'écran - - + + Record Enregistrer - + Optimize Optimiser - + Configuration Configuration - + Pause emulation on focus change Mettre en pause l'émulation quand le focus est perdu - + Allow dock grouped dragging Drag'n'drop groupé de docks - + Emulation Émulation - + Display / Emulation Speed Affichage / Vitesse d'émulation - + Actual FPS: FPS réel : - + Debugging Debuggage - + Show data column Afficher la colonne des données - + Use implicit mode Utiliser le mode implicite - Opcode / operand space - Espace opcode/opérande - - - + Use uppercase font Utiliser une police majuscule - + Show address column Afficher la colonne d'adresse - + Bold disassembly symbols Symboles de désassembleur en gras - - + + State État - + Load Charger - + Save Sauver - + Edit Modifier - - + + Reset Reset - + Export Export - + Import Import - + Language Langage - + &Calculator &Calculatrice - + Ctrl+Shift+O - + Ctrl+Shift+Q - - + + About CEmu A propos de CEmu - + ROM image Image ROM - - + + Debug state Etat du debug - + Reset GUI docks Reset des docks de l'interface - + Reset CEmu Reset de CEmu - + English - + Français - + Nederlands - + Español - - + + RAM image Image RAM - + Docks Docks - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1725,37 +1691,37 @@ CEmu utilise une interface personnalisable de "docks". Glissez-dépose (Attention: depuis la v1.1, vous pouvez déplacer les onglets en groupe ou individuellement, depuis leur barre de titre ou d'onglet, repectivement) - - + + PNG images (*.png) Images PNG (*.png) - - + + Select saved image to restore from Sélectionner l'image pour la restauration - - + + CEmu images (*.ce);;All files (*.*) Images CEmu (*.ce);;Tous les fichiers (*.*) - + Information Information - + Set image to save to Emplacement de l'image - - + + Emulated Speed: Vitesse d'émulation : @@ -1770,304 +1736,274 @@ CEmu utilise une interface personnalisable de "docks". Glissez-dépose <b>Une erreur est survenue lors de la vérification de mises-à-jour de CEmu.</b><br/>Vous pouvez cependant <a href='https://github.com/CE-Programming/CEmu/releases/latest'>aller vérifier ici</a> par vous-même. - + Recording... Enregistrement... - + Stop Recording Arrêter l'enregistrement - - Can't preview this OS variable - Pas d'aperçu pour cette variable OS - - - - - Can't preview this - Pas d'aperçu - - - + Actual FPS: FPS réel : - + Save Screen Enregistrer l'écran - + Failed to save screenshot. Erreur d'enregistrement de la capture. - + Saving Recording... Sauvegarde de l'enregistrement... - + Save Recorded PNG Sauver l'enregistrement PNG - + A failure occured during PNG recording. Erreur lors de l'enregistrement PNG. - + Stop Recording... Arrêter l'enregistrement... - + Saving... Sauvegarde... - + Saving Animated PNG... Sauvegarde du PNG animé... - + Record animated PNG... Enregistrer un PNG animé... - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>Sur GitHub</a><br><br>Auteurs principaux:<br>%3<br>Parmi les autres contributeurs :<br>%4<br>Traductions par:<br>%5<br>Un grand merci aux projets suivants : %6<br>Les icônes proviennent de %7.<br><br>CEmu est sous licence %8, et n'est pas un produit de TI ni en est affilié/endossé.<br><br> - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) Variable TI (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;Tous les fichiers (*.*) - - Goto Disassembly View - Aller au désassembleur - - - + Enter image path Entrer le chemin de l'image - - Archive - Archive - - - + Select at least two files to group Choisissez au moins deux fichiers à grouper - - + + Transfer error, see console for information: File: Erreur de transfer, voir la console pour plus d'infos. Fichier : - - + + Transfer completed successfully. Transfert effectué avec succès. - + See the test config file format and make sure values are correct and referenced files are there. Regardez le format de fichier des configs de tests, et vérifiez que les valeurs soient correctes ainsi que les fichiers référencés présents. - + Make sure you have entered a valid start/size pair or preset. Vérifiez bien d'avoir entré une paire/preset valide de début/taille. - + Select at least one file to transfer Choisissez au moins un fichier à transférer - + Run/Stop Lancer / Arrêter - + Reload Recharger - + No translation available for this language :( Pas de traduction disponible pour cette langue :( - + Add memory view Ajouter une vue mémoire - + Add memory visualizer Ajouter un visualiseur de mémoire - + Memory Visualizer Visualiseur mémoire - + Keypress History Historique des touches - + Clear History Vider l'historique - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu n'a pas pu écrire à l'endroit standard des paramètres. Le mode portable a été activé. - + ROM images (*.rom) Images ROM (*.rom) - + Set ROM image to save to Emplacement de l'image ROM - + RAM images (*.ram) Images RAM (*.ram) - + Set RAM image to save to Emplacement de l'image RAM - + Select RAM image to load Image RAM à charger - + RAM images (*.ram);;All files (*.*) Images RAM (*.ram);;Tous les fichiers (*.*) - + Saving failed. Please check write permissions in settings directory. La sauvegarde a échouée. Veuillez vérifier les permissions du dossier des paramètres. - + Auto (%0) - + Current: %0 (change requires reset) Actuelle : %0 (reset requis après changement) - - + + N/A N/A - + Copy version Copier la version - + Version copied! Version copiée ! - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] Sortie vers le dock redirigée vers stdout. Utilisez le bouton radio pour l'activer. - TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;All Files (*.*) - Variable TI (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;Tous les fichiers (*.*) - - - - Empty - Vide - - - + TI Group (*.8cg);;All Files (*.*) Groupe TI (*.8cg);;Tous les fichiers (*.*) - + Error. No config loaded Erreur. Pas de configuration chargée - + Error. Couldn't follow the test sequence defined in the configuration Erreur. Impossible de faire suivre la séquence de test définie dans la configuration - + Error. Unknown one - wat? Erreur inconnue - wat ? - + Please choose a json file or type its path. Veuillez choisir un fichier JSON ou tapez son chemin. - + Couldn't go to where the JSON file is. Impossible d'aller là où est le fichier JSON. - + Couldn't read JSON file. Impossible de lire le fichier JSON. - + Unable to open the file. Impossible d'ouvrir le fichier. - + Test results Résultats du test - + Out of %2 tests attempted: %4 passed %6 failed @@ -2076,17 +2012,17 @@ Le mode portable a été activé. %6 échoué(s) - + Could not convert those values into numbers Impossible de convertir en nombre - + Could not retrieve this memory chunk Impossible de récupérer cette partie de la mémoire - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. L'image n'a pas l'air d'être celle d'une CE. Voulez-vous quand même la charger? Ceci peut provoquer des instabilités. @@ -2096,68 +2032,62 @@ Le mode portable a été activé. Mettre PC à... - - - + Toggle Breakpoint (Dés)activer le breakpoint - - - + Toggle Write Watchpoint (Dés)activer le watchpoint d'une écriture - - - + Toggle Read Watchpoint (Dés)activer le watchpoint d'une lecture - - - + Toggle Read/Write Watchpoint (Dés)activer le watchpoint d'une lecture/écriture - + + Hide Calculator Variables + + + + Run Until Exécuter jusqu'ici - + Launch program Lancer le programme - - - - + Goto Memory View Localiser en mémoire - + Goto Disasm View Aller au désassembleur - + CEmu Change ID Changement d'ID CEmu - + New ID: Nouvel ID: - + Warning Avertissement @@ -2216,47 +2146,47 @@ L'image bootable doit être placée dans le même dossier que CEmu. Au proc Impossible d'importer les raccourcis. - + Keep migratable settings Garder les paramètres migrables - + This version of CEmu is not compatible with your settings, probably made by an older version. Would you like to erase them to prevent any unexpected behavior? Cette version de CEmu n'est pas compatible avec vos paramètres, probablement créés depuis une ancienne version. Voulez-vous les effacer afin d'éviter tout comportement anormal ? - + Window Config (*.ini) Config de l'interface (*.ini) - + Save window configuration Sauver la config de l'interface - + Window Config (*.ini);;All files (*.*) Config de l'interface (*.ini);;Tous les fichiers (*.*) - + Natural keymap is not exportable Les raccourcis "naturels" ne sont pas exportables - + Keymap Config (*.ini) Configuration des raccourcis (*.ini) - + Save keymap configuration Sauver la config des raccourcis - + Enable UI edit mode Activer l'édition d'interface @@ -2281,15 +2211,10 @@ L'image bootable doit être placée dans le même dossier que CEmu. Au proc Erreur de vérification des mises-à-jour - + Check for updates Vérifier les mises-à-jour - - - Resume emulation - Reprendre l'émulation - Input Address (Or Equate): @@ -2306,46 +2231,18 @@ L'image bootable doit être placée dans le même dossier que CEmu. Au proc Chaîne non trouvée. - + Error Erreur - + Toggle Windows Console Toggle console Windows QObject - - Transfer error - Erreur de transfert - - - Transfer Error, see console for information. - Erreur de transfert, voir la console pour plus d'infos. - - - Transfer Warning, see console for information. - Avertissement de transfert, voir la console pour plus d'infos. - - - Transfer Error, see console for information. -File: - Erreur de transfer, voir la console pour plus d'infos. -Fichier : - - - Transfer warning - Avertissement de transfert - - - Transfer Warning, see console for information. -File: - Avertissement de transfer, voir la console pour plus d'infos. -Fichier : - Transfer issue @@ -2360,101 +2257,97 @@ Fichier : RomSelection - + CEmu Setup Configuration de CEmu - + Welcome to CEmu! In order to get started, you will need to provide a ROM image. You can either create one here, or select one from your computer. Bienvenue sur CEmu ! Pour commencer, vous devez fournir une image ROM. Vous pouvez soit en créer une avec cet assistant, soit en choisir une existante sur votre ordinateur. - + To run the program, select Asm( from the catalog by pressing [2nd] then [0], and then pressing enter at the following prompt. You do not need the Asm( part if you're on OS 5.3 or later. Note that if you're on OS 5.5 or later, you will need to use an assembly program launcher instead (like a shell, or AsmHook, both of which can be installed through arTIfiCE first). Pour exécuter le programme, sélectionnez Asm( dans le catalogue en appuyant sur [2nd] puis [0], et appuyez ensuite sur la touche Entrée à l'invite suivante. Vous n'avez pas besoin de la partie Asm( si vous êtes en OS 5.3 ou plus. Notez que si vous êtes en OS 5.5 ou plus, vous devrez utiliser un lanceur de programmes ASM à la place (comme un shell, ou AsmHook, qui peuvent tous deux être installés par arTIfiCE d'abord). - + Using your computer's calculator connectivity software, copy all the variables prefixed with "ROMData" to your computer. Drag and drop all of them into the box below. En utilisant votre logiciel de transfert à la calculatrice, récupérez sur l'orginareur toutes les variables avec le préfixe "ROMData", puis glissez-les toutes ici. - + Drop ROM segments here Glissez les segments ici - + Browse... Parcourir... - + Note: In most countries, it is illegal to share or download ROM images for devices you do not own. Note: dans la plupart des pays, il est illégal de partager ou télé-charger des images ROM d'appareils que vous ne possédez pas. - - - + + + ... - + Create a ROM image from your calculator Créer une image ROM à partir de votre calculatrice - + Cancel and close Annuler et fermer - + Click this button to save the dumper program to your computer, then send the program to your real calculator. Cliquez sur ce bouton pour enregistrer le programme de dump sur votre ordinateur, puis envoyez-le sur votre calculatrice. - + Save Program... Enregistrer le programme... - To run the program, select Asm( from the catalog by pressing [2nd][0], and then pressing enter at the following prompt. - Pour lancer le programme, choisissez Asm( depuis le catalogue ([2nd][0]). Ensuite, appuyez sur Entrer. - - - - + + Back Retour - + Choose a place to save your ROM image. Once complete, CEmu will load automatically. Choisissez où enregistrer l'image ROM. Une fois ceci fait, CEmu la chargera automatiquement. - + CEmu ROM Selection Choix de l'image ROM - + CEmu Version: Version de CEmu : - + Next Suivant - + Browse my computer for a ROM image Choisir une ROM existante sur l'ordinateur @@ -2515,6 +2408,55 @@ File: Impossible de créer le dossier temporaire pour extraire l'archive.\n Fichier : + + VarTableModel + + + Empty + Vide + + + + + Can't preview this + Pas d'aperçu + + + + Can't preview this OS variable + Pas d'aperçu pour cette variable OS + + + + Archive + Archive + + + + Name + Nom + + + + Location + Emplacement + + + + Type + Type + + + + Size + Taille + + + + Preview + Aperçu + + VisualizerDisplayWidget @@ -2551,52 +2493,52 @@ File: Modifier la configuration - + Current LCD State État courant du LCD - + 8bpp Buffer 1 - + 8bpp Buffer 2 - + Palette View Vue palette - + Base Address Adresse de base - + Scale Échelle - + Width Largeur - + Height Hauteur - + Grid Grille - + Submit OK diff --git a/gui/qt/i18n/nl_NL.qm b/gui/qt/i18n/nl_NL.qm index e0ff69db303ba3d81ba39cc13ad6c24863502bd3..204b14775fcce667f7ec2d34013257189f8f0a26 100644 GIT binary patch delta 4343 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 Q7N2YN*-~+zQ~kYYPFHcX&t@^ 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 diff --git a/gui/qt/i18n/nl_NL.ts b/gui/qt/i18n/nl_NL.ts index 626902fe7..6d3697c0b 100644 --- a/gui/qt/i18n/nl_NL.ts +++ b/gui/qt/i18n/nl_NL.ts @@ -65,12 +65,12 @@ MainWindow - + Variables Variabelen - + Save selected Selectie opslaan @@ -78,170 +78,158 @@ - - + Name Naam - - - Type - Type - - - + Size Grootte - - Preview - Weergeven - - - - - + + + Capture Opname - + Screenshot Schermopname - - + + Frame skip: Frames overslaan: - - - - + + + + Settings Instellingen - + General Algemeen - + Automatically check for updates Automatisch controleren op updates - + Automatically save and restore state Automatisch status opslaan en laden - + Always show on top of other windows Altijd boven andere vensters weeergeven - + Use portable configuration Portable configuratie gebruiken - + Open debugger on reset or nmi Debugger openen bij een reset of nmi - + Enable software commands Softwarecommando's activeren - + Text size: Tekstgrootte: - + Display Scherm - + Skin Thema - + Scale: Schaal: - - + + % % - + Throttle: Reguleren: - + Key bindings Sneltoetsen - + File Locations Bestandslocaties - - + + Change path Pad aanpassen - + Saved Debug Opgeslagen Debug - + Saved Image Opgeslagen Image - + ROM Image ROM-bestand - + Setup wizard Installatiescherm - + Keypad Skin Color Themakleur toetsenbord - + Debug Debug - + Stop Stop @@ -270,7 +258,7 @@ - + CPU Status CPU Status @@ -287,8 +275,8 @@ - - + + Disassembly Disassembly @@ -296,8 +284,8 @@ - - + + Goto Ga naar @@ -315,11 +303,12 @@ + Refresh Vernieuwen - + Clear Wissen @@ -330,7 +319,7 @@ - + Timers Timers @@ -386,7 +375,7 @@ - + Breakpoints Breakpoints @@ -405,7 +394,7 @@ Ingeschakeld - + Add Toevoegen @@ -413,8 +402,8 @@ - - + + Remove Verwijderen @@ -428,7 +417,7 @@ - + Port Monitor Poort-Monitor @@ -484,7 +473,7 @@ - + Debug Control Debug Controle @@ -531,7 +520,7 @@ - + Memory Geheugen @@ -543,8 +532,8 @@ - - + + Search Zoeken @@ -560,7 +549,7 @@ RAM - + Memory View Geheugen-weergave @@ -594,7 +583,7 @@ - + Miscellaneous Diversen @@ -650,7 +639,7 @@ - + AutoTester AutoTester @@ -660,21 +649,12 @@ Test-Configuratie starten - - View calc variables - Rekenmachine-Variabelen weergeven - - - + Send files to calc Bestanden naar rekenmachine verzenden - Emulate physical LCD SPI drawing - Fysieke LCD SPI emuleren - - - + Auto. save and restore debug state Debug-Status automatisch opslaan en laden @@ -684,147 +664,142 @@ Rekenmachine Ontvangen - + View Calculator Variables Rekenmachine-Variabelen-weergeven - + Save group Groep opslaan - - Location - Locatie - - - + Calculator Send Rekenmachine Verzenden - + Resend Opnieuw verzenden - + Path Pad - + Screen Recording Schermopname - - + + Record Opnemen - + Optimize Optimaliseren - + Configuration Instellingen - + Pause emulation on focus change Emulatie pauzeren bij focuswisseling - + Emulation Emulatie - + Display / Emulation Speed Scherm- / Emulatiesnelheid - + Actual FPS: Actuele FPS: - - + + Console Console - + dock dock - + console console - + Auto scroll Autoscroll - - + + Calculator state Rekenmachine-Status - - + + Debug state Debug-status - + New CEmu instance Nieuwe CEmu - + Show key history Toetsgeschiedenis weergeven - + Bootable CEmu image Bootable CEmu-image - + Hide menu bar Menubalk verbergen - + Copy screen to clipboard Scherm naar klembord kopiëren - + Ctrl+Shift+C Ctrl+Shift+C - + Reset GUI docks GUI docks herstellen - + Reset CEmu CEmu opnieuw instellen @@ -1020,74 +995,70 @@ Hash (CRC): - + Selected Selectie - + Resend selected Selectie opnieuw verzenden - + Save transferred file paths on exit Bestandspaden opslaan - + Update status: Update status: - + sec sec - + Debugging Debuggen - + Tab between opcode / operands Tab tussen opcode / operanden - + Space between operands Spatie tussen operanden - - + + State Status - - + + Window configuration Vensterinstellingen - + Keypad Mapping Keymap-toewijzing - + Change Instance ID Instantie-ID aanpassen - - Emulate Pre-Revision I (IM 2) - Emuleer Pre-Revisie I (IM 2) - - + TI-Basic Debug TI-Basic Debug @@ -1143,13 +1114,13 @@ - + Watchpoints Watchpoints - + OS Variables OS-variabelen @@ -1171,7 +1142,7 @@ - + OS Stacks OS-stacks @@ -1186,371 +1157,367 @@ FP-stack - + Save PNG PNG opslaan - + Copy PNG PNG kopiëren - + Upscaling: Opschaling - + Nearest Neighbor Naaste buur - + Bilinear Bi-lineair - + Sharp Bilinear Scherp lineair - + Fullscreen: Volledig scherm: - + Stretch Uitrekken - + Preserve Aspect Verhoudingen behouden - + Integer Scale Schaal in geheel getal - + Allow dock grouped dragging Vensters gegroepeerd slepen toestaan - + Natural Natuurlijk - + SmartPad SmartPad - + Custom Aangepast - + ASIC revision: ASIC-revisie: - + Auto - + Rev A - + Rev I - + Rev M - + Current: Huidig: - + Emulate Python Edition Python Edition emuleren - + Emulate DMA to LCD memory DMA naar LCD-geheugen emuleren - + Emulate LCD gamma LCD-gamma emuleren - + Emulate LCD response time LCD-reactietijd emuleren - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) Sommige debugging-vensters zijn alleen zinvol binnen de context van normale OS-uitvoering (behalve wanneer bepaalde ASM-programma's draaien) - + Assume normal OS operation Normale OS-uitvoering aannemen - + May cause problems if boot code is incompatible. Use only if you know what you're doing. Kan problemen veroorzaken als opstartcode niet compatibel is. Gebruik alleen als je weet wat je doet. - + Allow any ASIC revision Elke ASIC-revisie toestaan - + Show data column Datakolom weergeven - + Use implicit mode Impliciete modus gebruiken - Opcode / operand space - Opcode / operand spatie - - - + Use uppercase font Hoofdletters gebruiken - + Show address column Adreskolom weergeven - + Bold disassembly symbols Vet gedemonteerde symbolen - + Load Laden - + Save Opslaan - + Edit Bewerken - - + + Reset Reset - - + + Keypad Toetsenbord - + &File &Bestand - + Export Exporteren - + Import Importeren - + Language Taal (Language) - + &Calculator &Rekenmachine - + Extras Extra's - + Screen Scherm - + Open... Openen… - + Ctrl+Shift+O Ctrl+Shift+O - + Exit Sluiten - + Ctrl+Shift+Q Ctrl+Shift+Q - + Rom setup wizard... Rom-installatiescherm… - - + + About CEmu Over CEmu - - + + Take PNG screenshot PNG schermopname maken - + Record animated PNG Animatie-PNG opnemen - + Record animated GIF Animatie-GIF opnemen - + Ctrl+Shift+X Ctrl+Shift+X - + About Qt Over Qt - + Check for updates... Controleren op updates… - + ROM image ROM-bestand - + English English - + Français Français - + Nederlands Nederlands - + Español Español - + Report a bug / give feedback Meld een probleem / Reageer - + Hide status bar Statusbalk verbergen - - + + RAM image RAM-bestand - + 简体中文 - + Simplified Chinese 简体中文 - + Reload Rom Rom opnieuw laden - + Reset calculator Reset rekenmachine - + Save state Status opslaan - + Restore state Status laden - + Reload ROM ROM opnieuw laden @@ -1565,23 +1532,23 @@ Div. reset - - + + Show ASCII ASCII weergeven - + Cannot locate calculator ID in the certificate. This is usually due to an improper ROM dump. Please try another ROM dump using a physical calculator. Kan rekenmachine-ID niet vinden in het certificaat. Dit is waarschijnlijk een gevolg van een slechte ROM-dump. Creëer een nieuwe ROM-dump van een fysieke rekenmachine. - + CEmu Change Certificate ID CEmu Certificaat-ID aanpassen - + Old ID: Oud ID: @@ -1660,82 +1627,73 @@ NMI veroorzaakt - + Run Run - + No Basic Program Executing. - + Executing Program: Programma uitvoeren: - + Equate files (*.inc *.lab *.map) Equate-bestanden (*.inc *.lab *.map) - + All Files (*.*) Alle bestanden (*.*) - - + Copy Address Adres kopiëren - + Copy Data Data kopiëren - + Goto VAT Memory View Ga naar VAT Geheugen-weergave - + Goto Disasm View Ga naar Disasm-weergave - - - + Toggle Breakpoint Breakpoint aan/uit - - - + Toggle Write Watchpoint Write watchpoint aan/uit - - - + Toggle Read Watchpoint Read watchpoint aan/uit - - - + Toggle Read/Write Watchpoint Read/write watchpoint aan/uit - + Error Fout @@ -1755,43 +1713,43 @@ String niet gevonden. - + Information Informatie - - + + Sync Changes Aanpassingen doorvoeren - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu kon de instellingen niet op de normale locatie opslaan. Portable-modus is ingesteld. - - + + Select saved image to restore from Selecteer opgeslagen image om te laden - - + + CEmu images (*.ce);;All files (*.*) CEmu-images (*.ce);;Alle bestanden (*.*) - + Set image to save to Image instellen om op te slaan - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1804,217 +1762,197 @@ CEmu maakt gebruik van een aanpasbare dock-style interface. Verplaats de tabs en (Let op: afhankelijk van uw versie kan u gegroepeerde tabbladen of een individuele tabblad slepen via de titel of bovenste balk) - + Run/Stop Run/Stop - + Reload Reload - + Add memory view Voeg geheugenweergave toe - + Add memory visualizer Voeg geheugen visualizer toe - + Memory Visualizer Geheugen Visualizer - + Keypress History Toetsgeschiedenis - + Clear History Geschiedenis wissen - + ROM images (*.rom) ROM-bestand (*.rom) - + Set ROM image to save to Stel ROM-image in om op te slaan - + RAM images (*.ram) RAM-bestand (*.ram) - + Set RAM image to save to Stel RAM-image in om op te slaan - + Select RAM image to load Selecteer RAM-bestand om te laden - + RAM images (*.ram);;All files (*.*) RAM-bestanden (*.ram);;Alle bestanden (*.*) - + Auto (%0) - + Current: %0 (change requires reset) Huidig: %0 (verandering vereist reset) - - + + N/A N.V.T. - + Actual FPS: Actuele FPS: - + Save Screen Scherm opslaan - + Failed to save screenshot. Schermopname niet kunnen opslaan. - + Saving Recording... Opname opslaan… - + Save Recorded PNG PNG-opname opslaan - + A failure occured during PNG recording. Er is een fout opgetreden bij de PNG-opname. - + Stop Recording... Opname stoppen… - + Saving... Opslaan… - + Saving Animated PNG... Animatie-PNG opslaan… - + Record animated PNG... Animatie-PNG opnemen… - + Copy version Kopieer versie - + Version copied! Versie gekopieerd! - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Makers:<br>%3<br>Met bijdragen van o.a.:<br>%4<br>Vertalingen aangeleverd door:<br>%5<br>Met dank aan de volgende projecten: %6<br>Programma-ikonen met dank aan %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] Dock-output omgeleid naar stdout. Gebruik het keuzerondje om dock in te schakelen. - TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;All Files (*.*) - TI-Variabelen (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;Alle Bestanden (*.*) - - - - Empty - Leeg - - - - - Can't preview this - Kan dit niet weergeven - - - - Archive - Archief - - - + Select at least two files to group Selecteer tenminste 2 variabelen om te groeperen - - + + Transfer error, see console for information: File: Overdrachtsfout, zie de console voor meer informatie: Bestand: - - + + Transfer completed successfully. Overdracht met succes voltooid. - + See the test config file format and make sure values are correct and referenced files are there. Bestudeer het test configuratie-bestandsformaat en zorg ervoor dat de waarden en de referentiebestanden correct vermeld staan. - + Make sure you have entered a valid start/size pair or preset. Zorg voor een geldige start/grootte-combinatie of gedefinieerde waarde. - + Could not convert those values into numbers Kan deze waarden niet omzetten in getallen - + Could not retrieve this memory chunk Kan dit geheugenblok niet ophalen - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. Dit image lijkt niet afkomstig van een CE. Wlt u het toch proberen te laden? Dit kan instabiliteit opleveren. @@ -2024,124 +1962,114 @@ Bestand: PC instellen - + Run Until Run Totdat - - Goto Disassembly View - Ga naar Disassembly-weergave - - - + Enter image path Voer image-pad in - - + + Emulated Speed: Emulatie-snelheid: - - + + PNG images (*.png) PNG afbeeldingen (*.png) - + Recording... Opnemen… - + Stop Recording Opname stoppen - + Check for updates Controleer op updates - - Resume emulation - Emulatie hervatten - - - - Can't preview this OS variable - Kan deze OS-variabele niet weergeven - - - + Select at least one file to transfer Selecteer tenminste een bestand voor de overdracht - + TI Group (*.8cg);;All Files (*.*) TI-Groep (*.8cg);;Alle Bestanden (*.*) - + No translation available for this language :( Geen vertaling beschikbaar voor deze taal :( - + Saving failed. Please check write permissions in settings directory. Opslaan mislukt. Controleer de toegangsrechten op de instellingenmap. - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) TI-Variabelen (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;Alle Bestanden (*.*) - + + Hide Calculator Variables + + + + Error. No config loaded Fout. Geen configuratie geladen - + Error. Couldn't follow the test sequence defined in the configuration Fout. Kon de tesopdrachten in de configuratie niet begrijpen - + Error. Unknown one - wat? Fout. Onbekende wie - wat? - + Please choose a json file or type its path. Kies a.u.b. een json-bestand of geef de locatie. - + Couldn't go to where the JSON file is. Kon de locatie van het JSON-bestand niet bereiken. - + Couldn't read JSON file. Kon het JSON-bestand niet lezen. - + Unable to open the file. Niet in staat het bestand te openen. - + Test results Testresultaten - + Out of %2 tests attempted: %4 passed %6 failed @@ -2150,25 +2078,22 @@ Bestand: %6 mislukt - + Launch program Programma uitvoeren - - - - + Goto Memory View Ga naar Geheugen-weergave - + CEmu Change ID CEmu-ID aanpassen - + New ID: Nieuw ID: @@ -2188,17 +2113,17 @@ Bestand: Debugging-informatie (*.ini);;Alle bestanden (*.*) - + Docks Docks - + Enable UI edit mode UI bewerk-modus activeren - + Warning Waarschuwing @@ -2272,81 +2197,53 @@ Plaats hiertoe de bootable image in dezelfde folder als de CEmu executable. Als Niet in staat aangepaste keymap in te stellen. - + Keep migratable settings Migreerbare instellingen behouden - + This version of CEmu is not compatible with your settings, probably made by an older version. Would you like to erase them to prevent any unexpected behavior? Uw instellingen, waarschijnlijk gemaakt met een oudere versie, komen niet overeen met deze versie van CEmu. Wilt u deze wissen om onverwacht gedrag te voorkomen? - + Window Config (*.ini) Venster-instellingen (*.ini) - + Save window configuration Venster-instellingen opslaan - + Window Config (*.ini);;All files (*.*) Venster-instellingen (*.ini);; Alle bestanden (*.*) - + Natural keymap is not exportable Natuurlijke keymap is niet exporteerbaar - + Keymap Config (*.ini) Keymap-instellingen (*.ini) - + Save keymap configuration Keymap-instellingen opslaan - + Toggle Windows Console Windows Console aan/uit QObject - - Transfer error - Overdrachtsfout - - - Transfer Error, see console for information. - Overdrachtsfout, zie de console voor meer informatie - - - Transfer Warning, see console for information. - Overdrachtswaarschuwing, zie de console voor meer informatie - - - Transfer Error, see console for information. -File: - OverdrachtsFout, zie de console voor meer informatie. -Bestand: - - - Transfer warning - Overdracht waarschuwing - - - Transfer Warning, see console for information. -File: - Overdracht waarschuwing, zie de console voor meer informatie. -Bestand: - Transfer issue @@ -2361,101 +2258,97 @@ Bestand: RomSelection - + CEmu Setup CEmu Installatie - + CEmu ROM Selection CEmu ROM-selectie - + Welcome to CEmu! In order to get started, you will need to provide a ROM image. You can either create one here, or select one from your computer. Welkom bij CEmu! Om te kunnen beginnen hebt u een ROM-bestand nodig. U kunt er hier een maken of een ROM-bestand van uw computer selecteren. - + Browse my computer for a ROM image Een ROM-bestand op mijn computer zoeken - + To run the program, select Asm( from the catalog by pressing [2nd] then [0], and then pressing enter at the following prompt. You do not need the Asm( part if you're on OS 5.3 or later. Note that if you're on OS 5.5 or later, you will need to use an assembly program launcher instead (like a shell, or AsmHook, both of which can be installed through arTIfiCE first). Om het programma te starten, selecteer je Asm( uit de catalogus door op [2nd] en dan op [0] te drukken en vervolgens op enter te drukken bij de volgende prompt. Je hebt het Asm( gedeelte niet nodig als je op OS 5.3 of later zit. Merk op dat als je op OS 5.5 of later zit, je in plaats daarvan een assembly programma launcher moet gebruiken (zoals een shell of AsmHook, die beide eerst via arTIfiCE geïnstalleerd kunnen worden). - + Using your computer's calculator connectivity software, copy all the variables prefixed with "ROMData" to your computer. Drag and drop all of them into the box below. Gebruik uw computer's verbindingssoftware en kopieer alle variabelen beginnend met "ROMData" naar uw computer. Sleep al deze ROMData naar het onderstaande vak. - + Drop ROM segments here Sleep ROM-segmenten hierheen - + Browse... Zoeken… - + CEmu Version: CEmu-versie: - + Note: In most countries, it is illegal to share or download ROM images for devices you do not own. Opmerking: In de meeste landen is het illegaal om ROM-bestanden te delen of downloaden van apparaten die u niet zelf bezit. - - - + + + ... - + Create a ROM image from your calculator Maak een ROM-bestand van uw rekenmachine - + Cancel and close Annuleren en afsluiten - + Click this button to save the dumper program to your computer, then send the program to your real calculator. Klik op deze knop om het dumper-programma op te slaan op uw computer en verzend dit programma naar uw echte rekenmachine. - + Save Program... Programma opslaan… - To run the program, select Asm( from the catalog by pressing [2nd][0], and then pressing enter at the following prompt. - Om het programma uit te voeren, selecteer Asm( in de Catalogus door [2nd][0] in te toetsen en vervolgens Enter. - - - - + + Back Terug - + Next Volgende - + Choose a place to save your ROM image. Once complete, CEmu will load automatically. Kies een locatie om uw ROM-bestand op te slaan. Als dat gebeurd is kan CEmu het automatisch laden. @@ -2517,6 +2410,55 @@ File: Bestand: + + VarTableModel + + + Empty + Leeg + + + + + Can't preview this + Kan dit niet weergeven + + + + Can't preview this OS variable + Kan deze OS-variabele niet weergeven + + + + Archive + Archief + + + + Name + Naam + + + + Location + Locatie + + + + Type + Type + + + + Size + Grootte + + + + Preview + Weergeven + + VisualizerDisplayWidget @@ -2553,52 +2495,52 @@ Bestand: Instellingen wijzigen - + Current LCD State Huidige LCD-toestand - + 8bpp Buffer 1 8bpp Buffer 1 - + 8bpp Buffer 2 8bpp Buffer 2 - + Palette View Pallet weergave - + Base Address Basisadres - + Scale Schaal - + Width Breedte - + Height Hoogte - + Grid Raster - + Submit Indienen diff --git a/gui/qt/i18n/zh_CN.qm b/gui/qt/i18n/zh_CN.qm index dba365820ef3acd16a1351cbbffdee215d4b60c1..4d69b585512f95e1b37d82d8f13041c58750efa2 100644 GIT binary patch delta 4123 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 WZAy|Z#Wvq)ntidSv1(Dd>i+>P-iq)5 diff --git a/gui/qt/i18n/zh_CN.ts b/gui/qt/i18n/zh_CN.ts index e4d481117..1575514a7 100644 --- a/gui/qt/i18n/zh_CN.ts +++ b/gui/qt/i18n/zh_CN.ts @@ -67,34 +67,33 @@ MainWindow - - + + Keypad "Virtual keypad" 虚拟键盘 - + Variables 变量 - + Watchpoints 观察点 - - + Size 大小 - + OS Variables 系统变量 @@ -104,52 +103,52 @@ 更改计算器许可ID - + Resend selected 重新发送选中的内容 - + Save transferred file paths on exit 在退出时保存传输文件路径 - - - + + + Capture 截图 - + Screenshot 截图 - - - - + + + + Settings 设置 - + General 通用 - + Automatically save and restore state 自动保存和恢复状态 - + ROM Image ROM镜像 - + Debug 调试 @@ -164,24 +163,24 @@ 重置杂项 - - + + Show ASCII 显示 ASCII - + Cannot locate calculator ID in the certificate. This is usually due to an improper ROM dump. Please try another ROM dump using a physical calculator. "Can't find calculator ID in certificate, this is usually caused by an incorrect ROM dump, please try to get another ROM image from physical calculator." 在许可证书中找不到计算器ID,这通常是由于ROM镜像不正确。请尝试从实体计算器中重新获取ROM镜像。 - + CEmu Change Certificate ID CEmu更改许可ID - + Old ID: 旧ID: @@ -260,78 +259,69 @@ NMI 被触发 - + Run 运行 - + No Basic Program Executing. 没有正在执行的 Basic Program。 - + Executing Program: 执行中的 Program: - + Equate files (*.inc *.lab *.map) "ASM header file" 汇编头文件 (*.inc *.lab *.map) - + All Files (*.*) 所有文件 (*.*) - - + Copy Address 拷贝地址 - + Copy Data 拷贝数据 - + Goto VAT Memory View 转到VAT内存视图 - + Goto Disasm View 转到反汇编视图 - - - + Toggle Breakpoint 切换断点 - - - + Toggle Write Watchpoint 切换写入监视点 - - - + Toggle Read Watchpoint 切换读取监视点 - - - + Toggle Read/Write Watchpoint 切换读取/写入监视点 @@ -351,52 +341,47 @@ - - + + Goto 转到 - - + + Disassembly 反汇编 - - Preview - 预览 - - - + Always show on top of other windows "Always show on top of other windows" 始终在其他窗口之上显示 - + File Locations 文件路径 - + Saved Image 保存的镜像 - + Skin 外观 - + Scale: 比例: - + Keypad Skin Color 键盘外观颜色 @@ -420,11 +405,12 @@ + Refresh 刷新 - + Clear 清除 @@ -444,7 +430,7 @@ - + Port Monitor 端口监视器 @@ -480,22 +466,22 @@ - + Memory 内存 - + dock dock - + console 控制台 - + Auto scroll 自动滚动 @@ -674,92 +660,77 @@ 哈希值(CRC): - - View calc variables - 查看计算器变量 - - - + Selected 选中的 - + Send files to calc 发送文件到计算器 - + Tab between opcode / operands 操作码/操作数之间的制表符 - + Space between operands 操作数之间的空格 - + Keypad Mapping 键盘映射 - + Change Instance ID 更改实例ID - Emulate physical LCD SPI drawing - "Emulate physical LCD SPI drawing process" - 模拟实体计算器LCD SPI绘制过程 - - - + Auto. save and restore debug state 自动保存并恢复调试状态 - Emulate Pre-Revision I (IM 2) - "Emulate Pre-Revision I hardware (IM 2)" - 模拟Revision I之前的硬件 (IM 2) - - - + Record animated PNG 录制PNG动画 - + Ctrl+Shift+X Ctrl+Shift+X - + Reset calculator 重置计算器 - + Save state 保存状态 - + Restore state 恢复状态 - + Reload ROM 重新装载ROM - + Screen 屏幕 - + Reload Rom 重新装载ROM @@ -773,46 +744,46 @@ 地址 - + Automatically check for updates 自动检查更新 - + Use portable configuration 使用便携式设置 - + Open debugger on reset or nmi 在重置或NMI时打开调试器 - + Enable software commands 启用软件命令 - - + + % % - - + + Change path 更改路径 - + Saved Debug "saved debug sessions" 保存的调试会话 - + Breakpoints 断点 @@ -833,8 +804,8 @@ 标志位 - - + + Frame skip: 跳帧: @@ -846,13 +817,13 @@ - + Stop 停止 - + Add 添加 @@ -874,23 +845,23 @@ 冻结 - + Save selected 保存所选内容 - + Throttle: "(emulation) speed limit" 限速: - + Text size: 文字大小: - + Key bindings 键盘绑定 @@ -922,28 +893,28 @@ 同步更改 - + Rom setup wizard... ROM 设置向导… - - + + Take PNG screenshot 以PNG格式截图 - + Record animated GIF 录制GIF动画 - + Check for updates... 检查更新… - + About Qt 关于 Qt @@ -953,7 +924,7 @@ 中断 - + Display 显示 @@ -963,8 +934,8 @@ 亮度 - - + + Console 控制台 @@ -972,22 +943,16 @@ - - + Name 名称 - - - Type - 类型 - - - + + Remove 移除 @@ -1014,14 +979,14 @@ - - + + Search 搜索 - - + + Sync Changes 同步更改 @@ -1031,27 +996,27 @@ RAM - + Memory View 内存视图 - + &File &文件 - + Open... 打开... - + Exit 退出 - + Setup wizard 设置向导 @@ -1062,13 +1027,13 @@ - + Debug Control 调试控制 - + CPU Status CPU状态 @@ -1107,7 +1072,7 @@ - + Timers 定时器 @@ -1196,7 +1161,7 @@ - + OS Stacks 系统栈 @@ -1212,7 +1177,7 @@ - + Miscellaneous 杂项 @@ -1258,7 +1223,7 @@ - + AutoTester 自动测试器 @@ -1279,72 +1244,67 @@ 从计算器接收 - + View Calculator Variables 查看计算器变量 - + Save group "save as group" 保存为组 - - Location - 位置 - - - + Calculator Send "Send to calculator" 发送至计算器 - + Resend 重新发送 - + Path 路径 - + Save PNG 保存PNG - + Copy PNG 拷贝PNG - + Screen Recording 屏幕录制 - - + + Record 录制 - + Optimize 优化 - + Configuration 配置 - + TI-Basic Debug TI-Basic 调试 @@ -1384,42 +1344,42 @@ 临时解析器 - + Pause emulation on focus change 在CEmu不在最上方时暂停模拟 - + Allow dock grouped dragging 允许项目组拖移 - + Natural 自然的 - + Custom 自定义 - + Emulation 模拟 - + Display / Emulation Speed 显示/模拟速度 - + Actual FPS: 实际帧率: - + Update status: 更新状态: @@ -1434,346 +1394,342 @@ - + Upscaling: - + Nearest Neighbor - + Bilinear - + Sharp Bilinear - + Fullscreen: - + Stretch - + Preserve Aspect - + Integer Scale - + SmartPad SmartPad - + ASIC revision: - + sec - + Auto - + Rev A - + Rev I - + Rev M - + Current: - + Emulate Python Edition - + Emulate DMA to LCD memory - + Emulate LCD gamma - + Emulate LCD response time - + Debugging 调试 - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) "Some of the debugging views only make sense when TIOS is running normally (when some assembly programs are running, it may not make sense, for instance)" 一些调试器视图仅在TIOS正常运行的情况下才有意义(例如在一些汇编语言程序运行时就可能没有意义) - + Assume normal OS operation Asumir el funcionamiento normal del OS 假设操作系统工作正常 - + May cause problems if boot code is incompatible. Use only if you know what you're doing. - + Allow any ASIC revision - + Show data column 显示数据栏 - + Use implicit mode "omit implicit operands" 省略隐含的操作数 - Opcode / operand space - 操作码/操作数空间 - - - + Use uppercase font 使用大写字母 - + Show address column 显示地址栏 - + Bold disassembly symbols 为汇编符号使用粗体 - - + + State 状态 - + Load 加载 - + Save 保存 - + Edit 编辑 - - + + Reset 重设 - + Export 导出 - + Import 导入 - + Language 语言 - + &Calculator &计算器 - + Extras 其他 - + Ctrl+Shift+O Ctrl+Shift+O - + Ctrl+Shift+Q Ctrl+Shift+Q - - + + About CEmu 关于 CEmu - + ROM image ROM镜像 - - + + Calculator state 计算器状态 - - + + Debug state 调试状态 - + New CEmu instance 新建CEmu实例 - + Show key history 显示按键历史记录 - + Bootable CEmu image 可启动的CEmu镜像 - + Hide menu bar 隐藏菜单栏 - + Copy screen to clipboard 将屏幕图像拷贝到剪贴板 - + Ctrl+Shift+C Ctrl+Shift+C - + Reset GUI docks 重置界面项目 - + Reset CEmu 重置CEmu - + English English - + Français Français - + Nederlands Nederlands - + Español Español - - + + Window configuration 窗口设置 - + Report a bug / give feedback 报告漏洞/反馈意见 - + Hide status bar 隐藏状态栏 - - + + RAM image RAM镜像 - + 简体中文 简体中文 - + Simplified Chinese Simplified Chinese - + Docks 项目 - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1786,37 +1742,37 @@ CEmu采用可自定义的项目界面,您可以在屏幕上拖拽标签页和 (注意:取决于您的版本,您可以分别从标题或标签栏中拖动一组或单个标签) - - + + PNG images (*.png) PNG图像 (*.png) - - + + Select saved image to restore from 选择用于恢复的已保存的镜像 - - + + CEmu images (*.ce);;All files (*.*) CEmu镜像 (*.ce);;所有文件 (*.*) - + Information 信息 - + Set image to save to 设置镜像保存路径 - - + + Emulated Speed: 模拟速度: @@ -1836,193 +1792,168 @@ CEmu采用可自定义的项目界面,您可以在屏幕上拖拽标签页和 <b>CEmu在检查更新时出现了错误.</b><br/>您可以到<a href='https://github.com/CE-Programming/CEmu/releases/latest'></a>来自行查看。 - + Recording... 录制中... - + Stop Recording 停止录制 - - Can't preview this OS variable - 无法预览该系统变量 - - - + Select at least one file to transfer 选择至少一个文件以传输 - + Actual FPS: 实际帧率: - + Run/Stop 运行/停止 - + Reload 重新加载 - + Keypress History 键盘历史记录 - + Clear History 清除历史记录 - + Save Screen 保存屏幕 - + Failed to save screenshot. 无法保存截屏。 - + Saving Recording... 保存录制文件... - + Save Recorded PNG 保存录制的PNG - + A failure occured during PNG recording. PNG录制时出现了错误。 - + Stop Recording... 停止录制… - + Saving... 保存中… - + Saving Animated PNG... 保存PNG动画... - + Record animated PNG... 录制PNG动画... - + Copy version 拷贝版本 - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>GitHub 主页</a><br><br>开发者:<br>%3<br>其他贡献者:<br>%4<br>翻译:<br>%5<br>感谢以下项目: %6<br>应用内图标由 %7 提供<br><br>CEmu遵循 %8 协议,且不是一个德州仪器的产品,同时也不隶属于德州仪器<br><br> - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] 项目输出重定向到标准输出,使用单选按钮启用项目。 - TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;All Files (*.*) - TI 文件 (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.b84 *.b83);;Todos Archivos (*.*) - - - - Empty - - - - - - Can't preview this - 无法预览 - - - - Archive - 存档 - - - + Select at least two files to group 选择至少两个文件以组合 - + TI Group (*.8cg);;All Files (*.*) TI Group (*.8cg);;所有文件 (*.*) - - + + Transfer error, see console for information: File: 传输失败,请打开控制台查看更多信息: 文件: - - + + Transfer completed successfully. 传输已完成。 - + Error. No config loaded 错误。无加载配置 - + Error. Couldn't follow the test sequence defined in the configuration 错误。无法跟随在配置中的测试序列 - + Error. Unknown one - wat? 未知错误—啥? - + See the test config file format and make sure values are correct and referenced files are there. "Please see the test config file format and check if all values are correct and referenced files exist." 请参见测试配置文件的格式并确认数值都是正确的且被引用的文件均存在。 - + Make sure you have entered a valid start/size pair or preset. "Make sure the entered `start`/`size` value or preset is valid" 确保输入的`开始`/`大小`值或预设有效。 - + Could not convert those values into numbers 无法将值转换为数字 - + Could not retrieve this memory chunk 无法检索该内存块 - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. 该图像似乎不是来自一台CE,您确定要加载它吗?这可能导致不稳定。 @@ -2032,135 +1963,135 @@ File: 设置PC - + Run Until 运行直到 - - Goto Disassembly View - 查看反汇编视图 - - - + Enter image path 输入图像路径 - + Please choose a json file or type its path. 请选择一个json文件或输入其路径。 - + No translation available for this language :( 该语言目前没有翻译:( - + Add memory view 添加内存视图 - + Add memory visualizer 添加内存可视化器 - + Memory Visualizer 内存可视化器 - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu无法写入到标准设置位置 便携式模式已启用。 - + ROM images (*.rom) ROM镜像 (*.rom) - + Set ROM image to save to 设置ROM镜像保存路径 - + RAM images (*.ram) RAM镜像 (*.ram) - + Set RAM image to save to 设置内存(RAM)镜像保存路径 - + Select RAM image to load 选择加载的内存(RAM)镜像 - + RAM images (*.ram);;All files (*.*) RAM镜像 (*.ram);;所有文件 (*.*) - + Saving failed. Please check write permissions in settings directory. 保存失败,请检查写入权限设置. - + Auto (%0) - + Current: %0 (change requires reset) - - + + N/A 不适用 - + Version copied! 已拷贝版本信息! - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) - + + Hide Calculator Variables + + + + Couldn't go to where the JSON file is. 无法进入JSON文件位置。 - + Couldn't read JSON file. 无法读取JSON文件。 - + Unable to open the file. 无法打开文件。 - + Test results 测试结果 - + Out of %2 tests attempted: %4 passed %6 failed @@ -2169,25 +2100,22 @@ Portable mode has been activated. %6 失败 - + Launch program 启动程序 - - - - + Goto Memory View 显示内存视图 - + CEmu Change ID 更改CEmu ID - + New ID: 新ID: @@ -2207,12 +2135,12 @@ Portable mode has been activated. 调试信息 (* .ini);;所有文件 (*. *) - + Enable UI edit mode 启用UI编辑模式 - + Warning 警告 @@ -2271,56 +2199,51 @@ The bootable image should be placed in the same directory as the CEmu executable 无法自定义键盘映射。 - + Keep migratable settings 保留可迁移设置 - + This version of CEmu is not compatible with your settings, probably made by an older version. Would you like to erase them to prevent any unexpected behavior? "This version of CEmu does not match with your settings, it's probably from an older version. Would you like to delete them to prevent unexpected things to happen?" 该CEmu版本和您的设置不匹配,其可能来源于一个历史版本。您愿意删除它们以防止意外情况发生吗? - + Window Config (*.ini) 窗口设置 (*.ini) - + Save window configuration 保存窗口设置 - + Window Config (*.ini);;All files (*.*) 窗口设置 (*.ini);;所有文件 (*.*) - + Natural keymap is not exportable - + Keymap Config (*.ini) 键盘映射配置 (*.ini) - + Save keymap configuration 保存键盘映射 - + Check for updates 检查更新 - - - Resume emulation - 恢复模拟 - Input Address (Or Equate): @@ -2338,45 +2261,18 @@ The bootable image should be placed in the same directory as the CEmu executable 没有找到字符串。 - + Error 错误 - + Toggle Windows Console 切换窗口控制台 QObject - - Transfer error - 传输错误 - - - Transfer Error, see console for information. - 传输错误,请打开控制台来查看更多信息。 - - - Transfer Warning, see console for information. - 传输警告,请打开控制台来查看更多信息。 - - - Transfer Error, see console for information. -File: - 传输错误 -文件: - - - Transfer warning - 传输警告 - - - Transfer Warning, see console for information. -File: - 传输警告 - Transfer issue @@ -2391,101 +2287,97 @@ File: RomSelection - + CEmu Setup CEmu向导 - + Welcome to CEmu! In order to get started, you will need to provide a ROM image. You can either create one here, or select one from your computer. 欢迎使用CEmu! 您需要提供一个ROM镜像来开始使用,您可以在此处创建一个,也可以从计算机中选择一个。 - + To run the program, select Asm( from the catalog by pressing [2nd] then [0], and then pressing enter at the following prompt. You do not need the Asm( part if you're on OS 5.3 or later. Note that if you're on OS 5.5 or later, you will need to use an assembly program launcher instead (like a shell, or AsmHook, both of which can be installed through arTIfiCE first). 要运行该程序,请从目录中选择 Asm(,按 [2],然后按 [0],并在下面的提示符下按回车键。如果操作系统是 5.3 或更高版本,则不需要 Asm( 部分。 请注意,如果您的操作系统是 5.5 或更高版本,则需要使用汇编程序启动器(如 shell 或 AsmHook,这两种程序都可以先通过 arTIfiCE 安装)。 - + Using your computer's calculator connectivity software, copy all the variables prefixed with "ROMData" to your computer. Drag and drop all of them into the box below. 使用您电脑上的计算器连接软件, 将所有前缀为 "ROMData" 的复制到您的电脑上 并把它们拖到下方的框中。 - + Drop ROM segments here 将ROM文件拖到这里 - + Browse... 选取文件… - + Note: In most countries, it is illegal to share or download ROM images for devices you do not own. 注意: 在大多数国家/地区,共享或下载不属于您设备的ROM镜像是非法的。 - - - + + + ... ... - + Create a ROM image from your calculator 为您的计算器创建一个ROM镜像 - + Cancel and close 取消并关闭 - + Click this button to save the dumper program to your computer, then send the program to your real calculator. 单击此按钮将转存程序保存到您的计算机,然后将程序发送到您的实体计算器。 - + Save Program... 保存程序... - To run the program, select Asm( from the catalog by pressing [2nd][0], and then pressing enter at the following prompt. - 要运行该程序,请用 [2nd][0] 打开目录并选择 Asm(,然后在屏幕上显示如下内容时按下 Enter 键。 - - - - + + Back 返回 - + Choose a place to save your ROM image. Once complete, CEmu will load automatically. 选择一个保存您ROM镜像的位置,CEmu在下次启动时将会自动加载该镜像。 - + CEmu ROM Selection CEmu ROM镜像选择 - + CEmu Version: CEmu 版本: - + Next 下一个 - + Browse my computer for a ROM image 在我的电脑上查找ROM镜像 @@ -2547,6 +2439,55 @@ File: 文件: + + VarTableModel + + + Empty + + + + + + Can't preview this + 无法预览 + + + + Can't preview this OS variable + 无法预览该系统变量 + + + + Archive + 存档 + + + + Name + 名称 + + + + Location + 位置 + + + + Type + 类型 + + + + Size + 大小 + + + + Preview + 预览 + + VisualizerDisplayWidget @@ -2583,52 +2524,52 @@ File: 调整配置 - + Current LCD State 当前LCD状态 - + 8bpp Buffer 1 8bpp缓冲区1 - + 8bpp Buffer 2 8bpp缓冲区2 - + Palette View 调色板视图 - + Base Address 基址 - + Scale 缩放 - + Width 宽度 - + Height 高度 - + Grid 网格 - + Submit 提交 From a1382351c0d0012bc87bd996e6b2773b8d77040d Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Thu, 22 Aug 2024 19:49:19 -0400 Subject: [PATCH 4/8] gui: Refresh var list incrementally, receive vars even if type changed since refresh --- core/vat.c | 54 +++++++++++++-- core/vat.h | 2 + gui/qt/mainwindow.cpp | 24 +++++-- gui/qt/vartablemodel.cpp | 144 +++++++++++++++++++++++++++++++++------ gui/qt/vartablemodel.h | 21 ++++-- 5 files changed, 209 insertions(+), 36 deletions(-) diff --git a/core/vat.c b/core/vat.c index dc63d76d9..131d1ac33 100644 --- a/core/vat.c +++ b/core/vat.c @@ -426,19 +426,63 @@ bool vat_search_next(calc_var_t *var) { } bool vat_search_find(const calc_var_t *target, calc_var_t *result) { - /* Ignore linked formula when comparing list names */ - bool isList = calc_var_is_list(target); vat_search_init(result); while (vat_search_next(result)) { - if (result->type == target->type && - result->namelen == target->namelen && - !memcmp(result->name, target->name, target->namelen - isList)) { + if (0 == calc_var_compare_names(target, result)) { return true; } } return false; } +int calc_var_compare_names(const calc_var_t *left, const calc_var_t *right) { + bool leftIsAns = !left->named & (left->name[0] == 0x72); + bool rightIsAns = !right->named & (right->name[0] == 0x72); + if (leftIsAns || rightIsAns) { + return leftIsAns - rightIsAns; + } + /* Ignore linked formula when comparing list names */ + uint8_t leftNameLen = left->namelen - calc_var_is_list(left); + uint8_t rightNameLen = right->namelen - calc_var_is_list(right); + int cmp = memcmp(left->name, right->name, leftNameLen < rightNameLen ? leftNameLen : rightNameLen); + if (cmp != 0) { + return cmp; + } + cmp = leftNameLen - rightNameLen; + if (cmp != 0) { + return cmp; + } + if (likely(left->type == right->type)) { + return 0; + } + return calc_var_normalized_type(left->type) - calc_var_normalized_type(right->type); +} + +calc_var_type_t calc_var_normalized_type(calc_var_type_t type) { + switch (type) { + case CALC_VAR_TYPE_REAL: + case CALC_VAR_TYPE_REAL_FRAC: + case CALC_VAR_TYPE_MIXED_FRAC: + case CALC_VAR_TYPE_REAL_RADICAL: + case CALC_VAR_TYPE_REAL_PI: + case CALC_VAR_TYPE_REAL_PI_FRAC: + case CALC_VAR_TYPE_CPLX: + case CALC_VAR_TYPE_CPLX_FRAC: + case CALC_VAR_TYPE_CPLX_RADICAL: + case CALC_VAR_TYPE_CPLX_PI: + case CALC_VAR_TYPE_CPLX_PI_FRAC: + return CALC_VAR_TYPE_REAL; + case CALC_VAR_TYPE_REAL_LIST: + case CALC_VAR_TYPE_CPLX_LIST: + return CALC_VAR_TYPE_REAL_LIST; + case CALC_VAR_TYPE_PROG: + case CALC_VAR_TYPE_PROT_PROG: + return CALC_VAR_TYPE_PROG; + default: + return type; + } +} + bool calc_var_is_list(const calc_var_t *var) { return var && (var->type == CALC_VAR_TYPE_REAL_LIST || var->type == CALC_VAR_TYPE_CPLX_LIST); } diff --git a/core/vat.h b/core/vat.h index 76b5e366a..4b4b41b35 100644 --- a/core/vat.h +++ b/core/vat.h @@ -68,6 +68,8 @@ void vat_search_init(calc_var_t *); bool vat_search_next(calc_var_t *); bool vat_search_find(const calc_var_t *, calc_var_t *); +int calc_var_compare_names(const calc_var_t *, const calc_var_t *); +calc_var_type_t calc_var_normalized_type(calc_var_type_t); bool calc_var_is_list(const calc_var_t *); bool calc_var_is_prog(const calc_var_t *); bool calc_var_is_asmprog(const calc_var_t *); diff --git a/gui/qt/mainwindow.cpp b/gui/qt/mainwindow.cpp index 813c20361..d01947dd0 100644 --- a/gui/qt/mainwindow.cpp +++ b/gui/qt/mainwindow.cpp @@ -141,6 +141,8 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U m_varTableModel = new VarTableModel(ui->emuVarView); QSortFilterProxyModel *varTableSortModel = new QSortFilterProxyModel(m_varTableModel); varTableSortModel->setSourceModel(m_varTableModel); + varTableSortModel->setSortCaseSensitivity(Qt::CaseInsensitive); + varTableSortModel->setSortLocaleAware(true); ui->emuVarView->setModel(varTableSortModel); ui->emuVarView->sortByColumn(VarTableModel::VAR_NAME_COL, Qt::AscendingOrder); @@ -2063,22 +2065,32 @@ void MainWindow::varSaveSelectedFiles() { varReceive([this, dir = dialog.directory().absolutePath()](bool isBlocked) { QString name; QString filename; - bool good = true; + QString errMsg; for (int currRow = 0; currRow < ui->emuVarView->model()->rowCount(); currRow++) { QModelIndex nameIndex = ui->emuVarView->model()->index(currRow, VarTableModel::VAR_NAME_COL); if (nameIndex.data(Qt::CheckStateRole) == Qt::Checked) { - calc_var_t var = nameIndex.data(Qt::UserRole).value(); + calc_var_t var, varName = nameIndex.data(Qt::UserRole).value(); + // Find the variable first to ensure the current type is used for the file extension + if (!vat_search_find(&varName, &var)) { + if (calc_var_is_list(&varName)) { + // Remove any linked formula before generating filename + varName.name[varName.namelen - 1] = 0; + } + name = QString(calc_var_name_to_utf8(varName.name, varName.namelen, varName.named)); + errMsg = tr("Transfer error, variable no longer exists: ") + name; + break; + } if (calc_var_is_list(&var)) { // Remove any linked formula before generating filename var.name[var.namelen - 1] = 0; } name = QString(calc_var_name_to_utf8(var.name, var.namelen, var.named)); - filename = dir + "/" + name + "." + m_varExtensions[var.type1]; + filename = dir + "/" + name + "." + m_varExtensions[var.type]; if (emu_receive_variable(filename.toStdString().c_str(), &var, 1) != LINK_GOOD) { - good = false; + errMsg = tr("Transfer error, see console for information:\nFile: ") + filename; break; } } @@ -2087,10 +2099,10 @@ void MainWindow::varSaveSelectedFiles() { emu.unblock(); } - if (good) { + if (errMsg.isEmpty()) { QMessageBox::information(this, MSG_INFORMATION, tr("Transfer completed successfully.")); } else { - QMessageBox::critical(this, MSG_ERROR, tr("Transfer error, see console for information:\nFile: ") + filename); + QMessageBox::critical(this, MSG_ERROR, errMsg); } }); } diff --git a/gui/qt/vartablemodel.cpp b/gui/qt/vartablemodel.cpp index a3d81630a..39ec69df6 100644 --- a/gui/qt/vartablemodel.cpp +++ b/gui/qt/vartablemodel.cpp @@ -4,25 +4,75 @@ #include "utils.h" #include +#include +#include Q_DECLARE_METATYPE(calc_var_t) -VarTableModel::VarData::VarData(const calc_var_t &var) : info(var), data(reinterpret_cast(var.data), var.size), checked(Qt::Unchecked) { - info.data = reinterpret_cast(data.data()); - updatePreview(); +VarTableModel::VarData::VarData(const calc_var_t &var) : info(var), previewState(PreviewState::Outdated), checked(false) { + info.data = new uint8_t[var.size]; + memcpy(info.data, var.data, var.size); +} + +VarTableModel::VarData::~VarData() { + delete[] info.data; +} + +VarTableModel::VarData::VarData(VarData &&other) noexcept { + info.data = nullptr; + *this = std::move(other); +} + +VarTableModel::VarData &VarTableModel::VarData::operator=(VarData &&other) noexcept { + uint8_t *data = info.data; + info = other.info; + other.info.data = data; + preview = std::move(other.preview); + previewState = other.previewState; + checked = other.checked; + return *this; +} + +uint8_t VarTableModel::VarData::updateInfo(const calc_var_t &var) { + uint8_t changed = 0; + if (var.namelen != info.namelen || + 0 != memcmp(var.name, info.name, var.namelen)) { + changed |= (1 << VAR_NAME_COL); + } + if (var.archived != info.archived) { + changed |= (1 << VAR_LOCATION_COL); + } + if (var.type != info.type) { + changed |= (1 << VAR_TYPE_COL); + } + uint8_t *data = info.data; + if (var.size != info.size) { + changed |= (1 << VAR_SIZE_COL) | (1 << VAR_PREVIEW_COL); + data = new uint8_t[var.size]; + delete[] info.data; + } else if (0 != memcmp(var.data, data, var.size)) { + changed |= (1 << VAR_PREVIEW_COL); + } + info = var; + info.data = data; + if (changed & (1 << VAR_PREVIEW_COL)) { + memcpy(info.data, var.data, var.size); + previewState = PreviewState::Outdated; + } + return changed; } void VarTableModel::VarData::updatePreview() { - previewValid = true; + previewState = PreviewState::Valid; if (info.size <= 2) { preview = tr("Empty"); - previewValid = false; + previewState = PreviewState::Invalid; } else if (calc_var_is_asmprog(&info)) { preview = tr("Can't preview this"); - previewValid = false; + previewState = PreviewState::Invalid; } else if (calc_var_is_internal(&info) && info.name[0] != '#') { // # is previewable preview = tr("Can't preview this OS variable"); - previewValid = false; + previewState = PreviewState::Invalid; } else { try { preview = QString::fromStdString(calc_var_content_string(info)).trimmed().replace("\n", " \\ "); @@ -32,7 +82,7 @@ void VarTableModel::VarData::updatePreview() { } } catch (...) { preview = tr("Can't preview this"); - previewValid = false; + previewState = PreviewState::Invalid; } } } @@ -48,37 +98,91 @@ void VarTableModel::clear() { endResetModel(); } +static bool varLess(const calc_var_t &var, const calc_var_t &other) { + return calc_var_compare_names(&var, &other) < 0; +} + void VarTableModel::refresh() { calc_var_t var; - clear(); + std::vector newVars; vat_search_init(&var); while (vat_search_next(&var)) { if (var.named || var.size > 2) { - int row = vars.size(); - beginInsertRows(QModelIndex(), row, row); - vars.push_back(VarData(var)); + newVars.push_back(var); + } + } + + std::sort(newVars.begin(), newVars.end(), varLess); + + auto oldIter = vars.begin(); + auto newIter = newVars.begin(); + while (newIter != newVars.end()) { + size_t row = oldIter - vars.begin(); + // Remove old vars smaller than the next new var + auto oldRemoveEnd = std::find_if_not(oldIter, vars.end(), [=](const VarData &var) { return varLess(var.info, *newIter); }); + if (oldIter != oldRemoveEnd) { + beginRemoveRows(QModelIndex(), row, row + (oldRemoveEnd - oldIter - 1)); + oldIter = vars.erase(oldIter, oldRemoveEnd); + endRemoveRows(); + } + // Insert new vars smaller than the next old var, or insert all if no more old vars + auto newInsertEnd = newVars.end(); + if (oldIter != vars.end()) { + newInsertEnd = std::find_if_not(newIter, newVars.end(), [=](const calc_var_t &var) { return varLess(var, oldIter->info); }); + } + if (newIter != newInsertEnd) { + beginInsertRows(QModelIndex(), row, row + (newInsertEnd - newIter - 1)); + oldIter = vars.insert(oldIter, newIter, newInsertEnd); endInsertRows(); + oldIter += (newInsertEnd - newIter); + newIter = newInsertEnd; + } else { + // No new vars were smaller, and the old var cannot be smaller because those were already removed, so they're equal + assert(oldIter != vars.end()); + // Update the old variable with the new variable data + uint8_t changed = oldIter->updateInfo(*newIter); + // Inform the view of changed columns + for (uint8_t col = 0; col < VAR_NUM_COLS; col++) { + if (changed & (1 << col)) { + QModelIndex cell = index(row, col); + emit dataChanged(cell, cell); + } + } + oldIter++; + newIter++; } } + // Remove any remaining old vars + if (oldIter != vars.end()) { + beginRemoveRows(QModelIndex(), oldIter - vars.begin(), vars.size() - 1); + vars.erase(oldIter, vars.end()); + endRemoveRows(); + } } void VarTableModel::retranslate() { if (!vars.empty()) { for (VarData &var : vars) { - var.updatePreview(); + // Only invalid previews are translated + if (var.previewState == PreviewState::Invalid) { + var.previewState = PreviewState::Outdated; + } } - emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); + emit dataChanged(index(0, VAR_LOCATION_COL), index(vars.size() - 1, VAR_NUM_COLS - 1)); } - emit headerDataChanged(Qt::Horizontal, 0, columnCount() - 1); + emit headerDataChanged(Qt::Horizontal, 0, VAR_NUM_COLS - 1); } QVariant VarTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) { return QVariant(); } - const VarData &var = vars[index.row()]; + VarData &var = vars[index.row()]; + if (index.column() == VAR_PREVIEW_COL && var.previewState == PreviewState::Outdated) { + var.updatePreview(); + } switch (role) { case Qt::DisplayRole: switch (index.column()) { @@ -104,17 +208,17 @@ QVariant VarTableModel::data(const QModelIndex &index, int role) const { }; case Qt::FontRole: if (index.column() == VAR_PREVIEW_COL) { - return var.previewValid ? varPreviewCEFont : varPreviewItalicFont; + return var.previewState == PreviewState::Invalid ? varPreviewItalicFont : varPreviewCEFont; } return QVariant(); case Qt::ForegroundRole: - if (index.column() == VAR_PREVIEW_COL && !var.previewValid) { + if (index.column() == VAR_PREVIEW_COL && var.previewState == PreviewState::Invalid) { return QBrush(Qt::gray); } return QVariant(); case Qt::CheckStateRole: if (index.column() == VAR_NAME_COL) { - return var.checked; + return var.checked ? Qt::Checked : Qt::Unchecked; } return QVariant(); case Qt::UserRole: @@ -126,7 +230,7 @@ QVariant VarTableModel::data(const QModelIndex &index, int role) const { bool VarTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (index.isValid() && index.column() == VAR_NAME_COL && role == Qt::CheckStateRole) { - vars[index.row()].checked = qvariant_cast(value); + vars[index.row()].checked = qvariant_cast(value) == Qt::Checked; emit dataChanged(index, index, { Qt::CheckStateRole }); return true; } diff --git a/gui/qt/vartablemodel.h b/gui/qt/vartablemodel.h index b33c6668e..0088b7209 100644 --- a/gui/qt/vartablemodel.h +++ b/gui/qt/vartablemodel.h @@ -5,6 +5,7 @@ #include #include +#include class VarTableModel : public QAbstractTableModel { Q_OBJECT @@ -33,18 +34,28 @@ class VarTableModel : public QAbstractTableModel { int columnCount(const QModelIndex &parent = QModelIndex()) const override; private: + enum class PreviewState : uint8_t { + Outdated, + Invalid, + Valid + }; + struct VarData { - explicit VarData(const calc_var_t &var); + VarData(const calc_var_t &var); + ~VarData(); + VarData(VarData &&other) noexcept; + VarData &operator=(VarData &&other) noexcept; + + uint8_t updateInfo(const calc_var_t &var); void updatePreview(); calc_var_t info; - QByteArray data; QString preview; - bool previewValid; - Qt::CheckState checked; + PreviewState previewState; + bool checked; }; - QVector vars; + mutable std::vector vars; QFont varPreviewItalicFont; QFont varPreviewCEFont; }; From 924eb80708035e1f8dc33aa75e32f91a6cc5d720 Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Fri, 23 Aug 2024 12:27:35 -0400 Subject: [PATCH 5/8] Fix endianness/alignment issue in TI-BASIC debug --- core/debug/debug.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/debug/debug.c b/core/debug/debug.c index a4a8f42e2..8949bdc90 100644 --- a/core/debug/debug.c +++ b/core/debug/debug.c @@ -76,7 +76,9 @@ void debug_open(int reason, uint32_t data) { (mem_peek_byte(DBG_BASIC_CMDFLAGS) & DBG_BASIC_CMDEXEC_BIT)) { // check current pc for instruction "bit 1,(iy+$36)" - if(*(uint32_t*)phys_mem_ptr(cpu.registers.PC - 4, 4) == 0x4E36CBFD) { + static const uint8_t instr[] = { 0xFD, 0xCB, 0x36, 0x4E }; + const void *ptr = phys_mem_ptr(cpu.registers.PC - sizeof(instr), sizeof(instr)); + if(ptr && !memcmp(ptr, instr, sizeof(instr))) { reason = DBG_BASIC_CURPC_WRITE; } } else { From 094d4e15802b892771d859bb12352042c15243c5 Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Fri, 23 Aug 2024 23:16:46 -0400 Subject: [PATCH 6/8] Update var type names to match enum, add filtering to var list --- core/vat.c | 16 ++++++++-------- gui/qt/mainwindow.cpp | 31 ++++++++++++++++++++----------- gui/qt/mainwindow.h | 1 + gui/qt/mainwindow.ui | 21 +++++++++++++++++++++ gui/qt/vartablemodel.cpp | 29 ++++++++++++++++++++++++++--- gui/qt/vartablemodel.h | 16 ++++++++++++++++ 6 files changed, 92 insertions(+), 22 deletions(-) diff --git a/core/vat.c b/core/vat.c index 131d1ac33..d2b3fde45 100644 --- a/core/vat.c +++ b/core/vat.c @@ -31,7 +31,7 @@ const char *calc_var_type_names[0x40] = { "Temp Program", "Group", "Real Fraction", - "Unknown #1", + "Mixed Fraction", "Image", "Complex Fraction", "Real Radical", @@ -40,14 +40,17 @@ const char *calc_var_type_names[0x40] = { "Complex Pi Fraction", "Real Pi", "Real Pi Fraction", - "Unknown #2", + "Unknown #1", "Operating System", "Flash App", "Certificate", - "Unknown #3", + "AppID List", "Certificate Memory", - "Unknown #4", + "Unit Certificate", "Clock", + "Unknown #2", + "Unknown #3", + "Unknown #4", "Unknown #5", "Unknown #6", "Unknown #7", @@ -65,11 +68,8 @@ const char *calc_var_type_names[0x40] = { "Unknown #19", "Unknown #20", "Unknown #21", - "Unknown #22", - "Unknown #23", - "Unknown #24", "Flash License", - "Unknown #25", + "Unknown #22", }; static char hex_char(uint8_t nibble) { diff --git a/gui/qt/mainwindow.cpp b/gui/qt/mainwindow.cpp index d01947dd0..7ad8f9cd8 100644 --- a/gui/qt/mainwindow.cpp +++ b/gui/qt/mainwindow.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -139,12 +138,26 @@ MainWindow::MainWindow(CEmuOpts &cliOpts, QWidget *p) : QMainWindow(p), ui(new U sendingHandler = new SendingHandler(this, m_btnCancelTranser, m_progressBar, ui->varLoadedView); m_varTableModel = new VarTableModel(ui->emuVarView); - QSortFilterProxyModel *varTableSortModel = new QSortFilterProxyModel(m_varTableModel); - varTableSortModel->setSourceModel(m_varTableModel); - varTableSortModel->setSortCaseSensitivity(Qt::CaseInsensitive); - varTableSortModel->setSortLocaleAware(true); - ui->emuVarView->setModel(varTableSortModel); + m_varTableSortFilterModel = new VarTableSortFilterModel(m_varTableModel); + ui->emuVarView->setModel(m_varTableSortFilterModel); + ui->emuVarView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->emuVarView->sortByColumn(VarTableModel::VAR_NAME_COL, Qt::AscendingOrder); + ui->filterVarList->setItemData(0, -1); + for (int varType = CALC_VAR_TYPE_REAL; varType < CALC_VAR_TYPE_OPERATING_SYSTEM; varType++) { + if ((varType >= CALC_VAR_TYPE_UNDEF && varType <= CALC_VAR_TYPE_APP) || + varType != calc_var_normalized_type((calc_var_type_t)varType)) + continue; + QString varTypeName = calc_var_type_names[varType]; + if (!varTypeName.contains(QStringLiteral("Unknown")) && + !varTypeName.contains(QStringLiteral("Temp")) && + !varTypeName.contains(QStringLiteral("New"))) { + ui->filterVarList->addItem(varTypeName.replace(QStringLiteral("Real"), QStringLiteral("Real/Complex")), varType); + } + } + // Scrollbar truncates text for some reason, so just show all items + ui->filterVarList->setMaxVisibleItems(ui->filterVarList->count()); + connect(ui->filterVarList, static_cast(&QComboBox::currentIndexChanged), + m_varTableSortFilterModel, [this](int index) { m_varTableSortFilterModel->setTypeFilter(ui->filterVarList->itemData(index).toInt()); }); // emulator -> gui (Should be queued) connect(&emu, &EmuThread::consoleStr, this, &MainWindow::consoleStr, Qt::UniqueConnection); @@ -1977,6 +1990,7 @@ void MainWindow::emuBlocked(int req) { void MainWindow::varUpdate() { ui->buttonEnableVarList->setText(guiReceive ? tr("Hide Calculator Variables") : tr("View Calculator Variables")); ui->buttonRefreshVarList->setEnabled(guiReceive); + ui->filterVarList->setEnabled(guiReceive); ui->buttonReceiveFiles->setEnabled(guiReceive); ui->buttonReceiveFile->setEnabled(guiReceive); ui->emuVarView->setEnabled(guiReceive); @@ -1997,11 +2011,6 @@ void MainWindow::varShow() { if (isBlocked) { emu.unblock(); } - - ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_NAME_COL); - ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_LOCATION_COL); - ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_TYPE_COL); - ui->emuVarView->resizeColumnToContents(VarTableModel::VAR_SIZE_COL); }); } } diff --git a/gui/qt/mainwindow.h b/gui/qt/mainwindow.h index 457a0333a..c25d405a7 100644 --- a/gui/qt/mainwindow.h +++ b/gui/qt/mainwindow.h @@ -602,6 +602,7 @@ class MainWindow : public QMainWindow { QDir m_dir; QStringList m_equateFiles; VarTableModel *m_varTableModel; + VarTableSortFilterModel *m_varTableSortFilterModel; std::function m_recvAction; bool m_uiEditMode = false; diff --git a/gui/qt/mainwindow.ui b/gui/qt/mainwindow.ui index b726ce715..0e151a1fb 100644 --- a/gui/qt/mainwindow.ui +++ b/gui/qt/mainwindow.ui @@ -6844,6 +6844,27 @@ + + + + + 0 + 0 + + + + QComboBox::AdjustToContents + + + Qt::ClickFocus + + + + All + + + + diff --git a/gui/qt/vartablemodel.cpp b/gui/qt/vartablemodel.cpp index 39ec69df6..7df255f31 100644 --- a/gui/qt/vartablemodel.cpp +++ b/gui/qt/vartablemodel.cpp @@ -47,11 +47,11 @@ uint8_t VarTableModel::VarData::updateInfo(const calc_var_t &var) { } uint8_t *data = info.data; if (var.size != info.size) { - changed |= (1 << VAR_SIZE_COL) | (1 << VAR_PREVIEW_COL); + changed |= (1 << VAR_TYPE_COL) | (1 << VAR_SIZE_COL) | (1 << VAR_PREVIEW_COL); data = new uint8_t[var.size]; delete[] info.data; } else if (0 != memcmp(var.data, data, var.size)) { - changed |= (1 << VAR_PREVIEW_COL); + changed |= (1 << VAR_TYPE_COL) | (1 << VAR_PREVIEW_COL); } info = var; info.data = data; @@ -196,6 +196,8 @@ QVariant VarTableModel::data(const QModelIndex &index, int role) const { QString var_type_str = calc_var_type_names[var.info.type]; if (calc_var_is_asmprog(&var.info)) { var_type_str += QStringLiteral(" (ASM)"); + } else if (calc_var_is_python_appvar(&var.info)) { + var_type_str += QStringLiteral(" (Python)"); } return var_type_str; } @@ -280,4 +282,25 @@ int VarTableModel::columnCount(const QModelIndex &parent) const { return 0; } return VAR_NUM_COLS; -} \ No newline at end of file +} + +VarTableSortFilterModel::VarTableSortFilterModel(VarTableModel *parent) : QSortFilterProxyModel(parent), typeFilter(-1) { + setSourceModel(parent); + setSortCaseSensitivity(Qt::CaseInsensitive); + setSortLocaleAware(true); +} + +void VarTableSortFilterModel::setTypeFilter(int type) { + if (type != typeFilter) { + typeFilter = type; + invalidateFilter(); + } +} + +bool VarTableSortFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + if (typeFilter < 0) { + return true; + } + calc_var_t var = sourceModel()->index(source_row, VarTableModel::VAR_NAME_COL, source_parent).data(Qt::UserRole).value(); + return calc_var_normalized_type(var.type) == typeFilter; +} diff --git a/gui/qt/vartablemodel.h b/gui/qt/vartablemodel.h index 0088b7209..837fe30d8 100644 --- a/gui/qt/vartablemodel.h +++ b/gui/qt/vartablemodel.h @@ -4,6 +4,7 @@ #include "../../core/vat.h" #include +#include #include #include @@ -60,4 +61,19 @@ class VarTableModel : public QAbstractTableModel { QFont varPreviewCEFont; }; +class VarTableSortFilterModel : public QSortFilterProxyModel { + Q_OBJECT + +public: + explicit VarTableSortFilterModel(VarTableModel *parent); + + void setTypeFilter(int type); + +protected: + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; + +private: + int typeFilter; +}; + #endif // VARTABLEMODEL_H From eefed1364d2c0b022ce93d1b37cf69b556c3f561 Mon Sep 17 00:00:00 2001 From: Adrien Bertrand Date: Sat, 24 Aug 2024 12:32:36 +0200 Subject: [PATCH 7/8] Update translations --- gui/qt/i18n/es_ES.qm | Bin 55452 -> 56715 bytes gui/qt/i18n/es_ES.ts | 615 ++++++++++++++++++++++-------------------- gui/qt/i18n/fr_FR.qm | Bin 57798 -> 58217 bytes gui/qt/i18n/fr_FR.ts | 605 +++++++++++++++++++++-------------------- gui/qt/i18n/nl_NL.qm | Bin 56462 -> 56855 bytes gui/qt/i18n/nl_NL.ts | 609 ++++++++++++++++++++++-------------------- gui/qt/i18n/zh_CN.qm | Bin 38968 -> 40203 bytes gui/qt/i18n/zh_CN.ts | 621 ++++++++++++++++++++++--------------------- 8 files changed, 1275 insertions(+), 1175 deletions(-) diff --git a/gui/qt/i18n/es_ES.qm b/gui/qt/i18n/es_ES.qm index e4cc705eaa0d931767ed612e4855049825948043..6c4db74dde35d422dbd45c6eac25484d3eb68895 100644 GIT binary patch delta 4988 zcmZ`*cU+Ta+dWC1C-X^C1>7SQsRPCJ;wsfrlwlbP;=oY@L`e+^vP7$-YW=B&7r|gH z1=KpKxHT#+EP{KFT5BD(j@H>)i$&Y7_C0~$=lA{d{sAY?^W5XQ&ULPH-(}ksdHWTG z?PTYR+6Ty&3q>)_oF|(Cy$pcXyAfCZ1`N#yyl()ZH9-50K-h3%C~*zYtOXF>4QO5u z49^6j_!il51AfMp| z6gweU9YDLA5I&6IhB62XN`Wt1Ls-bg+uI@JZv|RCg|Plhpieb~3I*`59uW2mK>s}u z&JhR4LpbjTe7zdNPaOZ=KM?NM0sBo5e*KQgEralM5|i_S7?|l~q$v=?0~xif5qD34 z7|99iwm0JGUJz5(Gm~u)vx|Z83WzyJfzy=`^T@yl-64K{1eh`y;+G;Id(?TG1=w9c0J-L6OB_=G2|cv;?`HaVsVww>%yw?1yFlV&>(o@x{FTK!HY zH^zw_Q(4nR<=7j0gj8+C`Gr4HY-e!e&QOZztjvGHCE)P8vcP~G;B9|d-{gy=?zU`L z={8`{b6KQF2K~Kdk#$Rfjb~&@pDhQhqU^(?(Ln78*+*G^z=;T1Q8t;}TP@qt+Z)L1 zAls4ujAC@YEj#-2Az;Zw*_C1yDQzcvkhP9AH_Kk`*aEC-DVJHj$jn%|c%V1%iB_(u z;|7LMxlcB~Pi`Y`amoNVW95DqCjzT8`D9#y4FKp_y~YJMyAQKL8o0<>k`{ z0n?ky*LIY%)o05$M`r-ZG4j(PS=4Z){7#4uC2&pt=srt3>#_XVotwah8in@v(G+`* zLMmjOQF9df)g?ehg+gCXLIQd;;$A`F6-HuQ6BW&DJAkyc3g6auXb=0|Q20BU*oVI; z!cQ}RUW*l@r|~&@sbb6v3kms0k*VfJ|NdDqr|LPSq*W|(eM7vaDE{OV`qe>2+2{gR z;EbZ&(}gX46)Sy~0<9|)>uzMSQfn2P?bCtOKNRkCYINRi#raWGLSm%i+QH?thk`MR zUzgsccykmlZ5()TlOUdSk%3D>o8Vg{YM9WcuscvaLWpcL3^+Ach!6b*I66&8e7+Ir zX%o zu_d4*UU~^g$-;M4BD?qp;lW?byz^k;(cg8H#suM4sSEINr0_rT@zi#{D0tQj4-o}t z1s81PC$?2`!uv19H+!>ovVo1*eW(}|%I6VH#n8uR0h>}BcdLjZA5UCDED*=rZc}sp z#f;0Tq*NznT+;*QlVa|x2SBk*%=?NZ`e2KgAISC1OU3+95A`lFzibE@4-uUOX-|Rt z2=Vicq;9vrSTdJ(ky;>rk#~@INGx4QU$Pg9r5n}&T|>n(O9-icD6U+}1?0!X4FMGC zs6WLG;bba&kGQcgjLqUJZY&n)L*I&93~r#)m*Tb{mUQ7y;y&9Y9vR`{!QDyJ!Vsr; z=vN+QUk?^*Rm?C&Azp2n#;!akK2C{dH#}4d=k`*~kxJ#OEc(k@r6z%l^tCIsrQBdq zC#6>)yLzf!*?d36I`yFP%~gwl7Ea{=GdJ?TtPCAI1DLQy`N5C0ms2;CmXqACs7h&T zLXnSgzEozOC|PikwE3<_RoMJ_mov8zF)Ied1Q7nPv8{gH^wc%IIHrP=%Ylxv zM*Q-c^0E09nd&}UB@bbywkfJs%LAzX0V>n)Jt@k4sy^ktc^LLq1+LdpRH>?dKgY7& z=Bb9%?BXdNriy!zOOZWQC0wkac1)^-ThB@LSk<^e1zhixYCBK6Um3t>y*joN zE77)6?YPH4dZejy`>o-bnx}TkS;-u?dePJQl#;0tch#x$HeIDJwJ%YZjC?}JAFD3w zK|@VEt}d${3}pVK-dsA5gjA|4dvyXr4y*U9-@r4qxq6?ep3hy?Rr$v$c3*W>#a*Dx ztv(i8$=icneQe}ruGdO^Jl31Hi^u98Mlj#;PWA1I=A1WOeMi-fN19H3@5pfaQvaXT zk3Tz1rwmd*sbb{IcdP4vp%j*M)U?{(k)<50>Dj~w2<)#3Y2if)Owokg-%F#<)5HcI z1Li)`#Md*>?6Vs4`7BDss7bjqh)t5Cv8gGs1-CRda~UGMcCYwx4on$w+KdPlo!HoJAhWNl4c zGH)ffv?uaenm(oM_JGYpQ>#hCnH%1=tT>D_wFMz(OwmwQ? zTldr{4x8yOCSoEnk(fkWqtm9J;QX69?Rqk?pWFuJA@R55)nxvQA$E z^AG8&MFwV%(bahHWQy*nKbcC2(p|7E;-Pgqfkj#5m zd=g%)e1eyirvKo?12OX|4JDJkM_&hOt;ithOx?^&WWMm>-I zvw_HcoPSA^6lB~-l*}(K^Ep{5rFgCd+o~noYEpG1SIT`jlsCI_X>sOFI%lF(Tu)O=nCmP@;PapN{lX}>H3$f|F|1Eo^+!V{$WE9s~^nZ{Zr zojb@&OO@Up@q(?c-a8qmP$*!xk@;K?2>Pfsy@0OnT zIl``}lKzNg=BHDnKSTHOg49DVd|$w`D^}lmF{xBs(RWJ|8DO%0(8u@LO{MxFV}A#F z8;Ji9N9czn$cV*6HSvl*^lmiUDQ~wvVov~Xj8*ysFw(%A`U&mMFq3%wWWQP-5##h3 z4evkIFB(n*adpsd??0AT(gOVsk57#5uixdtQCszgkJCBd^VS~?_a)Zq&s<$irmpLM z^jw%?-qb()$PJtspnv8Ts14}<`NkQ?E9Pl~wvH3b;|#(1%%o=SAYBtOe_B{tC zmm21@?ZkHLW>|Rr3NyQ5SeCGZMwMr%$Y%eyTw&N~U>kROXxJBC!TZN8!-4(xcw`hA z&R3DCxAP4*eqxDB%MJHpmXXONhNr{QxzBw=opVSo`?b#S$NoVymOP`+`C58+rLpau z>AcVs8w0m*p$JbH`}_80zFoEY zbH-#R1D&$bIN7ShK$u2{pX=OE)$Uoz04oiVLpe4#Ni%{-sAZepCC>f+@$+_*T5 zHJxwk=waenEnry5+Nn>eNZ@koZDKFHEW#z;6=Fb9haDEX%dw%J^VT6?>y?^wCC7A=**?P*92XH{O1ETNGhDsOo4dDno+fiS!^9@R$l|gN zPVNjp^h6i;TU~>@c!eScN&IBvM>BUfA=~wFa&uR+6`h1|YqG@^yrPSHO59WJ`$rjH z7I$xqAc>>17+2$*G|qG&k*io3znSk%4KbVeY~$}lesyq%B>v}o*PJD9Is^DV-jgXu zJmDA5NKbef%=CYMSsR|sobSoH@$IyRC_F1?aQ2UUpTZrJxQ>MkkzWM7=4DKjd4?&; zoRwiQrKLL(ZI;vwlXbEw(c#D(Xi9PQ?kPqli0%b>BJUp$3$b0EZNm$rk6`m(n{>+iP6=wwt379Mr2|% zo_s9GX{cZ(e+`7`b!`44)6Mpb$(D4JB|Y7d-p!P4PPdvFgURkN*&OyMo-aApjLeLI zt_xm1?%XeA@_}!$^jW0XlWJo%8_VG#!&4Gl!^Q(&Z=#J)%SbZYtoA9c-)8!_on>`? z?xVGBWv+~xxVFtknbSvlc8nquwt)lrIK-T3ma&B}%k^8omagAx7B~Mdqg;ixzW?o; z`{v;@lGk#CF;B} z#FN@UsYga0nKhQXaXn9)m>bI9<#qN!apr7GhRJNoNJ_U@>=`MJOjBlOhbbu3YO@S7 zb#AD0Rz?Hq=7w<=dnR>}nrgNucX5|r5CvaD1Fva}D2thxU$3qGzct;(m(_~@02&ys ABme*a delta 4063 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 DZ$HM> diff --git a/gui/qt/i18n/es_ES.ts b/gui/qt/i18n/es_ES.ts index 630ba513f..cb6d29383 100644 --- a/gui/qt/i18n/es_ES.ts +++ b/gui/qt/i18n/es_ES.ts @@ -64,32 +64,32 @@ MainWindow - - + + Keypad Teclado - + Variables Variables - + Watchpoints Puntos de observación - + Size El Tamaño - + OS Variables Variables del SO @@ -99,52 +99,52 @@ Cambiar la identificación del certificado de la calculadora - + Resend selected Reenviar seleccionado - + Save transferred file paths on exit Guardar las rutas de los archivos transferidos al salir - - - + + + Capture Foto - + Screenshot Copia de LCD - - - - + + + + Settings Ajustes - + General General - + Automatically save and restore state Automáticamente guardar y restaurar estado - + ROM Image Imagen de ROM - + Debug Depurar @@ -160,7 +160,7 @@ - + Show ASCII Mostrar ASCII @@ -280,42 +280,42 @@ Todos los archivos (*.*) - + Copy Address Copiar dirección - + Copy Data Copiar datos - + Goto VAT Memory View Ir a la vista de la memoria del VAT - + Goto Disasm View Ir a Desmontaje - + Toggle Breakpoint Alternar este punto de interrupción - + Toggle Write Watchpoint Alternar este punto de observación de escritura - + Toggle Read Watchpoint Alternar este punto de mira leído - + Toggle Read/Write Watchpoint Alternar este punto de mira de lectura / escritura @@ -335,45 +335,45 @@ - + Goto Ir a - - + + Disassembly Desensam - + Always show on top of other windows Siempre mostrar encima de otras ventanas - + File Locations Ubicación de archivos - + Saved Image Imagen guardada - + Skin Aspecto - + Scale: Tamaño: - + Keypad Skin Color Color de teclado @@ -401,7 +401,7 @@ Refrescar - + Clear Limpiar @@ -420,7 +420,7 @@ - + Port Monitor Monitor de puerto @@ -456,22 +456,22 @@ - + Memory Memoria - + dock ensamblar - + console consola - + Auto scroll Desplazamiento automático @@ -647,77 +647,77 @@ - + Selected Seleccionado - + Send files to calc Enviar archivos - + Tab between opcode / operands Tab entre opcode / operando - + Space between operands Espacio entre operandos - + Keypad Mapping Asignación del teclado - + Change Instance ID Cambiar ID de CEmu - + Auto. save and restore debug state Guardar y restaurar automáticamente - + Record animated PNG Grabar PNG animado - + Ctrl+Shift+X Ctrl+Shift+X - + Reset calculator Restablecer calculadora - + Save state Guardar Estado - + Restore state Restaurar estado - + Reload ROM Recargar ROM - + Screen Pantalla - + Reload Rom Recargar Rom @@ -731,45 +731,45 @@ Dirección - + Automatically check for updates Verificar actualizaciones automáticamente - + Use portable configuration Usar configuración portátil - + Open debugger on reset or nmi Abrir el depurador al reiniciar o NMI - + Enable software commands Habilitar comandos de software - - + + % % - - + + Change path Cambiar ruta - + Saved Debug Depuración guardada - + Breakpoints Los puntos de interrupción @@ -790,8 +790,8 @@ - - + + Frame skip: Salto de frames: @@ -809,7 +809,7 @@ Terminar - + Add Insertar @@ -831,22 +831,22 @@ Congelar - + Save selected Guardar la sélection - + Throttle: Aceleración: - + Text size: Tamaño del texto: - + Key bindings Atajos del teclado @@ -877,28 +877,28 @@ Sincronizar cambios - + Rom setup wizard... Configuración de ROM... - - + + Take PNG screenshot Tomar captura PNG - + Record animated GIF Grabar en GIF - + Check for updates... Buscar actualizaciones... - + About Qt Información de Qt @@ -908,7 +908,7 @@ Interrupciones - + Display Monitor @@ -918,8 +918,8 @@ Brillo - - + + Console Consola @@ -927,7 +927,7 @@ - + Name Nombre @@ -935,8 +935,8 @@ - - + + Remove Eliminar @@ -964,13 +964,13 @@ - + Search Buscar - + Sync Changes Sincronizar cambios @@ -980,27 +980,27 @@ Memoria RAM - + Memory View Memoria - + &File &Archivo - + Open... Abrir... - + Exit Salir - + Setup wizard Asistente de configuración @@ -1011,13 +1011,13 @@ - + Debug Control Control de depuración - + CPU Status Estado de la CPU @@ -1054,7 +1054,7 @@ - + Timers Temporizadores @@ -1142,7 +1142,7 @@ - + OS Stacks Pilas de OS @@ -1158,7 +1158,7 @@ - + Miscellaneous Miscelneos @@ -1204,7 +1204,7 @@ - + AutoTester Probador automático @@ -1224,65 +1224,65 @@ Calculadora Reciba - + View Calculator Variables Ver variables de la calculadora - + Save group Guardar grupo - + Calculator Send Calculadora Enviar - + Resend Reenviar - + Path Ruta - + Save PNG Guardar PNG - + Copy PNG Copiar PNG - + Screen Recording Grabación de pantalla - - + + Record Grabar - + Optimize Optimizar - + Configuration Configuración - + TI-Basic Debug Depuración de TI-Basic @@ -1322,42 +1322,42 @@ Parser temporario - + Pause emulation on focus change Emulación de pausa cuando el interruptor - + Allow dock grouped dragging Permitir arrastrar grupos de pantallas - + Natural Natural - + Custom Personalizado - + Emulation Emulación - + Display / Emulation Speed LCD / Velocidad de Emulación - + Actual FPS: FPS real: - + Update status: Actualización del estado : @@ -1372,340 +1372,345 @@ - + + All + Todo + + + Upscaling: - + Aumento de escala : - + Nearest Neighbor - + Bilinear - + Sharp Bilinear - + Fullscreen: - + Stretch - + Preserve Aspect - + Integer Scale - + SmartPad SmartPad - + ASIC revision: - + sec - + Auto - + Rev A - + Rev I - + Rev M - + Current: - + Emulate Python Edition - + Emulate DMA to LCD memory - + Emulate LCD gamma - + Emulate LCD response time - + Debugging Depuración - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) Algunas vistas de depuración solo tienen sentido cuando están en el contexto del funcionamiento normal del sistema operativo (puede no ser el caso cuando se ejecutan algunos programas ASM, por ejemplo) - + Assume normal OS operation Asumir el funcionamiento normal del OS - + May cause problems if boot code is incompatible. Use only if you know what you're doing. - + Puede causar problemas si el bootcode es incompatible. Utilícelo sólo si sabe lo que está haciendo. - + Allow any ASIC revision - + Permitir cualquier revisión de ASIC - + Show data column Mostrar columna de datos - + Use implicit mode Use el modo implícito - + Use uppercase font Use letras mayúsculas - + Show address column Mostrar columna de dirección - + Bold disassembly symbols Símbolos de desensamblaje en negrita - - + + State Estado - + Load Carga - + Save Salvar - + Edit Editar - - + + Reset Reiniciar - + Export Exportar - + Import Importar - + Language Idioma - + &Calculator &Calculadora - + Extras Extras - + Ctrl+Shift+O Ctrl+Shift+O - + Ctrl+Shift+Q Ctrl+Shift+Q - - + + About CEmu Información de CEmu - + ROM image Imagen de ROM - - + + Calculator state Estado de la calculadora - - + + Debug state Estado de depuración - + New CEmu instance Nuevo CEmu - + Show key history Historia del teclado - + Bootable CEmu image CEmu imagen - + Hide menu bar Ocultar barra de menú - + Copy screen to clipboard Copiar la pantalla al portapapeles - + Ctrl+Shift+C Ctrl+Shift+C - + Reset GUI docks Restablecer GUI - + Reset CEmu Restablecer CEmu - + English - + Français - + Nederlands - + Español - - + + Window configuration Configuración de disposición - + Report a bug / give feedback Informar un error / dar feedback - + Hide status bar Ocultar barra de estado - - + + RAM image Imagen de RAM - + 简体中文 - + Simplified Chinese 简体中文 - + Docks Pantallas - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1718,37 +1723,37 @@ CEmu usa una interfaz de pantalla personalizable. Arrastra y suelta para mover p (Aviso: según su versión, puede arrastrar pestañas agrupadas o una pestaña individual desde su título o barra de pestañas, respectivamente) - - + + PNG images (*.png) Imagenes de PNG (*.png) - + Select saved image to restore from Seleccione una imagen guardada para restaurar - - + + CEmu images (*.ce);;All files (*.*) CEmu imágenes (*.ce);;Todos los archivos (*.*) - + Information Información - + Set image to save to Establecer imagen para guardar - - + + Emulated Speed: Velocidad Emulada: @@ -1768,304 +1773,309 @@ CEmu usa una interfaz de pantalla personalizable. Arrastra y suelta para mover p <b>Hay un error cuando buscar actualizaciones de CEmu.</b><br/>Sin embargo ir a<a href='https://github.com/CE-Programming/CEmu/releases/latest'></a>para comprobar. - + Recording... Grabación... - + Stop Recording Terminar de grabar - + Select at least one file to transfer Seleccionar al menos un archivo a transferir - + Actual FPS: FPS real: - + Run/Stop Ejecutar / Terminar - + Reload Recargar - + Keypress History Historia del teclado - + Clear History Borrar - + Save Screen Guardar Pantalla - + Failed to save screenshot. Error al guardar la captura de pantalla. - + Saving Recording... Guardando la grabación... - + Save Recorded PNG Guardar PNG grabados - + A failure occured during PNG recording. Error al guardar la captura de pantalla. - + Stop Recording... Terminar de grabar... - + Saving... Guardar... - + Saving Animated PNG... Guardar PNG animado... - + Record animated PNG... Grabar PNG animado... - + Copy version Copiar versión - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Autores principales:<br>%3<br>Otros contribuidores incluyen:<br>%4<br>Traducciones proporcionadas por:<br>%5<br>Muchas gracias a los siguientes proyectos: %6<br>Los íconos dentro del programa son cortesía de %7.<br><br>CEmu tiene licencia bajo el %8, y no es un producto de TI ni está afiliado / endosado por TI.<br><br> - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] Texte redirigé vers la sortie standard. Utilisez le bouton radio pour activer. - + Select at least two files to group Seleccione al menos dos archivos - + TI Group (*.8cg);;All Files (*.*) Grupo TI (*.8cg);;Todos los archivos (*.*) - - + + Transfer error, see console for information: File: Error de transferencia, consulte la consola para obtener información: Archivo: - - + + Transfer completed successfully. La transferencia se completó exitosamente. - + + Transfer error, variable no longer exists: + Error de transferencia, la variable ya no existe: + + + Error. No config loaded Error. Sin configuración cargadas - + Error. Couldn't follow the test sequence defined in the configuration Error. No se pudo seguir la secuencia de prueba definido en la configuración - + Error. Unknown one - wat? Error. Desconocido uno? - + See the test config file format and make sure values are correct and referenced files are there. Vea el formato de archivo de configuración de prueba y asegúrese de que los valores sean correctos. - + Make sure you have entered a valid start/size pair or preset. Asegúrate de que los valores sean correctos. - + Could not convert those values into numbers No se pudieron convertir esos valores en números - + Could not retrieve this memory chunk No se pudo recuperar este fragmento de memoria - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. La imagen no parece ser de un CE. ¿Quieres intentar cargarlo de todos modos? Esto puede causar inestabilidad. - + Set PC Establecer contador de programa - + Run Until Ejecutar hasta - + Enter image path Ingrese ruta de la imagen - + Please choose a json file or type its path. Elija un archivo json o escriba su ruta. - + No translation available for this language :( No hay traducción disponible para este idioma :( - + Add memory view Agregar vista de memoria - + Add memory visualizer Agregar pantalla de memoria - + Memory Visualizer Pantalla de memoria - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu no pudo escribir en la ubicación de configuración estándar. El modo portátil ha sido activado. - + ROM images (*.rom) Imagen de ROM (*.rom) - + Set ROM image to save to Establecer imagen de ROM para guarda - + RAM images (*.ram) Imagen de RAM (*.ram) - + Set RAM image to save to Establecer imagen de RAM para guarda - + Select RAM image to load Seleccionar imagen de RAM - + RAM images (*.ram);;All files (*.*) Imagen de RAM (*.ram);;Todos los archivos (*.*) - + Saving failed. Please check write permissions in settings directory. Error de guardado. - + Auto (%0) - + Auto (%0) - + Current: %0 (change requires reset) - - + + N/A N/A - + Version copied! Versión copiada! - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) Variable de TI (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) - + Hide Calculator Variables - + Ocultar variables de la calculadora - + Couldn't go to where the JSON file is. No se pudo encontrar el archivo JSON. - + Couldn't read JSON file. No se pudo abrir el archivo de JSON. - + Unable to open the file. No se puede abrir el archivo. - + Test results Resultados de la prueba - + Out of %2 tests attempted: %4 passed %6 failed @@ -2074,22 +2084,22 @@ El modo portátil ha sido activado. %6 fallado - + Launch program Ejecute el programa - + Goto Memory View Ir a la memoria - + CEmu Change ID Cambio de ID de CEmu - + New ID: Nueva ID: @@ -2109,12 +2119,12 @@ El modo portátil ha sido activado. Información de depuración (* .ini);;Todos archivos (*. *) - + Enable UI edit mode Habilitar modo de edición - + Warning Advertencia @@ -2213,7 +2223,7 @@ La imagen de inicio debe colocarse en el mismo directorio que el ejecutable CEmu Guardar la configuración de asignaciónes del teclado - + Check for updates Buscar actualizaciones @@ -2233,12 +2243,12 @@ La imagen de inicio debe colocarse en el mismo directorio que el ejecutable CEmu Texto no encontrado. - + Error Error - + Toggle Windows Console Activar la consola de Windows @@ -2414,52 +2424,67 @@ Archivo: VarTableModel - Empty - Vacío + Vacío - - Can't preview this - No se puede previsualizar + No se puede previsualizar - Can't preview this OS variable - No se puede obtener una vista previa de esta variable de la OS + No se puede obtener una vista previa de esta variable de la OS - + Archive Archivo - + Name Nombre - + Location Ubicación - + Type Tipo - + Size El Tamaño - + Preview Previsualización + + VarTableModel::VarData + + + Empty + Vacío + + + + + Can't preview this + No se puede previsualizar + + + + Can't preview this OS variable + No se puede obtener una vista previa de esta variable de la OS + + VisualizerDisplayWidget @@ -2648,12 +2673,12 @@ Archivo: Saves a screenshot to <File> (only usable as a sent command) - + Guarda una captura de pantalla en <File> (sólo utilizable como comando enviado) screenshot - + captura diff --git a/gui/qt/i18n/fr_FR.qm b/gui/qt/i18n/fr_FR.qm index 91f0b68a3cdc12eefa400184c191f4eabf7836d6..9ab51881f2005a0b2e1d9f7b0498111a3c1d3eaa 100644 GIT binary patch delta 4462 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 delta 4165 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 diff --git a/gui/qt/i18n/fr_FR.ts b/gui/qt/i18n/fr_FR.ts index c0207f632..61343be54 100644 --- a/gui/qt/i18n/fr_FR.ts +++ b/gui/qt/i18n/fr_FR.ts @@ -64,70 +64,70 @@ MainWindow - - + + Keypad Clavier - + Variables Variables - + Size Taille - + Resend selected Renvoyer la sélection - + Save transferred file paths on exit Sauver les chemins des transferts en quittant - - - + + + Capture Capture - + Screenshot Capture d'écran - - - - + + + + Settings Paramètres - + General Général - + Automatically save and restore state Automatiquement sauver et reprendre l'état - + ROM Image Image ROM - + Debug Débogage @@ -143,7 +143,7 @@ - + Show ASCII Voir l'ASCII @@ -263,17 +263,17 @@ Tous les fichiers (*.*) - + Copy Address Copier l'adresse - + Copy Data Copier les données - + Goto VAT Memory View Localiser en mémoire VAT @@ -293,45 +293,45 @@ - + Goto Aller à - - + + Disassembly Désassemblage - + Always show on top of other windows Toujours afficher au premier plan - + File Locations Emplacements des fichiers - + Saved Image Image sauvé - + Skin - + Scale: Échelle : - + Keypad Skin Color Couleur du skin du clavier @@ -359,7 +359,7 @@ Actualiser - + Clear Effacer @@ -378,7 +378,7 @@ - + Port Monitor Moniteur de ports @@ -414,22 +414,22 @@ - + Memory Mémoire - + dock - + console - + Auto scroll Auto-défilement @@ -440,7 +440,7 @@ - + TI-Basic Debug Débuggage TI-Basic @@ -671,259 +671,264 @@ Hash (CRC) : - + + All + Tout + + + Selected Sélectionné - + Send files to calc Envoyer des fichiers à la calculatrice - + Upscaling: Agrandissement : - + Nearest Neighbor Plus proche voisin - + Bilinear Bilinéaire - + Sharp Bilinear Bilinéaire net - + Fullscreen: Plein-écran : - + Stretch Étirer - + Preserve Aspect Garder le ratio H/L - + Integer Scale À échelle entière - + Natural Naturel - + SmartPad SmartPad - + Custom Personnalisé - + ASIC revision: Révision de l'ASIC : - + Auto - + Rev A - + Rev I - + Rev M - + Current: Actuelle : - + Emulate Python Edition Émuler l'Édition Python - + Emulate DMA to LCD memory Émuler le DMA vers la mémoire LCD - + Emulate LCD gamma Émuler le gamma du LCD - + Emulate LCD response time Émuler le temps de réponse du LCD - + May cause problems if boot code is incompatible. Use only if you know what you're doing. Peut causer des problèmes si le boot-code est incompatible. À utiliser uniquement si vous savez ce que vous faites. - + Allow any ASIC revision Autoriser n'importe quelle révision d'ASIC - + Tab between opcode / operands Tab entre opcode / opérandes - + Space between operands Espace entre opérandes - + Keypad Mapping Associations de touches - + Change Instance ID Changer l'ID de l'instance - + 简体中文 - + Simplified Chinese 简体中文 - + Update status: Mise à jour du statut : - + sec - + Auto. save and restore debug state Auto. sauver et charger l'état de débogage - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) Certaines fenêtres de débogage n'ont de sens que lorsque l'OS est en train de s'exécuter (et non pas lors de l'exécution de certains programmes ASM, par exemple) - + Assume normal OS operation Supposer que l'OS est en cours d'exécution - + Extras Extras - + Record animated PNG Capture PNG animé - + Reset calculator Réinitialiser la calculatrice - + Save state Sauver l'état - + Restore state Restaurer l'état - + Reload ROM Recharger la ROM - - + + Calculator state État de la calculatrice - - + + Window configuration Configuration de la fenêtre - + Report a bug / give feedback Faire part d'un bug / suggestion - + Hide status bar Cacher la barre de statut - + Bootable CEmu image Image CEmu bootable - + Hide menu bar Cacher la barre de menu - + Screen Écran - + Ctrl+Shift+X - + Reload Rom Recharger la ROM @@ -937,44 +942,44 @@ Adresse - + Automatically check for updates Vérifier automatiquement les mises à jour - + Use portable configuration Utiliser une configuration portable - + Open debugger on reset or nmi Ouvrir le débuggeur lors d'un reset ou NMI - + Enable software commands Activer les commandes logicielles - - + + % - + Path Chemin - - + + Change path Changer de dossier - + Saved Debug Débogage sauvé @@ -991,7 +996,7 @@ - + Breakpoints Points d'arrêt @@ -1002,13 +1007,13 @@ - + Watchpoints Watchpoints - + OS Variables Variables d'OS @@ -1030,7 +1035,7 @@ - + OS Stacks Piles (stacks) de l'OS @@ -1091,22 +1096,22 @@ Registres - + New CEmu instance Nouvelle instance de CEmu - + Show key history Afficher l'historique des touches - + Copy screen to clipboard Capturer l'écran dans le presse-papier - + Ctrl+Shift+C @@ -1116,8 +1121,8 @@ État / drapeaux (flags) - - + + Frame skip: Saut d'image: @@ -1135,7 +1140,7 @@ Arrêter - + Add Ajouter @@ -1157,22 +1162,22 @@ Geler - + Save selected Enregistrer la sélection - + Throttle: Limite : - + Text size: Taille du texte: - + Key bindings Raccourcis clavier @@ -1203,28 +1208,28 @@ Synchroniser les changements - + Rom setup wizard... Assistant de config. de la ROM... - - + + Take PNG screenshot Prendre une capture d'écran PNG - + Record animated GIF Prendre une capture GIF - + Check for updates... Vérifier les mises à jour... - + About Qt À propos de Qt @@ -1234,7 +1239,7 @@ Interruptions - + Display Écran @@ -1244,8 +1249,8 @@ Luminosité - - + + Console Console @@ -1253,7 +1258,7 @@ - + Name Nom @@ -1261,8 +1266,8 @@ - - + + Remove Supprimer @@ -1290,13 +1295,13 @@ - + Search Recherche - + Sync Changes Synchroniser les changements @@ -1306,27 +1311,27 @@ - + Memory View Vue mémoire - + &File &Fichier - + Open... Ouvrir... - + Exit Quitter - + Setup wizard Assistant de configuration @@ -1347,19 +1352,19 @@ - + Timers Timers - + Debug Control Contrôle de debug - + CPU Status Etat du CPU @@ -1426,13 +1431,13 @@ - + Miscellaneous Divers - + AutoTester @@ -1457,229 +1462,229 @@ Réception calculatrice - + View Calculator Variables Voir les variables de la calculatrice - + Save group Enregistrer le groupe - + Calculator Send Envoi calculatrice - + Resend Renvoi - + Save PNG Enregistrer en PNG - + Copy PNG Copier en PNG - + Screen Recording Enregistrement d'écran - - + + Record Enregistrer - + Optimize Optimiser - + Configuration Configuration - + Pause emulation on focus change Mettre en pause l'émulation quand le focus est perdu - + Allow dock grouped dragging Drag'n'drop groupé de docks - + Emulation Émulation - + Display / Emulation Speed Affichage / Vitesse d'émulation - + Actual FPS: FPS réel : - + Debugging Debuggage - + Show data column Afficher la colonne des données - + Use implicit mode Utiliser le mode implicite - + Use uppercase font Utiliser une police majuscule - + Show address column Afficher la colonne d'adresse - + Bold disassembly symbols Symboles de désassembleur en gras - - + + State État - + Load Charger - + Save Sauver - + Edit Modifier - - + + Reset Reset - + Export Export - + Import Import - + Language Langage - + &Calculator &Calculatrice - + Ctrl+Shift+O - + Ctrl+Shift+Q - - + + About CEmu A propos de CEmu - + ROM image Image ROM - - + + Debug state Etat du debug - + Reset GUI docks Reset des docks de l'interface - + Reset CEmu Reset de CEmu - + English - + Français - + Nederlands - + Español - - + + RAM image Image RAM - + Docks Docks - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1691,37 +1696,37 @@ CEmu utilise une interface personnalisable de "docks". Glissez-dépose (Attention: depuis la v1.1, vous pouvez déplacer les onglets en groupe ou individuellement, depuis leur barre de titre ou d'onglet, repectivement) - - + + PNG images (*.png) Images PNG (*.png) - + Select saved image to restore from Sélectionner l'image pour la restauration - - + + CEmu images (*.ce);;All files (*.*) Images CEmu (*.ce);;Tous les fichiers (*.*) - + Information Information - + Set image to save to Emplacement de l'image - - + + Emulated Speed: Vitesse d'émulation : @@ -1736,274 +1741,279 @@ CEmu utilise une interface personnalisable de "docks". Glissez-dépose <b>Une erreur est survenue lors de la vérification de mises-à-jour de CEmu.</b><br/>Vous pouvez cependant <a href='https://github.com/CE-Programming/CEmu/releases/latest'>aller vérifier ici</a> par vous-même. - + Recording... Enregistrement... - + Stop Recording Arrêter l'enregistrement - + Actual FPS: FPS réel : - + Save Screen Enregistrer l'écran - + Failed to save screenshot. Erreur d'enregistrement de la capture. - + Saving Recording... Sauvegarde de l'enregistrement... - + Save Recorded PNG Sauver l'enregistrement PNG - + A failure occured during PNG recording. Erreur lors de l'enregistrement PNG. - + Stop Recording... Arrêter l'enregistrement... - + Saving... Sauvegarde... - + Saving Animated PNG... Sauvegarde du PNG animé... - + Record animated PNG... Enregistrer un PNG animé... - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>Sur GitHub</a><br><br>Auteurs principaux:<br>%3<br>Parmi les autres contributeurs :<br>%4<br>Traductions par:<br>%5<br>Un grand merci aux projets suivants : %6<br>Les icônes proviennent de %7.<br><br>CEmu est sous licence %8, et n'est pas un produit de TI ni en est affilié/endossé.<br><br> - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) Variable TI (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;Tous les fichiers (*.*) - + Enter image path Entrer le chemin de l'image - + Select at least two files to group Choisissez au moins deux fichiers à grouper - - + + Transfer error, see console for information: File: Erreur de transfer, voir la console pour plus d'infos. Fichier : - - + + Transfer completed successfully. Transfert effectué avec succès. - + See the test config file format and make sure values are correct and referenced files are there. Regardez le format de fichier des configs de tests, et vérifiez que les valeurs soient correctes ainsi que les fichiers référencés présents. - + Make sure you have entered a valid start/size pair or preset. Vérifiez bien d'avoir entré une paire/preset valide de début/taille. - + Select at least one file to transfer Choisissez au moins un fichier à transférer - + Run/Stop Lancer / Arrêter - + Reload Recharger - + No translation available for this language :( Pas de traduction disponible pour cette langue :( - + Add memory view Ajouter une vue mémoire - + Add memory visualizer Ajouter un visualiseur de mémoire - + Memory Visualizer Visualiseur mémoire - + Keypress History Historique des touches - + Clear History Vider l'historique - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu n'a pas pu écrire à l'endroit standard des paramètres. Le mode portable a été activé. - + ROM images (*.rom) Images ROM (*.rom) - + Set ROM image to save to Emplacement de l'image ROM - + RAM images (*.ram) Images RAM (*.ram) - + Set RAM image to save to Emplacement de l'image RAM - + Select RAM image to load Image RAM à charger - + RAM images (*.ram);;All files (*.*) Images RAM (*.ram);;Tous les fichiers (*.*) - + Saving failed. Please check write permissions in settings directory. La sauvegarde a échouée. Veuillez vérifier les permissions du dossier des paramètres. - + Auto (%0) - + Auto (%0) - + Current: %0 (change requires reset) Actuelle : %0 (reset requis après changement) - - + + N/A N/A - + Copy version Copier la version - + Version copied! Version copiée ! - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] Sortie vers le dock redirigée vers stdout. Utilisez le bouton radio pour l'activer. - + TI Group (*.8cg);;All Files (*.*) Groupe TI (*.8cg);;Tous les fichiers (*.*) - + + Transfer error, variable no longer exists: + Erreur de transfert, la variable n'existe plus : + + + Error. No config loaded Erreur. Pas de configuration chargée - + Error. Couldn't follow the test sequence defined in the configuration Erreur. Impossible de faire suivre la séquence de test définie dans la configuration - + Error. Unknown one - wat? Erreur inconnue - wat ? - + Please choose a json file or type its path. Veuillez choisir un fichier JSON ou tapez son chemin. - + Couldn't go to where the JSON file is. Impossible d'aller là où est le fichier JSON. - + Couldn't read JSON file. Impossible de lire le fichier JSON. - + Unable to open the file. Impossible d'ouvrir le fichier. - + Test results Résultats du test - + Out of %2 tests attempted: %4 passed %6 failed @@ -2012,82 +2022,82 @@ Le mode portable a été activé. %6 échoué(s) - + Could not convert those values into numbers Impossible de convertir en nombre - + Could not retrieve this memory chunk Impossible de récupérer cette partie de la mémoire - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. L'image n'a pas l'air d'être celle d'une CE. Voulez-vous quand même la charger? Ceci peut provoquer des instabilités. - + Set PC Mettre PC à... - + Toggle Breakpoint (Dés)activer le breakpoint - + Toggle Write Watchpoint (Dés)activer le watchpoint d'une écriture - + Toggle Read Watchpoint (Dés)activer le watchpoint d'une lecture - + Toggle Read/Write Watchpoint (Dés)activer le watchpoint d'une lecture/écriture - + Hide Calculator Variables - + Masquer les variables de la calculatrice - + Run Until Exécuter jusqu'ici - + Launch program Lancer le programme - + Goto Memory View Localiser en mémoire - + Goto Disasm View Aller au désassembleur - + CEmu Change ID Changement d'ID CEmu - + New ID: Nouvel ID: - + Warning Avertissement @@ -2186,7 +2196,7 @@ L'image bootable doit être placée dans le même dossier que CEmu. Au proc Sauver la config des raccourcis - + Enable UI edit mode Activer l'édition d'interface @@ -2211,7 +2221,7 @@ L'image bootable doit être placée dans le même dossier que CEmu. Au proc Erreur de vérification des mises-à-jour - + Check for updates Vérifier les mises-à-jour @@ -2231,12 +2241,12 @@ L'image bootable doit être placée dans le même dossier que CEmu. Au proc Chaîne non trouvée. - + Error Erreur - + Toggle Windows Console Toggle console Windows @@ -2411,52 +2421,67 @@ File: VarTableModel - Empty - Vide + Vide - - Can't preview this - Pas d'aperçu + Pas d'aperçu - Can't preview this OS variable - Pas d'aperçu pour cette variable OS + Pas d'aperçu pour cette variable OS - + Archive Archive - + Name Nom - + Location Emplacement - + Type Type - + Size Taille - + Preview Aperçu + + VarTableModel::VarData + + + Empty + Vide + + + + + Can't preview this + Pas d'aperçu + + + + Can't preview this OS variable + Pas d'aperçu pour cette variable OS + + VisualizerDisplayWidget diff --git a/gui/qt/i18n/nl_NL.qm b/gui/qt/i18n/nl_NL.qm index 204b14775fcce667f7ec2d34013257189f8f0a26..79ba4319dd4e81ba01cdd06cb2eff42c1682d68c 100644 GIT binary patch delta 4511 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 S*Kd6)n*FzLwwRL+cK-nru{@># delta 4221 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 diff --git a/gui/qt/i18n/nl_NL.ts b/gui/qt/i18n/nl_NL.ts index 6d3697c0b..e7cfca1a0 100644 --- a/gui/qt/i18n/nl_NL.ts +++ b/gui/qt/i18n/nl_NL.ts @@ -65,12 +65,12 @@ MainWindow - + Variables Variabelen - + Save selected Selectie opslaan @@ -78,151 +78,151 @@ - + Name Naam - + Size Grootte - - - + + + Capture Opname - + Screenshot Schermopname - - + + Frame skip: Frames overslaan: - - - - + + + + Settings Instellingen - + General Algemeen - + Automatically check for updates Automatisch controleren op updates - + Automatically save and restore state Automatisch status opslaan en laden - + Always show on top of other windows Altijd boven andere vensters weeergeven - + Use portable configuration Portable configuratie gebruiken - + Open debugger on reset or nmi Debugger openen bij een reset of nmi - + Enable software commands Softwarecommando's activeren - + Text size: Tekstgrootte: - + Display Scherm - + Skin Thema - + Scale: Schaal: - - + + % % - + Throttle: Reguleren: - + Key bindings Sneltoetsen - + File Locations Bestandslocaties - - + + Change path Pad aanpassen - + Saved Debug Opgeslagen Debug - + Saved Image Opgeslagen Image - + ROM Image ROM-bestand - + Setup wizard Installatiescherm - + Keypad Skin Color Themakleur toetsenbord - + Debug Debug @@ -258,7 +258,7 @@ - + CPU Status CPU Status @@ -275,8 +275,8 @@ - - + + Disassembly Disassembly @@ -285,7 +285,7 @@ - + Goto Ga naar @@ -308,7 +308,7 @@ Vernieuwen - + Clear Wissen @@ -319,7 +319,7 @@ - + Timers Timers @@ -375,7 +375,7 @@ - + Breakpoints Breakpoints @@ -394,7 +394,7 @@ Ingeschakeld - + Add Toevoegen @@ -402,8 +402,8 @@ - - + + Remove Verwijderen @@ -417,7 +417,7 @@ - + Port Monitor Poort-Monitor @@ -473,7 +473,7 @@ - + Debug Control Debug Controle @@ -520,7 +520,7 @@ - + Memory Geheugen @@ -533,7 +533,7 @@ - + Search Zoeken @@ -549,7 +549,7 @@ RAM - + Memory View Geheugen-weergave @@ -583,7 +583,7 @@ - + Miscellaneous Diversen @@ -639,7 +639,7 @@ - + AutoTester AutoTester @@ -649,12 +649,12 @@ Test-Configuratie starten - + Send files to calc Bestanden naar rekenmachine verzenden - + Auto. save and restore debug state Debug-Status automatisch opslaan en laden @@ -664,142 +664,142 @@ Rekenmachine Ontvangen - + View Calculator Variables Rekenmachine-Variabelen-weergeven - + Save group Groep opslaan - + Calculator Send Rekenmachine Verzenden - + Resend Opnieuw verzenden - + Path Pad - + Screen Recording Schermopname - - + + Record Opnemen - + Optimize Optimaliseren - + Configuration Instellingen - + Pause emulation on focus change Emulatie pauzeren bij focuswisseling - + Emulation Emulatie - + Display / Emulation Speed Scherm- / Emulatiesnelheid - + Actual FPS: Actuele FPS: - - + + Console Console - + dock dock - + console console - + Auto scroll Autoscroll - - + + Calculator state Rekenmachine-Status - - + + Debug state Debug-status - + New CEmu instance Nieuwe CEmu - + Show key history Toetsgeschiedenis weergeven - + Bootable CEmu image Bootable CEmu-image - + Hide menu bar Menubalk verbergen - + Copy screen to clipboard Scherm naar klembord kopiëren - + Ctrl+Shift+C Ctrl+Shift+C - + Reset GUI docks GUI docks herstellen - + Reset CEmu CEmu opnieuw instellen @@ -995,70 +995,70 @@ Hash (CRC): - + Selected Selectie - + Resend selected Selectie opnieuw verzenden - + Save transferred file paths on exit Bestandspaden opslaan - + Update status: Update status: - + sec sec - + Debugging Debuggen - + Tab between opcode / operands Tab tussen opcode / operanden - + Space between operands Spatie tussen operanden - - + + State Status - - + + Window configuration Vensterinstellingen - + Keypad Mapping Keymap-toewijzing - + Change Instance ID Instantie-ID aanpassen - + TI-Basic Debug TI-Basic Debug @@ -1114,13 +1114,13 @@ - + Watchpoints Watchpoints - + OS Variables OS-variabelen @@ -1142,7 +1142,7 @@ - + OS Stacks OS-stacks @@ -1157,367 +1157,372 @@ FP-stack - + + All + Alle + + + Save PNG PNG opslaan - + Copy PNG PNG kopiëren - + Upscaling: - Opschaling + Opschaling: - + Nearest Neighbor Naaste buur - + Bilinear Bi-lineair - + Sharp Bilinear Scherp lineair - + Fullscreen: Volledig scherm: - + Stretch Uitrekken - + Preserve Aspect Verhoudingen behouden - + Integer Scale Schaal in geheel getal - + Allow dock grouped dragging Vensters gegroepeerd slepen toestaan - + Natural Natuurlijk - + SmartPad SmartPad - + Custom Aangepast - + ASIC revision: ASIC-revisie: - + Auto - + Rev A - + Rev I - + Rev M - + Current: Huidig: - + Emulate Python Edition Python Edition emuleren - + Emulate DMA to LCD memory DMA naar LCD-geheugen emuleren - + Emulate LCD gamma LCD-gamma emuleren - + Emulate LCD response time LCD-reactietijd emuleren - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) Sommige debugging-vensters zijn alleen zinvol binnen de context van normale OS-uitvoering (behalve wanneer bepaalde ASM-programma's draaien) - + Assume normal OS operation Normale OS-uitvoering aannemen - + May cause problems if boot code is incompatible. Use only if you know what you're doing. - Kan problemen veroorzaken als opstartcode niet compatibel is. Gebruik alleen als je weet wat je doet. + Kan problemen veroorzaken als bootcode niet compatibel is. Gebruik alleen als je weet wat je doet. - + Allow any ASIC revision Elke ASIC-revisie toestaan - + Show data column Datakolom weergeven - + Use implicit mode Impliciete modus gebruiken - + Use uppercase font Hoofdletters gebruiken - + Show address column Adreskolom weergeven - + Bold disassembly symbols Vet gedemonteerde symbolen - + Load Laden - + Save Opslaan - + Edit Bewerken - - + + Reset Reset - - + + Keypad Toetsenbord - + &File &Bestand - + Export Exporteren - + Import Importeren - + Language Taal (Language) - + &Calculator &Rekenmachine - + Extras Extra's - + Screen Scherm - + Open... Openen… - + Ctrl+Shift+O Ctrl+Shift+O - + Exit Sluiten - + Ctrl+Shift+Q Ctrl+Shift+Q - + Rom setup wizard... Rom-installatiescherm… - - + + About CEmu Over CEmu - - + + Take PNG screenshot PNG schermopname maken - + Record animated PNG Animatie-PNG opnemen - + Record animated GIF Animatie-GIF opnemen - + Ctrl+Shift+X Ctrl+Shift+X - + About Qt Over Qt - + Check for updates... Controleren op updates… - + ROM image ROM-bestand - + English English - + Français Français - + Nederlands Nederlands - + Español Español - + Report a bug / give feedback Meld een probleem / Reageer - + Hide status bar Statusbalk verbergen - - + + RAM image RAM-bestand - + 简体中文 - + Simplified Chinese 简体中文 - + Reload Rom Rom opnieuw laden - + Reset calculator Reset rekenmachine - + Save state Status opslaan - + Restore state Status laden - + Reload ROM ROM opnieuw laden @@ -1533,7 +1538,7 @@ - + Show ASCII ASCII weergeven @@ -1653,47 +1658,47 @@ Alle bestanden (*.*) - + Copy Address Adres kopiëren - + Copy Data Data kopiëren - + Goto VAT Memory View Ga naar VAT Geheugen-weergave - + Goto Disasm View Ga naar Disasm-weergave - + Toggle Breakpoint Breakpoint aan/uit - + Toggle Write Watchpoint Write watchpoint aan/uit - + Toggle Read Watchpoint Read watchpoint aan/uit - + Toggle Read/Write Watchpoint Read/write watchpoint aan/uit - + Error Fout @@ -1713,43 +1718,43 @@ String niet gevonden. - + Information Informatie - + Sync Changes Aanpassingen doorvoeren - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu kon de instellingen niet op de normale locatie opslaan. Portable-modus is ingesteld. - + Select saved image to restore from Selecteer opgeslagen image om te laden - - + + CEmu images (*.ce);;All files (*.*) CEmu-images (*.ce);;Alle bestanden (*.*) - + Set image to save to Image instellen om op te slaan - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1762,314 +1767,319 @@ CEmu maakt gebruik van een aanpasbare dock-style interface. Verplaats de tabs en (Let op: afhankelijk van uw versie kan u gegroepeerde tabbladen of een individuele tabblad slepen via de titel of bovenste balk) - + Run/Stop Run/Stop - + Reload Reload - + Add memory view Voeg geheugenweergave toe - + Add memory visualizer Voeg geheugen visualizer toe - + Memory Visualizer Geheugen Visualizer - + Keypress History Toetsgeschiedenis - + Clear History Geschiedenis wissen - + ROM images (*.rom) ROM-bestand (*.rom) - + Set ROM image to save to Stel ROM-image in om op te slaan - + RAM images (*.ram) RAM-bestand (*.ram) - + Set RAM image to save to Stel RAM-image in om op te slaan - + Select RAM image to load Selecteer RAM-bestand om te laden - + RAM images (*.ram);;All files (*.*) RAM-bestanden (*.ram);;Alle bestanden (*.*) - + Auto (%0) - + Auto (%0) - + Current: %0 (change requires reset) Huidig: %0 (verandering vereist reset) - - + + N/A N.V.T. - + Actual FPS: Actuele FPS: - + Save Screen Scherm opslaan - + Failed to save screenshot. Schermopname niet kunnen opslaan. - + Saving Recording... Opname opslaan… - + Save Recorded PNG PNG-opname opslaan - + A failure occured during PNG recording. Er is een fout opgetreden bij de PNG-opname. - + Stop Recording... Opname stoppen… - + Saving... Opslaan… - + Saving Animated PNG... Animatie-PNG opslaan… - + Record animated PNG... Animatie-PNG opnemen… - + Copy version Kopieer versie - + Version copied! Versie gekopieerd! - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Makers:<br>%3<br>Met bijdragen van o.a.:<br>%4<br>Vertalingen aangeleverd door:<br>%5<br>Met dank aan de volgende projecten: %6<br>Programma-ikonen met dank aan %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] Dock-output omgeleid naar stdout. Gebruik het keuzerondje om dock in te schakelen. - + Select at least two files to group Selecteer tenminste 2 variabelen om te groeperen - - + + Transfer error, see console for information: File: Overdrachtsfout, zie de console voor meer informatie: Bestand: - - + + Transfer completed successfully. Overdracht met succes voltooid. - + + Transfer error, variable no longer exists: + Overdrachtsfout, variabele bestaat niet meer: + + + See the test config file format and make sure values are correct and referenced files are there. Bestudeer het test configuratie-bestandsformaat en zorg ervoor dat de waarden en de referentiebestanden correct vermeld staan. - + Make sure you have entered a valid start/size pair or preset. Zorg voor een geldige start/grootte-combinatie of gedefinieerde waarde. - + Could not convert those values into numbers Kan deze waarden niet omzetten in getallen - + Could not retrieve this memory chunk Kan dit geheugenblok niet ophalen - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. Dit image lijkt niet afkomstig van een CE. Wlt u het toch proberen te laden? Dit kan instabiliteit opleveren. - + Set PC PC instellen - + Run Until Run Totdat - + Enter image path Voer image-pad in - - + + Emulated Speed: Emulatie-snelheid: - - + + PNG images (*.png) PNG afbeeldingen (*.png) - + Recording... Opnemen… - + Stop Recording Opname stoppen - + Check for updates Controleer op updates - + Select at least one file to transfer Selecteer tenminste een bestand voor de overdracht - + TI Group (*.8cg);;All Files (*.*) TI-Groep (*.8cg);;Alle Bestanden (*.*) - + No translation available for this language :( Geen vertaling beschikbaar voor deze taal :( - + Saving failed. Please check write permissions in settings directory. Opslaan mislukt. Controleer de toegangsrechten op de instellingenmap. - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) TI-Variabelen (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;Alle Bestanden (*.*) - + Hide Calculator Variables - + Rekenmachinevariabelen verbergen - + Error. No config loaded Fout. Geen configuratie geladen - + Error. Couldn't follow the test sequence defined in the configuration Fout. Kon de tesopdrachten in de configuratie niet begrijpen - + Error. Unknown one - wat? Fout. Onbekende wie - wat? - + Please choose a json file or type its path. Kies a.u.b. een json-bestand of geef de locatie. - + Couldn't go to where the JSON file is. Kon de locatie van het JSON-bestand niet bereiken. - + Couldn't read JSON file. Kon het JSON-bestand niet lezen. - + Unable to open the file. Niet in staat het bestand te openen. - + Test results Testresultaten - + Out of %2 tests attempted: %4 passed %6 failed @@ -2078,22 +2088,22 @@ Bestand: %6 mislukt - + Launch program Programma uitvoeren - + Goto Memory View Ga naar Geheugen-weergave - + CEmu Change ID CEmu-ID aanpassen - + New ID: Nieuw ID: @@ -2113,17 +2123,17 @@ Bestand: Debugging-informatie (*.ini);;Alle bestanden (*.*) - + Docks Docks - + Enable UI edit mode UI bewerk-modus activeren - + Warning Waarschuwing @@ -2237,7 +2247,7 @@ Plaats hiertoe de bootable image in dezelfde folder als de CEmu executable. Als Keymap-instellingen opslaan - + Toggle Windows Console Windows Console aan/uit @@ -2413,52 +2423,67 @@ Bestand: VarTableModel - Empty - Leeg + Leeg - - Can't preview this - Kan dit niet weergeven + Kan dit niet weergeven - Can't preview this OS variable - Kan deze OS-variabele niet weergeven + Kan deze OS-variabele niet weergeven - + Archive Archief - + Name Naam - + Location Locatie - + Type Type - + Size Grootte - + Preview Weergeven + + VarTableModel::VarData + + + Empty + Leeg + + + + + Can't preview this + Kan dit niet weergeven + + + + Can't preview this OS variable + Kan deze OS-variabele niet weergeven + + VisualizerDisplayWidget diff --git a/gui/qt/i18n/zh_CN.qm b/gui/qt/i18n/zh_CN.qm index 4d69b585512f95e1b37d82d8f13041c58750efa2..8279417f788aed9701183063fa85f0086f56a633 100644 GIT binary patch delta 5046 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 delta 3979 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 diff --git a/gui/qt/i18n/zh_CN.ts b/gui/qt/i18n/zh_CN.ts index 1575514a7..af45dfa36 100644 --- a/gui/qt/i18n/zh_CN.ts +++ b/gui/qt/i18n/zh_CN.ts @@ -67,33 +67,33 @@ MainWindow - - + + Keypad "Virtual keypad" 虚拟键盘 - + Variables 变量 - + Watchpoints 观察点 - + Size 大小 - + OS Variables 系统变量 @@ -103,52 +103,52 @@ 更改计算器许可ID - + Resend selected 重新发送选中的内容 - + Save transferred file paths on exit 在退出时保存传输文件路径 - - - + + + Capture 截图 - + Screenshot 截图 - - - - + + + + Settings 设置 - + General 通用 - + Automatically save and restore state 自动保存和恢复状态 - + ROM Image ROM镜像 - + Debug 调试 @@ -164,7 +164,7 @@ - + Show ASCII 显示 ASCII @@ -286,42 +286,42 @@ 所有文件 (*.*) - + Copy Address 拷贝地址 - + Copy Data 拷贝数据 - + Goto VAT Memory View 转到VAT内存视图 - + Goto Disasm View 转到反汇编视图 - + Toggle Breakpoint 切换断点 - + Toggle Write Watchpoint 切换写入监视点 - + Toggle Read Watchpoint 切换读取监视点 - + Toggle Read/Write Watchpoint 切换读取/写入监视点 @@ -342,46 +342,46 @@ - + Goto 转到 - - + + Disassembly 反汇编 - + Always show on top of other windows "Always show on top of other windows" 始终在其他窗口之上显示 - + File Locations 文件路径 - + Saved Image 保存的镜像 - + Skin 外观 - + Scale: 比例: - + Keypad Skin Color 键盘外观颜色 @@ -410,7 +410,7 @@ 刷新 - + Clear 清除 @@ -430,7 +430,7 @@ - + Port Monitor 端口监视器 @@ -466,22 +466,22 @@ - + Memory 内存 - + dock dock - + console 控制台 - + Auto scroll 自动滚动 @@ -660,77 +660,77 @@ 哈希值(CRC): - + Selected 选中的 - + Send files to calc 发送文件到计算器 - + Tab between opcode / operands 操作码/操作数之间的制表符 - + Space between operands 操作数之间的空格 - + Keypad Mapping 键盘映射 - + Change Instance ID 更改实例ID - + Auto. save and restore debug state 自动保存并恢复调试状态 - + Record animated PNG 录制PNG动画 - + Ctrl+Shift+X Ctrl+Shift+X - + Reset calculator 重置计算器 - + Save state 保存状态 - + Restore state 恢复状态 - + Reload ROM 重新装载ROM - + Screen 屏幕 - + Reload Rom 重新装载ROM @@ -744,46 +744,46 @@ 地址 - + Automatically check for updates 自动检查更新 - + Use portable configuration 使用便携式设置 - + Open debugger on reset or nmi 在重置或NMI时打开调试器 - + Enable software commands 启用软件命令 - - + + % % - - + + Change path 更改路径 - + Saved Debug "saved debug sessions" 保存的调试会话 - + Breakpoints 断点 @@ -804,8 +804,8 @@ 标志位 - - + + Frame skip: 跳帧: @@ -823,7 +823,7 @@ 停止 - + Add 添加 @@ -845,23 +845,23 @@ 冻结 - + Save selected 保存所选内容 - + Throttle: "(emulation) speed limit" 限速: - + Text size: 文字大小: - + Key bindings 键盘绑定 @@ -893,28 +893,28 @@ 同步更改 - + Rom setup wizard... ROM 设置向导… - - + + Take PNG screenshot 以PNG格式截图 - + Record animated GIF 录制GIF动画 - + Check for updates... 检查更新… - + About Qt 关于 Qt @@ -924,7 +924,7 @@ 中断 - + Display 显示 @@ -934,8 +934,8 @@ 亮度 - - + + Console 控制台 @@ -943,7 +943,7 @@ - + Name 名称 @@ -951,8 +951,8 @@ - - + + Remove 移除 @@ -980,13 +980,13 @@ - + Search 搜索 - + Sync Changes 同步更改 @@ -996,27 +996,27 @@ RAM - + Memory View 内存视图 - + &File &文件 - + Open... 打开... - + Exit 退出 - + Setup wizard 设置向导 @@ -1027,13 +1027,13 @@ - + Debug Control 调试控制 - + CPU Status CPU状态 @@ -1072,7 +1072,7 @@ - + Timers 定时器 @@ -1161,7 +1161,7 @@ - + OS Stacks 系统栈 @@ -1177,7 +1177,7 @@ - + Miscellaneous 杂项 @@ -1223,7 +1223,7 @@ - + AutoTester 自动测试器 @@ -1244,67 +1244,67 @@ 从计算器接收 - + View Calculator Variables 查看计算器变量 - + Save group "save as group" 保存为组 - + Calculator Send "Send to calculator" 发送至计算器 - + Resend 重新发送 - + Path 路径 - + Save PNG 保存PNG - + Copy PNG 拷贝PNG - + Screen Recording 屏幕录制 - - + + Record 录制 - + Optimize 优化 - + Configuration 配置 - + TI-Basic Debug TI-Basic 调试 @@ -1344,42 +1344,42 @@ 临时解析器 - + Pause emulation on focus change 在CEmu不在最上方时暂停模拟 - + Allow dock grouped dragging 允许项目组拖移 - + Natural 自然的 - + Custom 自定义 - + Emulation 模拟 - + Display / Emulation Speed 显示/模拟速度 - + Actual FPS: 实际帧率: - + Update status: 更新状态: @@ -1394,342 +1394,347 @@ - + + All + 所有类型 + + + Upscaling: - + 升级: - + Nearest Neighbor - + Bilinear - + Sharp Bilinear - + Fullscreen: - + Stretch - + Preserve Aspect - + Integer Scale - + SmartPad SmartPad - + ASIC revision: - + sec - + Auto - + Rev A - + Rev I - + Rev M - + Current: - + Emulate Python Edition - + Emulate DMA to LCD memory - + Emulate LCD gamma - + Emulate LCD response time - + Debugging 调试 - + Some debugging views only make sense when in the context of normal OS operation (may not be the case when some ASM programs are running, for instance) "Some of the debugging views only make sense when TIOS is running normally (when some assembly programs are running, it may not make sense, for instance)" 一些调试器视图仅在TIOS正常运行的情况下才有意义(例如在一些汇编语言程序运行时就可能没有意义) - + Assume normal OS operation Asumir el funcionamiento normal del OS 假设操作系统工作正常 - + May cause problems if boot code is incompatible. Use only if you know what you're doing. - + 如果启动代码不兼容,可能会导致问题。只有当你知道自己在做什么时才能使用。 - + Allow any ASIC revision - + 允许任何 ASIC 修订 - + Show data column 显示数据栏 - + Use implicit mode "omit implicit operands" 省略隐含的操作数 - + Use uppercase font 使用大写字母 - + Show address column 显示地址栏 - + Bold disassembly symbols 为汇编符号使用粗体 - - + + State 状态 - + Load 加载 - + Save 保存 - + Edit 编辑 - - + + Reset 重设 - + Export 导出 - + Import 导入 - + Language 语言 - + &Calculator &计算器 - + Extras 其他 - + Ctrl+Shift+O Ctrl+Shift+O - + Ctrl+Shift+Q Ctrl+Shift+Q - - + + About CEmu 关于 CEmu - + ROM image ROM镜像 - - + + Calculator state 计算器状态 - - + + Debug state 调试状态 - + New CEmu instance 新建CEmu实例 - + Show key history 显示按键历史记录 - + Bootable CEmu image 可启动的CEmu镜像 - + Hide menu bar 隐藏菜单栏 - + Copy screen to clipboard 将屏幕图像拷贝到剪贴板 - + Ctrl+Shift+C Ctrl+Shift+C - + Reset GUI docks 重置界面项目 - + Reset CEmu 重置CEmu - + English English - + Français Français - + Nederlands Nederlands - + Español Español - - + + Window configuration 窗口设置 - + Report a bug / give feedback 报告漏洞/反馈意见 - + Hide status bar 隐藏状态栏 - - + + RAM image RAM镜像 - + 简体中文 简体中文 - + Simplified Chinese Simplified Chinese - + Docks 项目 - + Welcome! CEmu uses a customizable dock-style interface. Drag and drop to move tabs and windows around on the screen, and choose which docks are available in the 'Docks' menu in the topmost bar. Be sure that 'Enable UI edit mode' is selected when laying out your interface. Enjoy! @@ -1742,37 +1747,37 @@ CEmu采用可自定义的项目界面,您可以在屏幕上拖拽标签页和 (注意:取决于您的版本,您可以分别从标题或标签栏中拖动一组或单个标签) - - + + PNG images (*.png) PNG图像 (*.png) - + Select saved image to restore from 选择用于恢复的已保存的镜像 - - + + CEmu images (*.ce);;All files (*.*) CEmu镜像 (*.ce);;所有文件 (*.*) - + Information 信息 - + Set image to save to 设置镜像保存路径 - - + + Emulated Speed: 模拟速度: @@ -1792,306 +1797,311 @@ CEmu采用可自定义的项目界面,您可以在屏幕上拖拽标签页和 <b>CEmu在检查更新时出现了错误.</b><br/>您可以到<a href='https://github.com/CE-Programming/CEmu/releases/latest'></a>来自行查看。 - + Recording... 录制中... - + Stop Recording 停止录制 - + Select at least one file to transfer 选择至少一个文件以传输 - + Actual FPS: 实际帧率: - + Run/Stop 运行/停止 - + Reload 重新加载 - + Keypress History 键盘历史记录 - + Clear History 清除历史记录 - + Save Screen 保存屏幕 - + Failed to save screenshot. 无法保存截屏。 - + Saving Recording... 保存录制文件... - + Save Recorded PNG 保存录制的PNG - + A failure occured during PNG recording. PNG录制时出现了错误。 - + Stop Recording... 停止录制… - + Saving... 保存中… - + Saving Animated PNG... 保存PNG动画... - + Record animated PNG... 录制PNG动画... - + Copy version 拷贝版本 - + %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>On GitHub</a><br><br>Main authors:<br>%3<br>Other contributors include:<br>%4<br>Translations provided by:<br>%5<br>Many thanks to the following projects: %6<br>In-program icons are courtesy of %7.<br><br>CEmu is licensed under the %8, and is not a TI product nor is it affiliated to/endorsed by TI.<br><br> %1<h3>CEmu %2</h3><a href='https://github.com/CE-Programming/CEmu'>GitHub 主页</a><br><br>开发者:<br>%3<br>其他贡献者:<br>%4<br>翻译:<br>%5<br>感谢以下项目: %6<br>应用内图标由 %7 提供<br><br>CEmu遵循 %8 协议,且不是一个德州仪器的产品,同时也不隶属于德州仪器<br><br> - + [CEmu] Dock output redirected to stdout. Use the radio button to enable dock. [CEmu] 项目输出重定向到标准输出,使用单选按钮启用项目。 - + Select at least two files to group 选择至少两个文件以组合 - + TI Group (*.8cg);;All Files (*.*) TI Group (*.8cg);;所有文件 (*.*) - - + + Transfer error, see console for information: File: 传输失败,请打开控制台查看更多信息: 文件: - - + + Transfer completed successfully. 传输已完成。 - + + Transfer error, variable no longer exists: + 传输错误,变量已不存在: + + + Error. No config loaded 错误。无加载配置 - + Error. Couldn't follow the test sequence defined in the configuration 错误。无法跟随在配置中的测试序列 - + Error. Unknown one - wat? 未知错误—啥? - + See the test config file format and make sure values are correct and referenced files are there. "Please see the test config file format and check if all values are correct and referenced files exist." 请参见测试配置文件的格式并确认数值都是正确的且被引用的文件均存在。 - + Make sure you have entered a valid start/size pair or preset. "Make sure the entered `start`/`size` value or preset is valid" 确保输入的`开始`/`大小`值或预设有效。 - + Could not convert those values into numbers 无法将值转换为数字 - + Could not retrieve this memory chunk 无法检索该内存块 - + Image does not appear to be from a CE. Do you want to attempt to load it anyway? This may cause instability. 该图像似乎不是来自一台CE,您确定要加载它吗?这可能导致不稳定。 - + Set PC 设置PC - + Run Until 运行直到 - + Enter image path 输入图像路径 - + Please choose a json file or type its path. 请选择一个json文件或输入其路径。 - + No translation available for this language :( 该语言目前没有翻译:( - + Add memory view 添加内存视图 - + Add memory visualizer 添加内存可视化器 - + Memory Visualizer 内存可视化器 - + CEmu was not able to write to the standard settings location. Portable mode has been activated. CEmu无法写入到标准设置位置 便携式模式已启用。 - + ROM images (*.rom) ROM镜像 (*.rom) - + Set ROM image to save to 设置ROM镜像保存路径 - + RAM images (*.ram) RAM镜像 (*.ram) - + Set RAM image to save to 设置内存(RAM)镜像保存路径 - + Select RAM image to load 选择加载的内存(RAM)镜像 - + RAM images (*.ram);;All files (*.*) RAM镜像 (*.ram);;所有文件 (*.*) - + Saving failed. Please check write permissions in settings directory. 保存失败,请检查写入权限设置. - + Auto (%0) - + 自动 (%0) - + Current: %0 (change requires reset) - - + + N/A 不适用 - + Version copied! 已拷贝版本信息! - + TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) TI Variable (*.8xp *.8xv *.8xl *.8xn *.8xm *.8xy *.8xg *.8xs *.8xd *.8xw *.8xc *.8xl *.8xz *.8xt *.8ca *.8cg *.8ci *.8ek *.8eu *.8pu *.b84 *.b83);;All Files (*.*) - + Hide Calculator Variables - + 隐藏计算器变量 - + Couldn't go to where the JSON file is. 无法进入JSON文件位置。 - + Couldn't read JSON file. 无法读取JSON文件。 - + Unable to open the file. 无法打开文件。 - + Test results 测试结果 - + Out of %2 tests attempted: %4 passed %6 failed @@ -2100,22 +2110,22 @@ Portable mode has been activated. %6 失败 - + Launch program 启动程序 - + Goto Memory View 显示内存视图 - + CEmu Change ID 更改CEmu ID - + New ID: 新ID: @@ -2135,12 +2145,12 @@ Portable mode has been activated. 调试信息 (* .ini);;所有文件 (*. *) - + Enable UI edit mode 启用UI编辑模式 - + Warning 警告 @@ -2191,7 +2201,7 @@ The bootable image should be placed in the same directory as the CEmu executable Be aware that this may behave unexpectedly due to the combinations of keypresses sent by the calculator, which may trigger some global shortcuts on your system! - + 请注意,由于计算器发送的按键组合可能会触发系统中的某些全局快捷键,因此可能会出现意外情况! @@ -2227,7 +2237,7 @@ The bootable image should be placed in the same directory as the CEmu executable Natural keymap is not exportable - + 无法导出自然键盘图 @@ -2240,7 +2250,7 @@ The bootable image should be placed in the same directory as the CEmu executable 保存键盘映射 - + Check for updates 检查更新 @@ -2261,12 +2271,12 @@ The bootable image should be placed in the same directory as the CEmu executable 没有找到字符串。 - + Error 错误 - + Toggle Windows Console 切换窗口控制台 @@ -2300,7 +2310,7 @@ The bootable image should be placed in the same directory as the CEmu executable To run the program, select Asm( from the catalog by pressing [2nd] then [0], and then pressing enter at the following prompt. You do not need the Asm( part if you're on OS 5.3 or later. Note that if you're on OS 5.5 or later, you will need to use an assembly program launcher instead (like a shell, or AsmHook, both of which can be installed through arTIfiCE first). - 要运行该程序,请从目录中选择 Asm(,按 [2],然后按 [0],并在下面的提示符下按回车键。如果操作系统是 5.3 或更高版本,则不需要 Asm( 部分。 + 要运行该程序,请从目录中选择 Asm(,按 [2],然后按 [0],并在下面的提示符下按回车键。如果操作系统是 5.3 或更高版本,则不需要 Asm( 部分。 请注意,如果您的操作系统是 5.5 或更高版本,则需要使用汇编程序启动器(如 shell 或 AsmHook,这两种程序都可以先通过 arTIfiCE 安装)。 @@ -2442,52 +2452,67 @@ File: VarTableModel - Empty - + - - Can't preview this - 无法预览 + 无法预览 - Can't preview this OS variable - 无法预览该系统变量 + 无法预览该系统变量 - + Archive 存档 - + Name 名称 - + Location 位置 - + Type 类型 - + Size 大小 - + Preview 预览 + + VarTableModel::VarData + + + Empty + + + + + + Can't preview this + 无法预览 + + + + Can't preview this OS variable + 无法预览该系统变量 + + VisualizerDisplayWidget @@ -2676,12 +2701,12 @@ File: Saves a screenshot to <File> (only usable as a sent command) - + 将截图保存到 <File> (只能作为发送命令使用) screenshot - + 截图 From b72f96e8058764b1e34b8f1f5609cf6a2df32176 Mon Sep 17 00:00:00 2001 From: Brendan Fletcher Date: Sat, 24 Aug 2024 18:33:53 -0400 Subject: [PATCH 8/8] gui: Fix column auto resize in variable list when filtering --- gui/qt/vartablemodel.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gui/qt/vartablemodel.cpp b/gui/qt/vartablemodel.cpp index 7df255f31..0589ecf0c 100644 --- a/gui/qt/vartablemodel.cpp +++ b/gui/qt/vartablemodel.cpp @@ -133,9 +133,12 @@ void VarTableModel::refresh() { newInsertEnd = std::find_if_not(newIter, newVars.end(), [=](const calc_var_t &var) { return varLess(var, oldIter->info); }); } if (newIter != newInsertEnd) { - beginInsertRows(QModelIndex(), row, row + (newInsertEnd - newIter - 1)); + int lastRow = row + (newInsertEnd - newIter - 1); + beginInsertRows(QModelIndex(), row, lastRow); oldIter = vars.insert(oldIter, newIter, newInsertEnd); endInsertRows(); + // Handle header resize because it doesn't care about inserted rows + emit dataChanged(index(row, 0), index(lastRow, VAR_NUM_COLS - 1), { Qt::SizeHintRole }); oldIter += (newInsertEnd - newIter); newIter = newInsertEnd; } else { @@ -294,6 +297,11 @@ void VarTableSortFilterModel::setTypeFilter(int type) { if (type != typeFilter) { typeFilter = type; invalidateFilter(); + // Handle header resize because it doesn't care about inserted rows + int rows = rowCount(), cols = columnCount(); + if (rows > 0 && cols > 0) { + emit dataChanged(index(0, 0), index(rows - 1, cols - 1), { Qt::SizeHintRole }); + } } }