Files
qad/libs/touch_widgets/touchbuttframe.cpp
2020-08-25 22:24:02 +03:00

86 lines
2.2 KiB
C++

#include "touchbuttframe.h"
TouchButtFrame::TouchButtFrame(QWidget * parent, Qt::Orientation orientation): QFrame(parent) {
id_click = id_set = -1;
TouchButton b;
colr = b.noColor();
colg = b.yesColor();
colw = b.grayColor();
colp = b.downColor();
setFrameShape(QFrame::StyledPanel);
lay = new QBoxLayout(QBoxLayout::LeftToRight);
lay->setContentsMargins(0, 0, 0, 0);
if (orientation == Qt::Vertical) lay->setDirection(QBoxLayout::TopToBottom);
}
void TouchButtFrame::addButton(const QString & caption) {
TouchButton * butt = new TouchButton(lay->count(), caption);
butt->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
butt->setCheckable(true);
butt->setAutoExclusive(true);
//butt->setAutoFillBackground(true);
lay->addWidget(butt);
this->setLayout(lay);
connect(butt, SIGNAL(clickedID(int)), SLOT(butt_click(int)));
connect(butt, SIGNAL(toggledID(int, bool)), SLOT(butt_toggle(int, bool)));
}
void TouchButtFrame::resetColors() {
for (int i = 0; i < lay->count(); ++i) {
button(i)->setYesColor(colg);
button(i)->setNoColor(colr);
button(i)->setGrayColor(colw);
button(i)->setDownColor(colp);
}
}
void TouchButtFrame::deleteButtons() {
while (!lay->isEmpty())
delete button(0);
}
void TouchButtFrame::setButtons(const QStringList & captions) {
int cur = currentButton();
deleteButtons();
for (int i = 0; i < captions.size(); ++i)
addButton(QString(captions.at(i)).replace("\\n", "\n"));
if (button(cur) != 0) button(cur)->setChecked(true);
else if (!captions.isEmpty()) button(0)->setChecked(true);
resetColors();
}
void TouchButtFrame::setCurrentButton(int index) {
if (button(index) != 0) {
if (currentButton() != -1) button(currentButton())->setChecked(false);
button(index)->setChecked(true);
}
}
int TouchButtFrame::currentButton() {
for (int i = 0; i < buttonsCount(); ++i)
if (button(i)->isChecked()) return i;
return -1;
}
QStringList TouchButtFrame::buttons() {
QStringList l;
for (int i = 0; i < lay->count(); ++i)
l.append(button(i)->text().replace("\n", "\\n"));
return l;
}
TouchButton * TouchButtFrame::button(int index) {
if (index >= 0 && index < lay->count())
return (qobject_cast<TouchButton * >(lay->itemAt(index)->widget()));
return 0;
}