exclude DLC theme from random theme selection
authorsheepluva
Thu, 28 Apr 2016 02:06:35 +0200
changeset 11758 5c192a4751d8
parent 11757 3c66845947a8
child 11759 2e4f0d0fec99
exclude DLC theme from random theme selection
QTfrontend/model/ThemeModel.cpp
QTfrontend/model/ThemeModel.h
QTfrontend/ui/widget/mapContainer.cpp
--- a/QTfrontend/model/ThemeModel.cpp	Thu Apr 28 00:41:09 2016 +0200
+++ b/QTfrontend/model/ThemeModel.cpp	Thu Apr 28 02:06:35 2016 +0200
@@ -31,6 +31,21 @@
     m_data = QList<QMap<int, QVariant> >();
 
     m_themesLoaded = false;
+
+    m_filteredNoDLC = NULL;
+}
+
+QSortFilterProxyModel * ThemeModel::withoutDLC()
+{
+    if (m_filteredNoDLC == NULL)
+    {
+        m_filteredNoDLC = new QSortFilterProxyModel(this);
+        m_filteredNoDLC->setSourceModel(this);
+        // filtering based on IsDlcRole would be nicer
+        // but seems this model can only do string-based filtering :|
+        m_filteredNoDLC->setFilterRegExp(QRegExp("^[^*]"));
+    }
+    return m_filteredNoDLC;
 }
 
 int ThemeModel::rowCount(const QModelIndex &parent) const
--- a/QTfrontend/model/ThemeModel.h	Thu Apr 28 00:41:09 2016 +0200
+++ b/QTfrontend/model/ThemeModel.h	Thu Apr 28 02:06:35 2016 +0200
@@ -25,6 +25,7 @@
 #define HEDGEWARS_THEMEMODEL_H
 
 #include <QAbstractListModel>
+#include <QSortFilterProxyModel>
 #include <QStringList>
 #include <QMap>
 #include <QIcon>
@@ -44,10 +45,12 @@
 
         int rowCount(const QModelIndex &parent = QModelIndex()) const;
         QVariant data(const QModelIndex &index, int role) const;
+        QSortFilterProxyModel * withoutDLC();
 
     private:
         mutable QList<QMap<int, QVariant> > m_data;
         mutable bool m_themesLoaded;
+        mutable QSortFilterProxyModel * m_filteredNoDLC;
 
         void loadThemes() const;
 };
--- a/QTfrontend/ui/widget/mapContainer.cpp	Thu Apr 28 00:41:09 2016 +0200
+++ b/QTfrontend/ui/widget/mapContainer.cpp	Thu Apr 28 02:06:35 2016 +0200
@@ -527,9 +527,10 @@
 
 void HWMapContainer::setRandomTheme()
 {
-    if(!m_themeModel->rowCount()) return;
-    quint32 themeNum = rand() % m_themeModel->rowCount();
-    updateTheme(m_themeModel->index(themeNum));
+    QAbstractItemModel * tmodel = m_themeModel->withoutDLC();
+    if(!tmodel->rowCount()) return;
+    quint32 themeNum = rand() % tmodel->rowCount();
+    updateTheme(tmodel->index(themeNum,0));
     emit themeChanged(m_theme);
 }