diff options
Diffstat (limited to 'kgeography/src/map.cpp')
-rw-r--r-- | kgeography/src/map.cpp | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/kgeography/src/map.cpp b/kgeography/src/map.cpp new file mode 100644 index 00000000..be681191 --- /dev/null +++ b/kgeography/src/map.cpp @@ -0,0 +1,156 @@ +/*************************************************************************** + * Copyright (C) 2004 by Albert Astals Cid * + * tsdgeos@terra.es * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include <stdlib.h> // for RAND_MAX + +#include <kapplication.h> +#include <klocale.h> + +#include <qfile.h> +#include <qfileinfo.h> + +#include "division.h" +#include "map.h" + +KGmap::KGmap() +{ + p_hasAllFlags = true; +} + +KGmap::~KGmap() +{ + QMap<QRgb, division*>::iterator it; + it = p_colorMap.begin(); + while (it != p_colorMap.end()) + { + delete it.data(); + p_colorMap.remove(it); + it = p_colorMap.begin(); + } +} + +bool KGmap::addDivision(division *c) +{ + bool b; + if (p_nameMap.find(c -> getName()) == p_nameMap.end() && + p_colorMap.find(c -> getRGB()) == p_colorMap.end()) + { + p_colorMap.insert(c -> getRGB(), c); + p_nameMap.insert(c -> getName(), c); + b = true; + if (c -> canAsk(false)) p_hasAllFlags = p_hasAllFlags && !c -> getFlagFile().isNull(); + } + else b = false; + return b; +} + +void KGmap::setFile(const QString &s) +{ + p_file = s; +} + +bool KGmap::setMapFile(const QString &s) +{ + p_mapFile = s; + return QFile::exists(s); +} + +void KGmap::setName(const QString &s) +{ + p_name = s; +} + +uint KGmap::count(bool clickDivisionMode) const +{ + QValueList<division*> aux = p_nameMap.values(); + QValueList<division*>::const_iterator it = aux.begin(); + QValueList<division*>::const_iterator end = aux.end(); + uint count = 0; + for( ; it != end; ++it) + { + if ((*it)->canAsk(clickDivisionMode)) count++; + } + return count; +} + +bool KGmap::hasAllFlags() const +{ + return p_hasAllFlags; +} + +QString KGmap::getDivisionFlagFile(const QString &s) const +{ + return p_nameMap[s] -> getFlagFile(); +} + +QString KGmap::getDivisionCapital(const QString &s) const +{ + return p_nameMap[s] -> getCapital(); +} + +QString KGmap::getFile() const +{ + return p_file; +} + +QString KGmap::getFileName() const +{ + QFileInfo fi(p_file); + return fi.fileName(); +} + +QString KGmap::getMapFile() const +{ + return p_mapFile; +} + +QString KGmap::getName() const +{ + return p_name; +} + +QString KGmap::getRandomDivision(bool clickDivisionMode) const +{ + QValueList<division*> aux; + int i = (int)((float)p_nameMap.size() * kapp -> random() / (RAND_MAX + 1.0)); + aux = p_nameMap.values(); + if (!aux[i] -> canAsk(clickDivisionMode)) return getRandomDivision(clickDivisionMode); + else return aux[i] -> getName(); +} + +QString KGmap::getWhatIs(QRgb c, bool all) const +{ + // this is only asked from mapasker.cpp hence the true in canAsk + QMap<QRgb, division*>::const_iterator it; + it = p_colorMap.find(c); + if (it == p_colorMap.end()) return "nothing"; + else + { + if (all) return it.data() -> getName(); + else if (it.data() -> canAsk(true)) return it.data() -> getName(); + else return ""; + } +} + +QColor KGmap::getColor(const QString &s) const +{ + QValueList<division*> divisions; + QValueList<QRgb> colors; + division *d; + int i; + + d = p_nameMap[s]; + divisions = p_colorMap.values(); + colors = p_colorMap.keys(); + + i = 0; + while(divisions[i] != d) i++; + return QColor(colors[i]); +} |