|
|
#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;
|
|
|
};
|