#include "rm_tune360_dialog.h" #if (TUNE_360) #include "../fav/OpenGLVideo.h" #include #include #include #include #include #include #include #include #include #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(); _sliders = new QList(); _resetButtons = new QList(); #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(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(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;iat(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)