From c26a6f884f38ab75edaf692bf3eb75bce705fff9 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 12 Jul 2013 12:55:14 +0200 Subject: [PATCH] added region map tooltips --- apps/opencs/model/world/regionmap.cpp | 65 ++++++++++++++++++++++----- apps/opencs/model/world/regionmap.hpp | 6 +++ 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/apps/opencs/model/world/regionmap.cpp b/apps/opencs/model/world/regionmap.cpp index fd278d2a6..a071bded8 100644 --- a/apps/opencs/model/world/regionmap.cpp +++ b/apps/opencs/model/world/regionmap.cpp @@ -12,6 +12,19 @@ CSMWorld::RegionMap::CellDescription::CellDescription() : mDeleted (false) {} +CSMWorld::RegionMap::CellDescription::CellDescription (const Record& cell) +{ + const Cell& cell2 = cell.get(); + + if (!cell2.isExterior()) + throw std::logic_error ("Interior cell in region map"); + + mDeleted = cell.isDeleted(); + + mRegion = cell2.mRegion; + mName = cell2.mName; +} + CSMWorld::RegionMap::CellIndex CSMWorld::RegionMap::getIndex (const QModelIndex& index) const { return CellIndex (index.column()+mMin.first, index.row()+mMin.second); @@ -53,12 +66,7 @@ void CSMWorld::RegionMap::buildMap() if (cell2.isExterior()) { - CellDescription description; - - if (cell.isDeleted()) - description.mDeleted = true; - else - description.mRegion = cell2.mRegion; + CellDescription description (cell); CellIndex index (cell2.mData.mX, cell2.mData.mY); @@ -106,12 +114,7 @@ void CSMWorld::RegionMap::addCells (int start, int end) { CellIndex index (cell2.mData.mX, cell2.mData.mY); - CellDescription description; - - if (cell.isDeleted()) - description.mDeleted = true; - else - description.mRegion = cell2.mRegion; + CellDescription description (cell); addCell (index, description); } @@ -363,6 +366,44 @@ QVariant CSMWorld::RegionMap::data (const QModelIndex& index, int role) const return QBrush (Qt::DiagCrossPattern); } + if (role==Qt::ToolTipRole) + { + CellIndex cellIndex = getIndex (index); + + std::ostringstream stream; + + stream << cellIndex.first << ", " << cellIndex.second; + + std::map::const_iterator cell = + mMap.find (cellIndex); + + if (cell!=mMap.end()) + { + if (!cell->second.mName.empty()) + stream << " " << cell->second.mName; + + if (cell->second.mDeleted) + stream << " (deleted)"; + + if (!cell->second.mRegion.empty()) + { + stream << "
"; + + std::map::const_iterator iter = + mColours.find (Misc::StringUtils::lowerCase (cell->second.mRegion)); + + if (iter!=mColours.end()) + stream << cell->second.mRegion; + else + stream << "" << cell->second.mRegion << ""; + } + } + else + stream << " (no cell)"; + + return QString::fromUtf8 (stream.str().c_str()); + } + return QVariant(); } diff --git a/apps/opencs/model/world/regionmap.hpp b/apps/opencs/model/world/regionmap.hpp index 0a20324c4..7fb89f20a 100644 --- a/apps/opencs/model/world/regionmap.hpp +++ b/apps/opencs/model/world/regionmap.hpp @@ -7,6 +7,9 @@ #include +#include "record.hpp" +#include "cell.hpp" + namespace CSMWorld { class Data; @@ -28,8 +31,11 @@ namespace CSMWorld { bool mDeleted; std::string mRegion; + std::string mName; CellDescription(); + + CellDescription (const Record& cell); }; Data& mData;