@@ -116,37 +116,26 @@ Qt::ItemFlags ContentSelectorModel::ContentModel::flags(const QModelIndex& index
116
116
if (file == mGameFile )
117
117
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;
118
118
119
- Qt::ItemFlags returnFlags;
120
-
121
- // addon can be checked if its gamefile is
122
- // ... special case, addon with no dependency can be used with any gamefile.
123
- bool gamefileChecked = false ;
124
- bool noGameFiles = true ;
125
- for (const QString& fileName : file->gameFiles ())
119
+ // files with no dependencies can always be checked
120
+ if (file->gameFiles ().empty ())
121
+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
122
+
123
+ // Show the file if the game it is for is enabled.
124
+ // NB: The file may theoretically depend on multiple games.
125
+ // Early exit means that a file is visible only if its earliest found game dependency is enabled.
126
+ // This can be counterintuitive, but it is okay for non-bizarre content setups. And also faster.
127
+ for (const EsmFile* depFile : mFiles )
126
128
{
127
- for (QListIterator<EsmFile*> dependencyIter ( mFiles ); dependencyIter. hasNext (); dependencyIter. next ( ))
129
+ if (depFile-> isGameFile () && file-> gameFiles (). contains (depFile-> fileName (), Qt::CaseInsensitive ))
128
130
{
129
- // compare filenames only. Multiple instances
130
- // of the filename (with different paths) is not relevant here.
131
- EsmFile* depFile = dependencyIter.peekNext ();
132
- if (!depFile->isGameFile () || depFile->fileName ().compare (fileName, Qt::CaseInsensitive) != 0 )
133
- continue ;
134
-
135
- noGameFiles = false ;
136
- if (depFile->builtIn () || depFile->fromAnotherConfigFile () || mCheckedFiles .contains (depFile))
137
- {
138
- gamefileChecked = true ;
131
+ if (!depFile->builtIn () && !depFile->fromAnotherConfigFile () && !mCheckedFiles .contains (depFile))
139
132
break ;
140
- }
141
- }
142
- }
143
133
144
- if (gamefileChecked || noGameFiles)
145
- {
146
- returnFlags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
134
+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
135
+ }
147
136
}
148
137
149
- return returnFlags ;
138
+ return Qt::NoItemFlags ;
150
139
}
151
140
152
141
QVariant ContentSelectorModel::ContentModel::data (const QModelIndex& index, int role) const
0 commit comments