From ae2a03c2941bf92573f89b88ef73f8aa842bea0a Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: 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 --- kworldwatch/flags.cpp | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 kworldwatch/flags.cpp (limited to 'kworldwatch/flags.cpp') 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 +** 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 + + +#include + + +#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 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 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 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; ireadDoubleNumEntry(QString("Flag_%1_Longitude").arg(i)), + config->readDoubleNumEntry(QString("Flag_%1_Latitude").arg(i)), + config->readColorEntry(QString("Flag_%1_Color").arg(i)))); + } +} + + -- cgit v1.2.1