#include "rm_frame_graph.h" //#include "rm_speed_label.h" #include "rm_graph_widget.h" #include "fm_button.h" #include "fm_layer.h" #include "../fm_dimensions.h" #include "fm_frame_speed.h" #include "../core/fm_strings.h" #include "fm_colors.h" RMFrameGraph::RMFrameGraph(QWidget *parent) : RMWidgetBase(parent,true) { layout = new QHBoxLayout(this); ZERO_LAYOUT(layout); layout->setAlignment(Qt::AlignLeft); speed = new FMSpeedFrame(this); speed->setFixedSize(88,79); layout->addWidget(speed); LAYOUT_SPACE(layout,1,0); createXYZLabel(); #if (RM_MODEL_EMT_KR) graph = new RMGraphWidget(this,QList() << 1 << 2 << 4 << 8); #else graph = new RMGraphWidget(this,QList() << 1 << 2 << 4); #endif graph->setFixedHeight(70); graph->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); layout->addWidget(graph); LAYOUT_SPACE(layout,2,0); createZoomButtons(); } void RMFrameGraph::createXYZLabel() { QWidget* w = new QWidget(this); w->setFixedWidth(66); layout->addWidget(w); //LAYOUT_DEBUG(w); QVBoxLayout* l = new QVBoxLayout(w); l->setAlignment(Qt::AlignTop); l->setContentsMargins(0,1,0,0); // 상단 마진 l->setSpacing(0); // 버튼 간격 xOnBtn = RMFrameGraph::_createXYZ(w,l,"sensor_x",&xLabel,FM_SENSOR_COLOR_X); yOnBtn = RMFrameGraph::_createXYZ(w,l,"sensor_y",&yLabel,FM_SENSOR_COLOR_Y); zOnBtn = RMFrameGraph::_createXYZ(w,l,"sensor_z",&zLabel,FM_SENSOR_COLOR_Z); } FMButton* RMFrameGraph::_createXYZ(QWidget* parent, QLayout* layout, const char* icon, QLabel** lb, int color) { QSize bSize = QSize(30,25); QWidget* w = new QWidget(parent); layout->addWidget(w); QHBoxLayout* lw = new QHBoxLayout(w); lw->setAlignment(Qt::AlignVCenter); ZERO_LAYOUT(lw); #if (LIVE_LANGUAGE2) FMButton* btn = FMButton::btnStatic2(w,lw,icon,NULL,bSize); #else // LIVE_LANGUAGE2 FMButton* btn = FMButton::btnStatic(w,lw,icon,QString(""),bSize); #endif // LIVE_LANGUAGE2 QLabel* label = new QLabel(w); label->setText("-0.00"); label->setFixedWidth(36-4); label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); FMLabel(label,icon,"Arial",color, 12); lw->addWidget(label); *lb = label; return btn; } void RMFrameGraph::createZoomButtons() { QWidget* w = new QWidget(this); w->setFixedWidth(28); layout->addWidget(w); QVBoxLayout* l = new QVBoxLayout(w); l->setAlignment(Qt::AlignTop); l->setContentsMargins(0,2,0,0); // 상단 마진 l->setSpacing(1); // 버튼 간격 QSize sz = QSize(28,36); // 확대-> 실제로는 스케일을 줄인다 拡大 #if (LIVE_LANGUAGE2) _zoomIn = FMButton::btn2(w,l,"graph_up","graph_zoom_in",sz); #else // LIVE_LANGUAGE2 _zoomIn = FMButton::btn(w,l,"graph_up",FMS::txt("graph_zoom_in"),sz); #endif // LIVE_LANGUAGE2 #if (RM_MODEL_EMT_KR) QLabel* seperator = new QLabel(w); seperator->setPixmap(QPixmap(":/image/graph_seperator.png")); l->addWidget(seperator); #endif //LAYOUT_SPACE(l,0,1); // 축소-> 실제로는 스케일을 늘린다 縮小 #if (LIVE_LANGUAGE2) _zoomOut = FMButton::btn2(w,l,"graph_down","graph_zoom_out",sz); #else // LIVE_LANGUAGE2 _zoomOut = FMButton::btn(w,l,"graph_down",FMS::txt("graph_zoom_out"),sz); #endif // LIVE_LANGUAGE2 #if (RM_MODEL_EMT_KR) _zoomOut->setEnabled(true); #else _zoomOut->setEnabled(false); #endif LAYOUT_SPACE(layout,2,0); // 우측 마진 #if !(LIVE_LANGUAGE2) #if (LIVE_LANGUAGE_CHANGE) RMLanguage::instance()->appendENGToolTip(_zoomIn,"Zoom In"); RMLanguage::instance()->appendENGToolTip(_zoomOut,"Zoom Out"); #endif #endif // #if (LIVE_LANGUAGE2) connect(_zoomIn,SIGNAL(clicked()),graph,SLOT(onZoomIn())); connect(_zoomOut,SIGNAL(clicked()),graph,SLOT(onZoomOut())); connect(graph,SIGNAL(zoomChange(bool,bool)),SLOT(onZoomChange(bool,bool))); graph->setLabels(xLabel,yLabel,zLabel); } #if (MODEL_STANDARD) void RMFrameGraph::onZoomChange(bool zi,bool zo) { _zoomOut->setEnabled(zo); _zoomIn->setEnabled(zi); } #endif void RMFrameGraph::onAppEvent(RMApp::Event event,int param) { Q_UNUSED(param) if(event == RMApp::WillFullScreen || event == RMApp::WillNormalScreen) { #if (USE_MAXIMIZE) // MAXIMAIZE 모드에서는 처리하지 않음 if(event == RMApp::WillFullScreen && param == 0) { setHidden(true); } else { setHidden(false); } #else setHidden(event == RMApp::WillFullScreen); #endif } #if (USE_MAXIMIZE) if (event == RMApp::DidFullScreen || event == RMApp::DidNormalScreen) { graph->redraw(); } #endif } //void RMFrameGraph::onPlayEvent(PLAY_EVENT event,RMVideoItem* item) //{ /* if(event == PLAY_DID_LOADED) { _cursorX = -1; if(item != NULL) { currentData = item->getSensorData(); } _updatePolygon(); _itemDurationMSec = (double)item->durationInMSecs(); } else if(event == PLAY_DID_CLEARED) { _cursorX = -1; currentData= NULL; _polygonX.clear(); _polygonY.clear(); _polygonZ.clear(); update(); } */ //} //void RMFrameGraph::onPositionChanged(qint64 position,qint64 duration) //{ // double pos = (double)MIN(position,duration); // double du = ((double)(duration)); // // 센서 값과 유사하게 표시하기위해 보정 // //const double tolerance = 50.0; // // 실제 시간과 seek duration 보정 // //double pos2 = (pos + tolerance) * (_itemDurationMSec / du); // double pos2 = pos; // unsigned int offset = (unsigned int)(((double)pos2) / ((double)du) * ((double)currentData->getSensorCount()) ); // if(offset < currentData->getSensorCount()) // { // const float* sensorValues = currentData->getSensor(); // const float x = sensorValues[(offset * NUM_SENSOR_DATA) + 0] * 2.0; // const float y = sensorValues[(offset * NUM_SENSOR_DATA) + 1] * 2.0; // const float z = sensorValues[(offset * NUM_SENSOR_DATA) + 2] * 2.0; // if(xLabel != NULL) // { // xLabel->setText(QString().sprintf("X:% .3f",x)); // } // if(yLabel != NULL) // { // yLabel->setText(QString().sprintf("Y:% .3f",y)); // } // if(zLabel != NULL) // { // zLabel->setText(QString().sprintf("Z:% .3f",z)); // } // } //}