Updated riGetSelectedCases to use a string as type name

Improved how to get currently selected cases
p4#: 21625
This commit is contained in:
Magne Sjaastad 2013-05-15 12:03:36 +02:00
parent b5f5f49572
commit 97c3a330f6
7 changed files with 88 additions and 64 deletions

View File

@ -785,11 +785,7 @@ void RimUiTreeView::slotCloseCase()
caf::PdmObjectGroup group;
QModelIndexList mil = m->selectedRows();
for (int i = 0; i < mil.size(); i++)
{
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(mil.at(i));
group.addObject(uiItem->dataObject().p());
}
populateObjectGroupFromModelIndexList(mil, &group);
std::vector<caf::PdmPointer<RimCase> > typedObjects;
group.objectsByType(&typedObjects);
@ -928,11 +924,7 @@ void RimUiTreeView::createPdmObjectsFromClipboard(caf::PdmObjectGroup* objectGro
if (!mdWithIndexes) return;
QModelIndexList indexList = mdWithIndexes->indexes();
for (int i = 0; i < indexList.size(); i++)
{
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(indexList.at(i));
objectGroup->addObject(uiItem->dataObject().p());
}
populateObjectGroupFromModelIndexList(indexList, objectGroup);
}
//--------------------------------------------------------------------------------------------------
@ -1465,3 +1457,24 @@ void RimUiTreeView::slotToggleItemsOff()
executeSelectionToggleOperation(TOGGLE_OFF);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimUiTreeView::populateObjectGroupFromModelIndexList(const QModelIndexList& modelIndexList, caf::PdmObjectGroup* objectGroup)
{
CVF_ASSERT(objectGroup);
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
if (!myModel) return;
for (int i = 0; i < modelIndexList.size(); i++)
{
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(modelIndexList.at(i));
if (uiItem && uiItem->dataObject() && uiItem->dataObject().p())
{
objectGroup->addObject(uiItem->dataObject().p());
}
}
}

View File

@ -46,6 +46,8 @@ public:
void applyTreeViewStateFromString(const QString& treeViewState);
void storeTreeViewStateToString(QString& treeViewState);
void populateObjectGroupFromModelIndexList(const QModelIndexList& modelIndexList, caf::PdmObjectGroup* objectGroup);
static void applyCurrentIndexFromString(QAbstractItemView& itemView, const QString& currentIndexString);
static void storeCurrentIndexToString(const QAbstractItemView& itemView, QString& currentIndexString);

View File

@ -297,10 +297,7 @@ void RiaSocketServer::readCommandFromOctave()
if (reservoir)
{
caseId = reservoir->caseId();
caseName = reservoir->caseUserDescription();
caseInfo(reservoir, caseGroupId, caseType);
getCaseInfoFromCase(reservoir, caseId, caseName, caseType, caseGroupId);
}
quint64 byteCount = 2*sizeof(qint64);
@ -362,20 +359,24 @@ void RiaSocketServer::readCommandFromOctave()
RiuMainWindow* ruiMainWindow = RiuMainWindow::instance();
if (ruiMainWindow)
{
std::vector<RimCase*> cases;
ruiMainWindow->selectedCases(cases);
std::vector<qint64> caseIds;
std::vector<QString> caseNames;
std::vector<qint64> caseTypes;
std::vector<QString> caseTypes;
std::vector<qint64> caseGroupIds;
ruiMainWindow->selectionInfo(caseIds, caseNames, caseTypes, caseGroupIds);
getCaseInfoFromCases(cases, caseIds, caseNames, caseTypes, caseGroupIds);
quint64 byteCount = sizeof(quint64);
quint64 selectionCount = caseIds.size();
for (size_t i = 0; i < selectionCount; i++)
{
byteCount += 2*sizeof(qint64);
byteCount += caseNames[i].size() * sizeof(QChar);
byteCount += 3*sizeof(qint64);
byteCount += caseTypes[i].size() * sizeof(QChar);
}
socketStream << byteCount;
@ -443,19 +444,7 @@ void RiaSocketServer::readCommandFromOctave()
std::vector<QString> caseTypes;
std::vector<qint64> caseGroupIds;
for (size_t i = 0; i < cases.size(); i++)
{
RimCase* rimCase = cases[i];
qint64 caseGroupId;
QString caseType;
caseInfo(rimCase, caseGroupId, caseType);
caseIds.push_back(rimCase->caseId);
caseNames.push_back(rimCase->caseUserDescription);
caseTypes.push_back(caseType);
caseGroupIds.push_back(caseGroupId);
}
getCaseInfoFromCases(cases, caseIds, caseNames, caseTypes, caseGroupIds);
quint64 byteCount = sizeof(quint64);
quint64 caseCount = caseIds.size();
@ -910,10 +899,13 @@ void RiaSocketServer::calculateMatrixModelActiveCellInfo(RimCase* reservoirCase,
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaSocketServer::caseInfo(RimCase* rimCase, qint64& caseGroupId, QString& caseType)
void RiaSocketServer::getCaseInfoFromCase(RimCase* rimCase, qint64& caseId, QString& caseName, QString& caseType, qint64& caseGroupId)
{
CVF_ASSERT(rimCase);
caseId = rimCase->caseId;
caseName = rimCase->caseUserDescription;
RimCaseCollection* caseCollection = rimCase->parentCaseCollection();
if (caseCollection)
{
@ -943,3 +935,25 @@ void RiaSocketServer::caseInfo(RimCase* rimCase, qint64& caseGroupId, QString& c
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaSocketServer::getCaseInfoFromCases(std::vector<RimCase*>& cases, std::vector<qint64>& caseIds, std::vector<QString>& caseNames, std::vector<QString> &caseTypes, std::vector<qint64>& caseGroupIds)
{
for (size_t i = 0; i < cases.size(); i++)
{
RimCase* rimCase = cases[i];
qint64 caseId = -1;
QString caseName;
QString caseType;
qint64 caseGroupId = -1;
getCaseInfoFromCase(rimCase, caseId, caseName, caseType, caseGroupId);
caseIds.push_back(rimCase->caseId);
caseNames.push_back(rimCase->caseUserDescription);
caseTypes.push_back(caseType);
caseGroupIds.push_back(caseGroupId);
}
}

View File

@ -49,6 +49,7 @@ private slots:
private:
void readCommandFromOctave();
void readPropertyDataFromOctave();
@ -66,7 +67,13 @@ private:
std::vector<qint32>& hostCellJ,
std::vector<qint32>& hostCellK);
void caseInfo(RimCase* rimCase, qint64& caseGroupId, QString& caseType);
void getCaseInfoFromCase(RimCase* rimCase, qint64& caseId, QString& caseName, QString& caseType, qint64& caseGroupId);
void getCaseInfoFromCases( std::vector<RimCase*>& cases,
std::vector<qint64>& caseIds,
std::vector<QString>& caseNames,
std::vector<QString>& caseTypes,
std::vector<qint64>& caseGroupIds);
private:

View File

@ -1524,32 +1524,21 @@ void RiuMainWindow::updateScaleValue()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuMainWindow::selectionInfo(std::vector<qint64>& caseIds, std::vector<QString>& caseNames, std::vector<qint64>& caseTypes, std::vector<qint64>& caseGroupIds)
void RiuMainWindow::selectedCases(std::vector<RimCase*>& cases)
{
if (m_treeView && m_treeView->selectionModel())
{
QModelIndexList selectedModelIndexes = m_treeView->selectionModel()->selectedIndexes();
caf::PdmObjectGroup group;
m_treeView->populateObjectGroupFromModelIndexList(selectedModelIndexes, &group);
for (int i = 0; i < selectedModelIndexes.size(); i++)
std::vector<caf::PdmPointer<RimCase> > typedObjects;
group.objectsByType(&typedObjects);
for (size_t i = 0; i < typedObjects.size(); i++)
{
caf::PdmUiTreeItem* uiTreeItem = m_treeModelPdm->getTreeItemFromIndex(selectedModelIndexes[i]);
if (uiTreeItem && uiTreeItem->dataObject())
{
RimCase* rimCase = dynamic_cast<RimCase*>(uiTreeItem->dataObject().p());
if (rimCase)
{
caseIds.push_back(rimCase->caseId());
caseNames.push_back(rimCase->caseUserDescription());
caseTypes.push_back(-1);
qint64 caseGroupId = -1;
if (rimCase->parentGridCaseGroup())
{
caseGroupId = rimCase->parentGridCaseGroup()->groupId();
}
caseGroupIds.push_back(caseGroupId);
}
}
cases.push_back(typedObjects[i]);
}
}
}

View File

@ -40,6 +40,7 @@ class RiuResultInfoPanel;
class RiuProcessMonitor;
class RimUiTreeModelPdm;
class RimUiTreeView;
class RimCase;
namespace caf
{
@ -84,7 +85,7 @@ public:
void setCurrentObjectInTreeView(caf::PdmObject* object);
void selectionInfo(std::vector<qint64>& caseIds, std::vector<QString>& caseNames, std::vector<qint64>& caseTypes, std::vector<qint64>& caseGroupIds);
void selectedCases(std::vector<RimCase*>& cases);
protected:
virtual void closeEvent(QCloseEvent* event);

View File

@ -4,7 +4,7 @@
#include "riSettings.h"
void getSelectedCases(std::vector<qint64>& caseIds, std::vector<QString>& caseNames, std::vector<qint64>& caseTypes, std::vector<qint64>& caseGroupIds, const QString &hostName, quint16 port)
void getSelectedCases(std::vector<qint64>& caseIds, std::vector<QString>& caseNames, std::vector<QString>& caseTypes, std::vector<qint64>& caseGroupIds, const QString &hostName, quint16 port)
{
QString serverName = hostName;
quint16 serverPort = port;
@ -60,7 +60,7 @@ void getSelectedCases(std::vector<qint64>& caseIds, std::vector<QString>& caseNa
qint64 caseId = -1;
QString caseName;
qint64 caseType = -1;
QString caseType;
qint64 caseGroupId = -1;
for (size_t i = 0; i < selectionCount; i++)
@ -86,27 +86,25 @@ DEFUN_DLD (riGetSelectedCases, args, nargout,
"\n"
" riGetSelectedCases()\n"
"\n"
"Returns meta information for the Selected Case(s) in ResInsight.\n"
"This function returns a CaseInfo Structure for each of the cases selected in ResInsight at the time when the script was launched.\n"
)
{
octave_value_list retval;
int nargin = args.length ();
if (nargin > 0)
{
error("riGetCurrentCase: Too many arguments, this function does not take any arguments.\n");
error("riGetSelectedCases: Too many arguments, this function does not take any arguments.\n");
print_usage();
}
else if (nargout != 1)
{
error("riGetCurrentCase: Wrong number of output arguments, this function requires one output argument.\n");
error("riGetSelectedCases: Wrong number of output arguments, this function requires one output argument.\n");
print_usage();
}
else
{
std::vector<qint64> caseIds;
std::vector<QString> caseNames;
std::vector<qint64> caseTypes;
std::vector<QString> caseTypes;
std::vector<qint64> caseGroupIds;
getSelectedCases(caseIds, caseNames, caseTypes, caseGroupIds, "127.0.0.1", 40001);
@ -117,7 +115,7 @@ DEFUN_DLD (riGetSelectedCases, args, nargout,
caseCount != caseTypes.size() ||
caseCount != caseGroupIds.size())
{
error("riGetCurrentCase: Inconsistent data received from ResInsight.\n");
error("riGetSelectedCases: Inconsistent data received from ResInsight.\n");
}
else
{
@ -132,7 +130,7 @@ DEFUN_DLD (riGetSelectedCases, args, nargout,
{
cellValuesA(i) = caseIds[i];
cellValuesB(i) = caseNames[i].toLatin1().data();
cellValuesC(i) = caseTypes[i];
cellValuesC(i) = caseTypes[i].toLatin1().data();
cellValuesD(i) = caseGroupIds[i];
}
@ -149,6 +147,6 @@ DEFUN_DLD (riGetSelectedCases, args, nargout,
}
}
return retval;
return octave_value();
}