~ubuntu-branches/ubuntu/maverick/kdeutils/maverick-proposed

« back to all changes in this revision

Viewing changes to kcalc/kcalc_bitset.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-05-28 09:49:30 UTC
  • mfrom: (1.2.44 upstream)
  • Revision ID: james.westby@ubuntu.com-20100528094930-jzynf0obv1n2v13a
Tags: 4:4.4.80-0ubuntu1~ppa1
New upstream beta release

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
BitButton::BitButton(QWidget *parent) : QAbstractButton(parent), on(false)
31
31
{
32
 
        setFocusPolicy(Qt::ClickFocus); // too many bits for tab focus
 
32
    setFocusPolicy(Qt::ClickFocus);   // too many bits for tab focus
33
33
 
34
 
        // size button by font
35
 
        QSize size = fontMetrics().size(0, "M");
36
 
        if (size.width() < size.height()) {
37
 
                size.setHeight(size.width());
38
 
        } else {
39
 
                size.setWidth(size.height());
40
 
        }
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());
 
38
    } else {
 
39
        size.setWidth(size.height());
 
40
    }
 
41
    setFixedSize(size.expandedTo(QApplication::globalStrut()));
42
42
}
43
43
 
44
44
bool BitButton::isOn() const
45
45
{
46
 
        return on;
 
46
    return on;
47
47
}
48
48
 
49
49
void BitButton::setOn(bool value)
50
50
{
51
 
        on = value;
52
 
        update();
 
51
    on = value;
 
52
    update();
53
53
}
54
54
 
55
55
void BitButton::paintEvent(QPaintEvent *)
56
56
{
57
 
        QPainter painter(this);
58
 
        QPen pen(palette().text(), 2);
59
 
        pen.setJoinStyle(Qt::MiterJoin);
60
 
        painter.setPen(pen);
61
 
 
62
 
        if (on) painter.setBrush(palette().text());
63
 
        else    painter.setBrush(palette().base());
64
 
 
65
 
        painter.drawRect(rect().adjusted(1, 1, -1, -1));
 
57
    QPainter painter(this);
 
58
    QPen pen(palette().text(), 2);
 
59
    pen.setJoinStyle(Qt::MiterJoin);
 
60
    painter.setPen(pen);
 
61
 
 
62
    if (on) painter.setBrush(palette().text());
 
63
    else    painter.setBrush(palette().base());
 
64
 
 
65
    painter.drawRect(rect().adjusted(1, 1, -1, -1));
66
66
}
67
67
 
68
68
 
69
69
KCalcBitset::KCalcBitset(QWidget *parent)
70
 
   : QFrame(parent), mValue(0)
 
70
        : QFrame(parent), mValue(0)
71
71
{
72
 
        setFrameStyle(QFrame::Panel | QFrame::Sunken);
73
 
        bitButtonGroup = new QButtonGroup(this);
74
 
        connect(bitButtonGroup, SIGNAL(buttonClicked (int)),
75
 
                SLOT(slotToggleBit(int)));
76
 
 
77
 
        // smaller label font
78
 
        QFont fnt = font();
79
 
        if (fnt.pointSize() > 6) fnt.setPointSize(fnt.pointSize() - 1);
80
 
 
81
 
        // main layout
82
 
        QGridLayout *layout = new QGridLayout(this);
83
 
        layout->setMargin(2);
84
 
        layout->setSpacing(0);
85
 
 
86
 
        // create bits
87
 
        int bitCounter = 63;
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);
95
 
 
96
 
                        for (int bit=0; bit<8; bit++) {
97
 
                                BitButton *tmpBitButton = new BitButton(this);
98
 
                                wordlayout->addWidget(tmpBitButton);
99
 
                                bitButtonGroup->addButton(tmpBitButton, bitCounter);
100
 
                                bitCounter--;
101
 
                        }
102
 
 
103
 
                        // label word
104
 
                        QLabel *label = new QLabel(this);
105
 
                        label->setText(QString::number(bitCounter+1));
106
 
                        label->setFont(fnt);
107
 
                        wordlayout->addWidget(label);
108
 
 
109
 
                }
110
 
        }
 
72
    setFrameStyle(QFrame::Panel | QFrame::Sunken);
 
73
    bitButtonGroup = new QButtonGroup(this);
 
74
    connect(bitButtonGroup, SIGNAL(buttonClicked(int)),
 
75
            SLOT(slotToggleBit(int)));
 
76
 
 
77
    // smaller label font
 
78
    QFont fnt = font();
 
79
    if (fnt.pointSize() > 6) fnt.setPointSize(fnt.pointSize() - 1);
 
80
 
 
81
    // main layout
 
82
    QGridLayout *layout = new QGridLayout(this);
 
83
    layout->setMargin(2);
 
84
    layout->setSpacing(0);
 
85
 
 
86
    // create bits
 
87
    int bitCounter = 63;
 
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);
 
95
 
 
96
            for (int bit = 0; bit < 8; bit++) {
 
97
                BitButton *tmpBitButton = new BitButton(this);
 
98
                wordlayout->addWidget(tmpBitButton);
 
99
                bitButtonGroup->addButton(tmpBitButton, bitCounter);
 
100
                bitCounter--;
 
101
            }
 
102
 
 
103
            // label word
 
104
            QLabel *label = new QLabel(this);
 
105
            label->setText(QString::number(bitCounter + 1));
 
106
            label->setFont(fnt);
 
107
            wordlayout->addWidget(label);
 
108
 
 
109
        }
 
110
    }
111
111
}
112
112
 
113
113
void KCalcBitset::setValue(unsigned long long value)
114
114
{
115
115
    if (mValue == value) return;
116
116
 
117
 
        mValue = value;
118
 
        for(int i=0; i<64; i++) {
119
 
                BitButton *bb = qobject_cast<BitButton*>(bitButtonGroup->button(i));
120
 
                if (bb) bb->setOn(value & 1);
121
 
                value >>= 1;
122
 
        }
 
117
    mValue = value;
 
118
    for (int i = 0; i < 64; i++) {
 
119
        BitButton *bb = qobject_cast<BitButton*>(bitButtonGroup->button(i));
 
120
        if (bb) bb->setOn(value & 1);
 
121
        value >>= 1;
 
122
    }
123
123
}
124
124
 
125
125
unsigned long long KCalcBitset::getValue()
126
126
{
127
 
        return mValue;
 
127
    return mValue;
128
128
}
129
129
 
130
 
void KCalcBitset::slotToggleBit( int bit )
 
130
void KCalcBitset::slotToggleBit(int bit)
131
131
{
132
 
  unsigned long long nv = getValue() ^ (1LL << bit);
133
 
  setValue(nv);
134
 
  emit valueChanged(mValue);
 
132
    unsigned long long nv = getValue() ^(1LL << bit);
 
133
    setValue(nv);
 
134
    emit valueChanged(mValue);
135
135
}
136
136