logplus/ConvertorManager/src/ImportdataDialog.cpp
2025-10-29 17:23:30 +08:00

840 lines
34 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ui_importdataDialog.h"
#include "ImportdataDialog.h"
#include "InterIConvertor.h"
#include "IConvertor.h"
//#include "ObjWelllogRound.h"
#include <QLineEdit>
//#include "DataImport.h"
#include "CStringType.h"
#include "MyWelllogRound.h"
#include "tishidialog.h"
#include "ui_interfaceWidget.h"
//#include "ObjectEvent.h"
#include "MemRdWt.h"
BEGIN_OSGGRAPHICS_NAMESPACE;
ImportDataDialog::ImportDataDialog(QWidget *parent,QString wellname,QString wellroundname): QDialog(parent),m_FilePath(""),m_ExistSameWellName(false),m_ExistSameWellRoundName(false)
{
m_CurrentWellName=wellname;
m_CurrentWellRoundName=wellroundname;
m_pImportDataUI=new Ui::ImportData();
m_pImportDataUI->setupUi(this);
m_pImportDataUI->tabWidget->removeTab(1);
m_pImportDataUI->tabWidget->removeTab(0);
connect(m_pImportDataUI->pushButton_2, SIGNAL(clicked()), this, SLOT(AcceptOK()));
connect(m_pImportDataUI->pushButton, SIGNAL(clicked()), this, SLOT(reject()));
//whp add 2019.10.12
connect(m_pImportDataUI->pushButton_3, SIGNAL(clicked()), this, SLOT(SelAll()));
connect(m_pImportDataUI->pushButton_4, SIGNAL(clicked()), this, SLOT(NotSelAll()));
connect(m_pImportDataUI->pushButton_5, SIGNAL(clicked()), this, SLOT(ReverseSel()));
setAttribute( Qt::WA_DeleteOnClose ,true );
setWindowTitle("Import Well-Logging-Data");
m_pImportDataUI->pushButton_2->setIcon(QIcon( ::GetImagePath() + "icon/Import.png"));
m_pImportDataUI->pushButton->setIcon(QIcon( ::GetImagePath() + "icon/Exit.png"));
}
ImportDataDialog::~ImportDataDialog()
{
std::map<QWidget*,InterfaceWidget*>::iterator itor=m_TabInterWidget.begin();
for (;itor!=m_TabInterWidget.end();itor++)
{
InterfaceWidget *pIterWidget=itor->second;
if (pIterWidget)
{
delete pIterWidget;
pIterWidget=NULL;
}
}
m_TabInterWidget.clear();
if (m_pImportDataUI)
{
delete m_pImportDataUI;
m_pImportDataUI=NULL;
}
}
void ImportDataDialog::DisplayFileInformationAreaData( const QVector<IConvertor*>ConvertorVector,const QString filePath )
{
m_vConvertorVector.clear();
m_vConvertorVector=ConvertorVector;
std::map<sConvertorKey,IConvertorFactory::pCreateObjectFunction >&mapBuilderType =
IConvertor::GetFatory().m_map;
std::map<sConvertorKey,IConvertorFactory::pCreateObjectFunction >::iterator itor =
mapBuilderType.begin();
m_FilePath=filePath;
for (int i=0;i<ConvertorVector.size();i++)
{
QWidget *tabWidget=new QWidget();
InterfaceWidget *pInterfaceWidget=new InterfaceWidget();
m_TabInterWidget[tabWidget]=pInterfaceWidget;
m_pImportDataUI->tabWidget->addTab(tabWidget,QString());
QHBoxLayout *Mainlayout=new QHBoxLayout(tabWidget);
QHBoxLayout *ScondLayout=new QHBoxLayout();
Mainlayout->addLayout(ScondLayout);
ScondLayout->addWidget(pInterfaceWidget);
m_pImportDataUI->tabWidget->setTabText(i,ConvertorVector[i]->GetConvertorTypeName());
pInterfaceWidget->GetDataPreviewArea()->setText(ConvertorVector[i]->GetFileContent(filePath));
FamilyDelegate* familyDelegate=new FamilyDelegate(this);
pInterfaceWidget->GetDataSelectAreaWidget()->setItemDelegateForColumn(2,familyDelegate);
pInterfaceWidget->m_pConvertor=ConvertorVector[i];
QStringList fileHead=ConvertorVector[i]->GetListHead();
if(fileHead.isEmpty())
fileHead<<"原始名称"<<"原始单位"<<"曲线类别"<<"输出名称"<<"输出单位";
ConvertorVector[i]->m_ColumnCount=fileHead.size();
DisplaySelectAreaData(pInterfaceWidget,fileHead,ConvertorVector[i]);
//初始化井和井次信息界面
InitWell(pInterfaceWidget,ConvertorVector[i]);
InitWellLogRound(pInterfaceWidget,ConvertorVector[i]);
}
}
void ImportDataDialog::InitWell(InterfaceWidget *pInterfaceWidget,IConvertor*pConvertor)
{
MyWelllogRound *wellinfo=pConvertor->GetWellLogRoundInfo();
//无井代码
if(m_CurrentWellName!="")
pInterfaceWidget->GetWellNameLineEdit()->insert(m_CurrentWellName);
else
{
QString tempWellName=QString::fromStdString(wellinfo->GetWellName());//whp add 2020.7.15
tempWellName=tempWellName.simplified();
//whp change 2020.3.3 井名提取应该不含".zh"之类的后缀,应该取文件的基本名
//文件名中有一个以上的“."时如3Oq.ZH.716,需要井名和文件名区分开比如a.zh.716和a.wj.716同时解编井名都取最前面的a井次名分别为a.zh和a.wj
//pInterfaceWidget->GetWellNameLineEdit()->insert(QString::fromStdString(wellinfo->GetName()));
if(tempWellName=="")
{
QFileInfo temDir(QString::fromStdString(wellinfo->GetName()));
tempWellName=temDir.baseName();
}
pInterfaceWidget->GetWellNameLineEdit()->insert(tempWellName);
}
pInterfaceWidget->GetWellCompanyNameLineEdit()->insert(QString::fromStdString(wellinfo->GetCompanyName()));
pInterfaceWidget->GetWellAreaNameLineEdit()->insert(QString::fromStdString(wellinfo->GetAreaName()));
// pInterfaceWidget->GetWellCodeLineEdit()->insert("井代码");
pInterfaceWidget->GetXCodeLineEdit()->setText(QString::number(wellinfo->GetXCode(), 'f', 4));
pInterfaceWidget->GetYCodeLineEdit()->setText(QString::number(wellinfo->GetYCode(), 'f', 4));
pInterfaceWidget->GetAslLineEdit()->setText(QString::number(wellinfo->GetAsl(), 'f', 4));
pInterfaceWidget->GetBslLineEdit()->setText(QString::number(wellinfo->GetBsl(), 'f', 4));
pInterfaceWidget->GetCWMethodLineEdit()->insert(QString::fromStdString(wellinfo->GetCWMethod()));
pInterfaceWidget->GetBit1ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetBit1Prog()));
pInterfaceWidget->GetBit2ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetBit2Prog()));
pInterfaceWidget->GetBit3ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetBit3Prog()));
pInterfaceWidget->GetBit4ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetBit4Prog()));
pInterfaceWidget->GetBit5ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetBit5Prog()));
pInterfaceWidget->GetCas1ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetCas1Prog()));
pInterfaceWidget->GetCas2ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetCas2Prog()));
pInterfaceWidget->GetCas3ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetCas3Prog()));
pInterfaceWidget->GetCas4ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetCas4Prog()));
pInterfaceWidget->GetCas5ProgLineEdit()->insert(QString::fromStdString(wellinfo->GetCas5Prog()));
pInterfaceWidget->GetCas1ShotLineEdit()->setText(QString::number(wellinfo->GetCas1Shot(), 'f', 4));
pInterfaceWidget->GetCas2ShotLineEdit()->setText(QString::number(wellinfo->GetCas2Shot(), 'f', 4));
pInterfaceWidget->GetSC1SDepLineEdit()->setText(QString::number(wellinfo->GetSC1SDep(), 'f', 4));
pInterfaceWidget->GetSC1EDepLineEdit()->setText(QString::number(wellinfo->GetSC1EDep(), 'f', 4));
pInterfaceWidget->GetSC2SDepLineEdit()->setText(QString::number(wellinfo->GetSC2SDep(), 'f', 4));
pInterfaceWidget->GetSC2EDepLineEdit()->setText(QString::number(wellinfo->GetSC2EDep(), 'f', 4));
pInterfaceWidget->GetWellTypeComboBox()->addItem(QString::fromStdString("直井"));
pInterfaceWidget->GetWellTypeComboBox()->addItem(QString::fromStdString("斜井"));
QDate SDrilltime;
SDrilltime=QDate::currentDate();
pInterfaceWidget->GerSDrillDateEdit()->setDate(SDrilltime);
pInterfaceWidget ->GerSDrillDateEdit()->setDisplayFormat("yyyy年 MM月 dd日");
QDate EDrilltime;
EDrilltime=QDate::currentDate();
pInterfaceWidget->GerEDrillDateEdit()->setDate(EDrilltime);
pInterfaceWidget ->GerEDrillDateEdit()->setDisplayFormat("yyyy年 MM月 dd日");
QDate Completetime;
Completetime=QDate::currentDate();
pInterfaceWidget->GerCompleteDateEdit()->setDate(Completetime);
pInterfaceWidget ->GerCompleteDateEdit()->setDisplayFormat("yyyy年 MM月 dd日");
}
void ImportDataDialog::InitWellLogRound(InterfaceWidget *pInterfaceWidget,IConvertor*pConvertor)
{
MyWelllogRound *welllogRound=pConvertor->GetWellLogRoundInfo();
//无测井剖面
if(m_CurrentWellRoundName!="")
pInterfaceWidget->GetWellRoundNameLineEdit()->insert(m_CurrentWellRoundName);
else
pInterfaceWidget->GetWellRoundNameLineEdit()->insert(QString::fromStdString(welllogRound->GetName()));
pInterfaceWidget->GetCompanyNameLineEdit()->insert(QString::fromStdString(welllogRound->GetCompanyName()));
pInterfaceWidget->GetTeamLineEdit()->insert(QString::fromStdString(welllogRound->GetTeam()));
pInterfaceWidget->GetOperatorLineEdit()->insert(QString::fromStdString(welllogRound->GetOperator()));
pInterfaceWidget->GetMudViscosityLineEdit()->insert(QString::number(welllogRound->GetMudViscosity(), 'f', 4));
pInterfaceWidget->GetRemarkTextEdit()->setText(QString::fromStdString(welllogRound->GetRemark()));
pInterfaceWidget->GetWaterLossLineEdit()->setText(QString::number(welllogRound->GetWaterLoss(), 'f', 4));
pInterfaceWidget->GetDensityLineEdit()->setText(QString::number(welllogRound->GetDensity(), 'f', 4));
pInterfaceWidget->GetResiLineEdit()->setText(QString::number(welllogRound->GetResi(), 'f', 4));
pInterfaceWidget->GetTempLineEdit()->setText(QString::number(welllogRound->GetTemp(), 'f', 4));
pInterfaceWidget->GetINTLogLineEdit()->insert(QString::fromStdString(welllogRound->GetINTLog()));
pInterfaceWidget->GetTempBotLineEdit()->setText(QString::number(welllogRound->GetTempBot(), 'f', 4));
pInterfaceWidget->GetNITINTLineEdit()->insert(QString::fromStdString(welllogRound->GetNITINT()));
pInterfaceWidget->GetIntProgLineEdit()->insert(QString::fromStdString(welllogRound->GetIntProg()));
pInterfaceWidget->GetInteDressLineEdit()->insert(QString::fromStdString(welllogRound->GetInteDress()));
pInterfaceWidget->GetAuditLineEdit()->insert(QString::fromStdString(welllogRound->GetAudit()));
pInterfaceWidget->GetEditTopDepth()->setText("-99999.");
pInterfaceWidget->GetEditBottomDepth()->setText("-99999.");
QString temp_topDepth = (welllogRound->GetTopDepth() > -9999) ? QString::number(welllogRound->GetTopDepth(),'f',6) : "-99999.";
QString temp_botDepth = (welllogRound->GetBottomDepth() > -9999) ? QString::number(welllogRound->GetBottomDepth(),'f',6) : "-99999.";
pInterfaceWidget->GetEditFileSDepth()->setText(temp_topDepth);
pInterfaceWidget->GetEditFileEDepth()->setText(temp_botDepth);
QDateTime time;
if (welllogRound->GetDate()=="")
{
time=QDateTime::currentDateTime();
}
else
{
time =QDateTime::fromString(QString::fromStdString(welllogRound->GetDate()), "yyyy-MM-dd");
}
pInterfaceWidget->GerDateEdit()->setDateTime (time);
pInterfaceWidget ->GerDateEdit()->setDisplayFormat("yyyy年 MM月 dd日");
ComboxFromConfigFile(pInterfaceWidget->GetSerialComboBox(),"serial");
ComboxFromConfigFile(pInterfaceWidget->GetItemComboBox(),"wellItem");
ComboxFromConfigFile(pInterfaceWidget->GetMudTypeComboBox(),"mudType");
}
// CObjWell * ImportDataDialog::GetWellBaseName( IConvertor *pConvertor,const std::string strWellName )
// {
// CObjWell *pWell(NULL);
// {
// QString strName=QString::fromStdString(strWellName);
// if (!GetProject())
// {
// if(!CProjectCommand::NewProject(true)) return NULL;
// }
// if( GetProject() )
// {
// pWell = dynamic_cast<CObjWell *>( GetProject()->GetObjectByName(strName));
// if (pWell)
// {
// //pWell->SetDBWell(pConvertor->GetWellInfo());
// m_ExistSameWellName=true;
// }
// }
// if( !pWell )
// {
// pWell = new CObjWell();
// pWell->SetName( strName );
// pWell->SetDBWell(*(pConvertor->GetWellInfo()));
// if( GetProject() )
// {
// GetProject()->GetWellsFolder(true)->AddChild( pWell );
// }
// }
// }
// return pWell;
// }
void ImportDataDialog::UpdateWell(InterfaceWidget *pInterfaceWidget,IConvertor *pConvertor)
{
if (!pInterfaceWidget||!pConvertor)
return ;
//井代码接口暂时没有
// pai::ios::welllog::Well &wellInfo=pConvertor->GetWellInfo();
InterIConvertor*pIC=dynamic_cast<InterIConvertor*>(pConvertor);
MyWelllogRound* wellInfo=pConvertor->GetWellLogRoundInfo();
QString wellname=pInterfaceWidget->GetWellNameLineEdit()->text();
wellname=wellname.toUpper();
if(pIC) strcpy(pIC->FILE_MESSAGE.WellName,wellname.toStdString().c_str());
wellInfo->SetWellName(wellname.toStdString());
wellInfo->SetName(wellname.toStdString());
//
wellInfo->SetCompanyName((pInterfaceWidget->GetWellCompanyNameLineEdit()->text()).toStdString());
wellInfo->SetAreaName((pInterfaceWidget->GetWellAreaNameLineEdit()->text()).toStdString());
// wellInfo->SetWellCode((pInterfaceWidget->GetWellCodeLineEdit()->text()).toStdString());
wellInfo->SetCWMethod((pInterfaceWidget->GetCWMethodLineEdit()->text()).toStdString());
wellInfo->SetXCode((pInterfaceWidget->GetXCodeLineEdit()->text()).toFloat());
wellInfo->SetYCode((pInterfaceWidget->GetYCodeLineEdit()->text()).toFloat());
wellInfo->SetAsl((pInterfaceWidget->GetAslLineEdit()->text()).toFloat());
wellInfo->SetBsl((pInterfaceWidget->GetBslLineEdit()->text()).toFloat());
wellInfo->SetBit1Prog((pInterfaceWidget->GetBit1ProgLineEdit()->text()).toStdString());
wellInfo->SetBit2Prog((pInterfaceWidget->GetBit2ProgLineEdit()->text()).toStdString());
wellInfo->SetBit3Prog((pInterfaceWidget->GetBit3ProgLineEdit()->text()).toStdString());
wellInfo->SetBit4Prog((pInterfaceWidget->GetBit4ProgLineEdit()->text()).toStdString());
wellInfo->SetBit5Prog((pInterfaceWidget->GetBit5ProgLineEdit()->text()).toStdString());
wellInfo->SetCas1Prog((pInterfaceWidget->GetCas1ProgLineEdit()->text()).toStdString());
wellInfo->SetCas2Prog((pInterfaceWidget->GetCas2ProgLineEdit()->text()).toStdString());
wellInfo->SetCas3Prog((pInterfaceWidget->GetCas3ProgLineEdit()->text()).toStdString());
wellInfo->SetCas4Prog((pInterfaceWidget->GetCas4ProgLineEdit()->text()).toStdString());
wellInfo->SetCas5Prog((pInterfaceWidget->GetCas5ProgLineEdit()->text()).toStdString());
wellInfo->SetCas1Shot((pInterfaceWidget->GetCas1ShotLineEdit()->text()).toFloat());
wellInfo->SetCas2Shot((pInterfaceWidget->GetCas2ShotLineEdit()->text()).toFloat());
wellInfo->SetSC1SDep((pInterfaceWidget->GetSC1SDepLineEdit()->text()).toFloat());
wellInfo->SetSC1EDep((pInterfaceWidget->GetSC1EDepLineEdit()->text()).toFloat());
wellInfo->SetSC2SDep((pInterfaceWidget->GetSC2SDepLineEdit()->text()).toFloat());
wellInfo->SetSC2EDep((pInterfaceWidget->GetSC2EDepLineEdit()->text()).toFloat());
wellInfo->SetSDrillDate(pInterfaceWidget->GerSDrillDateEdit()->date().toString("yyyy年-MM月-dd日").toStdString());
wellInfo->SetEDrillDate(pInterfaceWidget->GerEDrillDateEdit()->date().toString("yyyy年-MM月-dd日").toStdString());
wellInfo->SetCompleteDate(pInterfaceWidget->GerCompleteDateEdit()->date().toString("yyyy年-MM月-dd日").toStdString());
wellInfo->SetWellType((pInterfaceWidget->GetWellTypeComboBox()->currentText()).toInt());
}
void ImportDataDialog::UpdateWellLogRound(InterfaceWidget *pInterfaceWidget,IConvertor *pConvertor)
{
if (!pInterfaceWidget||!pConvertor)
return ;
//剖面接口暂时没有
MyWelllogRound *wellRound=pConvertor->GetWellLogRoundInfo();
wellRound->SetCompanyName((pInterfaceWidget->GetCompanyNameLineEdit()->text()).toStdString());
wellRound->SetTeam((pInterfaceWidget->GetTeamLineEdit()->text()).toStdString());
wellRound->SetOperator((pInterfaceWidget->GetOperatorLineEdit()->text()).toStdString());
wellRound->SetMudViscosity((pInterfaceWidget->GetMudViscosityLineEdit()->text()).toFloat());
wellRound->SetRemark(pInterfaceWidget->GetRemarkTextEdit()->toPlainText().toStdString());
wellRound->SetWaterLoss((pInterfaceWidget->GetWaterLossLineEdit()->text()).toFloat());
wellRound->SetDensity((pInterfaceWidget->GetDensityLineEdit()->text()).toFloat());
wellRound->SetResi((pInterfaceWidget->GetResiLineEdit()->text()).toFloat());
wellRound->SetTemp((pInterfaceWidget->GetTempLineEdit()->text()).toFloat());
wellRound->SetINTLog((pInterfaceWidget->GetINTLogLineEdit()->text()).toStdString());
wellRound->SetTempBot((pInterfaceWidget->GetTempBotLineEdit()->text()).toFloat());
wellRound->SetNITINT((pInterfaceWidget->GetNITINTLineEdit()->text()).toStdString());
wellRound->SetIntProg((pInterfaceWidget->GetIntProgLineEdit()->text()).toStdString());
wellRound->SetInteDress((pInterfaceWidget->GetInteDressLineEdit()->text()).toStdString());
wellRound->SetAudit((pInterfaceWidget->GetAuditLineEdit()->text()).toStdString());
wellRound->SetMudType((pInterfaceWidget->GetMudTypeComboBox()->currentText()).toStdString());
wellRound->SetItem((pInterfaceWidget->GetItemComboBox()->currentText()).toStdString());
wellRound->SetSerial((pInterfaceWidget->GetSerialComboBox()->currentText()).toStdString());
wellRound->SetDate(pInterfaceWidget->GerDateEdit()->date().toString("yyyy年-MM月-dd日").toStdString());
}
void ImportDataDialog::AcceptOK()
{
//whp del 2020.3.16 for 当井名不合理时,提示用户,然后回到解编界面,让用户修改,修改完后,再加载
//disconnect(m_pImportDataUI->pushButton_2, SIGNAL(clicked()), 0,0);
m_ExistSameWellRoundName=false;//TODO 多模块可同时解析一个文件时,需要处理
InterfaceWidget *pCurrentInterfaceWidget(NULL);
std::map< QWidget*,InterfaceWidget* >::iterator itor = m_TabInterWidget.find( m_pImportDataUI->tabWidget->currentWidget() );
int index=m_pImportDataUI->tabWidget->currentIndex();
if( itor != m_TabInterWidget.end() )
{
pCurrentInterfaceWidget=itor->second;
}
if (!pCurrentInterfaceWidget)
return ;
//whp add 2020.3.16
QString wellname=pCurrentInterfaceWidget->GetWellNameLineEdit()->text();
if(wellname=="")
{
QMessageBox::warning(NULL,"提示","井名不能为空");
return ;
}
if(!IsValidWellName(wellname))
{
QMessageBox::warning(NULL,"提示","'"+wellname+"'不符合井名命名规则");return ;
}
//
//std::map<IConvertor*,QList<CObjWellLog*> >::iterator it=m_ConvertorWellLog.find(m_vConvertorVector[index]);
//更新井次和井信息
UpdateWell(pCurrentInterfaceWidget,m_vConvertorVector[index]);
UpdateWellLogRound(pCurrentInterfaceWidget,m_vConvertorVector[index]);
std::string wellLogRoundName=m_vConvertorVector[index]->GetWellLogRoundInfo()->GetWellName();
if(/*!wellName.length()||*/!wellLogRoundName.length())
{
QMessageBox::about(NULL,"提示","井次名和井名不可为空!");
return ;
}
WellCurve wc=((InterIConvertor *)m_vConvertorVector[index])->GetWellCurves();
if(SelectAndDeleteWellLog(wc.Curve_Num,pCurrentInterfaceWidget,m_vConvertorVector[index]->m_ColumnCount,m_vConvertorVector[index]))
return;
//释放未被选取的解编器内存
QDialog::accept();
// ::GetObjectEvent().OnRefreshData(wellname,"");
}
//whp add 2019.10.12
void ImportDataDialog::SelAll()
{
InterfaceWidget *pCurrentInterfaceWidget(NULL);
std::map< QWidget*,InterfaceWidget* >::iterator itor = m_TabInterWidget.find( m_pImportDataUI->tabWidget->currentWidget() );
int index=m_pImportDataUI->tabWidget->currentIndex();
if( itor != m_TabInterWidget.end() )
{
pCurrentInterfaceWidget=itor->second;
}
if (!pCurrentInterfaceWidget)
return ;
QTableWidget *tableWidget=pCurrentInterfaceWidget->GetDataSelectAreaWidget();
int iRow=tableWidget->rowCount();
for (int i=0;i<iRow;i++)
{
tableWidget->item(i,0)->setCheckState(Qt::Checked);
}
}
void ImportDataDialog::NotSelAll()
{
InterfaceWidget *pCurrentInterfaceWidget(NULL);
std::map< QWidget*,InterfaceWidget* >::iterator itor = m_TabInterWidget.find( m_pImportDataUI->tabWidget->currentWidget() );
int index=m_pImportDataUI->tabWidget->currentIndex();
if( itor != m_TabInterWidget.end() )
{
pCurrentInterfaceWidget=itor->second;
}
if (!pCurrentInterfaceWidget)
return ;
QTableWidget *tableWidget=pCurrentInterfaceWidget->GetDataSelectAreaWidget();
int iRow=tableWidget->rowCount();
for (int i=0;i<iRow;i++)
{
tableWidget->item(i,0)->setCheckState(Qt::Unchecked);
}
}
void ImportDataDialog::ReverseSel()
{
InterfaceWidget *pCurrentInterfaceWidget(NULL);
std::map< QWidget*,InterfaceWidget* >::iterator itor = m_TabInterWidget.find( m_pImportDataUI->tabWidget->currentWidget() );
int index=m_pImportDataUI->tabWidget->currentIndex();
if( itor != m_TabInterWidget.end() )
{
pCurrentInterfaceWidget=itor->second;
}
if (!pCurrentInterfaceWidget)
return ;
QTableWidget *tableWidget=pCurrentInterfaceWidget->GetDataSelectAreaWidget();
int iRow=tableWidget->rowCount();
for (int i=0;i<iRow;i++)
{
Qt::CheckState eState= tableWidget->item(i,0)->checkState();
if (eState==Qt::Checked)tableWidget->item(i,0)->setCheckState(Qt::Unchecked);
else tableWidget->item(i,0)->setCheckState(Qt::Checked);
}
}
void ImportDataDialog::DisplaySelectAreaData( InterfaceWidget *pInterface,const QStringList fileHead,IConvertor *pConvertor)
{
int iRow(0),iOrder(0);
vector<char *> CurveNames=((InterIConvertor*)pConvertor)->GetCurveNames();
vector<char *> CurveUnits=((InterIConvertor*)pConvertor)->GetCurveUnits();
WellCurve WellCurves= ((InterIConvertor*)pConvertor)->GetWellCurves();
//pConvertor->GetWellLogList(m_FilePath);
iRow=WellCurves.Curve_Num;//m_ConvertorWellLog[pConvertor].size();
pInterface->GetDataSelectAreaWidget()->setColumnCount(fileHead.size());
pInterface->GetDataSelectAreaWidget()->setRowCount(iRow);
for (int i=0;i<fileHead.size();i++)
{
if(i==0) pInterface->GetDataSelectAreaWidget()->setColumnWidth(i,150);
if(i==1) pInterface->GetDataSelectAreaWidget()->setColumnWidth(i,80);
if(i==2) pInterface->GetDataSelectAreaWidget()->setColumnWidth(i,80);
if(i==3) pInterface->GetDataSelectAreaWidget()->setColumnWidth(i,150);
if (i==4)
{
pInterface->GetDataSelectAreaWidget()->setColumnWidth(i,80);
}
pInterface->GetDataSelectAreaWidget()->horizontalHeader()->setStretchLastSection(true);
}
//pInterface->m_pInterfaceUI->widget->setFixedWidth(560);
pInterface->GetDataSelectAreaWidget()->setHorizontalHeaderLabels(fileHead);
QHeaderView* headerView = pInterface->GetDataSelectAreaWidget()->verticalHeader();
//headerView->setHidden(true);
pInterface->GetDataSelectAreaWidget()->setAlternatingRowColors(true);
pInterface->GetDataSelectAreaWidget()->setSelectionBehavior(QAbstractItemView::SelectRows);
for (int i=0;i<iRow;++i)
{
QTableWidgetItem *head=new QTableWidgetItem(QTableWidgetItem::Type);
head->setCheckState(Qt::Checked); //加入复选框
head->setFlags(head->flags() ^ Qt::ItemIsEditable);
head->setText(CurveNames[i]);//曲线名
pInterface->GetDataSelectAreaWidget()->setItem(i,0,head); //插入该Item
QString unit=QString::fromLocal8Bit(CurveUnits[i]);
pInterface->GetDataSelectAreaWidget()->setItem(i,1,new QTableWidgetItem(unit));//导入曲线单位
pInterface->GetDataSelectAreaWidget()->setItem(i,2,new QTableWidgetItem(""));//family));//
pInterface->GetDataSelectAreaWidget()->setItem(i,3,new QTableWidgetItem(CurveNames[i]));//导入曲线名
pInterface->GetDataSelectAreaWidget()->setItem(i,4,new QTableWidgetItem(unit));//导入曲线单位
//whp add 2019.8.1 for 设置输入曲线单位列为只读
auto rFlags = pInterface->GetDataSelectAreaWidget()->item(i,1)->flags();
pInterface->GetDataSelectAreaWidget()->item(i,1)->setFlags(rFlags & (~Qt::ItemIsEditable));
iOrder++;
}
}
bool ImportDataDialog::IsHaveSameCurve(int NumLog,vector<int> &OutCurveNo,vector<char*> &OutCurve)
{
QString str,mes="";
int SameNameCurveNum=0;
QStringList ExistName;
for(int i=0;i<NumLog-1;i++)
{
if(OutCurveNo[i]<0)continue;
if(ExistName.indexOf(QString(OutCurve[i]))>=0)continue;
int no=0;
str="\r\n"+QString::number(i+1)+"条和第";
for(int j=i+1;j<NumLog;j++)
{
if((strcmp(OutCurve[i],OutCurve[j])==0)&&(OutCurveNo[j]>=0))
{
if(no>0)str+="";
str+=QString::number(j+1);
no++;
}
}
if(no==0)continue;
ExistName.append(QString(QLatin1String(OutCurve[i])));
SameNameCurveNum++;
if(SameNameCurveNum<30) mes+=str+"条输出曲线名字为"+QString(QLatin1String(OutCurve[i]));
else if(SameNameCurveNum==30) mes+="\n重名>=30条...";
}
if(SameNameCurveNum>0)
{
/*str=CString("您所选择的解编曲线中存在下列同名曲线,请修改同名曲线,然后再解编\r\n\r\n")+mes;
AfxMessageBox(str);
return 1;*/
QString inf="您所选择的解编曲线中存在下列同名曲线:\r\n\r\n"+mes+"\r\n\r\n是否对同名曲线进行解编?";
QMessageBox box(QMessageBox::Warning,"提示",mes);
box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
box.setButtonText (QMessageBox::Yes,QString("自动重命名"));
box.setButtonText (QMessageBox::No,QString("跳过同名曲线"));
box.setButtonText (QMessageBox::Cancel,QString("返回、修改"));
int ret=box.exec();
if(ret==QMessageBox::Cancel)return 1;
QStringList OutCurveList;
for(int i=0;i<NumLog-1;i++)
{
if(OutCurveNo[i]>=0)
{
int no=1;
for(int j=i+1;j<NumLog;j++)
{
if(OutCurveNo[j]<0)continue;
if((strcmp(OutCurve[i],OutCurve[j])==0))
{
if(ret==QMessageBox::No)OutCurveNo[j]=-1;
else
{
QString newname=QString(OutCurve[i])+"_"+QString::number(no++);
delete OutCurve[j];
OutCurve[j]=new char[strlen(newname.toStdString().c_str())+1];
strcpy(OutCurve[j],newname.toStdString().c_str());
}
}
}
}
}
}
return 0;
}
// int ImportDataDialog::CheckExistCurve(QString filename,int NumLog,vector<int>& OutCurveNo,vector<char*>& OutCurve)
// { //1-有输出曲线需要继续输出0-经跳过功能后,没有曲线要输出了,-1退回原界面
// CMemRdWt *logio=new CMemRdWt();
// if(!logio->Open(filename.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// return 1;
// }
// CString str,mes="";
// vector<int> ExistCurveNo;
// vector<char*> ExistCurve;
// int ExistCurveNum=0;
// for(int i=0;i<NumLog;i++)
// {
// if(OutCurveNo[i]<0)continue;
// int hh=logio->FindObjectName(OutCurve[i],-1,-1,OBJECT_NORMAL);
// if(logio->FindObjectName(OutCurve[i],-1,-1,OBJECT_NORMAL)<0)continue;
// ExistCurve.push_back(OutCurve[i]);
// ExistCurveNo.push_back(i);
// }
// if(ExistCurve.size()==0)
// {
// delete logio;
// return 1;
// }
// TiShiDialog *dlg=new TiShiDialog(NULL);
// dlg->init(ExistCurve);
// if(dlg->exec()==Accepted)
// {
// if(dlg->flag==0)//跳过
// {
// for(int i=0;i<ExistCurve.size();i++)
// {
// int nn=ExistCurveNo[i];
// OutCurveNo[ExistCurveNo[i]]=-1;
// }
// }
// else if(dlg->flag==1)//替换
// {
// for(int i=0;i<ExistCurve.size();i++)
// {
// logio->DiscardObject(ExistCurve[i]);
// }
// }
// else if(dlg->flag==3)//另存
// {
// QStringList OutCurveList;
// for(int i=0;i<logio->GetObjectCount();i++)
// {
// char name[64];
// if(logio->GetObjectStatus(i)!=OBJECT_NORMAL)continue;
// logio->GetObjectName(i,name);
// OutCurveList.append(QString(name));
// }
// for(int i=0;i<ExistCurve.size();i++)
// {
// QString name1,name=QString(ExistCurve[i])+"_";
// for(int j=0;j<100;j++)
// {
// name1=name+QString::number(j+1);
// if(OutCurveList.indexOf(name1)<0)break;
// }
// char *temp = new char[name1.toStdString().size()+1];
// strcpy(temp, name1.toStdString().c_str());
// strcpy(OutCurve[ExistCurveNo[i]],temp);//name1->toStdString()->c_str());
// delete temp;
// }
// }
// delete logio;
// delete dlg;
// }
// else
// {
// delete logio;
// delete dlg;
// return -1;
// }
// for(int i=0;i<NumLog;i++)
// {
// if(OutCurveNo[i]>=0) return 1;
// }
// return 0;
// }
bool ImportDataDialog::SelectAndDeleteWellLog(int iRow,InterfaceWidget *pCurrentInterfaceWidget,int ColumnCount,IConvertor *pConvertor)
{
InterIConvertor*tpConvertor=dynamic_cast<InterIConvertor*>(pConvertor);
if(!tpConvertor) return true;
QString outputfilename=GenerateSlfFileName(pCurrentInterfaceWidget);
if(outputfilename=="") {
QMessageBox::about(NULL,"提示","请先输入井名!");
return 1;
}
vector<int> OutCurveNo;
vector<char*> OutCurve;
vector<char*> strChineseName;
vector<char*> strUnit;
QLineEdit *edittop=pCurrentInterfaceWidget->GetEditTopDepth();
QLineEdit *editbottom=pCurrentInterfaceWidget->GetEditBottomDepth();
QTableWidget *tableWidget=pCurrentInterfaceWidget->GetDataSelectAreaWidget();
iRow=tableWidget->rowCount();
for (int i=0;i<iRow;i++)
{
Qt::CheckState eState=Qt::Unchecked;
if(!tableWidget->item(i,0)) {
char *curvename = new char[10];
strcpy(curvename, "ERROR");
OutCurve.push_back(curvename);
strChineseName.push_back(curvename);
char *curveunit = new char[10];
strcpy(curveunit,"");
strUnit.push_back(curveunit);
OutCurveNo.push_back(-1);
continue;
}
eState=tableWidget->item(i,0)->checkState();
if (eState==Qt::Checked)
{
//修改曲线单位
OutCurveNo.push_back(i);
}
else OutCurveNo.push_back(-1);
QString tstr=tableWidget->item(i,3)->text();
char *curvename = new char[strlen(tstr.toStdString().c_str())+10];
strcpy(curvename,tstr.toStdString().c_str());
OutCurve.push_back(curvename);
strChineseName.push_back(curvename);
tstr=tableWidget->item(i,4)->text();
char *curveunit = new char[strlen(tstr.toStdString().c_str())+10];
strcpy(curveunit,tstr.toStdString().c_str());
strUnit.push_back(curveunit);
}
if(tpConvertor->m_TableName.isEmpty()&&IsHaveSameCurve(iRow,OutCurveNo,OutCurve)){
for(int i=0;i<OutCurveNo.size();i++)
{
delete OutCurve[i];
delete strUnit[i];
}
return 1;
}
int HaveOut=1;
if(tpConvertor->m_TableName.isEmpty()) {
//HaveOut=CheckExistCurve(outputfilename,iRow,OutCurveNo,OutCurve);
}
else {
vector<int> OutCurveNo;
vector<char*> OutCurve;
OutCurveNo.push_back(0);
char *buf=new char[strlen(tpConvertor->m_TableName.toStdString().c_str())+1];
strcpy(buf,tpConvertor->m_TableName.toStdString().c_str());
OutCurve.push_back(buf);
// HaveOut=CheckExistCurve(outputfilename,1,OutCurveNo,OutCurve);
delete buf;
}
if(HaveOut==0){
for(int i=0;i<OutCurveNo.size();i++)
{
delete OutCurve[i];
delete strUnit[i];
}
return 0;
}
else if(HaveOut<0)
{
for(int i=0;i<OutCurveNo.size();i++)
{
delete OutCurve[i];
delete strUnit[i];
}
return 1;
}
//此时测井专业模块开始执行输出为slf文件
char *outfile = new char[outputfilename.toStdString().size()+300];
strcpy(outfile, outputfilename.toStdString().c_str());
char *logfilename = new char[m_FilePath.toStdString().size()+1];
strcpy(logfilename, m_FilePath.toStdString().c_str());
QLineEdit * xEdit=pCurrentInterfaceWidget->GetXCodeLineEdit();
QLineEdit * yEdit=pCurrentInterfaceWidget->GetYCodeLineEdit();
int l=strlen(outfile)+1;
strcpy(&outfile[l],xEdit->text().toStdString().c_str());//x坐标
l+=strlen(&outfile[l])+1;
strcpy(&outfile[l],yEdit->text().toStdString().c_str());//y坐标
QString top=edittop->text();
l+=strlen(&outfile[l])+1;
strcpy(&outfile[l],top.toStdString().c_str());//y坐标
QString bottom=editbottom->text();
l+=strlen(&outfile[l])+1;
strcpy(&outfile[l],bottom.toStdString().c_str());//y坐标
//TODO
l+=strlen(&outfile[l])+1;
*(int*)&outfile[l]=iRow;
if(((InterIConvertor*)(pCurrentInterfaceWidget->m_pConvertor))->Transfer(logfilename,outfile,&OutCurveNo[0],&OutCurve[0],&strChineseName[0],&strUnit[0],iRow))
{
MyWelllogRound *wellRound=pCurrentInterfaceWidget->m_pConvertor->GetWellLogRoundInfo();
if(wellRound) {
((InterIConvertor*)(pCurrentInterfaceWidget->m_pConvertor))->InitWellInfo(outfile);
wellRound->SaveMeesge(outfile);
}
//CDataImport::ChangetoSlf(outfile,NULL);
}
for(int i=0;i<OutCurveNo.size();i++)
{
delete OutCurve[i];
delete strUnit[i];
}
delete []logfilename;
delete []outfile;
return 0;
}
QString ImportDataDialog::GenerateSlfFileName(InterfaceWidget *pCurrentInterfaceWidget)
{
QString wellname=pCurrentInterfaceWidget->GetWellNameLineEdit()->text();
if(wellname.isEmpty()) return "";
wellname=wellname.toUpper();
QString filename=pCurrentInterfaceWidget->GetWellRoundNameLineEdit()->text();
if(filename.isEmpty()) filename=wellname;
filename=filename.toUpper();
// //CObjProject *pPrj=::GetProject();
// if(!m_CurrentWellRoundName.isEmpty()) {
// int ret=QMessageBox::No;
// if(m_CurrentWellRoundName.compare(filename,Qt::CaseInsensitive)!=0)
// {
// ret=QMessageBox::warning(NULL,"提示","输入文件名与选中的井次名不一致,您确信要创建新井名?",QMessageBox::Yes,QMessageBox::No);
// }
// if(ret==QMessageBox::No) {
// CObjWelllogRound *pWR=dynamic_cast<CObjWelllogRound*>(pPrj->GetObjectByName(m_CurrentWellRoundName,GetClassID_WellLogRound()));
// if(pWR)
// {
// QString welln=pWR->GetSlfFileName();
// if(!welln.isEmpty()) return welln;
// }
// }
// }
// PaiObject *pObj=pPrj->GetObjectByName(wellname,GetClassID_Well());
// CObjWell *pWell=dynamic_cast<CObjWell *>(pObj);
// if(pWell) {
// QString slf=pWell->GetWellMessageFileName();
// QString welln,path;
// GetWellNameAndPath(slf,welln,path);
// welln=path+"\\"+filename;
// welln+=".slf";
// filename=welln;
// return welln;
// }
/*
//Type(GetClassID_WellsFolder());
QList<PaiObject *> childs;
pObj->GetChildren(childs);
int wellnum=childs.count();
foreach(PaiObject *pChild,childs)
{
CObjWell *pWell=dynamic_cast<CObjWell*>(pChild);
if(pWell)
{
QString well=pWell->GetName().toUpper();
if(well==wellname)
{
QList<PaiObject *> childsRound;
pChild->GetChildren(childsRound);
foreach(PaiObject *pChildRound,childsRound)
{
CObjWelllogRound *pWellRound=dynamic_cast<CObjWelllogRound*>(pChildRound);
if(pWellRound)
{
QString file=pWellRound->GetName().toUpper();
if(file==filename)
{
QString outname=pWellRound->GetSlfFileName();
return outname;
}
}
}
}
}
}
#pragma endregion 检查该井名文件名是否存在
*/
// QString strWellName="";
// CObjProject *pProject = ::GetProject();
// if(pProject != NULL)
// {
// strWellName = pProject->GetName();
// }
// QString dir=::GetLogdataPath();
// QDir w;
// if(!strWellName.isEmpty()) {
// dir=dir+strWellName;
// w.mkdir(dir);
// dir+=QDir::separator();
// }
// dir+="#"+wellname;
// bool a=w.mkdir(dir);
// QFileInfo temDir(filename);
// QString tempWellName=temDir.completeBaseName();
// QString ss=dir+QDir::separator()+tempWellName+".slf";
// return ss;
// "D:/LogPlus/LogData/例子2/#JPH-307-1/JPH-307-1.slf";
// QString wellSlfFile = "D:/LogPlus/LogData/";
// wellSlfFile +=m_projectname + "/"+"#"+wellname + "/" + filename +".slf";
QString wellSlfFile = GetLogdataPath() +m_projectname + "/"+"#"+wellname + "/" + filename +".slf";
return wellSlfFile;
}
END_OSGGRAPHICS_NAMESPACE;