Files
fmviewer3/project/fm_viewer/cfg/rm_radio_buttons.cpp
2026-02-21 17:11:31 +09:00

244 lines
7.7 KiB
C++

#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);
}