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

431 lines
14 KiB
C++

#include "rm_popup_info.h"
#if !(PLAYER_ONLY_LIBRARY_MODE)
#include "../fm_dimensions.h"
#include <QVBoxLayout>
#include "rm_button.h"
#include "fm_button.h"
#include "rm_popup_content_background.h"
#include "title_widget.h"
#include "../core/fm_strings.h"
#if (HWACCEL_SETTING)
#include "rm_widget_checkbox.h"
#include <QMessageBox>
#include <QProcess>
#endif
#include <QThread>
#if (SELECT_AUDIO_BACKEND)
#include "../core/rm_player.h"
#include "../fav/AudioOutputBackend.h"
#include <QComboBox>
#include <QGroupBox>
#endif
#if (SYSTEM_INFO_DIALOG)
#include "../ui/fm_systeminfo_dialog.h"
#endif
RMPopupInfo::RMPopupInfo(QWidget *parent,QString fw, QString gps) : RMPopup(parent,FMS::txt("viewer_sw_version"),"")
{
#if (RM_MODEL_EMT_KR)
int height = POPUP_INFO_HEIGHT;
//#if (HWACCEL_SETTING)
// height += 30;
//#endif // HWACCEL_SETTING
this->setFixedSize(POPUP_INFO_WIDTH,height);
_title->closeButton->setHidden(true);
QVBoxLayout* layout = new QVBoxLayout(_contentWidget);
layout->setContentsMargins(10,13,10,12);
QWidget* bg = new QWidget(_contentWidget);
layout->addWidget(bg);
QVBoxLayout* contentLayout = new QVBoxLayout(bg);
contentLayout->setAlignment(Qt::AlignTop);
int vSpace = 8;
QString prefix = QString(" ");
RMLayout::addThemeLabel(bg,
contentLayout,
FMS::txt("viewer_sw_version"),
"version_header");
QString swVersion;
swVersion.sprintf("v%d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2);
RMLayout::addThemeLabel(bg,contentLayout,QString(prefix+swVersion),"version_label");
#if (HWACCEL_SETTING)
RMLayout::addSpacer(contentLayout,0,vSpace);
QWidget* hw = new QWidget(bg);
contentLayout->addWidget(hw);
QHBoxLayout* hwl = new QHBoxLayout(hw);
hwl->setMargin(0);
//RMLayout::addSpacer(hwl,20,0);
RMWidgetCheckBox* chkBox = new RMWidgetCheckBox(hw);
chkBox->setObjectName("popup");
chkBox->setText(FMS::txt("hw_accel"));
hwl->addWidget(chkBox);
// Black List 된 ...
if(RMApp::checkGPU())
{
chkBox->setEnabled(false);
chkBox->setChecked(false);
}
else
{
chkBox->setChecked(RMSettings::instance()->HWAccelOff() == false);
}
connect(chkBox,SIGNAL(clicked()),SLOT(onHWAccelClicked()));
RMLayout::addSpacer(contentLayout,0,vSpace);
#endif // HWACCEL_SETTING
RMButton* okButton = RMButton::create2(_buttonWidget,_buttonLayout,"button","ok",QSize(120,30));
okButton->setText(FMS::txt("ok"));
connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));
#else // RM_MODEL_EMT_KR
int height = POPUP_INFO_HEIGHT;
#if !(USE_GPS_VERSION)
height -= 30;
#endif
#if (HWACCEL_SETTING)
height += 30;
#endif
#if (SELECT_AUDIO_BACKEND)
height += 60;
#endif
#if (SYSTEM_INFO_DIALOG)
height += 30;
#endif
this->setFixedSize(POPUP_INFO_WIDTH,height);
_title->closeButton->setHidden(true);
QVBoxLayout* layout = new QVBoxLayout(_contentWidget);
layout->setContentsMargins(10,13,10,12);
RMPopupContentBackground* bg = new RMPopupContentBackground(_contentWidget);
layout->addWidget(bg);
QVBoxLayout* contentLayout = new QVBoxLayout(bg);
contentLayout->setAlignment(Qt::AlignTop);
int vSpace = 8;
QString prefix = QString(" ");
// 1.Viewer Version
// Viewer S/W バージョン情報
#if (LIVE_LANGUAGE_CHANGE && !REMOVE_OLD_C)
if(RMLanguage::isJP() == false)
{
_title->titleLabel->setText("Viewer S/W Version Info.");
RMLayout::addLabel(bg,
contentLayout,
QString("Viewer S/W Version Info."),
"text_header_label");
}
else {
#endif // LIVE_LANGUAGE_CHANGE???
RMLayout::addLabel(bg,
contentLayout,
FMS::txt("viewer_sw_version"),
"text_header_label");
#if (LIVE_LANGUAGE_CHANGE && !REMOVE_OLD_C)
}
#endif
QString swVersion;
swVersion.sprintf("Version : %d.%d.%d",RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_2);
#if (RM_MODEL == RM_MODEL_TYPE_ADT_CAPS)
//swVersion += "\n";
swVersion += MKU8("\xeb\x8d\xb0\xeb\xaa\xa8\xeb\xb2\x84\xec\xa0\x84");
#endif
#if !defined(SUPPRESS_ALL_TESTER)
swVersion += " TEST";
#endif
#if (MODEL_TEST_MODE && !(HIDE_BUILD_NO))
swVersion += " (" + QString::number(RM_MODEL_SVN_VERSION) + ")";
#endif
#if (SYSTEM_INFO_DIALOG)
swVersion += " [TEST ONLY]";
#endif
#if (DEMO_BUILD)
swVersion += " [TEST ONLY]";
#endif
#if (RM_MODEL_EMT_KR)
RMLayout::addThemeLabel(bg,contentLayout,QString(prefix+swVersion),"version_label");
#else
RMLayout::addLabel(bg,contentLayout,QString(prefix+swVersion),"text_normal_label");
#endif
#if(REMOVE_OLD_C)
#if(SUPPORT_LANGUAGE_INSERT)
FMS::insert_if_not_exist(1,"settings_file_not_exist",FM_WSTR(L"設定ファイルがありません。"));
FMS::insert_if_not_exist(2,"settings_file_not_exist",FM_WSTR(L"설정 파일이 존재하지 않습니다"));
FMS::insert_if_not_exist(3,"settings_file_not_exist",FM_WSTR(L"Settings file not exist"));
#endif // #if(SUPPORT_LANGUAGE_INSERT)
QString noCFG = FMS::txt("settings_file_not_exist");
#else // #if(REMOVE_OLD_C)
// 設定ファイルがありません。
QString noCFG = MKU8("\xe8\xa8\xad\xe5\xae\x9a\xe3\x83\x95\xe3\x82\xa1\xe3\x82\xa4\xe3\x83\xab\xe3\x81\x8c\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82");
#if (LIVE_LANGUAGE_CHANGE)
if(RMLanguage::isJP() == false)
{
noCFG = "Settings file not exist";
}
#endif
#endif // #if(REMOVE_OLD_C)
#if !(TOP_DOWN_360)
#if (HWACCEL_SETTING)
RMLayout::addSpacer(contentLayout,0,vSpace);
QWidget* hw = new QWidget(bg);
contentLayout->addWidget(hw);
QHBoxLayout* hwl = new QHBoxLayout(hw);
hwl->setMargin(0);
RMLayout::addSpacer(hwl,20,0);
RMWidgetCheckBox* chkBox = new RMWidgetCheckBox(hw);
chkBox->setObjectName("popup");
//MKU8("\xe3\x83\x8f\xe3\x83\xbc\xe3\x83\x89\xe3\x82\xa6\xe3\x82\xa7\xe3\x82\xa2\xe3\x82\xa2\xe3\x82\xaf\xe3\x82\xbb\xe3\x83\xa9\xe3\x83\xac\xe3\x83\xbc\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3"));
chkBox->setText(FMS::txt("hw_accel"));
#if(!REMOVE_OLD_C)
#if (LIVE_LANGUAGE_CHANGE)
if(RMLanguage::isJP() == false)
{
chkBox->setText("Enable H/W Acceleration");
}
#endif
#endif // #if(REMOVE_OLD_C)
hwl->addWidget(chkBox);
// Black List 된 ...
if(RMApp::checkGPU())
{
chkBox->setEnabled(false);
chkBox->setChecked(false);
}
else
{
chkBox->setChecked(RMSettings::instance()->HWAccelOff() == false);
}
connect(chkBox,SIGNAL(clicked()),SLOT(onHWAccelClicked()));
#endif // HWACCEL_SETTING
#endif // #if !(TOP_DOWN_360)
RMLayout::addSpacer(contentLayout,0,vSpace);
#if (SELECT_AUDIO_BACKEND)
QGroupBox* widgetAudio = new QGroupBox(bg);
widgetAudio->setObjectName("sub");
widgetAudio->setFixedHeight(60);
contentLayout->addWidget(widgetAudio);
QVBoxLayout* layoutAudio = new QVBoxLayout(widgetAudio);
layoutAudio->setMargin(5);
layoutAudio->setSpacing(5);
RMLayout::addLabel(widgetAudio,layoutAudio,FM_WSTR(L"サウンドデバイス:"),"text_normal_label");
//RMLayout::addSpacer(layoutAudio,20,0);
soundCombo = new QComboBox(widgetAudio);
soundCombo->setMinimumWidth(200);
soundCombo->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow);
soundCombo->setObjectName("settings");
deviceList = FAV::globalSounddeviceList();
deviceList.insert(0,QPair<QString,int>("Auto",-1));
QStringList deviceStringList = QStringList();
for(int i=0;i<deviceList.size();i++) {
deviceStringList.append(deviceList.at(i).first);
}
soundCombo->addItems(deviceStringList);
layoutAudio->addWidget(soundCombo);
updateSoundCombo();
connect(soundCombo,SIGNAL(currentIndexChanged(int)),SLOT(onSelectSoundDevice(int)));
// RMWidgetCheckBox* chkBoxAudio = new RMWidgetCheckBox(widgetAudio);
// chkBoxAudio->setObjectName("popup");
// chkBoxAudio->setChecked(RMSettings::instance()->XAudioOff() == false);
// chkBoxAudio->setText(FMS::txt("directx_audio"));
// layoutAudio->addWidget(chkBoxAudio);
// connect(chkBoxAudio,SIGNAL(clicked()),SLOT(onDirectXSoundClicked()));
#endif
#if (SYSTEM_INFO_DIALOG)
QWidget* widgetInfo = new QWidget(bg);
contentLayout->addWidget(widgetInfo);
QHBoxLayout* layoutInfo = new QHBoxLayout(widgetInfo);
layoutInfo->setMargin(0);
RMLayout::addSpacer(layoutInfo,20,0);
layoutInfo->setAlignment(Qt::AlignLeft);
RMButton* infoButton = RMButton::create(widgetInfo,layoutInfo,"button_small",FMS::txt("ok"),QSize(160,20));
infoButton->setText("SYSTEM INFO");
//layoutAudio->addWidget(chkBoxAudio);
connect(infoButton,SIGNAL(clicked()),this,SLOT(onSystemInfo()));
#endif
#if (LIVE_LANGUAGE2)
RMButton* okButton = RMButton::create2(_buttonWidget,_buttonLayout,"button","ok",QSize(120,30));
okButton->setText(FMS::txt("ok"));
#else // LIVE_LANGUAGE2
RMButton* okButton = RMButton::create(_buttonWidget,_buttonLayout,"button",FMS::txt("ok"),QSize(120,30));
okButton->setText("OK");
#endif // LIVE_LANGUAGE2
connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));
#endif // RM_MODEL_EMT_KR
}
#if (SELECT_AUDIO_BACKEND)
void RMPopupInfo::updateSoundCombo()
{
//deviceList = FAV::globalSounddeviceList();
//deviceList.insert(0,QPair<QString,int>("Auto",-1));
//QStringList deviceStringList = QStringList();
QString selected = RMSettings::instance()->AudioDevice();
int currentIndex = 0;
for(int i=0;i<deviceList.size();i++) {
if(deviceList.at(i).first == selected) {
currentIndex = i;
}
//deviceStringList.append(deviceList.at(i).first);
}
soundCombo->blockSignals(true);
soundCombo->setCurrentIndex(currentIndex);
soundCombo->blockSignals(false);
}
void RMPopupInfo::onSelectSoundDevice(int index)
{
if(RMSettings::instance()->AudioDevice() != deviceList.at(index).first)
{
QMessageBox msgBox(QMessageBox::Warning,
"",
FMS::txt("restart_msg"),
QMessageBox::Yes | QMessageBox::No,
this);
msgBox.setButtonText(QMessageBox::Yes, FMS::txt("ok"));
msgBox.setButtonText(QMessageBox::No, FMS::txt("cancel"));
if(msgBox.exec() == QMessageBox::Yes) {
QString name = index == 0 ? "" : deviceList.at(index).first;
RMSettings::instance()->setAudioDevice(name);
RMPopupInfo::restart();
}
else {
updateSoundCombo();
}
}
// qInfo() << index << __FUNCTION__;
}
/*
void RMPopupInfo::onDirectXSoundClicked()
{
RMWidgetCheckBox* checkbox = qobject_cast<RMWidgetCheckBox *>(QObject::sender());
if(checkbox != NULL)
{
bool on = checkbox->checkState() == Qt::Checked;
QMessageBox msgBox(QMessageBox::Warning,
"",
FMS::txt("restart_msg"),
QMessageBox::Yes | QMessageBox::No,
this);
msgBox.setButtonText(QMessageBox::Yes, FMS::txt("ok"));
msgBox.setButtonText(QMessageBox::No, FMS::txt("cancel"));
if(msgBox.exec() == QMessageBox::Yes)
{
RMSettings::instance()->setXAudioOff(!on);
RMPopupInfo::restart();
}
else
{
checkbox->setCheckState(on ? Qt::Unchecked : Qt::Checked);
}
}
}
*/
#endif // SELECT_AUDIO_BACKEND
#if (HWACCEL_SETTING)
void RMPopupInfo::onHWAccelClicked()
{
RMWidgetCheckBox* checkbox = qobject_cast<RMWidgetCheckBox *>(QObject::sender());
if(checkbox != NULL)
{
// 再起動をします
bool on = checkbox->checkState() == Qt::Checked;
// QString message = MKU8("\xe5\x86\x8d\xe8\xb5\xb7\xe5\x8b\x95\xe3\x82\x92\xe3\x81\x97\xe3\x81\xbe\xe3\x81\x99");
//#if (LIVE_LANGUAGE_CHANGE)
// if(RMLanguage::isJP() == false)
// {
// message = "The application must restart in order to enable/disable H/W acceleration";
// }
//#endif // LIVE_LANGUAGE_CHANGE
QMessageBox msgBox(QMessageBox::Warning,
"",
FMS::txt("restart_msg"),
QMessageBox::Yes | QMessageBox::No,
this);
msgBox.setButtonText(QMessageBox::Yes, FMS::txt("ok"));
msgBox.setButtonText(QMessageBox::No, FMS::txt("cancel"));
//#if (LIVE_LANGUAGE_CHANGE)
// if(RMLanguage::isJP() == false)
// {
// msgBox.setButtonText(QMessageBox::Yes, "Yes");
// msgBox.setButtonText(QMessageBox::No, "Cancel");
// }
//#endif // LIVE_LANGUAGE_CHANGE
if(msgBox.exec() == QMessageBox::Yes)
{
RMSettings::instance()->setHWAccelOff(!on);
RMPopupInfo::restart();
}
else
{
checkbox->setCheckState(on ? Qt::Unchecked : Qt::Checked);
}
}
}
#if (SYSTEM_INFO_DIALOG)
void RMPopupInfo::onSystemInfo()
{
FMSystemInfoDialog* dialog = new FMSystemInfoDialog(this);
dialog->exec();
}
#endif
#include <Windows.h>
void RMPopupInfo::restart()
{
QCoreApplication::flush();
QThread::msleep(100);
QCoreApplication::quit();
::ShellExecute(0, L"open", (LPCWSTR)QCoreApplication::applicationFilePath().utf16(), 0, 0, SW_SHOWNORMAL);
}
#endif
#endif // #if !(PLAYER_ONLY_LIBRARY_MODE)