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/Include/mGui/mGuiDataLoad/iWxDataLoad.h

284 lines
7.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include "iDlgBase.h"
#include "mGuiDataLoad_global.h"
#include "iWxPressError.h"
namespace Ui {
class iWxDataLoad;
}
class ZxTableView;
class ZxTableModel;
class ZxTableHeaderView;
class ZxPlot;
class iGuiPlot;
class ZxDataObject;
class ZxDataGaugeBase;
class M_GUI_DATA_LOAD_EXPORT iWxDataLoad : public iDlgBase
{
Q_OBJECT
public:
// 当前数据对应的类型
enum DataLoadType
{
dtPressure = 0, //压力数据
dtFluid, //流量
dtAuto, //自动判断
dtUnkown //
};
// 加载数据时时间格式
enum DateTimeMode
{
DTM_Value_FromStart = 0,//相对时间从0开始一直持续时间
DTM_Value_Duration, //相对时间,每一段持续时间,如流量
DTM_Real_Time, //真实时间格式
DTM_Real_DateTime, //日期时间格式
DTM_Real_Date, //日期 几乎不常用
DTM_Unknown
};
public:
explicit iWxDataLoad(DataLoadType oType, bool bFixWellName = false, QWidget *parent = 0);
~iWxDataLoad();
private:
// 初始化
void initTitle(); //
void initUI();
// 初始化各个子布局
void initUI_SubAreas();
QWidget* initUI_Tags();
QWidget* initUI_Grids();
QWidget* initUI_Charts();
void intUiBtns();
void initWells();
void initUnits();
void initDataTag();
QString getDefaultTag(bool bF);
private:
// 加载解析
bool loadFromFile(QString sFile, QString& sLog);
//bool loadFromClipboard(QString& sLog);
// 配置目标标题
void initTargetTitles();
// 调用默认,配置表头
void initDefaultTableTitles();
// 如果既有日期、又有时间列,则自动判断调整日期格式
void checkDateTimeSeparated();
// s是文件中解析出来的查找其模糊匹配的目标title的中索引
int findMuzzIndex(QString s, QStringList &listKeys);
// 位置索引
int indexOfStrList(QString s, const QStringList& list);
// 获取表格第一行的第n列的数据
QStringList getFirstRowCellOf(QVector<int> listIndexes);
bool checkStartDt();
bool checkDataTag(bool bF);
// 检测时间格式,并根据当前数据进行细微调整
bool fuzzyFormatDT(QString& sFormatDT, \
QString& sFormatD, QString& sFormatT, \
int nIndexT1, int nIndexT2);
VecInt splitDtValue(QString s);
// 获取当前的两列数据
QByteArray sumCurData(VVecVariant& vvec, int nSample, \
int nIndexT1, int nIndexT2, int nIndexD);
VVecVariant getFilteredData();
int getDataRowStep(int nCount);
bool writeDataLog(VVecVariant& vvec, int index,
int& nIndexD, int& nIndexT1, int& nIndexT2);
// s11,s12===TopRow, s21,s22====CurrentRow
QDateTime parseValueDtX(QString s1, QString s2, \
QString sFormatDT, \
QString sFormatD, QString sFormatT);
// 起始终止行数
void filterByFromTos(VVecVariant& vvec);
//压力数据时间矫正
void correctPressTime(ePressError eType,
QVector<TableRowState> vecTableRowState,
VecDouble& vecX,
VecDouble& vecY);
void correctlgNew(QVector<TableRowState> vecTableRowState, VVecVariant& vvec);
void correctlgOld(QVector<TableRowState> vecTableRowState, VVecVariant& vvec);
void correctJump(QVector<TableRowState> vecTableRowState, VVecVariant& vvec);
// 当表格数据改变后刷新
void freshByTableChanged();
// 根据当前表头进行绘图
bool refreshCharts();
// 处理起始时间、单位等等
void dealWithStartTime();
void dealWithUnits(VecDouble& vecX, VecDouble& vecY);
void convertValueByUnit(QString sOld, QString sNew, VecDouble &vec);
void adjustFlowRates(VecDouble& vecX, VecDouble& vecY);
// 如果当前的已经被选中,则清除原先选中
void dealPrevSameColAuto(int n, QString s);
// 如果当前还有一个没有选择,则自动选择
void dealLastColAuto(int n, QString s);
// 获取表头位置索引
bool getTitleIndexes(int& nIndexD, int& nIndexT1, int& nIndexT2);
// 获取绘图时的XY轴标题
bool getTitleOfAxisXY(QString& sNameX,
QString& sNameY,
QString& sUnitX,
QString& sUnitY);
void freshFromTos();
// 当前表格数据存入数据库
bool saveData();
// 执行与实现
void runLoad();
void fillExcelSheets();
void runByTableColSelection(const int, const QString);
bool checkData(VecDouble& vecX, VecDouble& vecY);
private slots:
// 各个按钮
void on_btnRun_clicked();
void on_btnFile_clicked();
void on_btnDatabase_clicked();
void on_btnOK_clicked();
void on_btnApply_clicked();
void on_btnCancel_clicked();
private slots:
// 来源模式改变
void slotRadioGroupSrcClicked(int index);
// 选择改变时响应
void slotSelChanged(const int, const QString);
// 点击下拉表头前,刷新下拉项的状态
void slotOnGetColumnItems(int nIndex);
// 日期模式
void on_cbxDtFormat_currentIndexChanged(const QString &arg1);
void on_cbxDateTimeSeparated_clicked();
void on_cbxFormat_currentIndexChanged(const QString &arg1);
// 其它消息
void on_tbxFile_textChanged(const QString &arg1);
void on_cbxExcelSheets_currentIndexChanged(const QString &arg1);
void on_cbxTimeUnit_currentIndexChanged(const QString &arg1);
void on_cbxValueUnit_currentIndexChanged(const QString &arg1);
// 拖拽支持
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent* event);
// 重载函数
void keyPressEvent(QKeyEvent* e);
void on_cbxUseCodec_clicked();
// 表格改变
void slotTableCellChanged(const QModelIndex&, const QModelIndex&);
void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index);
// 起始行终止行
void on_sbxRowFrom_valueChanged(int arg1);
void on_sbxRowTo_valueChanged(int arg1);
// 这是允许外界对粘贴板内容进行解析,解析为二维表格数据
void slotParseContents(const QString& s, VVecVariant& vvec);
void on_cbxAutoThinning_clicked();
void slotCellDbClicked(QModelIndex index);
void slotColInserted(int nFrom, int nCount);
void slotColRemoved(int nFrom, int nCount);
void on_radioStepForward_clicked();
void on_radioStepPost_clicked();
signals:
// PF数据保存成功后触发
// p本身包括了WellCode是否Pressure等信息
void sigPfObjSaved(ZxDataGaugeBase* p);
private:
Ui::iWxDataLoad *ui;
// 布局载体
QTextEdit* m_pTbxDataDesc;
ZxTableView* m_pTableView;
ZxTableHeaderView* m_pTableHeaderView;
// 图形数据
ZxPlot* m_pPlot;
iGuiPlot* m_pWxPlot;
// 加载数据后解析解出来
QString m_sHeaders; //顶部文件说明信息
QStringList m_listTitles; //顶部单位和标题
QStringList m_listUnits;
VVecVariant m_vvecData; //数据原始
// 表格数据
QStringList m_listTableTitles; //表上显示的标题,可以为空
QStringList m_listTargetTitles;
QStringList m_listKeyTitles;
// 数据类,压力或流量
DataLoadType m_oType;
// 数据类的时间格式
DateTimeMode m_oDtm;
// 当前拖拽为正确的格式
bool m_bDraging;
// 空标志
QString m_sTagNull;
// LastError
QString m_sLastError;
// 限制井名
bool m_bFixWellName;
// 空白表格数据
VVecVariant m_vvecDefaults;
QDateTime m_dtInitStart;
};