first commit
This commit is contained in:
243
project/fm_viewer/cfg/rm_radio_buttons.cpp
Normal file
243
project/fm_viewer/cfg/rm_radio_buttons.cpp
Normal file
@@ -0,0 +1,243 @@
|
||||
#include "rm_radio_buttons.h"
|
||||
#include <QHBoxLayout>
|
||||
#include <QDebug>
|
||||
#include <QStyleOption>
|
||||
#include <QPainter>
|
||||
#include <QLabel>
|
||||
|
||||
#if (USE_JSON_SETTINGS)
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#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;i<value_strings.size();i++) {
|
||||
|
||||
QRadioButton* btn = new QRadioButton(this);
|
||||
btn->setObjectName("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;i<value_strings.size();i++) {
|
||||
QRadioButton* btn = new QRadioButton(this);
|
||||
btn->setObjectName("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<QRadioButton*>(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<int> 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<int> 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;i<buttons.size();i++) {
|
||||
if(buttons[i]->isChecked()) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
void RMRadioButtons::setCurrentIndex(int index)
|
||||
{
|
||||
for(int i=0;i<buttons.size();i++) {
|
||||
buttons[i]->setChecked(i == index);
|
||||
}
|
||||
}
|
||||
void RMRadioButtons::onSelected()
|
||||
{
|
||||
QRadioButton* btn = qobject_cast<QRadioButton*>(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);
|
||||
}
|
||||
Reference in New Issue
Block a user