diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ae2a03c2941bf92573f89b88ef73f8aa842bea0a (patch) | |
tree | 3566563f3fb6ac3cb3496669d8f233062d3091bc /kworldwatch/flags.cpp | |
download | tdetoys-ae2a03c2941bf92573f89b88ef73f8aa842bea0a.tar.gz tdetoys-ae2a03c2941bf92573f89b88ef73f8aa842bea0a.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdetoys@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kworldwatch/flags.cpp')
-rw-r--r-- | kworldwatch/flags.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/kworldwatch/flags.cpp b/kworldwatch/flags.cpp new file mode 100644 index 0000000..dd60330 --- /dev/null +++ b/kworldwatch/flags.cpp @@ -0,0 +1,145 @@ +/* +** +** Copyright (C) 1998-2001 by Matthias Hölzer-Klüpfel <hoelzer@kde.org> +** Maintainence has ceased - send questions to kde-devel@kde.org. +** +*/ + +/* +** 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. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to kde-devel@kde.org +*/ +#include <limits.h> + + +#include <kstandarddirs.h> + + +#include "flags.h" + + +FlagList::FlagList() +{ + _flags.setAutoDelete(true); + + _flagPixmap = QPixmap(locate("data", "kworldclock/pics/flag.png")); + _flagMask = QPixmap(locate("data", "kworldclock/pics/flag-mask.xpm"), 0, QPixmap::ThresholdDither); + _flagMask.setMask(_flagMask.createHeuristicMask()); +} + + +void FlagList::addFlag(Flag *f) +{ + _flags.append(f); +} + + +QPoint FlagList::getPosition(double la, double lo, int w, int h, int offset) +{ + int x = (int)((double)w * (180.0 + lo) / 360.0); + int y = (int)((double)h * (90.0 - la) / 180.0); + x = (x + offset + w/2) % w; + + return QPoint(x,y); +} + + +void FlagList::paint(QPainter *p, int width, int height, int offset) +{ + p->setPen(Qt::black); + + QPtrListIterator<Flag> it(_flags); + for ( ; it.current(); ++it) + { + QPoint pos = getPosition(it.current()->latitude(), it.current()->longitude(), width, height, offset); + + p->setPen(it.current()->color()); + p->setBrush(it.current()->color()); + + if (width > 100) + { + pos -= QPoint(5,15); + + p->drawPixmap(pos,_flagMask); + p->drawPixmap(pos,_flagPixmap); + } + else + p->drawEllipse(pos.x()-1, pos.y()-1, 3, 3); + } +} + + +void FlagList::removeNearestFlag(const QPoint &target, int w, int h, int offset) +{ + Flag *flag = 0; + + QPoint diff; + + int dist = INT_MAX; + QPtrListIterator<Flag> it(_flags); + for ( ; it.current(); ++it) + { + diff = getPosition(it.current()->latitude(), it.current()->longitude(), w, h, offset); + diff -= target; + if (diff.manhattanLength() < dist) + { + dist = diff.manhattanLength(); + flag = it.current(); + } + } + + if (flag) + _flags.remove(flag); +} + +void FlagList::removeAllFlags() +{ + _flags.clear(); +} + +void FlagList::save(KConfig *config) +{ + config->writeEntry("Flags", _flags.count()); + + QPtrListIterator<Flag> it(_flags); + int cnt=0; + for ( ; it.current(); ++it) + { + config->writeEntry(QString("Flag_%1_Color").arg(cnt), it.current()->color()); + config->writeEntry(QString("Flag_%1_Latitude").arg(cnt), it.current()->latitude()); + config->writeEntry(QString("Flag_%1_Longitude").arg(cnt), it.current()->longitude()); + cnt++; + } +} + + +void FlagList::load(KConfig *config) +{ + _flags.clear(); + int num = config->readNumEntry("Flags", 0); + + for (int i=0; i<num; ++i) + { + addFlag(new Flag(config->readDoubleNumEntry(QString("Flag_%1_Longitude").arg(i)), + config->readDoubleNumEntry(QString("Flag_%1_Latitude").arg(i)), + config->readColorEntry(QString("Flag_%1_Color").arg(i)))); + } +} + + |