void BitFieldWidget::wheelEvent(QWheelEvent* we) { if (we->delta() > 0) shiftBitsLeft(); else shiftBitsRight(); }
void RegisterValue::shiftOneDigit(uint digit, RegisterFormat format) { switch (format) { case HexadecimalFormat: shiftBitsLeft(this, 4); v.u64[0] |= digit; break; case OctalFormat: shiftBitsLeft(this, 3); v.u64[0] |= digit; break; case BinaryFormat: shiftBitsLeft(this, 1); v.u64[0] |= digit; break; case DecimalFormat: case SignedDecimalFormat: { shiftBitsLeft(this, 1); quint64 tmp0 = v.u64[0]; quint64 tmp1 = v.u64[1]; shiftBitsLeft(this, 2); v.u64[1] += tmp1; v.u64[0] += tmp0; if (v.u64[0] < tmp0) ++v.u64[1]; v.u64[0] += digit; if (v.u64[0] < digit) ++v.u64[1]; break; } case CharacterFormat: shiftBitsLeft(this, 8); v.u64[0] |= digit; } }
BitFieldWidget::BitFieldWidget(QWidget* parent) : QWidget(parent) { m_bitWidgets.reserve(NumberOfBits); for (int i = 0; i < NumberOfBits; ++i) { BitWidget* bitWidget = new BitWidget(i); connect(bitWidget, SIGNAL(stateChanged(bool)), this, SLOT(onBitChanged())); m_bitWidgets.append(bitWidget); } QGridLayout* fieldLayout = new QGridLayout; int bitOffset = 0; for (int column = 0; column < 17; ++column) { if ((column % 2) == 0) { if ((column % 4) != 0) continue; QLabel* topNumberLabel = new QLabel; QLabel* bottomNumberLabel = new QLabel; int topNumber = NumberOfBits - column * 2; int bottomNumber = topNumber - NumberOfBits / 2; if (column == 0) { --topNumber; --bottomNumber; } topNumberLabel->setText(QString("%1").arg(topNumber)); bottomNumberLabel->setText(QString("%1").arg(bottomNumber)); fieldLayout->addWidget(topNumberLabel, 0, column); fieldLayout->addWidget(bottomNumberLabel, 1, column); } else { QHBoxLayout* bottomLayout(new QHBoxLayout); QHBoxLayout* topLayout(new QHBoxLayout); for (int j = 0; j < 4; ++j) { const int topIndex = NumberOfBits - 1 - bitOffset * 4 - j; topLayout->addWidget(m_bitWidgets.at(topIndex)); bottomLayout->addWidget(m_bitWidgets.at(topIndex - NumberOfBits / 2)); } ++bitOffset; fieldLayout->addLayout(bottomLayout, 1, column, Qt::AlignCenter); fieldLayout->addLayout(topLayout, 0, column, Qt::AlignCenter); } } QPushButton* resetButton = new QPushButton("0"); resetButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(resetButton, SIGNAL(clicked()), this, SLOT(resetBits())); QPushButton* invertButton = new QPushButton("~"); invertButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(invertButton, SIGNAL(clicked()), this, SLOT(invertBits())); QPushButton* shiftLeftButton = new QPushButton("<<"); shiftLeftButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(shiftLeftButton, SIGNAL(clicked()), this, SLOT(shiftBitsLeft())); QPushButton* shiftRightButton = new QPushButton(">>"); shiftRightButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(shiftRightButton, SIGNAL(clicked()), this, SLOT(shiftBitsRight())); QVBoxLayout* buttonsLayout = new QVBoxLayout; buttonsLayout->addWidget(resetButton); buttonsLayout->addWidget(shiftLeftButton); QVBoxLayout* buttonsLayout2 = new QVBoxLayout; buttonsLayout2->addWidget(invertButton); buttonsLayout2->addWidget(shiftRightButton); QHBoxLayout* mainLayout = new QHBoxLayout(this); mainLayout->addStretch(); mainLayout->addLayout(fieldLayout); mainLayout->addLayout(buttonsLayout); mainLayout->addLayout(buttonsLayout2); mainLayout->addStretch(); }