first commit

This commit is contained in:
2026-02-21 17:11:31 +09:00
commit 18b4338361
4001 changed files with 365464 additions and 0 deletions

View File

@@ -0,0 +1,442 @@
#include "rm_settings_window_base.h"
#if (USE_DEVICE_SETTINGS && !USE_DEVICE_SETTINGS_JSON)
#include "../fm_dimensions.h"
#include "../ui/title_widget.h"
#include "rm_combo_box.h"
#include "rm_radio_buttons.h"
#include "rm_group_combo_box.h"
#include "rm_group_radio_buttons.h"
#include "../core/fm_strings.h"
#include "rm_settings_cfg.h"
#include <QComboBox>
#include <QGridLayout>
#include <QDir>
#if (SETTINGS_WINDOW_SCROLL)
#include <QScrollArea>
#include <QScrollBar>
#include "../ui/fm_colors.h"
#endif
#if (DETECT_SETTING_USB_EJECT && !DETECT_USB_CHANGE)
#include "../core/rm_usb.h"
#include "../rm_application.h"
#endif
// 문자열 처리 UTF
// https://www.branah.com/unicode-converter
//bool RMSettingsWindowBase::loaded = false;
QString RMSettingsWindowBase::lastSettingDisk = "";
//const int gComboBoxWidth = 200;
//const int gTitleWidth = 50;
#if (RM_MODEL_EMT_KR)
static const QStringList gOnOff = QStringList() << "ON" << "OFF";
#else // RM_MODEL_EMT_KR
static const QStringList gOnOff = QStringList() << MKU8("\xe3\x82\xaa\xe3\x83\xb3") << MKU8("\xe3\x82\xaa\xe3\x83\x95");
#endif // RM_MODEL_EMT_KR
static const QStringList gEOnOff = QStringList() << "ON" << "OFF";
#if (RM_MODEL_EMT_KR)
RMSettingsWindowBase::RMSettingsWindowBase(QWidget *parent) : RMPopup(parent,FMS::txt("settings"),"")
#else
RMSettingsWindowBase::RMSettingsWindowBase(QWidget *parent) : RMPopup(parent,"","title_settings.png")
#endif
{
// 이미 로딩됨
#if !(RM_MODEL_EMT_KR)
QString path = QDir::cleanPath(lastSettingDisk + SETTINGS_FILE_NAME);
// 모델 디스크가 아닐 경우
#if (MULTI_MODEL_VIEWER)
if(RMApp::isModelDisk(lastSettingDisk,NULL) == false)
#else // MULTI_MODEL_VIEWER
if(RMApp::isModelDisk(lastSettingDisk) == false)
#endif // MULTI_MODEL_VIEWER
{
CFG::setDefault();
#if !(DO_NOT_MAKE_CFG)
CFG::save(path);
#endif
}
else {
CFG::load(path);
}
#endif // #if !(RM_MODEL_EMT_KR)
#if (SETTINGS_WINDOW_SCROLL)
this->setFixedSize(SETTINGS_WINDOW_WIDTH,SETTINGS_WiNDOW_SCROLL_HEIGHT);
#else
this->setFixedSize(SETTINGS_WINDOW_WIDTH,SETTINGS_WiNDOW_HEIGHT);
#endif
//_contentWidget->setObjectName("bg_dark_widget");
layout = new QHBoxLayout(_contentWidget);
layout->setMargin(8);
layout->setSpacing(8);
QWidget* bwLeft = new QWidget(_buttonWidget);
_buttonLayout->addWidget(bwLeft);
QWidget* bwRight = new QWidget(_buttonWidget);
_buttonLayout->addWidget(bwRight);
QHBoxLayout* blLeft = new QHBoxLayout(bwLeft);
blLeft->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
QHBoxLayout* blRight = new QHBoxLayout(bwRight);
blRight->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
#if (LIVE_LANGUAGE2)
RMButton* defaultButton = RMButton::create2(bwRight,blRight,"button","default",QSize(120,30));
defaultButton->setText(FMS::txt("default"));
connect(defaultButton,SIGNAL(clicked()),SLOT(onDefault()));
RMButton* okButton = RMButton::create2(bwRight,blRight,"button","ok",QSize(120,30));
okButton->setText(FMS::txt("ok"));
connect(okButton,SIGNAL(clicked()),this,SLOT(onSaveAnAccept()));
RMButton* cancelButton = RMButton::create2(bwRight,blRight,"button","cancel",QSize(120,30));
cancelButton->setText(FMS::txt("cancel"));
connect(cancelButton,SIGNAL(clicked()),this,SLOT(onCancel()));
#else // LIVE_LANGUAGE2
// 初期値
QString title = MKU8("\xe5\x88\x9d\xe6\x9c\x9f\xe5\x80\xa4");
#if (LIVE_LANGUAGE_CHANGE)
if(RMLanguage::isJP() == false) { title = "Reset"; }
#endif
RMButton* defaultButton = RMButton::create(bwRight,blRight,"button",FMS::txt("default"),QSize(120,30));
//RMButton* defaultButton = RMButton::create(bwLeft,blLeft,"popup_button",title,QSize(120,30));
defaultButton->setText(FMS::txt("default"));
connect(defaultButton,SIGNAL(clicked()),SLOT(onDefault()));
// 適用
title = MKU8("\xe9\x81\xa9\xe7\x94\xa8");
#if (LIVE_LANGUAGE_CHANGE)
if(RMLanguage::isJP() == false) { title = "Save";}
#endif
//#if !(MODEL_WATEX)
// RMButton* applyButton = RMButton::create(bwRight,blRight,"popup_button",title,QSize(120,30));
// applyButton->setText(title);
// connect(applyButton,SIGNAL(clicked()),this,SLOT(onSave()));
//#endif
RMButton* okButton = RMButton::create(bwRight,blRight,"button",FMS::txt("ok"),QSize(120,30));
//RMButton* okButton = RMButton::create(bwRight,blRight,"popup_button",QString("OK"),QSize(120,30));
okButton->setText(FMS::txt("ok"));
connect(okButton,SIGNAL(clicked()),this,SLOT(onSaveAnAccept()));
#if (MODEL_WATEX)
title = MKU8("\xe3\x82\xad\xe3\x83\xa3\xe3\x83\xb3\xe3\x82\xbb\xe3\x83\xab"); // キャンセル
#else
title = MKU8("\xe9\x96\x89\xe3\x81\x98\xe3\x82\x8b"); // 閉じる
#endif
#if (LIVE_LANGUAGE_CHANGE)
if(RMLanguage::isJP() == false) { title = "Cancel";}
#endif
RMButton* cancelButton = RMButton::create(bwRight,blRight,"button",FMS::txt("cancel"),QSize(120,30));
cancelButton->setText(FMS::txt("cancel"));
// connect(okButton,SIGNAL(clicked()),this,SLOT(onOK()));
// RMButton* cancelButton = RMButton::create(bwRight,blRight,"popup_button",title,QSize(120,30));
// cancelButton->setText(title);
connect(cancelButton,SIGNAL(clicked()),this,SLOT(onCancel()));
/* 모델명 사용하지 않음
QLabel* modelName = new QLabel(_title->_toolBar);
modelName->setText(QString((const char*)CFG::data) + " ");
modelName->setObjectName("title_label");
_title->_toolBarLayout->insertWidget(0,modelName);
*/
#endif // #else // LIVE_LANGUAGE2
#if (DETECT_SETTING_USB_EJECT && !DETECT_USB_CHANGE)
_usb = new rm_usb(this);
_usb->registerEvent(this);
RMApplication::instance()->installNativeEventFilter(_usb);
connect(_usb,SIGNAL(usbChanged(bool,QString&)),SLOT(onUSBChange(bool,QString&)));
#endif // @DETECT_SETTING_USB_EJECT
#if (SETTINGS_WINDOW_SCROLL)
layout->setMargin(0);
layout->setSpacing(0);
// 스크롤 영역 생성
_contentScrollArea = new QScrollArea(_contentWidget);
_contentScrollArea->setStyleSheet("QScrollArea { background: transparent; }");
_contentScrollArea->setWidgetResizable( true );
layout->addWidget(_contentScrollArea);
_contentScrollWidget = new QWidget(); // _contentScrollArea
//_contentScrollWidget->setStyleSheet("QWidget { background: #FF0000;}");
_contentScrollLayout = new QHBoxLayout(_contentScrollWidget);
//ZERO_LAYOUT(_contentScrollLayout);
//_contentScrollLayout->setMargin(8);
_contentScrollLayout->setSpacing(8);
_contentScrollLayout->setContentsMargins(8,10,8,10); // 상하단 마진
_contentScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
_contentScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// 자동 설정
//_contentScrollWidget->setFixedHeight(SETTINGS_WiNDOW_HEIGHT);
_contentScrollWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
_contentScrollArea->setFrameShape(QFrame::NoFrame);
_contentScrollWidget->setObjectName("scroll2");
_contentScrollWidget->setStyleSheet("QWidget#scroll2 { background: transparent; }");
//_contentScrollWidget->setFixedHeight(SETTINGS_WiNDOW_HEIGHT);
_contentScrollArea->setWidget(_contentScrollWidget);
QString scrollStyle = "QScrollBar:vertical\
{\
border-width: 0px;\
border-style: solid;\
background: #3B3B3B;\
width: 10px;\
margin: 0px 0 0px 0;\
}\
QScrollBar::handle:vertical:disabled{background: #3B3B3B;}\
QScrollBar::handle:vertical\
{\
background: $HANDLE_COLOR$;\
min-height: 25px;\
margin: 2px 1px 2px 1px;\
}\
QScrollBar::add-line:vertical\
{\
border: none;\
background: none;\
height: 0px;\
width: 0px;\
subcontrol-position: bottom;\
subcontrol-origin: margin;\
}\
QScrollBar::sub-line:vertical\
{\
border: none;\
background: none;\
height: 0px;\
width: 0px;\
subcontrol-position: top;\
subcontrol-origin: margin;\
}\
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical\
{\
background: #3A3A3A;\
}\
QScrollBar::up-arrow:vertical\
{\
border: none;\
background: #3A3A3A;\
}\
QScrollBar::down-arrow:vertical\
{\
border: none;\
background: #5A5A5A;\
}";
_contentScrollArea->verticalScrollBar()->setStyleSheet(scrollStyle.replace("$HANDLE_COLOR$",QString().sprintf("#%06X",FM_SILDER_COLOR)));
#endif // SCROLL
}
#if (DETECT_SETTING_USB_EJECT && !DETECT_USB_CHANGE)
void RMSettingsWindowBase::onUSBChange(bool inserted, QString& drive)
{
// qInfo() << __FUNCTION__;
if(inserted == false && RMSettingsWindowBase::lastSettingDisk.contains(drive,Qt::CaseInsensitive)) {
reject();
}
}
#elif (DETECT_USB_CHANGE)
void RMSettingsWindowBase::onUsbRemoved()
{
reject();
}
#endif // @DETECT_SETTING_USB_EJECT
#if (USE_JSON_SETTINGS)
#else // #if (USE_JSON_SETTINGS)
RMGroupRadioButtons* RMSettingsWindowBase::_MGR_ONOFF(QWidget* parent,QString title,QLayout* layout,int type)
{
#if (LIVE_LANGUAGE_CHANGE && !RM_MODEL_EMT_KR)
if(RMLanguage::isJP() == false) { return _MGR(parent,title,layout,gEOnOff,type); }
#endif
return _MGR(parent,title,layout,gOnOff,type);
}
RMRadioButtons* RMSettingsWindowBase::_MR_ONOFF(QWidget* parent,QString title,QLayout* layout,int type,QLabel** titleLabel)
{
#if (LIVE_LANGUAGE_CHANGE && !RM_MODEL_EMT_KR)
if(RMLanguage::isJP() == false) { return _MR(parent,title,layout,gEOnOff,type,QList<int>(),titleLabel); }
#endif
return _MR(parent,title,layout,gOnOff,type,QList<int>(),titleLabel);
}
RMGroupRadioButtons* RMSettingsWindowBase::_MGR(QWidget *parent,QString title,QLayout* layout,QStringList items,int type,QList<int> indexMap)
{
RMGroupRadioButtons* gr = new RMGroupRadioButtons(parent,title,items,&CFG::data[type],indexMap);
layout->addWidget(gr);
return gr;
}
RMGroupRadioButtons* RMSettingsWindowBase::_MGRR(QWidget *parent,QString title,QLayout* layout,QStringList items,int type,QList<int> indexMap)
{
RMGroupRadioButtons* gr = new RMGroupRadioButtons(parent,title,items,&CFG::data[type],true,indexMap);
layout->addWidget(gr);
return gr;
}
RMRadioButtons* RMSettingsWindowBase::_MR(QWidget *parent,QString title,QLayout* layout,QStringList items,int type,QList<int> indexMap,QLabel** titleLabel)
{
RMRadioButtons* gr = NULL;
if(strcmp(layout->metaObject()->className(),"QGridLayout") == 0)
{
// (qobject_cast<QGridLayout*>)
QGridLayout* gl = (QGridLayout*)layout;
int row = ceil((double)layout->count() / 2.0);
QLabel* tl = new QLabel(this);
tl->setObjectName("text_normal_label");
tl->setText(title);
gl->addWidget(tl,row,0,Qt::AlignLeft);
// qInfo() << title << "MR row:" << row;
gr = new RMRadioButtons(parent,"",items,&CFG::data[type],indexMap);
gl->addWidget(gr,row,1,Qt::AlignLeft);
if(titleLabel != NULL) {
*titleLabel = tl;
}
}
else
{
gr = new RMRadioButtons(parent,title,items,&CFG::data[type],indexMap);
layout->addWidget(gr);
}
return gr;
}
void RMSettingsWindowBase::_MGT(QWidget *parent,QString title,QLayout* layout, QString text,QLabel** titleLabel)
{
if(strcmp(layout->metaObject()->className(),"QGridLayout") == 0)
{
QGridLayout* gl = (QGridLayout*)layout;
int row = ceil(((double)layout->count()) / 2.0);
int column = 0;
int columnSpan = 2;
if(title.length() > 0) {
QLabel* tl = new QLabel(this);
tl->setObjectName("text_normal_label");
tl->setText(title);
gl->addWidget(tl,row,0,Qt::AlignLeft);
column = 1;
columnSpan = 1;
if(titleLabel != NULL) {
*titleLabel = tl;
}
}
if(text.length() > 0)
{
QLabel* textLabel = new QLabel(parent);
textLabel->setObjectName("text_normal_label");
textLabel->setText(text);
gl->addWidget(textLabel,row,column,1,columnSpan,Qt::AlignLeft);
}
}
else
{
QLabel* textLabel = new QLabel(parent);
textLabel->setObjectName("text_normal_label");
textLabel->setText(text);
layout->addWidget(textLabel);
};
}
RMComboBox* RMSettingsWindowBase::_MC(QWidget *parent,QString title,QLayout* layout, QStringList items,int type,QList<int> indexMap,QLabel** titleLabel)
{
RMComboBox* c = NULL;
if(strcmp(layout->metaObject()->className(),"QGridLayout") == 0)
{
QGridLayout* gl = (QGridLayout*)layout;
int row = ceil(((double)layout->count()) / 2.0);
int column = 0;
int columnSpan = 2;
if(title.length() > 0) {
QLabel* tl = new QLabel(this);
tl->setObjectName("text_normal_label");
tl->setText(title);
gl->addWidget(tl,row,0,Qt::AlignLeft);
column = 1;
columnSpan = 1;
if(titleLabel != NULL) {
*titleLabel = tl;
}
}
//qInfo() << "row" << row << " column:" << column;
c = new RMComboBox(parent,"",items,&CFG::data[type],indexMap);
gl->addWidget(c,row,column,1,columnSpan,Qt::AlignLeft);
}
else
{
c = new RMComboBox(parent,title,items,&CFG::data[type],indexMap);
layout->addWidget(c);
}
return c;
}
RMGroupComboBox* RMSettingsWindowBase::_MGC(QWidget *parent,QString title,QLayout* layout,QStringList items,int type,QList<int> indexMap)
{
RMGroupComboBox* c = new RMGroupComboBox(parent,title,items,&CFG::data[type],indexMap);
layout->addWidget(c);
return c;
}
#endif // #else // #if (USE_JSON_SETTINGS)
void RMSettingsWindowBase::onSaveAnAccept()
{
#if (RM_MODEL_EMT_KR)
QString path = CFG::cfgPath;
#else // RM_MODEL_EMT_KR
QString path = QDir::cleanPath(lastSettingDisk + SETTINGS_FILE_NAME);
#endif // RM_MODEL_EMT_KR
if(validateData()) {
CFG::save(path);
afterSave();
accept();
}
}
RMSettingsWindowBase::~RMSettingsWindowBase()
{
}
void RMSettingsWindowBase::onSave()
{
QString path = QDir::cleanPath(lastSettingDisk + SETTINGS_FILE_NAME);
if(validateData()) {
CFG::save(path);
afterSave();
}
}
void RMSettingsWindowBase::onCancel()
{
CFG::restore();
reject();
}
void RMSettingsWindowBase::onDefault()
{
CFG::setDefault();
emit RMValueUpdater::instance()->updateByValues();
// 레코드 세팅 문제로 (Combo box event 발생하면 default 값이 save 됨)
CFG::setDefault();
}
#endif // #if (USE_DEVICE_SETTINGS)