#include "rm_radio_buttons.h" #include #include #include #include #include #if (USE_JSON_SETTINGS) #include #include #include "rm_settings_cfg.h" RMRadioButtons::RMRadioButtons(QWidget *parent, QString title, int object, bool rowType) : QWidget(parent), RMValueSelector(object) { setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); //setObjectName("test_widget"); if(rowType == true) { layout = new QVBoxLayout(this); } else { setFixedHeight(25); layout = new QHBoxLayout(this); } layout->setContentsMargins(8,2,8,2); layout->setSpacing(2); layout->setAlignment(Qt::AlignJustify); if(title.isEmpty() == false) { titleLabel = new QLabel(this); titleLabel->setObjectName("text_normal_label"); titleLabel->setText(title); layout->addWidget(titleLabel); } QJsonObject obj = CFG::items.at(object).toObject(); //foreach (QString eachTitle, titles) { QJsonArray value_strings = obj.value("value_strings").toArray(); for(int i=0;isetObjectName("settings"); btn->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); btn->setText(value_strings.at(i).toString()); if(rowType == true) { btn->setFixedHeight(25); } connect(btn,SIGNAL(clicked()),SLOT(onSelected())); layout->addWidget(btn); buttons.append(btn); } if(buttons.count() <= realIndex(obj.value("current").toInt())) { obj.insert("current",QJsonValue(0)); } buttons[realIndex(obj.value("current").toInt())]->setChecked(true); connect(RMValueUpdater::instance(),SIGNAL(updateByValues()),SLOT(onUpdateByValue())); } RMRadioButtons::RMRadioButtons(QWidget *parent, QString title, int object) : QWidget(parent), RMValueSelector(object) { setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); //setObjectName("test_widget"); setFixedHeight(25); layout = new QHBoxLayout(this); layout->setContentsMargins(8,2,8,2); layout->setSpacing(2); layout->setAlignment(Qt::AlignJustify); if(title.isEmpty() == false) { titleLabel = new QLabel(this); titleLabel->setObjectName("text_normal_label"); titleLabel->setText(title); layout->addWidget(titleLabel); } QJsonObject obj = CFG::items.at(object).toObject(); //foreach (QString eachTitle, titles) { QJsonArray value_strings = obj.value("value_strings").toArray(); for(int i=0;isetObjectName("settings"); btn->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); btn->setText(value_strings.at(i).toString()); connect(btn,SIGNAL(clicked()),SLOT(onSelected())); layout->addWidget(btn); buttons.append(btn); } if(buttons.count() > realIndex(obj.value("current").toInt())) { buttons[realIndex(obj.value("current").toInt())]->setChecked(true); } connect(RMValueUpdater::instance(),SIGNAL(updateByValues()),SLOT(onUpdateByValue())); } void RMRadioButtons::onSelected() { QJsonObject obj = CFG::items.at(_object).toObject(); QRadioButton* btn = qobject_cast(sender()); int index = buttons.indexOf(btn); obj.insert("current",QJsonValue(realValue(index))); CFG::items.replace(_object,obj); emit selected(index); } void RMRadioButtons::onUpdateByValue() { QJsonObject obj = CFG::items.at(_object).toObject(); buttons[realIndex(obj.value("current").toInt())]->setChecked(true); } #else // #if (USE_JSON_SETTINGS) RMRadioButtons::RMRadioButtons(QWidget *parent, QString title, QStringList titles, unsigned char* value, bool rowType, QList indexMap ) : QWidget(parent), RMValueSelector(value,indexMap) { setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); //setObjectName("test_widget"); if(rowType == true) { layout = new QVBoxLayout(this); } else { setFixedHeight(25); layout = new QHBoxLayout(this); } layout->setContentsMargins(8,2,8,2); layout->setSpacing(2); layout->setAlignment(Qt::AlignJustify); if(title.isEmpty() == false) { titleLabel = new QLabel(this); titleLabel->setObjectName("text_normal_label"); titleLabel->setText(title); layout->addWidget(titleLabel); } foreach (QString eachTitle, titles) { QRadioButton* btn = new QRadioButton(this); btn->setObjectName("settings"); btn->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); btn->setText(eachTitle); if(rowType == true) { btn->setFixedHeight(25); } connect(btn,SIGNAL(clicked()),SLOT(onSelected())); layout->addWidget(btn); buttons.append(btn); } if(buttons.count() <= realIndex(*_value)) { *_value = 0; } buttons[realIndex(*_value)]->setChecked(true); connect(RMValueUpdater::instance(),SIGNAL(updateByValues()),SLOT(onUpdateByValue())); } RMRadioButtons::RMRadioButtons(QWidget *parent, QString title, QStringList titles, unsigned char* value, QList indexMap) : QWidget(parent), RMValueSelector(value,indexMap) { setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); //setObjectName("test_widget"); setFixedHeight(25); layout = new QHBoxLayout(this); layout->setContentsMargins(8,2,8,2); layout->setSpacing(2); layout->setAlignment(Qt::AlignJustify); if(title.isEmpty() == false) { titleLabel = new QLabel(this); titleLabel->setObjectName("text_normal_label"); titleLabel->setText(title); layout->addWidget(titleLabel); } foreach (QString eachTitle, titles) { QRadioButton* btn = new QRadioButton(this); btn->setObjectName("settings"); btn->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); btn->setText(eachTitle); connect(btn,SIGNAL(clicked()),SLOT(onSelected())); layout->addWidget(btn); buttons.append(btn); } if(buttons.count() > realIndex(*_value)) { buttons[realIndex(*_value)]->setChecked(true); } connect(RMValueUpdater::instance(),SIGNAL(updateByValues()),SLOT(onUpdateByValue())); } int RMRadioButtons::currentIndex() { for(int i=0;iisChecked()) { return i; } } return -1; } void RMRadioButtons::setCurrentIndex(int index) { for(int i=0;isetChecked(i == index); } } void RMRadioButtons::onSelected() { QRadioButton* btn = qobject_cast(sender()); int index = buttons.indexOf(btn); *_value = realValue(index); emit selected(index); } void RMRadioButtons::onUpdateByValue() { //qInfo() << buttons[0]->text() << "value:" << *_value << "_indexMap:" << _indexMap.size() << realIndex(*_value) << __FUNCTION__; buttons[realIndex(*_value)]->setChecked(true); } #endif // #else // #if (USE_JSON_SETTINGS) void RMRadioButtons::paintEvent(QPaintEvent *pe) { Q_UNUSED(pe); QStyleOption o; o.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &o, &p, this); }