File indexing completed on 2024-03-24 03:44:36
0001 /*************************************************************************** 0002 * Copyright (C) 2004-2007 by Albert Astals Cid * 0003 * aacid@kde.org * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 ***************************************************************************/ 0010 0011 #include "map.h" 0012 0013 0014 #include <QFile> 0015 #include <QFileInfo> 0016 #include <QRandomGenerator> 0017 0018 #include <KLazyLocalizedString> 0019 0020 KGmap::KGmap() 0021 { 0022 p_capitalToDivisionPattern = QString::fromUtf8(kli18nc("@title:group", "%1 is the capital of...").untranslatedText()); 0023 p_divisionToCapitalPattern = QString::fromUtf8(kli18nc("@title:group", "The capital of %1 is...").untranslatedText()); 0024 } 0025 0026 KGmap::~KGmap() 0027 { 0028 qDeleteAll(p_divisions); 0029 } 0030 0031 bool KGmap::addDivision(division *d) 0032 { 0033 bool b; 0034 const division *divByName = getDivision(d -> getUntranslatedName()); 0035 const division *divByColor = getDivision(d -> getRGB()); 0036 if ( ( divByName == nullptr && divByColor == nullptr ) || 0037 ( divByName != nullptr && divByColor == nullptr && !d->canAsk(division::eClick) && !divByName->canAsk(division::eClick) ) ) 0038 { 0039 p_divisions.append(d); 0040 b = true; 0041 } 0042 else b = false; 0043 return b; 0044 } 0045 0046 void KGmap::setFile(const QString &s) 0047 { 0048 p_file = s; 0049 } 0050 0051 bool KGmap::setMapFile(const QString &s) 0052 { 0053 p_mapFile = s; 0054 return QFile::exists(s); 0055 } 0056 0057 void KGmap::setName(const QString &s) 0058 { 0059 p_name = s; 0060 } 0061 0062 void KGmap::setDivisionsString(const QString &s) 0063 { 0064 p_divisionsString = s; 0065 } 0066 0067 void KGmap::setAuthor(const QString &s) 0068 { 0069 p_author = s; 0070 } 0071 0072 void KGmap::setCapitalToDivisionQuestionPattern(const QString &str) 0073 { 0074 p_capitalToDivisionPattern = str; 0075 } 0076 0077 void KGmap::setDivisionToCapitalQuestionPattern(const QString &str) 0078 { 0079 p_divisionToCapitalPattern = str; 0080 } 0081 0082 void KGmap::setCapitalToDivisionTitle(const QString &str) 0083 { 0084 p_capitalToDivisionTitle = str; 0085 } 0086 0087 void KGmap::setDivisionToCapitalTitle(const QString &str) 0088 { 0089 p_divisionToCapitalTitle = str; 0090 } 0091 0092 uint KGmap::count(division::askMode am) const 0093 { 0094 uint count = 0; 0095 for(const division *d : p_divisions) 0096 { 0097 if (d->canAsk(am)) count++; 0098 } 0099 return count; 0100 } 0101 0102 KLocalizedString KGmap::getCapitalToDivisionQuestionPattern() const 0103 { 0104 return ki18nc("@title:group", p_capitalToDivisionPattern.toUtf8().constData()); 0105 } 0106 0107 KLocalizedString KGmap::getDivisionToCapitalQuestionPattern() const 0108 { 0109 return ki18nc("@title:group", p_divisionToCapitalPattern.toUtf8().constData()); 0110 } 0111 0112 QString KGmap::getCapitalToDivisionTitle() const 0113 { 0114 if (p_capitalToDivisionTitle.isNull()) return i18n("%1 by Capital", getDivisionsString()); 0115 else return p_capitalToDivisionTitle; 0116 } 0117 0118 QString KGmap::getDivisionToCapitalTitle() const 0119 { 0120 if (p_divisionToCapitalTitle.isNull()) return i18n("Capitals of %1", getDivisionsString()); 0121 else return p_divisionToCapitalTitle; 0122 } 0123 0124 QString KGmap::getFile() const 0125 { 0126 return p_file; 0127 } 0128 0129 QString KGmap::getFileName() const 0130 { 0131 QFileInfo fi(p_file); 0132 return fi.fileName(); 0133 } 0134 0135 QString KGmap::getMapFile() const 0136 { 0137 return p_mapFile; 0138 } 0139 0140 QString KGmap::getName() const 0141 { 0142 return p_name; 0143 } 0144 0145 QString KGmap::getDivisionsString() const 0146 { 0147 if (p_divisionsString.isNull()) return i18n("Regions"); 0148 else return p_divisionsString; 0149 } 0150 0151 division *KGmap::getRandomDivision(division::askMode am) const 0152 { 0153 QList<division*> aux; 0154 const int i = QRandomGenerator::global()->bounded(p_divisions.size()); 0155 if (!p_divisions[i] -> canAsk(am)) return getRandomDivision(am); 0156 else return p_divisions[i]; 0157 } 0158 0159 QString KGmap::getWhatIs(QRgb c, bool all) const 0160 { 0161 // this is only asked from mapasker.cpp hence the division::eClick in canAsk 0162 division *d = getDivision(c); 0163 if (d == nullptr) return QStringLiteral("nothing"); 0164 else 0165 { 0166 if (all) return d -> getUntranslatedName(); 0167 else if (d -> canAsk(division::eClick)) return d -> getUntranslatedName(); 0168 else return QLatin1String(""); 0169 } 0170 } 0171 0172 QString KGmap::getAuthor() const 0173 { 0174 return p_author; 0175 } 0176 0177 QColor KGmap::getColor(const QString &s) const 0178 { 0179 return QColor(getDivision(s)->getRGB()); 0180 } 0181 0182 QList<const division*> KGmap::getIgnoredDivisions(division::askMode am) const 0183 { 0184 QList<const division*> ignoredDivisions; 0185 for (division* div : p_divisions) 0186 if (!div->canAsk(am)) 0187 ignoredDivisions << div; 0188 return ignoredDivisions; 0189 } 0190 0191 QList<const division*> KGmap::getAllDivisionsOrdered() const 0192 { 0193 QList<const division*> constDivisions; 0194 for (const division* div : p_divisions) 0195 constDivisions << div; 0196 return constDivisions; 0197 } 0198 0199 division *KGmap::getDivision(const QString &divisionName) const 0200 { 0201 for (division* div : p_divisions) 0202 { 0203 if (div->getUntranslatedName() == divisionName) return div; 0204 } 0205 return nullptr; 0206 } 0207 0208 division *KGmap::getDivision(QRgb c) const 0209 { 0210 for (division* div : p_divisions) 0211 { 0212 if (div->getRGB() == c) return div; 0213 } 0214 return nullptr; 0215 }