# HG changeset patch # User sheepluva # Date 1335900244 -7200 # Node ID ede55af89e78513afd5ae165d35218dde10f565f # Parent 8d41d22a291d248c3c2f3cfe764fed071fd8a9cf roomslistmodel: prettier names for map +rnd+ etc.; point out unavailable maps some other small tweaks and fixes diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/model/MapModel.cpp --- a/QTfrontend/model/MapModel.cpp Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/model/MapModel.cpp Tue May 01 21:24:04 2012 +0200 @@ -148,18 +148,35 @@ items.append(separator.clone()); items.append(staticMaps); + + // create row-index lookup table + + m_mapIndexes.clear(); + + int count = items.size(); + + for (int i = 0; i < count; i++) + { + QStandardItem * si = items.at(i); + QVariant v = si->data(Qt::UserRole + 1); + if (v.canConvert()) + m_mapIndexes.insert(v.value().name, i); + } + + // store start-index and count of relevant types - typeLoc.insert(GeneratedMap, QPair(0, 1)); - typeLoc.insert(GeneratedMaze, QPair(1, 1)); - typeLoc.insert(HandDrawnMap, QPair(2, 1)); + + m_typeLoc.insert(GeneratedMap, QPair(0, 1)); + m_typeLoc.insert(GeneratedMaze, QPair(1, 1)); + m_typeLoc.insert(HandDrawnMap, QPair(2, 1)); // mission maps int startIdx = genMaps.size() + 2; // start after genMaps and 2 separators - int count = missionMaps.size(); - typeLoc.insert(MissionMap, QPair(startIdx, count)); + count = missionMaps.size(); + m_typeLoc.insert(MissionMap, QPair(startIdx, count)); // static maps startIdx += count + 1; // start after missions and 2 separators count = staticMaps.size(); - typeLoc.insert(StaticMap, QPair(startIdx, count)); + m_typeLoc.insert(StaticMap, QPair(startIdx, count)); // store list contents in the item model QStandardItemModel::appendColumn(items); @@ -169,18 +186,10 @@ } -int MapModel::mapCount(MapType type) const -{ - // return the count for this type - // fetch it from the second int in typeLoc, return 0 if no entry - return typeLoc.value(type, QPair(0,0)).second; -} - - int MapModel::randomMap(MapType type) const { // return a random index for this type or -1 if none available - QPair loc = typeLoc.value(type, QPair(-1,0)); + QPair loc = m_typeLoc.value(type, QPair(-1,0)); int startIdx = loc.first; int count = loc.second; @@ -220,3 +229,10 @@ return item; } + + +int MapModel::indexOf(const QString & map) const +{ + return m_mapIndexes.value(map, -1); +} + diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/model/MapModel.h --- a/QTfrontend/model/MapModel.h Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/model/MapModel.h Tue May 01 21:24:04 2012 +0200 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -65,11 +66,11 @@ }; /** - * @brief Returns the number of available maps of a specified type. - * @param type map type to get the count of. - * @return count of maps that have the specified type. + * @brief Returns the row-index of the given map. + * @param map map of which to get the row-index of. + * @return row-index of map or -1 if not available. */ - int mapCount(MapType type) const; + int indexOf(const QString & map) const; /** * @brief Returns the row-index of a random map with a specified type. @@ -78,7 +79,6 @@ */ int randomMap(MapType type) const; - public slots: /// Reloads the maps using the DataManager. void loadMaps(); @@ -86,7 +86,10 @@ private: /// start-index and map count for each map-type. - QMap > typeLoc; + QMap > m_typeLoc; + + /// map index lookup table + QHash m_mapIndexes; /** * @brief Creates a QStandardItem, that holds the map info and item appearance. diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/model/roomslistmodel.cpp --- a/QTfrontend/model/roomslistmodel.cpp Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/model/roomslistmodel.cpp Tue May 01 21:24:04 2012 +0200 @@ -23,6 +23,8 @@ #include "roomslistmodel.h" +#include +#include #include RoomsListModel::RoomsListModel(QObject *parent) : @@ -39,6 +41,8 @@ << tr("Map") << tr("Rules") << tr("Weapons"); + + m_mapModel = DataManager::instance().mapModel(); } @@ -73,20 +77,30 @@ { int column = index.column(); int row = index.row(); - - if (!index.isValid() || (row < 0) - || (row >= m_data.size()) - || (column >= c_nColumns) - || ((role != Qt::DecorationRole) && (role != Qt::DisplayRole)) - ) + + // invalid index + if (!index.isValid()) + return QVariant(); + + // invalid row + if ((row < 0) || (row >= m_data.size())) return QVariant(); + // invalid column + if ((column < 0) || (column >= c_nColumns)) + return QVariant(); + + // not a role we have data for + if (role != Qt::DisplayRole) + // only decorate name column + if ((role != Qt::DecorationRole) || (column != 1)) + // only dye map column + if ((role != Qt::ForegroundRole) || (column != 5)) + return QVariant(); + // decorate room name based on room state if (role == Qt::DecorationRole) { - if (column != 1) - return QVariant(); - const QIcon roomBusyIcon(":/res/iconDamage.png"); const QIcon roomWaitingIcon(":/res/iconTime.png"); @@ -98,10 +112,42 @@ QString content = m_data.at(row).at(column); - if (column == 0) - return QVariant(!content.isEmpty()); + if (role == Qt::DisplayRole) + { + // supply in progress flag as bool + if (column == 0) + return QVariant(!content.isEmpty()); + + // display room names + if (column == 5) + { + // special names + if (content[0] == '+') + { + if (content == "+rnd+") return tr("Random Map"); + if (content == "+maze+") return tr("Random Maze"); + if (content == "+drawn+") return tr("Hand-drawn"); + } - return content; + // prefix ? if map not available + if ((m_mapModel->indexOf(content) < 0)) + return QString ("? %1").arg(content); + } + + return content; + } + + // dye map names red if map not available + if (role == Qt::ForegroundRole) + { + if ((m_mapModel->indexOf(content) < 0)) + return QBrush(QColor("darkred")); + else + return QVariant(); + } + + Q_ASSERT(false); + return QVariant(); } diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/model/roomslistmodel.h --- a/QTfrontend/model/roomslistmodel.h Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/model/roomslistmodel.h Tue May 01 21:24:04 2012 +0200 @@ -27,6 +27,8 @@ #include #include +#include "DataManager.h" + class RoomsListModel : public QAbstractTableModel { Q_OBJECT @@ -49,6 +51,7 @@ const int c_nColumns; QList m_data; QStringList m_headerData; + MapModel * m_mapModel; QStringList roomInfo2RoomRecord(const QStringList & info); }; diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/ui/widget/gamecfgwidget.cpp --- a/QTfrontend/ui/widget/gamecfgwidget.cpp Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/ui/widget/gamecfgwidget.cpp Tue May 01 21:24:04 2012 +0200 @@ -57,6 +57,7 @@ GBoxOptionsLayout->addWidget(Scripts, 1, 1); Scripts->setModel(DataManager::instance().gameStyleModel()); + m_curScript = Scripts->currentText(); connect(Scripts, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptChanged(int))); QWidget *SchemeWidget = new QWidget(GBoxOptions); diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/ui/widget/hedgehogerWidget.cpp --- a/QTfrontend/ui/widget/hedgehogerWidget.cpp Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/ui/widget/hedgehogerWidget.cpp Tue May 01 21:24:04 2012 +0200 @@ -105,8 +105,7 @@ } QPainter painter(this); - const QFont font("MS Shell Dlg", 12); - painter.setFont(font); - painter.drawText(this->width() - 12, 24, QString::number(numItems)); + painter.setFont(QFont("MS Shell Dlg", 10, QFont::Bold)); + painter.drawText(this->width() - 12, 23, QString::number(numItems)); } diff -r 8d41d22a291d -r ede55af89e78 QTfrontend/ui/widget/mapContainer.cpp --- a/QTfrontend/ui/widget/mapContainer.cpp Tue May 01 19:56:55 2012 +0200 +++ b/QTfrontend/ui/widget/mapContainer.cpp Tue May 01 21:24:04 2012 +0200 @@ -376,24 +376,9 @@ void HWMapContainer::intSetMap(const QString & map) { - int id = 0; - for(int i = 0; i < chooseMap->count(); i++) - { - QVariant data = chooseMap->itemData(i, Qt::UserRole + 1); - // skip separators etc - if (!data.isValid()) - continue; - Q_ASSERT(data.canConvert()); - MapModel::MapInfo mapInfo = data.value(); + int id = m_mapModel->indexOf(map); - if (mapInfo.name == map) - { - id = i; - break; - } - } - - if(id > 0) + if(id >= 0) { if (pMap) {