From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 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/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- libkholidays/kholidays.cpp | 148 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 libkholidays/kholidays.cpp (limited to 'libkholidays/kholidays.cpp') diff --git a/libkholidays/kholidays.cpp b/libkholidays/kholidays.cpp new file mode 100644 index 00000000..9bb5c101 --- /dev/null +++ b/libkholidays/kholidays.cpp @@ -0,0 +1,148 @@ +/* + This file is part of KOrganizer. + Copyright (c) 2001 Cornelius Schumacher + Copyright (c) 2004 Allen Winter + + 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; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include +#include +#include + +#include "kholidays.h" +#include "kholidays_version.h" + +extern "C" { + char *parse_holidays( const char *, int year, short force ); + /** \internal */ + struct holiday { + char *string; /* name of holiday, 0=not a holiday */ + int color; /* color code, see scanholiday.lex */ + unsigned short dup; /* reference count */ + holiday *next; /* single-linked list if more than one holida appears on a given date */ + }; + extern struct holiday holidays[366]; +} + +QStringList KHolidays::locations() +{ + QStringList files = + KGlobal::dirs()->findAllResources( "data", "libkholidays/" + generateFileName( "*" ), + false, true ); + QStringList locs; + + QStringList::ConstIterator it; + for ( it = files.begin(); it != files.end(); ++it ) + locs.append( (*it).mid((*it).findRev('_') + 1) ); + + return locs; +} + +QString KHolidays::fileForLocation( const QString &location ) +{ + return locate( "data", "libkholidays/" + generateFileName( location ) ); +} + +QString KHolidays::userPath( bool create ) +{ + return KGlobal::dirs()->saveLocation( "data", "libkholidays/", create ); +} + +QString KHolidays::generateFileName( const QString &location ) +{ + return "holiday_" + location; +} + + + + +KHolidays::KHolidays( const QString& location ) + : mLocation( location ) +{ + mHolidayFile = fileForLocation( location ); + + mYearLast = 0; +} + +KHolidays::~KHolidays() +{ +} + +QString KHolidays::location() const +{ + return mLocation; +} + +QString KHolidays::shortText( const QDate &date ) +{ + QValueList lst = getHolidays( date ); + if ( !lst.isEmpty() ) + return lst.first().text; + else return QString::null; +} + +bool KHolidays::parseFile( const QDate &date ) +{ +// kdDebug()<<"KHolidays::parseFile( date=" << date << ")"< lst = getHolidays( date ); + if ( !lst.isEmpty() ) + return lst.first().text; + else return QString::null; +} + +QValueList KHolidays::getHolidays( const QDate &date ) +{ + QValueList list; + if ( !parseFile( date ) ) return list; + struct holiday *hd = &holidays[date.dayOfYear()-1]; + while ( hd ) { + if ( hd->string ) { + KHoliday holiday; + holiday.text = QString::fromUtf8( hd->string ); + holiday.shortText = holiday.text; + holiday.Category = (hd->color == 2/*red*/) || (hd->color == 9/*weekend*/) ? HOLIDAY : WORKDAY; + list.append( holiday ); + } + hd = hd->next; + } + return list; +} + +int KHolidays::category( const QDate &date ) +{ + if ( !parseFile(date) ) return WORKDAY; + + return (holidays[date.dayOfYear()-1].color == 2/*red*/) || + (holidays[date.dayOfYear()-1].color == 9/*weekend*/) ? HOLIDAY : WORKDAY; +} -- cgit v1.2.3