summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2014-03-18 19:18:04 +0100
committerTannin <devnull@localhost>2014-03-18 19:18:04 +0100
commitc19c4820d87bdf350f0725712c0b5af908fa9580 (patch)
tree79e633f71b65f36b9a0f232561fc891003af5276
parent8ab1b479438dd929bc953e554629d1bddca61c9e (diff)
- force-enabled game esms no longer break keyboard-navigation in plugin list
-rw-r--r--src/pluginflagicondelegate.cpp6
-rw-r--r--src/pluginlist.cpp34
-rw-r--r--src/pluginlist.h4
3 files changed, 34 insertions, 10 deletions
diff --git a/src/pluginflagicondelegate.cpp b/src/pluginflagicondelegate.cpp
index 6c0bb29e..761555d7 100644
--- a/src/pluginflagicondelegate.cpp
+++ b/src/pluginflagicondelegate.cpp
@@ -11,8 +11,10 @@ PluginFlagIconDelegate::PluginFlagIconDelegate(QObject *parent)
QList<QIcon> PluginFlagIconDelegate::getIcons(const QModelIndex &index) const
{
QList<QIcon> result;
- foreach (const QVariant &var, index.data(Qt::UserRole + 1).toList()) {
- result.append(var.value<QIcon>());
+ if (index.isValid()) {
+ foreach (const QVariant &var, index.data(Qt::UserRole + 1).toList()) {
+ result.append(var.value<QIcon>());
+ }
}
return result;
}
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index ec063994..289032bb 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -75,7 +75,7 @@ bool ByDate(const PluginList::ESPInfo& LHS, const PluginList::ESPInfo& RHS) {
}
PluginList::PluginList(QObject *parent)
- : QAbstractTableModel(parent)
+ : QAbstractItemModel(parent)
, m_FontMetrics(QFont())
, m_SaveTimer(this)
, m_BOSS(NULL)
@@ -951,7 +951,16 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const
} break;
}
} else if ((role == Qt::CheckStateRole) && (modelIndex.column() == 0)) {
- return m_ESPs[index].m_Enabled ? Qt::Checked : Qt::Unchecked;
+ if (m_ESPs[index].m_ForceEnabled) {
+ return QVariant();
+ } else {
+ return m_ESPs[index].m_Enabled ? Qt::Checked : Qt::Unchecked;
+ }
+ } else if (role == Qt::ForegroundRole) {
+ if ((modelIndex.column() == COL_NAME) &&
+ m_ESPs[index].m_ForceEnabled) {
+ return QBrush(Qt::gray);
+ }
} else if (role == Qt::FontRole) {
QFont result;
if (m_ESPs[index].m_IsMaster) {
@@ -1070,13 +1079,12 @@ QVariant PluginList::headerData(int section, Qt::Orientation orientation,
Qt::ItemFlags PluginList::flags(const QModelIndex &modelIndex) const
{
int index = modelIndex.row();
- Qt::ItemFlags result = QAbstractTableModel::flags(modelIndex);
+ Qt::ItemFlags result = QAbstractItemModel::flags(modelIndex);
if (modelIndex.isValid()) {
- if ((m_ESPs[index].m_ForceEnabled)) {
- result &= ~Qt::ItemIsEnabled;
+ if (!m_ESPs[index].m_ForceEnabled) {
+ result |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
}
- result |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
} else {
result |= Qt::ItemIsDropEnabled;
}
@@ -1216,6 +1224,19 @@ bool PluginList::dropMimeData(const QMimeData *mimeData, Qt::DropAction action,
return false;
}
+QModelIndex PluginList::index(int row, int column, const QModelIndex&) const
+{
+ if ((row < 0) || (row >= rowCount()) || (column < 0) || (column >= columnCount())) {
+ return QModelIndex();
+ }
+ return createIndex(row, column, row);
+}
+
+QModelIndex PluginList::parent(const QModelIndex&) const
+{
+ return QModelIndex();
+}
+
bool PluginList::eventFilter(QObject *obj, QEvent *event)
{
@@ -1227,7 +1248,6 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event)
}
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
-
// ctrl+up and ctrl+down -> increase or decrease priority of selected plugins
if ((keyEvent->modifiers() == Qt::ControlModifier) &&
((keyEvent->key() == Qt::Key_Up) || (keyEvent->key() == Qt::Key_Down))) {
diff --git a/src/pluginlist.h b/src/pluginlist.h
index e45746f2..8bf7e508 100644
--- a/src/pluginlist.h
+++ b/src/pluginlist.h
@@ -69,7 +69,7 @@ private:
/**
* @brief model representing the plugins (.esp/.esm) in the current virtual data folder
**/
-class PluginList : public QAbstractTableModel, public MOBase::IPluginList
+class PluginList : public QAbstractItemModel, public MOBase::IPluginList
{
Q_OBJECT
friend class ChangeBracket<PluginList>;
@@ -201,6 +201,8 @@ public: // implementation of the QAbstractTableModel interface
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual Qt::DropActions supportedDropActions() const { return Qt::MoveAction; }
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+ virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+ virtual QModelIndex parent(const QModelIndex &child) const;
void applyBOSSSorting(boss_db db, std::map<int, QString> &lockedLoadOrder, uint8_t **pluginList, size_t size, int &priority, int &loadOrder, bool recognized, const char *extension);
public slots: