30
30
BitButton::BitButton(QWidget *parent) : QAbstractButton(parent), on(false)
32
setFocusPolicy(Qt::ClickFocus); // too many bits for tab focus
32
setFocusPolicy(Qt::ClickFocus); // too many bits for tab focus
34
// size button by font
35
QSize size = fontMetrics().size(0, "M");
36
if (size.width() < size.height()) {
37
size.setHeight(size.width());
39
size.setWidth(size.height());
41
setFixedSize(size.expandedTo(QApplication::globalStrut()));
34
// size button by font
35
QSize size = fontMetrics().size(0, "M");
36
if (size.width() < size.height()) {
37
size.setHeight(size.width());
39
size.setWidth(size.height());
41
setFixedSize(size.expandedTo(QApplication::globalStrut()));
44
44
bool BitButton::isOn() const
49
49
void BitButton::setOn(bool value)
55
55
void BitButton::paintEvent(QPaintEvent *)
57
QPainter painter(this);
58
QPen pen(palette().text(), 2);
59
pen.setJoinStyle(Qt::MiterJoin);
62
if (on) painter.setBrush(palette().text());
63
else painter.setBrush(palette().base());
65
painter.drawRect(rect().adjusted(1, 1, -1, -1));
57
QPainter painter(this);
58
QPen pen(palette().text(), 2);
59
pen.setJoinStyle(Qt::MiterJoin);
62
if (on) painter.setBrush(palette().text());
63
else painter.setBrush(palette().base());
65
painter.drawRect(rect().adjusted(1, 1, -1, -1));
69
69
KCalcBitset::KCalcBitset(QWidget *parent)
70
: QFrame(parent), mValue(0)
70
: QFrame(parent), mValue(0)
72
setFrameStyle(QFrame::Panel | QFrame::Sunken);
73
bitButtonGroup = new QButtonGroup(this);
74
connect(bitButtonGroup, SIGNAL(buttonClicked (int)),
75
SLOT(slotToggleBit(int)));
79
if (fnt.pointSize() > 6) fnt.setPointSize(fnt.pointSize() - 1);
82
QGridLayout *layout = new QGridLayout(this);
84
layout->setSpacing(0);
88
for (int rows=0; rows<2; rows++) {
89
for (int cols=0; cols<4; cols++) {
90
// two rows of four words
91
QHBoxLayout *wordlayout = new QHBoxLayout();
92
wordlayout->setMargin(2);
93
wordlayout->setSpacing(2);
94
layout->addLayout(wordlayout, rows, cols);
96
for (int bit=0; bit<8; bit++) {
97
BitButton *tmpBitButton = new BitButton(this);
98
wordlayout->addWidget(tmpBitButton);
99
bitButtonGroup->addButton(tmpBitButton, bitCounter);
104
QLabel *label = new QLabel(this);
105
label->setText(QString::number(bitCounter+1));
107
wordlayout->addWidget(label);
72
setFrameStyle(QFrame::Panel | QFrame::Sunken);
73
bitButtonGroup = new QButtonGroup(this);
74
connect(bitButtonGroup, SIGNAL(buttonClicked(int)),
75
SLOT(slotToggleBit(int)));
79
if (fnt.pointSize() > 6) fnt.setPointSize(fnt.pointSize() - 1);
82
QGridLayout *layout = new QGridLayout(this);
84
layout->setSpacing(0);
88
for (int rows = 0; rows < 2; rows++) {
89
for (int cols = 0; cols < 4; cols++) {
90
// two rows of four words
91
QHBoxLayout *wordlayout = new QHBoxLayout();
92
wordlayout->setMargin(2);
93
wordlayout->setSpacing(2);
94
layout->addLayout(wordlayout, rows, cols);
96
for (int bit = 0; bit < 8; bit++) {
97
BitButton *tmpBitButton = new BitButton(this);
98
wordlayout->addWidget(tmpBitButton);
99
bitButtonGroup->addButton(tmpBitButton, bitCounter);
104
QLabel *label = new QLabel(this);
105
label->setText(QString::number(bitCounter + 1));
107
wordlayout->addWidget(label);
113
113
void KCalcBitset::setValue(unsigned long long value)
115
115
if (mValue == value) return;
118
for(int i=0; i<64; i++) {
119
BitButton *bb = qobject_cast<BitButton*>(bitButtonGroup->button(i));
120
if (bb) bb->setOn(value & 1);
118
for (int i = 0; i < 64; i++) {
119
BitButton *bb = qobject_cast<BitButton*>(bitButtonGroup->button(i));
120
if (bb) bb->setOn(value & 1);
125
125
unsigned long long KCalcBitset::getValue()
130
void KCalcBitset::slotToggleBit( int bit )
130
void KCalcBitset::slotToggleBit(int bit)
132
unsigned long long nv = getValue() ^ (1LL << bit);
134
emit valueChanged(mValue);
132
unsigned long long nv = getValue() ^(1LL << bit);
134
emit valueChanged(mValue);