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

#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,
VecFloat& vecX,
VecFloat& 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(VecFloat& vecX, VecFloat& vecY);
void convertValueByUnit(QString sOld, QString sNew, VecFloat &vec);
void adjustFlowRates(VecFloat& vecX, VecFloat& 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(VecFloat& vecX, VecFloat& 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;
};