first commit
This commit is contained in:
383
project/fm_viewer/tester/rm_tune360_dialog.cpp
Normal file
383
project/fm_viewer/tester/rm_tune360_dialog.cpp
Normal file
@@ -0,0 +1,383 @@
|
||||
#include "rm_tune360_dialog.h"
|
||||
|
||||
#if (TUNE_360)
|
||||
#include "../fav/OpenGLVideo.h"
|
||||
|
||||
#include <windows.h>
|
||||
#include <QDebug>
|
||||
#include <QMainWindow>
|
||||
#include <QDesktopServices>
|
||||
#include <QUrl>
|
||||
#include <QFileDialog>
|
||||
#include <QStyle>
|
||||
#include <QMessageBox>
|
||||
#include <QScrollBar>
|
||||
#include "../rm_app.h"
|
||||
#include "../rm_settings.h"
|
||||
#include "../core/rm_player.h"
|
||||
//#include "../core/rm_player.h"
|
||||
//#include "../core/rm_play_process.h"
|
||||
|
||||
#define TUNE_360_RANGE 1000
|
||||
#define TUNE_360_RATIO_Y 20
|
||||
#define TUNE_360_RATIO_R 4
|
||||
#define TUNE_360_RATIO_X 5
|
||||
#define TUNE_360_RATIO_AR 20
|
||||
#define TUNE_360_RATIO_RB 2
|
||||
|
||||
RMTune360Dialog::RMTune360Dialog(QWidget *parent) : QDialog(parent)
|
||||
{
|
||||
QString version;
|
||||
version.sprintf("model:%s %d.%d.%d.%d",WINDOW_TITLE,RM_MODEL_VERSION_0,RM_MODEL_VERSION_1,RM_MODEL_VERSION_1,RM_MODEL_SVN_VERSION);
|
||||
this->setWindowModality(Qt::NonModal);
|
||||
this->setWindowTitle("360 TUNE (" + version + ")");
|
||||
this->setWindowFlags(Qt::Window | Qt::Tool | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
|
||||
this->setWindowModality(Qt::NonModal);
|
||||
setMinimumSize(300,500);
|
||||
|
||||
_layout = new QVBoxLayout(this);
|
||||
_layout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
_layout->setMargin(0);
|
||||
_layout->setSpacing(0);
|
||||
|
||||
|
||||
_swap = false;
|
||||
|
||||
createToolbar();
|
||||
createSliderPanel();
|
||||
createParamConsole();
|
||||
}
|
||||
RMTune360Dialog* RMTune360Dialog::instance(QWidget* parent)
|
||||
{
|
||||
static RMTune360Dialog * _instance = NULL;
|
||||
if ( _instance == NULL )
|
||||
{
|
||||
_instance = new RMTune360Dialog(parent);
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
void RMTune360Dialog::showEvent(QShowEvent * event)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
QRect r = RMApp::instance()->pMainWindow->geometry();
|
||||
r.moveLeft(1420);
|
||||
r.moveTop(190);
|
||||
setGeometry(r.right(),r.top(),300,500);
|
||||
|
||||
loadPreset();
|
||||
}
|
||||
|
||||
void RMTune360Dialog::createToolbar()
|
||||
{
|
||||
_toolbar = new QWidget(this);
|
||||
_toolbar->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
|
||||
_toolbar->setFixedHeight(36);
|
||||
_layout->addWidget(_toolbar);
|
||||
|
||||
_toolbar->setStyleSheet("background-color: #818181;");
|
||||
//_toolbar->setObjectName("test_widget");
|
||||
|
||||
QHBoxLayout* toolLayout = new QHBoxLayout(_toolbar);
|
||||
toolLayout->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
toolLayout->setSpacing(6);
|
||||
toolLayout->setMargin(2);
|
||||
|
||||
_resetButton = _button(_toolbar,toolLayout,"RESET");
|
||||
|
||||
_button(_toolbar,toolLayout,"VR");
|
||||
_button(_toolbar,toolLayout,"WIDE");
|
||||
|
||||
_button(_toolbar,toolLayout,"GET");
|
||||
|
||||
_button(_toolbar,toolLayout,"SET");
|
||||
|
||||
_button(_toolbar,toolLayout,"SWAP");
|
||||
}
|
||||
void RMTune360Dialog::createSliderPanel()
|
||||
{
|
||||
|
||||
QWidget* info = new QWidget(this);
|
||||
info->setStyleSheet("background-color: #616161;");
|
||||
//info->setObjectName("test_widget");
|
||||
info->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
|
||||
//info->setFixedHeight(48);
|
||||
_layout->addWidget(info);
|
||||
|
||||
//info->setStyleSheet("background-color: #000000;");
|
||||
|
||||
|
||||
QVBoxLayout* infoLayout = new QVBoxLayout(info);
|
||||
infoLayout->setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
||||
infoLayout->setSpacing(2);
|
||||
infoLayout->setMargin(2);
|
||||
|
||||
_labels = new QList<QLabel*>();
|
||||
_sliders = new QList<QSlider*>();
|
||||
_resetButtons = new QList<QPushButton*>();
|
||||
|
||||
#if (TUNE4)
|
||||
_slider(info,infoLayout,"LX[0][0]",TUNE_360_RATIO_X);
|
||||
_slider(info,infoLayout,"LY[1][0]",TUNE_360_RATIO_Y);
|
||||
_slider(info,infoLayout,"LRX[2][0]",TUNE_360_RATIO_R);
|
||||
_slider(info,infoLayout,"LRY[3][0]",TUNE_360_RATIO_R);
|
||||
|
||||
_slider(info,infoLayout,"RX[0][1]",TUNE_360_RATIO_X);
|
||||
_slider(info,infoLayout,"RY[1][1]",TUNE_360_RATIO_Y);
|
||||
_slider(info,infoLayout,"RRX[2][1]",TUNE_360_RATIO_R);
|
||||
_slider(info,infoLayout,"RRY[3][1]",TUNE_360_RATIO_R);
|
||||
|
||||
_slider(info,infoLayout,"RX2[0][2]",TUNE_360_RATIO_X);
|
||||
_slider(info,infoLayout,"RY2[1][2]",TUNE_360_RATIO_X);
|
||||
_slider(info,infoLayout,"RRX2[2][2]",TUNE_360_RATIO_R);
|
||||
_slider(info,infoLayout,"RRY2[3][2]",TUNE_360_RATIO_RB);
|
||||
#else
|
||||
_slider(info,infoLayout,"LX",TUNE_360_RATIO_X);
|
||||
_slider(info,infoLayout,"LY",TUNE_360_RATIO_Y);
|
||||
_slider(info,infoLayout,"LR",TUNE_360_RATIO_R);
|
||||
|
||||
_slider(info,infoLayout,"RX",TUNE_360_RATIO_X);
|
||||
_slider(info,infoLayout,"RY",TUNE_360_RATIO_Y);
|
||||
_slider(info,infoLayout,"RR",TUNE_360_RATIO_R);
|
||||
|
||||
_slider(info,infoLayout,"AR",TUNE_360_RATIO_AR);
|
||||
_slider(info,infoLayout,"ARY",TUNE_360_RATIO_AR);
|
||||
#endif
|
||||
|
||||
}
|
||||
void RMTune360Dialog::createParamConsole()
|
||||
{
|
||||
_paramTextEdit = new QPlainTextEdit(this);
|
||||
//_paramTextEdit->setReadOnly(true);
|
||||
_paramTextEdit->setStyleSheet("font-family: Fixedsys;color : #00FF00;background-color: #111111;border:1px;border-style:solid;border-color:#313131;");
|
||||
_paramTextEdit->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
|
||||
_layout->addWidget(_paramTextEdit);
|
||||
QString scrollStyle = "QScrollBar:vertical\
|
||||
{\
|
||||
border-width: 0px;\
|
||||
border-style: solid;\
|
||||
background: #3B3B3B;\
|
||||
width: 10px;\
|
||||
margin: 21px 0 21px 0;\
|
||||
}\
|
||||
QScrollBar::handle:vertical:disabled{background: #3B3B3B;}\
|
||||
QScrollBar::handle:vertical\
|
||||
{\
|
||||
border-width: 0px;\
|
||||
background: #6A74FF;\
|
||||
min-height: 25px;\
|
||||
}\
|
||||
QScrollBar::add-line:vertical\
|
||||
{\
|
||||
border: none;\
|
||||
background: none;\
|
||||
height: 20px;\
|
||||
width: 15px;\
|
||||
subcontrol-position: bottom;\
|
||||
subcontrol-origin: margin;\
|
||||
}\
|
||||
QScrollBar::sub-line:vertical\
|
||||
{\
|
||||
border: none;\
|
||||
background: none;\
|
||||
height: 20px;\
|
||||
width: 15px;\
|
||||
subcontrol-position: top;\
|
||||
subcontrol-origin: margin;\
|
||||
}\
|
||||
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical\
|
||||
{\
|
||||
background: none;\
|
||||
}\
|
||||
QScrollBar::up-arrow:vertical\
|
||||
{\
|
||||
border: none;\
|
||||
background: #5A5A5A;\
|
||||
}\
|
||||
QScrollBar::down-arrow:vertical\
|
||||
{\
|
||||
border: none;\
|
||||
background: #5A5A5A;\
|
||||
}";
|
||||
_paramTextEdit->verticalScrollBar()->setStyleSheet(scrollStyle);
|
||||
}
|
||||
QSlider* RMTune360Dialog::_slider(QWidget* parent,QLayout* layout, QString title, float ratio)
|
||||
{
|
||||
QWidget* view = new QWidget(parent);
|
||||
QHBoxLayout* viewLayout = new QHBoxLayout(view);
|
||||
viewLayout->setAlignment(Qt::AlignCenter);
|
||||
|
||||
layout->addWidget(view);
|
||||
|
||||
QLabel* tl = new QLabel(view);
|
||||
tl->setText(title);
|
||||
tl->setStyleSheet("font-family: Fixedsys;color : #F0F0F0;");
|
||||
viewLayout->addWidget(tl);
|
||||
|
||||
QSlider* slider = new QSlider(view);
|
||||
slider->setOrientation(Qt::Horizontal);
|
||||
slider->setMinimum(-TUNE_360_RANGE);
|
||||
slider->setMaximum(TUNE_360_RANGE);
|
||||
slider->setValue(0);
|
||||
|
||||
connect(slider,SIGNAL(valueChanged(int)),SLOT(onSliderChange(int)));
|
||||
|
||||
_sliders->append(slider);
|
||||
|
||||
viewLayout->addWidget(slider);
|
||||
QLabel* label = new QLabel(view);
|
||||
label->setText("0.000");
|
||||
label->setStyleSheet("font-family: Fixedsys;color : #F0F0F0;");
|
||||
_labels->append(label);
|
||||
|
||||
viewLayout->addWidget(label);
|
||||
|
||||
QPushButton* reset = _button(view,viewLayout,"RS");
|
||||
_resetButtons->append(reset);
|
||||
|
||||
_ratios.append(ratio);
|
||||
return slider;
|
||||
}
|
||||
QPushButton* RMTune360Dialog::_button(QWidget* parent,QLayout* layout,QString title)
|
||||
{
|
||||
QPushButton* btn = new QPushButton(parent);
|
||||
btn->setText(title);
|
||||
//btn->setStyleSheet("font-family: Arial;font-size: 9px;");
|
||||
btn->setStyleSheet("QPushButton{font-family: Fixedsys;color : white;}"
|
||||
"QPushButton[enabled=\"false\"]{color : #AAAAAA;}");
|
||||
btn->setFixedWidth(title.length() * 10);
|
||||
layout->addWidget(btn);
|
||||
connect(btn,SIGNAL(clicked()),SLOT(onButton()));
|
||||
return btn;
|
||||
}
|
||||
|
||||
void RMTune360Dialog::onSliderChange(int value)
|
||||
{
|
||||
QSlider* slider = qobject_cast<QSlider*>(sender());
|
||||
int index = _sliders->indexOf(slider);
|
||||
QLabel* label = _labels->at(index);
|
||||
QString str;
|
||||
double v = ((double)value)/(TUNE_360_RANGE * _ratios.at(index));
|
||||
label->setText(str.sprintf("%.3f",v));
|
||||
|
||||
refresh();
|
||||
}
|
||||
void* RMTune360Dialog::gl()
|
||||
{
|
||||
return RMPlayer::instance()->playerF()->videoOutputs().first()->opengl();
|
||||
}
|
||||
void RMTune360Dialog::loadPreset()
|
||||
{
|
||||
FAV::OpenGLVideo* opengl = (FAV::OpenGLVideo*)gl();
|
||||
QMatrix4x4& m = opengl->tune360();
|
||||
|
||||
float ac[16];// = m.constData();
|
||||
m.copyDataTo(ac);
|
||||
|
||||
for(int i=0;i<_sliders->count();i++)
|
||||
{
|
||||
float fv = ac[i] * (TUNE_360_RANGE * _ratios.at(i));
|
||||
//qInfo() << i << ":" << fv;
|
||||
_sliders->at(i)->blockSignals(true);
|
||||
_sliders->at(i)->setValue(fv);
|
||||
_sliders->at(i)->blockSignals(false);
|
||||
|
||||
QLabel* label = _labels->at(i);
|
||||
QString str;
|
||||
//double v = ((double)value)/(TUNE_360_RANGE * _ratios.at(index));
|
||||
label->setText(str.sprintf("%.3f",ac[i]));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RMTune360Dialog::refresh()
|
||||
{
|
||||
float ac[16] = {0,};
|
||||
for(int i=0;i<_sliders->count();i++)
|
||||
{
|
||||
ac[i] = ((double)_sliders->at(i)->value())/(TUNE_360_RANGE * _ratios.at(i));
|
||||
//qInfo() << "I:" << i << ":"<< ac[i];
|
||||
}
|
||||
//ac[8] = _swap ? 1.0 : 0.0; // 3*2+2 = 8
|
||||
QMatrix4x4 m(ac);
|
||||
|
||||
FAV::OpenGLVideo* opengl = (FAV::OpenGLVideo*)gl();
|
||||
opengl->setTune360(m);
|
||||
|
||||
RMPlayer::instance()->playWidgetF()->update();
|
||||
}
|
||||
void RMTune360Dialog::onButton()
|
||||
{
|
||||
QPushButton* btn = qobject_cast<QPushButton*>(sender());
|
||||
QString cmd = btn->text().toUpper();
|
||||
FAV::OpenGLVideo* opengl = (FAV::OpenGLVideo*)gl();
|
||||
|
||||
if(cmd == "RESET")
|
||||
{
|
||||
for(int i=0;i<_sliders->count();i++)
|
||||
{
|
||||
_sliders->at(i)->setValue(0);
|
||||
}
|
||||
refresh();
|
||||
}
|
||||
else if(cmd == "VR")
|
||||
{
|
||||
opengl->setMode(1);
|
||||
RMPlayer::instance()->playWidgetF()->update();
|
||||
}
|
||||
else if(cmd == "WIDE")
|
||||
{
|
||||
opengl->setMode(0);
|
||||
RMPlayer::instance()->playWidgetF()->update();
|
||||
}
|
||||
else if (cmd == "GET")
|
||||
{
|
||||
QString a = "[";
|
||||
for(int i=0;i<_sliders->count();i++)
|
||||
{
|
||||
if(i>0)
|
||||
{
|
||||
a += ",";
|
||||
}
|
||||
|
||||
QString vf;
|
||||
float f = ((double)_sliders->at(i)->value())/(TUNE_360_RANGE * _ratios.at(i));
|
||||
vf.sprintf("%f",f);
|
||||
a += vf;
|
||||
}
|
||||
a += "];";
|
||||
_paramTextEdit->clear();
|
||||
_paramTextEdit->appendPlainText(a);
|
||||
}
|
||||
else if(cmd == "SET")
|
||||
{
|
||||
QString pt = _paramTextEdit->toPlainText();
|
||||
pt.replace("[","").replace("]","").replace(";","");
|
||||
QStringList sl = pt.split(",");
|
||||
if(sl.count() == _sliders->count())
|
||||
{
|
||||
for(int i=0;i<sl.count();i++)
|
||||
{
|
||||
QString sv = sl.at(i);
|
||||
float fv = sv.toFloat() * (TUNE_360_RANGE * _ratios.at(i));
|
||||
//qInfo() << sl << sv << fv;
|
||||
_sliders->at(i)->setValue(fv);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if(cmd == "SWAP")
|
||||
{
|
||||
_swap = !_swap;
|
||||
qInfo() << "swap:" << _swap;
|
||||
refresh();
|
||||
}
|
||||
else if (cmd == "RS")
|
||||
{
|
||||
int index = _resetButtons->indexOf(btn);
|
||||
_sliders->at(index)->setValue(0);
|
||||
refresh();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif // #if (TUNE_360)
|
||||
Reference in New Issue
Block a user