void QHexEditPrivate::setCursorPos(int position) { // delete cursor _blink = false; update(); // cursor in range? if (_overwriteMode) { if (position > (_xData.size() * 2 - 1)) position = _xData.size() * 2 - 1; } else { if (position > (_xData.size() * 2)) position = _xData.size() * 2; } if (position < 0) position = 0; // calc position _cursorPosition = position; _cursorY = (position / (2 * BYTES_PER_LINE)) * _charHeight + 4; int x = (position % (2 * BYTES_PER_LINE)); _cursorX = (((x / 2) * 3) + (x % 2)) * _charWidth + _xPosHex; // immiadately draw cursor _blink = true; update(); emit currentAddressChanged(_cursorPosition/2); }
void QHexEdit::setCursorPosition(qint64 position) { // 1. delete old cursor _blink = false; viewport()->update(_cursorRect); // 2. Check, if cursor in range? if (_overwriteMode && (position > (_chunks->size() * 2 - 1))) position = _chunks->size() * 2 - 1; if (!_overwriteMode && (position > (_chunks->size() * 2))) position = _chunks->size() * 2; if (position < 0) position = 0; // 3. Calc new position of curser _cursorPosition = position; _bPosCurrent = position / 2; _pxCursorY = ((position/2 - _bPosFirst) / BYTES_PER_LINE + 1) * _pxCharHeight; int x = (position % (2 * BYTES_PER_LINE)); _pxCursorX = (((x / 2) * 3) + (x % 2)) * _pxCharWidth + _pxPosHexX; if (_overwriteMode) _cursorRect = QRect(_pxCursorX - horizontalScrollBar()->value(), _pxCursorY + _pxCursorWidth, _pxCharWidth, _pxCursorWidth); else _cursorRect = QRect(_pxCursorX - horizontalScrollBar()->value(), _pxCursorY - _pxCharHeight + 4, _pxCursorWidth, _pxCharHeight); // 4. Immiadately draw new cursor _blink = true; viewport()->update(_cursorRect); emit currentAddressChanged(_bPosCurrent); }
void QHexEdit::setCursorPosition(qint64 position) { // 1. delete old cursor _blink = false; viewport()->update(_cursorRect); // 2. Check, if cursor in range? if (position > (_editorSize * 2 - 1)) position = _editorSize * 2 - 1; if (position < 0) position = 0; // 3. Calc new position of curser _cursorPosition = position; _bPosCurrent = position / 2; _pxCursorY = ((position/2 - _bPosFirst) / BYTES_PER_LINE + 1) * _pxCharHeight; int x = (position % (2 * BYTES_PER_LINE)); _pxCursorX = (((x / 2) * 3) + (x % 2)) * _pxCharWidth + _pxPosHexX; _cursorRect = QRect(_pxCursorX, _pxCursorY + _pxCursorWidth, _pxCharWidth, _pxCursorWidth); // 4. Immiadately draw new cursor _blink = true; viewport()->update(_cursorRect); emit currentAddressChanged(_bPosCurrent); }
void ESURegistration::setCurrentAddress(const QString &address) { if( d->currentAddress != address ) { d->currentAddress = address; Q_EMIT currentAddressChanged(); } }
int QHexEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QScrollArea::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: currentAddressChanged((*reinterpret_cast< int(*)>(_a[1]))); break; case 1: currentSizeChanged((*reinterpret_cast< int(*)>(_a[1]))); break; case 2: dataChanged(); break; case 3: overwriteModeChanged((*reinterpret_cast< bool(*)>(_a[1]))); break; case 4: setAddressWidth((*reinterpret_cast< int(*)>(_a[1]))); break; case 5: setAddressArea((*reinterpret_cast< bool(*)>(_a[1]))); break; case 6: setAsciiArea((*reinterpret_cast< bool(*)>(_a[1]))); break; case 7: setHighlighting((*reinterpret_cast< bool(*)>(_a[1]))); break; default: ; } _id -= 8; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QByteArray*>(_v) = data(); break; case 1: *reinterpret_cast< int*>(_v) = addressOffset(); break; case 2: *reinterpret_cast< QColor*>(_v) = addressAreaColor(); break; case 3: *reinterpret_cast< QColor*>(_v) = highlightingColor(); break; case 4: *reinterpret_cast< bool*>(_v) = overwriteMode(); break; } _id -= 5; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setData(*reinterpret_cast< QByteArray*>(_v)); break; case 1: setAddressOffset(*reinterpret_cast< int*>(_v)); break; case 2: setAddressAreaColor(*reinterpret_cast< QColor*>(_v)); break; case 3: setHighlightingColor(*reinterpret_cast< QColor*>(_v)); break; case 4: setOverwriteMode(*reinterpret_cast< bool*>(_v)); break; } _id -= 5; } else if (_c == QMetaObject::ResetProperty) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 5; } #endif // QT_NO_PROPERTIES return _id; }
int QHexEditPrivate::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: currentAddressChanged((*reinterpret_cast< int(*)>(_a[1]))); break; case 1: currentSizeChanged((*reinterpret_cast< int(*)>(_a[1]))); break; case 2: dataChanged(); break; case 3: overwriteModeChanged((*reinterpret_cast< bool(*)>(_a[1]))); break; case 4: updateCursor(); break; default: ; } _id -= 5; } return _id; }
void QHexEdit::setCursorPosition(qint64 position) { // 1. delete old cursor _blink = false; viewport()->update(_cursorRect); // 2. Check, if cursor in range? if (position > (_chunks->size() * 2 - 1)) position = _chunks->size() * 2 - (_overwriteMode ? 1 : 0); if (position < 0) position = 0; // 3. Calc new position of cursor _bPosCurrent = position / 2; _pxCursorY = ((position / 2 - _bPosFirst) / _bytesPerLine + 1) * _pxCharHeight; int x = (position % (2 * _bytesPerLine)); if (_editAreaIsAscii) { _pxCursorX = x / 2 * _pxCharWidth + _pxPosAsciiX; _cursorPosition = position & 0xFFFFFFFFFFFFFFFE; } else { _pxCursorX = (((x / 2) * 3) + (x % 2)) * _pxCharWidth + _pxPosHexX; _cursorPosition = position; } if (_overwriteMode) _cursorRect = QRect(_pxCursorX - horizontalScrollBar()->value(), _pxCursorY + _pxCursorWidth, _pxCharWidth, _pxCursorWidth); else _cursorRect = QRect(_pxCursorX - horizontalScrollBar()->value(), _pxCursorY - _pxCharHeight + 4, _pxCursorWidth, _pxCharHeight); // 4. Immediately draw new cursor _blink = true; viewport()->update(_cursorRect); emit currentAddressChanged(_bPosCurrent); }
MemoryEditor::MemoryEditor() { setObjectName("memory-editor"); setWindowTitle("Memory Editor"); setGeometryString(&config().geometry.memoryEditor); application.windowList.append(this); layout = new QGridLayout; layout->setMargin(Style::WindowMargin); layout->setSpacing(Style::WidgetSpacing); setLayout(layout); editor = new QHexEdit; editor->reader = { &MemoryEditor::reader, this }; editor->writer = { &MemoryEditor::writer, this }; editor->usage = { &MemoryEditor::usage, this }; memorySource = SNES::Debugger::MemorySource::CPUBus; layout->addWidget(editor, 0, 0); controlLayout = new QVBoxLayout; controlLayout->setSpacing(0); layout->addLayout(controlLayout, 0, 1); layout->setColumnStretch(0, 1); source = new QComboBox; source->addItem("S-CPU bus"); source->addItem("S-APU bus"); source->addItem("S-PPU VRAM"); source->addItem("S-PPU OAM"); source->addItem("S-PPU CGRAM"); source->addItem("Cartridge ROM"); source->addItem("Cartridge RAM"); source->addItem("SA-1 bus"); source->addItem("GSU bus"); controlLayout->addWidget(source); controlLayout->addSpacing(2); addr = new QLineEdit; controlLayout->addWidget(addr); autoUpdateBox = new QCheckBox("Auto update"); controlLayout->addWidget(autoUpdateBox); refreshButton = new QPushButton("Refresh"); controlLayout->addWidget(refreshButton); toolLayout = new QHBoxLayout; controlLayout->addLayout(toolLayout); #define tool(widget, icon, text, slot, accel) \ widget = new QToolButton; \ toolLayout->addWidget(widget); \ widget->setAutoRaise(true); \ widget->setDefaultAction(new QAction(this)); \ widget->defaultAction()->setIcon(QIcon(":16x16/mem-" icon ".png")); \ widget->defaultAction()->setToolTip(text); \ widget->defaultAction()->setShortcut(accel); \ connect(widget->defaultAction(), SIGNAL(triggered()), this, SLOT(slot())) tool(prevCodeButton, "prev-code", "Previous Code", prevCode, 0); tool(nextCodeButton, "next-code", "Next Code", nextCode, 0); tool(prevDataButton, "prev-data", "Previous Data", prevData, 0); tool(nextDataButton, "next-data", "Next Data", nextData, 0); tool(prevUnkButton, "prev-unknown", "Previous Unknown", prevUnknown, 0); tool(nextUnkButton, "next-unknown", "Next Unknown", nextUnknown, 0); toolLayout->addStretch(); toolLayout = new QHBoxLayout; controlLayout->addLayout(toolLayout); tool(findButton, "find", "Find in Memory (Ctrl+F)", search, Qt::Key_F | Qt::CTRL); // TODO: other icons for these maybe tool(findPrevButton, "prev-unknown", "Find again up (Shift+F3)", searchPrev, Qt::Key_F3 | Qt::SHIFT); tool(findNextButton, "next-unknown", "Find again down (F3)", searchNext, Qt::Key_F3); toolLayout->addStretch(); #undef tool spacer = new QWidget; spacer->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); controlLayout->addWidget(spacer); exportButton = new QPushButton("Export"); controlLayout->addWidget(exportButton); importButton = new QPushButton("Import"); controlLayout->addWidget(importButton); statusBar = new QLabel; layout->addWidget(statusBar, 1, 0, 1, 2); connect(editor, SIGNAL(currentAddressChanged(qint64)), this, SLOT(showAddress(qint64))); connect(source, SIGNAL(currentIndexChanged(int)), this, SLOT(sourceChanged(int))); connect(addr, SIGNAL(textEdited(const QString&)), this, SLOT(updateOffset())); connect(addr, SIGNAL(returnPressed()), this, SLOT(updateOffset())); connect(refreshButton, SIGNAL(released()), this, SLOT(refresh())); connect(exportButton, SIGNAL(released()), this, SLOT(exportMemory())); connect(importButton, SIGNAL(released()), this, SLOT(importMemory())); sourceChanged(0); }