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

163 lines
5.1 KiB
C++

#include "rm_frame_video_sub.h"
#include "rm_button.h"
#include "rm_dialog_map.h"
#include "../rm_app.h"
#include "../fm_dimensions.h"
#include "../core/rm_player.h"
#include "../data/rm_video_item_2ch.h"
#include <QMainWindow>
//"",
RMFrameVideoSub::RMFrameVideoSub(QWidget *parent) : RMFrameVideoBase(parent,false,true)
{
#if !(DO_NOT_USE_ZOOM || ZOOM_SHADER)
pipRect = QRect(8,8,84,48);
#endif
#if ((!SINGLE_CH_VIEWER && !TOGGLE_PLAYER) || DUAL_VIEWER)
setVideoWidget(RMPlayer::instance()->playWidgetR());
#endif
#if !((DUAL_CH_FILE && !DUAL_CH_1CH_EXIST) || SINGLE_CH_VIEWER)
_temporarySwap = false;
#endif
#if (LIVE_LANGUAGE_CHANGE && MODEL_STANDARD)
refreshLanguageSub();
#endif
}
void RMFrameVideoSub::onPlayEvent(PLAY_EVENT event, RMVideoItem* item)
{
//LOG_TEST << "EVENT:" << event;
RMFrameVideoBase::onPlayEvent(event,item);
if(event == PLAY_DID_LOADED)
{
//#if (MODEL_STANDARD && !SINGLE_CH_VIEWER)
// _toggleButton->setEnabled(item->isSingleChannel() == false);
//#endif
#if (DUAL_CH_1CH_EXIST)
// 2CH DUAL 중 1CH 만 존재하는 경우 강제 toggle
//LOG_TEST << "SWAPPED:" << RMPlayer::instance()->isSwapped() << " CH:" << (item->filePathCH2.length() > 0);
bool bToogle = false;
// _temporarySwap 의 경우
// 현재 상태는 항상 swap 이 아닌 상태임 (swap 상태를 정상으로 변경했기 때문에)
// 따라서 상태가 _temporarySwap 일 경우 현재 single file 이 아닐 경우 무조건 swap 상태로 만들어야함
if(_temporarySwap)
{
if(item->isSingleChannel() == false && RMPlayer::instance()->isSwapped() == false)
{
bToogle = true;
_temporarySwap = false;
}
}
// 정상 상태일 경우 (_temporarySwap 이 아닌)
// 현재 상태는 swap 일 수도, 아닐 수도 있으며
// 1CH 파일이며
// swap 상태일 경우에는 임시 toggle 해야함
else
{
if(RMPlayer::instance()->isSwapped() == true && item->isSingleChannel() == true)
{
bToogle = true;
_temporarySwap = true;
}
}
//LOG_TEST << "TOGGLE:" << bToogle << " _temporarySwap:" << _temporarySwap;
if(bToogle)
{
RMPlayer::instance()->toggleSwap(true);
}
#endif // DUAL_CH_1CH_EXIST
}
else if (event == PLAY_DID_USER_STOP)
{
#if !((DUAL_CH_FILE && !DUAL_CH_1CH_EXIST) || SINGLE_CH_VIEWER)
// SWAPPED: true CH: false
// TOGGLE: false _temporarySwap: true
// swap -> 1CH 플레이 -> stop -> swap -> 1CH 플레이 하면 후방에서 표시됨
// 방지하기 위해 STOP 시점에서 _temporarySwap 할 경우 원상복귀
if(_temporarySwap) {
_temporarySwap = false;
RMPlayer::instance()->toggleSwap();
}
#endif // #if !(DUAL_CH_FILE)
//#if (MODEL_STANDARD && !SINGLE_CH_VIEWER)
// _toggleButton->setEnabled(true);
//#endif
}
else if (event == PLAY_WILL_LOADED)
{
#if !(DUAL_CH_FILE || SINGLE_CH_VIEWER)
//LOG_TEST << "SWAPPED:" << RMPlayer::instance()->isSwapped() << " CH:" << (item->filePathCH2.length() > 0);
bool bToogle = false;
// _temporarySwap 의 경우
// 현재 상태는 항상 swap 이 아닌 상태임 (swap 상태를 정상으로 변경했기 때문에)
// 따라서 상태가 _temporarySwap 일 경우 현재 single file 이 아닐 경우 무조건 swap 상태로 만들어야함
if(_temporarySwap)
{
if(item->filePathCH2.length() > 0 && RMPlayer::instance()->isSwapped() == false)
{
bToogle = true;
_temporarySwap = false;
}
}
// 정상 상태일 경우 (_temporarySwap 이 아닌)
// 현재 상태는 swap 일 수도, 아닐 수도 있으며
// 1CH 파일이며
// swap 상태일 경우에는 임시 toggle 해야함
else
{
if(RMPlayer::instance()->isSwapped() == true && item->filePathCH2.length() == 0)
{
bToogle = true;
_temporarySwap = true;
}
}
//LOG_TEST << "TOGGLE:" << bToogle << " _temporarySwap:" << _temporarySwap;
if(bToogle)
{
RMPlayer::instance()->toggleSwap();
}
#endif // #if !(DUAL_CH_FILE)
}
}
//#if !(DUAL_VIEWER)
//void RMFrameVideoSub::onMap()
//{
// //qInfo() << "size:" << _videoWidget->size();
// if(RMDialogMap::instance()->isHiddenReal()) {
// RMDialogMap::instance()->show();
// RMDialogMap::instance()->setFocus();
// }
// else
// {
// RMDialogMap::instance()->onClose();
// }
//}
//#endif // DUAL_VIEWER
//#if (LIVE_LANGUAGE_CHANGE && MODEL_STANDARD)
//void RMFrameVideoSub::refreshLanguageSub()
//{
// QString objectName = "swap_video" + RMLanguage::languageTag();
// _toggleButton->updateObject(objectName);
// objectName = "map" + RMLanguage::languageTag();
// _mapButton->updateObject(objectName);
//}
//#endif