forked from teamnwah/openmw-tes3coop
remove deleted debug profiles from run tool
This commit is contained in:
parent
51128d2d57
commit
f913d51e35
4 changed files with 82 additions and 0 deletions
|
@ -42,6 +42,14 @@ CSVRender::WorldspaceWidget::WorldspaceWidget (CSMDoc::Document& document, QWidg
|
||||||
this, SLOT (referenceAboutToBeRemoved (const QModelIndex&, int, int)));
|
this, SLOT (referenceAboutToBeRemoved (const QModelIndex&, int, int)));
|
||||||
connect (references, SIGNAL (rowsInserted (const QModelIndex&, int, int)),
|
connect (references, SIGNAL (rowsInserted (const QModelIndex&, int, int)),
|
||||||
this, SLOT (referenceAdded (const QModelIndex&, int, int)));
|
this, SLOT (referenceAdded (const QModelIndex&, int, int)));
|
||||||
|
|
||||||
|
QAbstractItemModel *debugProfiles =
|
||||||
|
document.getData().getTableModel (CSMWorld::UniversalId::Type_DebugProfiles);
|
||||||
|
|
||||||
|
connect (debugProfiles, SIGNAL (dataChanged (const QModelIndex&, const QModelIndex&)),
|
||||||
|
this, SLOT (debugProfileDataChanged (const QModelIndex&, const QModelIndex&)));
|
||||||
|
connect (debugProfiles, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
|
||||||
|
this, SLOT (debugProfileAboutToBeRemoved (const QModelIndex&, int, int)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::WorldspaceWidget::selectNavigationMode (const std::string& mode)
|
void CSVRender::WorldspaceWidget::selectNavigationMode (const std::string& mode)
|
||||||
|
@ -248,6 +256,53 @@ void CSVRender::WorldspaceWidget::runRequest (const std::string& profile)
|
||||||
mDocument.startRunning (profile, getStartupInstruction());
|
mDocument.startRunning (profile, getStartupInstruction());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVRender::WorldspaceWidget::debugProfileDataChanged (const QModelIndex& topLeft,
|
||||||
|
const QModelIndex& bottomRight)
|
||||||
|
{
|
||||||
|
if (!mRun)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CSMWorld::IdTable& debugProfiles = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
|
*mDocument.getData().getTableModel (CSMWorld::UniversalId::Type_DebugProfiles));
|
||||||
|
|
||||||
|
int idColumn = debugProfiles.findColumnIndex (CSMWorld::Columns::ColumnId_Id);
|
||||||
|
int stateColumn = debugProfiles.findColumnIndex (CSMWorld::Columns::ColumnId_Modification);
|
||||||
|
|
||||||
|
for (int i=topLeft.row(); i<=bottomRight.row(); ++i)
|
||||||
|
{
|
||||||
|
int state = debugProfiles.data (debugProfiles.index (i, stateColumn)).toInt();
|
||||||
|
|
||||||
|
// As of version 0.33 this case can not happen because debug profiles exist only in
|
||||||
|
// project or session scope, which means they will never be in deleted state. But we
|
||||||
|
// are adding the code for the sake of completeness and to avoid surprises if debug
|
||||||
|
// profile ever get extended to content scope.
|
||||||
|
if (state==CSMWorld::RecordBase::State_Deleted)
|
||||||
|
mRun->removeProfile (debugProfiles.data (
|
||||||
|
debugProfiles.index (i, idColumn)).toString().toUtf8().constData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVRender::WorldspaceWidget::debugProfileAboutToBeRemoved (const QModelIndex& parent,
|
||||||
|
int start, int end)
|
||||||
|
{
|
||||||
|
if (parent.isValid())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!mRun)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CSMWorld::IdTable& debugProfiles = dynamic_cast<CSMWorld::IdTable&> (
|
||||||
|
*mDocument.getData().getTableModel (CSMWorld::UniversalId::Type_DebugProfiles));
|
||||||
|
|
||||||
|
int idColumn = debugProfiles.findColumnIndex (CSMWorld::Columns::ColumnId_Id);
|
||||||
|
|
||||||
|
for (int i=start; i<=end; ++i)
|
||||||
|
{
|
||||||
|
mRun->removeProfile (debugProfiles.data (
|
||||||
|
debugProfiles.index (i, idColumn)).toString().toUtf8().constData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CSVRender::WorldspaceWidget::elementSelectionChanged()
|
void CSVRender::WorldspaceWidget::elementSelectionChanged()
|
||||||
{
|
{
|
||||||
setVisibilityMask (getElementMask());
|
setVisibilityMask (getElementMask());
|
||||||
|
|
|
@ -113,6 +113,12 @@ namespace CSVRender
|
||||||
|
|
||||||
virtual void runRequest (const std::string& profile);
|
virtual void runRequest (const std::string& profile);
|
||||||
|
|
||||||
|
void debugProfileDataChanged (const QModelIndex& topLeft,
|
||||||
|
const QModelIndex& bottomRight);
|
||||||
|
|
||||||
|
void debugProfileAboutToBeRemoved (const QModelIndex& parent, int start, int end);
|
||||||
|
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
|
||||||
void elementSelectionChanged();
|
void elementSelectionChanged();
|
||||||
|
|
|
@ -33,3 +33,22 @@ void CSVWidget::SceneToolRun::showPanel (const QPoint& position)
|
||||||
if (mCurrentIndex!=-1)
|
if (mCurrentIndex!=-1)
|
||||||
emit runRequest (mProfiles[mCurrentIndex]);
|
emit runRequest (mProfiles[mCurrentIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVWidget::SceneToolRun::removeProfile (const std::string& profile)
|
||||||
|
{
|
||||||
|
std::pair<std::vector<std::string>::iterator, std::vector<std::string>::iterator>
|
||||||
|
result = std::equal_range (mProfiles.begin(), mProfiles.end(), profile);
|
||||||
|
|
||||||
|
if (result.first!=result.second)
|
||||||
|
{
|
||||||
|
mProfiles.erase (result.first);
|
||||||
|
|
||||||
|
if (mCurrentIndex>=static_cast<int> (mProfiles.size()))
|
||||||
|
--mCurrentIndex;
|
||||||
|
|
||||||
|
if (mCurrentIndex==-1)
|
||||||
|
updateIcon();
|
||||||
|
|
||||||
|
adjustToolTips();
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,6 +31,8 @@ namespace CSVWidget
|
||||||
|
|
||||||
virtual void showPanel (const QPoint& position);
|
virtual void showPanel (const QPoint& position);
|
||||||
|
|
||||||
|
void removeProfile (const std::string& profile);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
void runRequest (const std::string& profile);
|
void runRequest (const std::string& profile);
|
||||||
|
|
Loading…
Reference in a new issue