317 lines
8.6 KiB
C++
317 lines
8.6 KiB
C++
|
|
/**
|
|||
|
|
* @file PaiObjectBrowser.cpp
|
|||
|
|
* @brief 一个支持P.A.I系统对象浏览选择及输入(包括拖拽)的复合文本框
|
|||
|
|
* @date: 2012-3-1
|
|||
|
|
* @author: sinapec
|
|||
|
|
*/
|
|||
|
|
#include <QDropEvent>
|
|||
|
|
#include <QMimeData>
|
|||
|
|
#include <QDebug>
|
|||
|
|
#include <QCompleter>
|
|||
|
|
#include <QStringListModel>
|
|||
|
|
#include <QApplication>
|
|||
|
|
#include "PaiObjectBrowser.h"
|
|||
|
|
// #include "PaiDataMaster.h"
|
|||
|
|
// #include "PaiSeisData.h"
|
|||
|
|
// #include "PaiHorizon.h"
|
|||
|
|
// #include "PaiDropEventAnalyser.h"
|
|||
|
|
// #include "PaiSurvey.h"
|
|||
|
|
// #include "PaiProject.h"
|
|||
|
|
#include "WorkflowConst.h"
|
|||
|
|
#include "PaiValidator.h"
|
|||
|
|
// #include "Log.h"
|
|||
|
|
// #include "PaiJob.h"
|
|||
|
|
#include "SaveHelper.h"
|
|||
|
|
// #include "PaiTypes.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
using namespace pai::gui;
|
|||
|
|
using namespace pai::objectmodel;
|
|||
|
|
|
|||
|
|
void SetValidator(bool isObjectInput, PaiLineEdit *pLineEdit)
|
|||
|
|
{
|
|||
|
|
if(pLineEdit)
|
|||
|
|
{
|
|||
|
|
if (isObjectInput == false)
|
|||
|
|
{
|
|||
|
|
QRegExp regExp("(^[\u4e00-\u9fa50-9a-zA-Z_\\-\\.]+)|(^$)");
|
|||
|
|
QRegExpValidator *dator = new QRegExpValidator(regExp,pLineEdit);
|
|||
|
|
pLineEdit->setValidator(dator);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
QRegExp regExp("(^[\u4e00-\u9fa50-9a-zA-Z_\\-\\.\\/\\ \\:]+)|(^$)");
|
|||
|
|
QRegExpValidator *dator = new QRegExpValidator(regExp,pLineEdit);
|
|||
|
|
pLineEdit->setValidator(dator);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CPaiObjectBrowser::CPaiObjectBrowser(const QList<QUuid>& lstObjectTypeIDs,QWidget* pParent)
|
|||
|
|
: PaiLineEdit(pParent)
|
|||
|
|
, CParameterItemControl(NULL)
|
|||
|
|
, m_strData("")
|
|||
|
|
, m_pCompleterModel(NULL)
|
|||
|
|
, m_strOldText("")
|
|||
|
|
{
|
|||
|
|
SetRightIcon(":/arrow02.png");
|
|||
|
|
m_lstObjectTypeIDs = lstObjectTypeIDs;
|
|||
|
|
|
|||
|
|
m_pCompleterModel = new QStringListModel();
|
|||
|
|
QCompleter* pCompleter = new QCompleter(m_pCompleterModel,this);
|
|||
|
|
pCompleter->setCompletionMode(QCompleter::PopupCompletion);
|
|||
|
|
setCompleter(pCompleter);
|
|||
|
|
setPlaceholderText(g_szInputPlaceholder);
|
|||
|
|
SetValidator(true, this);
|
|||
|
|
|
|||
|
|
connect(this,SIGNAL(textEdited(const QString&)),this,SLOT(slotOnTextEdited(const QString&)));
|
|||
|
|
connect(this,SIGNAL(rightIconClicked()),this,SLOT(slotBrowseAllData()));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CPaiObjectBrowser::~CPaiObjectBrowser()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
QString CPaiObjectBrowser::GetData()
|
|||
|
|
{
|
|||
|
|
if(m_strData == "")
|
|||
|
|
{
|
|||
|
|
if(m_mapTexts.contains(text().trimmed()))
|
|||
|
|
{
|
|||
|
|
m_strData = m_mapTexts[text().trimmed()];
|
|||
|
|
return m_strData;
|
|||
|
|
}
|
|||
|
|
return text().trimmed();
|
|||
|
|
}
|
|||
|
|
return m_strData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPaiObjectBrowser::SetData(const QString& strData)
|
|||
|
|
{
|
|||
|
|
// if (m_lstObjectTypeIDs.contains(PaiHorizon::GetTypeIDString()) && (m_strData != strData))
|
|||
|
|
// {
|
|||
|
|
// emit signalLayerPickFileChanged(strData);
|
|||
|
|
// }
|
|||
|
|
// m_strData = strData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
QVariant CPaiObjectBrowser::GetDisplayValue() const
|
|||
|
|
{
|
|||
|
|
return text().trimmed();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
QVariant CPaiObjectBrowser::GetValue() const
|
|||
|
|
{
|
|||
|
|
CPaiObjectBrowser* pThis = const_cast<CPaiObjectBrowser*>(this);
|
|||
|
|
return pThis->GetData();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPaiObjectBrowser::SetDisplayValue(const QVariant& varDisplayValue)
|
|||
|
|
{
|
|||
|
|
setText(varDisplayValue.toString());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPaiObjectBrowser::SetValue(const QVariant& varValue)
|
|||
|
|
{
|
|||
|
|
SetData(varValue.toString());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPaiObjectBrowser::dropEvent ( QDropEvent *pEvent)
|
|||
|
|
{
|
|||
|
|
// PaiDropEventAnalyser dropAna(pEvent->mimeData());
|
|||
|
|
// if(!dropAna.IsAvailable())
|
|||
|
|
// {
|
|||
|
|
// pEvent->ignore();
|
|||
|
|
// return;
|
|||
|
|
// }
|
|||
|
|
// //获取解析后的拖拽数据
|
|||
|
|
// QList<DraggedData>dataLst = dropAna.GetDraggedData();
|
|||
|
|
// foreach(DraggedData draggedData, dataLst)
|
|||
|
|
// {
|
|||
|
|
// //如果是不支持的类型,直接忽略
|
|||
|
|
// if(!m_lstObjectTypeIDs.contains(QUuid(draggedData.dataType)))
|
|||
|
|
// {
|
|||
|
|
// pEvent->ignore();
|
|||
|
|
// return;
|
|||
|
|
// }
|
|||
|
|
// //获取数据指针
|
|||
|
|
// bool ok;
|
|||
|
|
// PaiGeoObject* pDragSeisData = dynamic_cast<PaiGeoObject*>(::GetObjectModelService()->GetObject((draggedData.id).toLongLong(&ok)));
|
|||
|
|
// if(pDragSeisData && ok)
|
|||
|
|
// {
|
|||
|
|
// if (dynamic_cast<PaiDataMaster *>(pDragSeisData->GetParent())
|
|||
|
|
// || !dynamic_cast<PaiSeisData *>(pDragSeisData))
|
|||
|
|
// {
|
|||
|
|
// setText(pDragSeisData->GetPhysicalFile());
|
|||
|
|
// }
|
|||
|
|
// else
|
|||
|
|
// {
|
|||
|
|
// PaiSurvey* pSurvey = pDragSeisData->GetForebear<PaiSurvey>();
|
|||
|
|
// if(pSurvey)
|
|||
|
|
// {
|
|||
|
|
// PaiBaseMaster *pMaster = pSurvey->GetMaster(QUuid(pai::objectmodel::PaiDataMaster::GetTypeIDString()));
|
|||
|
|
// if (pMaster)
|
|||
|
|
// {
|
|||
|
|
// setText(pMaster->GetFullPathName() + "/" + pDragSeisData->GetName());
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// SetData(pDragSeisData->GetPhysicalFile());
|
|||
|
|
// }
|
|||
|
|
// setFocus();
|
|||
|
|
// // commit data as soon as the data has been dropped
|
|||
|
|
// emit QLineEdit::editingFinished();
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
void CPaiObjectBrowser::dragEnterEvent ( QDragEnterEvent *pEvent)
|
|||
|
|
{
|
|||
|
|
// PaiLineEdit::dragEnterEvent(pEvent);
|
|||
|
|
// PaiDropEventAnalyser dropAna(pEvent->mimeData());
|
|||
|
|
// //获取解析后的拖拽数据
|
|||
|
|
// QList<DraggedData>dataLst = dropAna.GetDraggedData();
|
|||
|
|
// bool bHasValidType = false;
|
|||
|
|
// foreach(DraggedData draggedData, dataLst)
|
|||
|
|
// {
|
|||
|
|
// if(m_lstObjectTypeIDs.contains(QUuid(draggedData.dataType)))
|
|||
|
|
// {
|
|||
|
|
// bHasValidType = true;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// if(!bHasValidType)
|
|||
|
|
// {
|
|||
|
|
// pEvent->ignore();
|
|||
|
|
// return;
|
|||
|
|
// }
|
|||
|
|
// pEvent->accept();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void CPaiObjectBrowser::BuildCompleteModel()
|
|||
|
|
{
|
|||
|
|
// QList<PaiObject*> lstObjs;
|
|||
|
|
|
|||
|
|
// foreach(QUuid objTypeID,m_lstObjectTypeIDs)
|
|||
|
|
// {
|
|||
|
|
// QList<PaiObject*> lstObjsForThisType;
|
|||
|
|
// ::GetObjectModelService()->GetObjectByType(lstObjsForThisType,objTypeID);
|
|||
|
|
// lstObjs.append(lstObjsForThisType);
|
|||
|
|
// }
|
|||
|
|
// m_mapTexts.clear();
|
|||
|
|
// foreach(PaiObject* pObj, lstObjs)
|
|||
|
|
// {
|
|||
|
|
// PaiGeoObject* pGeoObject = dynamic_cast<PaiGeoObject*>(pObj);
|
|||
|
|
// if (pGeoObject != NULL)
|
|||
|
|
// {
|
|||
|
|
// PaiJob *pJob = dynamic_cast<PaiJob *>(pGeoObject->GetParent());
|
|||
|
|
// if (pJob)
|
|||
|
|
// {
|
|||
|
|
// continue;
|
|||
|
|
// }
|
|||
|
|
// m_mapTexts.insert(pGeoObject->GetFullPathName(),pGeoObject->GetPhysicalFile());
|
|||
|
|
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// m_pCompleterModel->setStringList(m_mapTexts.keys());
|
|||
|
|
}
|
|||
|
|
void CPaiObjectBrowser::focusInEvent ( QFocusEvent * e )
|
|||
|
|
{
|
|||
|
|
PaiLineEdit::focusInEvent(e);
|
|||
|
|
BuildCompleteModel();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void CPaiObjectBrowser::focusOutEvent ( QFocusEvent * e )
|
|||
|
|
{
|
|||
|
|
if(m_mapTexts.contains(text().trimmed()))
|
|||
|
|
{
|
|||
|
|
SetData(m_mapTexts[text().trimmed()]);
|
|||
|
|
}
|
|||
|
|
PaiLineEdit::focusOutEvent(e);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPaiObjectBrowser::slotOnTextEdited(const QString& strNewText)
|
|||
|
|
{
|
|||
|
|
if(text().isEmpty() || !m_strOldText.startsWith(strNewText))
|
|||
|
|
{
|
|||
|
|
SetData("");
|
|||
|
|
}
|
|||
|
|
m_strOldText = strNewText;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CPaiObjectBrowser::slotBrowseAllData()
|
|||
|
|
{
|
|||
|
|
m_strOldValue = text();
|
|||
|
|
clear();
|
|||
|
|
QString path("/");
|
|||
|
|
QKeyEvent keyPress(QEvent::KeyPress,Qt::Key_Slash,Qt::NoModifier,path);
|
|||
|
|
QApplication::sendEvent(this,&keyPress);
|
|||
|
|
QKeyEvent keyRelease(QEvent::KeyRelease,Qt::Key_Slash,Qt::NoModifier,path);
|
|||
|
|
QApplication::sendEvent(this,&keyRelease);
|
|||
|
|
setText(m_strOldValue);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CHdfsFileEditor::CHdfsFileEditor(const QUuid& workflowID, QWidget* pParent)
|
|||
|
|
:PaiLineEdit(pParent),CParameterItemControl(NULL), m_workflowID(workflowID)
|
|||
|
|
{
|
|||
|
|
setPlaceholderText(g_szOutputPlaceholder);
|
|||
|
|
SetValidator(false, this);
|
|||
|
|
//文件输入最多100字符限制
|
|||
|
|
setMaxLength(100);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CHdfsFileEditor::~CHdfsFileEditor()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
QString CHdfsFileEditor::GetData()
|
|||
|
|
{
|
|||
|
|
return "";
|
|||
|
|
// if(text().trimmed().isEmpty())
|
|||
|
|
// {
|
|||
|
|
// return "";
|
|||
|
|
// }
|
|||
|
|
// QString value("");
|
|||
|
|
// PaiObject* pWorkflow = ::GetObjectModelService()->GetObject(QUuid(m_workflowID));
|
|||
|
|
// pai::log::Debug(_FLF("m_workflowID is " + m_workflowID.toString().toStdString()));
|
|||
|
|
|
|||
|
|
// if(pWorkflow == NULL)
|
|||
|
|
// {
|
|||
|
|
// return QString("/") + text().trimmed();
|
|||
|
|
// }
|
|||
|
|
// PaiSurvey *pSurvey = SaveHelper::GetSurveyByWfDBID(pWorkflow->GetDBID());
|
|||
|
|
// if(pSurvey == NULL)
|
|||
|
|
// {
|
|||
|
|
// return QString("/") + text().trimmed();
|
|||
|
|
// }
|
|||
|
|
// value.append(pSurvey->GetPhysicalFile());
|
|||
|
|
// value.append("/");
|
|||
|
|
// value.append(text().trimmed());
|
|||
|
|
// return value;
|
|||
|
|
}
|
|||
|
|
QVariant CHdfsFileEditor::GetDisplayValue() const
|
|||
|
|
{
|
|||
|
|
return text().trimmed();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
QVariant CHdfsFileEditor::GetValue() const
|
|||
|
|
{
|
|||
|
|
CHdfsFileEditor* pThis = const_cast<CHdfsFileEditor*>(this);
|
|||
|
|
|
|||
|
|
if(pThis != NULL)
|
|||
|
|
{
|
|||
|
|
return pThis->GetData();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return QVariant();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
void CHdfsFileEditor::SetDisplayValue(const QVariant& varDisplayValue)
|
|||
|
|
{
|
|||
|
|
setText(varDisplayValue.toString());
|
|||
|
|
}
|
|||
|
|
void CHdfsFileEditor::SetValue(const QVariant& /*varValue*/)
|
|||
|
|
{
|
|||
|
|
}
|