You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Src/nmNum/nmPlot/nmPlotView.cpp

195 lines
5.3 KiB
C++

//#include <QMenu>
//#include <QFileDialog>
#include "ZxBaseUtil.h"
#include "zxLogInstance.h"
#include "ZxPaintParam.h"
#include "ZxSubAxisX.h"
#include "ZxSubAxisY.h"
#include "nmPlotScene.h"
#include "nmPlotView.h"
ZX_DEFINE_DYNAMIC(mPlotView, nmPlotView)
nmPlotView::nmPlotView()
{
}
void nmPlotView::onPrepareContextMenu(QMenu* pMenu,
const QPointF& pos)
{
{
nmPlotScene* pScene = dynamic_cast<nmPlotScene*>(getScene());
if (NULL != pScene && NULL != pScene->m_pPlot)
{
ZxPlot* pPlot = pScene->m_pPlot;
pPlot->onPrepareContextMenu(pMenu, pos);
{
QAction* pAction = pMenu->addAction(zxLoadIcon("Undo"), tr("Undo"));
connect(pAction, SIGNAL(triggered()), this, SLOT(slotUndo()));
pAction->setEnabled(pPlot->canUndo());
}
{
QAction* pAction = pMenu->addAction(zxLoadIcon("Redo"), tr("Redo"));
connect(pAction, SIGNAL(triggered()), this, SLOT(slotRedo()));
pAction->setEnabled(pPlot->canRedo());
}
pMenu->addSeparator();
}
pMenu->addSeparator();
}
__super::onPrepareContextMenu(pMenu, pos);
}
// 拖拽支持
void nmPlotView::dragEnterEvent(QDragEnterEvent *event)
{
m_bDraging = false;
emit sigCheckDragAccepted(event, m_bDraging);
if (m_bDraging)
{
event->accept();
}
}
void nmPlotView::dropEvent(QDropEvent *event)
{
if (m_bDraging)
{
m_bDraging = false;
emit sigDealwithDrop(event);
event->accept();
}
}
void nmPlotView::mouseMoveEvent(QMouseEvent* e)
{
ZxRenderView::mouseMoveEvent(e);
nmPlotScene* pScene = dynamic_cast<nmPlotScene*>(ZxRenderView::getScene());
if (NULL == pScene || NULL == pScene->m_pPlot)
{
return;
}
QPointF pos = mapToScene(QPoint(e->x(), e->y()));
ZxTempLayer* pTempLayer = pScene->getTempLayer();
if (NULL != pTempLayer)
{
// 范围
QRectF rt = pScene->m_pPlot->getInnerRectF();
pTempLayer->setCrossLineRect(rt);
// 位置
pTempLayer->setCrossLinePos(pos);
// 文字
{
ZxSubAxisBase* pX = dynamic_cast<ZxSubAxisBase*>(pScene->m_pPlot->getMainAxisX());
ZxSubAxisBase* pY = dynamic_cast<ZxSubAxisBase*>(pScene->m_pPlot->getMainAxisY());
ZxSubAxisBase* pY2 = pScene->m_pPlot->getSysAxisY(AP_Right);
if (NULL != pY2) //加入双Y轴的考虑
{
if (!pY2->isVisible() || pY2->isMinimizeAxis() || pY2 == pY)
pY2 = NULL;
}
double fX = pX->getValueForPos(pos.x());
double fY = pY->getValueForPos(pos.y());
QString sValueX = ZxBaseUtil::getValidStr(fX, 3);
QString sValueY = ZxBaseUtil::getValidStr(fY, 3);
QString sValueY2 = "";
if (NULL != pY2)//加入双Y轴的考虑
{
double fY2 = pY2->getValueForPos(pos.y());
sValueY2 = ZxBaseUtil::getValidStr(fY2, 3);
}
QString sTipsEx = "";
emit sigGetTipsExOfPos(sTipsEx, fX, fY); //此处不考虑双Y轴TODO
// tips
QString s = QString("%1:%2 %3").arg(pX->getName()).arg(sValueX).arg(pX->getUnit());
s += ";";
if (!sTipsEx.isEmpty())
{
QPen pen = QPen(QColor(128, 128, 128));
pTempLayer->setCrossLinePen(pen);
pen.setWidthF(.1f);
s += sTipsEx;
}
else
{
pTempLayer->setCrossLinePen(QPen(QColor(192, 192, 192)));
s += QString("%1:%2 %3").arg(pY->getName()).arg(sValueY).arg(pY->getUnit());
if (!sValueY2.isEmpty() && NULL != pY2)
s += QString(";%1:%2 %3").arg(pY2->getName()).arg(sValueY2).arg(pY2->getUnit());
}
pTempLayer->setTips(s);
// 状态栏
if (rt.contains(pos))
{
s = tr(" Current Pos:%1-%2").arg(sValueX).arg(sValueY);
if (!sValueY2.isEmpty())
s += QString("-%1").arg(sValueY2);
if (!sTipsEx.isEmpty())
{
s += " ";
s += sTipsEx;
}
}
else
{
s = "";
}
emit sigFresh2Status(s);
}
}
}
void nmPlotView::focusOutEvent(QFocusEvent *e)
{
ZxRenderView::focusOutEvent(e);
nmPlotScene* pScene = dynamic_cast<nmPlotScene*>(ZxRenderView::getScene());
if (NULL != pScene)
{
ZxTempLayer* pTempLayer = pScene->getTempLayer();
if (NULL != pTempLayer)
{
pTempLayer->clearLineAndTips();
return;
}
}
}
void nmPlotView::leaveEvent(QEvent *e)
{
ZxRenderView::leaveEvent(e);
nmPlotScene* pScene = dynamic_cast<nmPlotScene*>(ZxRenderView::getScene());
if (NULL != pScene)
{
ZxTempLayer* pTempLayer = pScene->getTempLayer();
if (NULL != pTempLayer)
{
pTempLayer->clearLineAndTips();
// return;
}
}
QString s = "";
emit sigFresh2Status(s);
}