mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-11 18:37:08 +00:00
93 lines
2.7 KiB
C++
93 lines
2.7 KiB
C++
|
|
||
|
#include "globaldebugprofilemenu.hpp"
|
||
|
|
||
|
#include <vector>
|
||
|
#include <algorithm>
|
||
|
|
||
|
#include <QActionGroup>
|
||
|
|
||
|
#include "../../model/world/idtable.hpp"
|
||
|
#include "../../model/world/record.hpp"
|
||
|
|
||
|
void CSVDoc::GlobalDebugProfileMenu::rebuild()
|
||
|
{
|
||
|
clear();
|
||
|
|
||
|
delete mActions;
|
||
|
mActions = 0;
|
||
|
|
||
|
int idColumn = mDebugProfiles->findColumnIndex (CSMWorld::Columns::ColumnId_Id);
|
||
|
int stateColumn = mDebugProfiles->findColumnIndex (CSMWorld::Columns::ColumnId_Modification);
|
||
|
int globalColumn = mDebugProfiles->findColumnIndex (
|
||
|
CSMWorld::Columns::ColumnId_GlobalProfile);
|
||
|
|
||
|
int size = mDebugProfiles->rowCount();
|
||
|
|
||
|
std::vector<QString> ids;
|
||
|
|
||
|
for (int i=0; i<size; ++i)
|
||
|
{
|
||
|
int state = mDebugProfiles->data (mDebugProfiles->index (i, stateColumn)).toInt();
|
||
|
|
||
|
bool global = mDebugProfiles->data (mDebugProfiles->index (i, globalColumn)).toInt();
|
||
|
|
||
|
if (state!=CSMWorld::RecordBase::State_Deleted && global)
|
||
|
ids.push_back (
|
||
|
mDebugProfiles->data (mDebugProfiles->index (i, idColumn)).toString());
|
||
|
}
|
||
|
|
||
|
mActions = new QActionGroup (this);
|
||
|
connect (mActions, SIGNAL (triggered (QAction *)), this, SLOT (actionTriggered (QAction *)));
|
||
|
|
||
|
std::sort (ids.begin(), ids.end());
|
||
|
|
||
|
for (std::vector<QString>::const_iterator iter (ids.begin()); iter!=ids.end(); ++iter)
|
||
|
{
|
||
|
mActions->addAction (addAction (*iter));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
CSVDoc::GlobalDebugProfileMenu::GlobalDebugProfileMenu (CSMWorld::IdTable *debugProfiles,
|
||
|
QWidget *parent)
|
||
|
: QMenu (parent), mDebugProfiles (debugProfiles), mActions (0)
|
||
|
{
|
||
|
rebuild();
|
||
|
|
||
|
connect (mDebugProfiles, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
|
||
|
this, SLOT (profileAboutToBeRemoved (const QModelIndex&, int, int)));
|
||
|
|
||
|
connect (mDebugProfiles, SIGNAL (rowsInserted (const QModelIndex&, int, int)),
|
||
|
this, SLOT (profileInserted (const QModelIndex&, int, int)));
|
||
|
|
||
|
connect (mDebugProfiles, SIGNAL (dataChanged (const QModelIndex&, const QModelIndex&)),
|
||
|
this, SLOT (profileChanged (const QModelIndex&, const QModelIndex&)));
|
||
|
}
|
||
|
|
||
|
void CSVDoc::GlobalDebugProfileMenu::updateActions (bool running)
|
||
|
{
|
||
|
if (mActions)
|
||
|
mActions->setEnabled (!running);
|
||
|
}
|
||
|
|
||
|
void CSVDoc::GlobalDebugProfileMenu::profileAboutToBeRemoved (const QModelIndex& parent,
|
||
|
int start, int end)
|
||
|
{
|
||
|
rebuild();
|
||
|
}
|
||
|
|
||
|
void CSVDoc::GlobalDebugProfileMenu::profileInserted (const QModelIndex& parent, int start,
|
||
|
int end)
|
||
|
{
|
||
|
rebuild();
|
||
|
}
|
||
|
|
||
|
void CSVDoc::GlobalDebugProfileMenu::profileChanged (const QModelIndex& topLeft,
|
||
|
const QModelIndex& bottomRight)
|
||
|
{
|
||
|
rebuild();
|
||
|
}
|
||
|
|
||
|
void CSVDoc::GlobalDebugProfileMenu::actionTriggered (QAction *action)
|
||
|
{
|
||
|
emit triggered (std::string (action->text().toUtf8().constData()));
|
||
|
}
|