first commit

This commit is contained in:
2026-02-21 17:11:31 +09:00
commit 18b4338361
4001 changed files with 365464 additions and 0 deletions

View File

@@ -0,0 +1,224 @@
#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<int>() << 1 << 2 << 4 << 8);
#else
graph = new RMGraphWidget(this,QList<int>() << 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));
// }
// }
//}