Diffstat (limited to 'core/pim/datebook/holiday/national') (more/less context) (ignore whitespace changes)
6 files changed, 154 insertions, 14 deletions
diff --git a/core/pim/datebook/holiday/national/national-holidays.pro b/core/pim/datebook/holiday/national/national-holidays.pro index 8b2b33e..3da9c3b 100644 --- a/core/pim/datebook/holiday/national/national-holidays.pro +++ b/core/pim/datebook/holiday/national/national-holidays.pro @@ -1,20 +1,20 @@ TEMPLATE = lib CONFIG -= moc CONFIG += qt plugin # Input -HEADERS = nationalholiday.h nationalcfg.h -SOURCES = nationalholiday.cpp nationalcfg.cpp +HEADERS = nationalholiday.h nationalcfg.h nationalcfgwidget.h +SOURCES = nationalholiday.cpp nationalcfg.cpp nationalcfgwidget.cpp INTERFACES= INCLUDEPATH += $(OPIEDIR)/include \ ../ ../library DEPENDPATH += $(OPIEDIR)/include \ ../ ../library LIBS+= -lqpe -lopiecore2 -lopieui2 DESTDIR = $(OPIEDIR)/plugins/holidays TARGET = nationaldayplugin include( $(OPIEDIR)/include.pro ) diff --git a/core/pim/datebook/holiday/national/nationalcfg.cpp b/core/pim/datebook/holiday/national/nationalcfg.cpp index a293251..52c453f 100644 --- a/core/pim/datebook/holiday/national/nationalcfg.cpp +++ b/core/pim/datebook/holiday/national/nationalcfg.cpp @@ -1,149 +1,142 @@ #include "nationalcfg.h"
#include <opie2/odebug.h>
#include <qfile.h>
static QString _key_desc="description";
static QString _key_doc="nationaldays";
static QString _key_list="entries";
static QString _key_entry="entry";
static QString _content_name="name";
static QString _content_date="date";
NHcfg::NHcfg()
:QXmlDefaultHandler(),err(""),_path("")
{
}
NHcfg::~NHcfg()
{
}
bool NHcfg::load(const QString&aPath)
{
_path=aPath;
stage = 0;
_content.clear();
- odebug << "Start loading file "<<_path<<oendl;
QFile *f=new QFile(_path);
if (!f) {
oerr << "Could not open file" << oendl;
return false;
}
- odebug << "Source" << oendl;
QXmlInputSource is(*f);
- odebug << "Reader" << oendl;
QXmlSimpleReader reader;
- odebug << "Handler" << oendl;
reader.setContentHandler(this);
- odebug << "Error handler" << oendl;
reader.setErrorHandler(this);
err = "";
- odebug << "parse it" << oendl;
bool ret = reader.parse(is);
- odebug << "Errors: " << err << oendl;
+ if (err.length()>0)
+ odebug << "Errors: " << err << oendl;
return ret;
}
const tholidaylist&NHcfg::days()const
{
return _content;
}
bool NHcfg::warning(const QXmlParseException& e)
{
QString tmp;
tmp.sprintf("%d: warning: %s\n", e.lineNumber(),
(const char*) e.message().utf8());
err += tmp;
return true;
}
bool NHcfg::error(const QXmlParseException& e)
{
QString tmp;
tmp.sprintf("%d: error: %s\n", e.lineNumber(),
(const char*) e.message().utf8());
err += tmp;
return true;
}
bool NHcfg::fatalError(const QXmlParseException& e)
{
QString tmp;
tmp.sprintf("%d: fatal error: %s\n", e.lineNumber(),
(const char*) e.message().utf8());
err += tmp;
return false;
}
bool NHcfg::startElement(const QString&, const QString&,const QString& name, const QXmlAttributes& attr)
{
bool ret = false;
- odebug << "startElement: " << name << oendl;
if (name==_key_doc) {
stage = 1;
return true;
}
if (stage == 0) {
err = "This is not a national holiday config file";
return false;
}
if (name==_key_desc) {
stage = 2;
ret = setName(attr);
return ret;
}
if (stage<2) {return false;}
if (name==_key_list) {stage=3;return true;}
if (stage<3) {return false;}
return parsevalue(name,attr);
}
bool NHcfg::parsevalue(const QString&name,const QXmlAttributes&attr)
{
int nindex = attr.index(_content_name);
int dindex = attr.index(_content_date);
if (name != _key_entry) {err = "Not a valid entry"; return false;}
if (dindex == -1 || nindex == -1) {err = QString("Listentry %i is invalid").arg(1);return false;}
QString txt = attr.value(nindex);
QString dstring = attr.value(dindex);
QStringList e = QStringList::split("-",dstring);
if (e.count()!=2){err=QString("Datestring %1 is invalid").arg(dstring);return false;}
QDate d(0,e[0].toInt(),e[1].toInt());
odebug << "Found entry \"" << txt<<"\" on "<<d<<oendl;
_content[d].append(txt);
return true;
}
bool NHcfg::endElement(const QString&, const QString&,const QString& name)
{
return true;
}
const QString&NHcfg::errorString()const
{
return err;
}
bool NHcfg::setName(const QXmlAttributes&attr)
{
int nindx = attr.index("value");
if (nindx==-1) {
return false;
}
_contentname = attr.value(nindx);
- odebug << "Contentname = " << _contentname<<oendl;
return true;
}
diff --git a/core/pim/datebook/holiday/national/nationalcfgwidget.cpp b/core/pim/datebook/holiday/national/nationalcfgwidget.cpp new file mode 100644 index 0000000..6e3dd7d --- a/dev/null +++ b/core/pim/datebook/holiday/national/nationalcfgwidget.cpp @@ -0,0 +1,99 @@ +#include "nationalcfgwidget.h" + +#include <opie2/odebug.h> + +#include <qpe/config.h> +#include <qpe/qpeapplication.h> + +#include <qheader.h> +#include <qlabel.h> +#include <qlistview.h> +#include <qpushbutton.h> +#include <qlayout.h> +#include <qvariant.h> +#include <qtooltip.h> +#include <qwhatsthis.h> +#include <qheader.h> +#include <qdir.h> + +/* + * Constructs a NationalHolidayConfig which is a child of 'parent', with the + * name 'name' and widget flags set to 'f' + */ +NationalHolidayConfigWidget::NationalHolidayConfigWidget( QWidget* parent, const char* name, WFlags fl ) + : Opie::Datebook::HolidayPluginConfigWidget( parent, name, fl ) +{ + if ( !name ) + setName( "NationalHolidayConfig" ); + resize( 206, 210 ); + setCaption( tr( "Select national config" ) ); + NationalHolidayConfigLayout = new QVBoxLayout( this ); + NationalHolidayConfigLayout->setSpacing( 2 ); + NationalHolidayConfigLayout->setMargin( 2 ); + + m_headLabel = new QLabel( this, "m_headLabel" ); + m_headLabel->setText( tr( "Select one or more configs to load" ) ); + m_headLabel->setAlignment( int( QLabel::AlignCenter ) ); + NationalHolidayConfigLayout->addWidget( m_headLabel ); + + m_Configlist = new QListView( this, "m_Configlist" ); + m_Configlist->addColumn( tr( "configfiles" ) ); + QWhatsThis::add( m_Configlist, tr( "List of found xml-files which may load." ) ); + NationalHolidayConfigLayout->addWidget( m_Configlist ); + + // signals and slots connections + connect( m_Configlist, SIGNAL( clicked(QListViewItem*) ), this, SLOT( listItemClicked(QListViewItem*) ) ); + init(); +} + +void NationalHolidayConfigWidget::init() +{ + m_Configlist->header()->hide(); + m_Configlist->setSorting(-1); + + QString path = QPEApplication::qpeDir() + "etc/nationaldays"; + QDir dir( path, "*.xml" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + Config cfg("nationaldays"); + cfg.setGroup("entries"); + files = cfg.readListEntry("files"); + QCheckListItem *pitem = 0; + + for (it=list.begin();it!=list.end();++it) { + pitem = new QCheckListItem(m_Configlist,(*it),QCheckListItem::CheckBox); + if (files.find((*it)) != files.end()) { + pitem->setOn(true); + } else { + pitem->setOn(false); + } + } +} + +/* + * Destroys the object and frees any allocated resources + */ +NationalHolidayConfigWidget::~NationalHolidayConfigWidget() +{ + // no need to delete child widgets, Qt does it all for us +} + +void NationalHolidayConfigWidget::listItemClicked(QListViewItem*item) +{ + if (!item) return; + QCheckListItem*pitem = ((QCheckListItem*)item); + QStringList::Iterator it = files.find(pitem->text(0)); + if (pitem->isOn()&&it==files.end()) { + files.append(pitem->text(0)); + } else if (!pitem->isOn() && it!=files.end()) { + files.remove(it); + } +} + +void NationalHolidayConfigWidget::saveConfig() +{ + Config cfg("nationaldays"); + cfg.setGroup("entries"); + cfg.writeEntry("files",files); +} + diff --git a/core/pim/datebook/holiday/national/nationalcfgwidget.h b/core/pim/datebook/holiday/national/nationalcfgwidget.h new file mode 100644 index 0000000..9f16aa4 --- a/dev/null +++ b/core/pim/datebook/holiday/national/nationalcfgwidget.h @@ -0,0 +1,39 @@ +#ifndef NATIONALHOLIDAYCONFIGWIDGET_H +#define NATIONALHOLIDAYCONFIGWIDGET_H + +#include <opie2/oholidayplugincfgwidget.h> + +#include <qvariant.h> +#include <qwidget.h> +#include <qstringlist.h> + +class QVBoxLayout; +class QHBoxLayout; +class QGridLayout; +class QLabel; +class QListView; +class QListViewItem; + +class NationalHolidayConfigWidget : public Opie::Datebook::HolidayPluginConfigWidget +{ + Q_OBJECT + +public: + NationalHolidayConfigWidget( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); + virtual ~NationalHolidayConfigWidget(); + + virtual void saveConfig(); + +protected slots: + virtual void listItemClicked(QListViewItem*); + +protected: + void init(); + + QVBoxLayout* NationalHolidayConfigLayout; + QLabel* m_headLabel; + QListView* m_Configlist; + QStringList files; +}; + +#endif // NATIONALHOLIDAYCONFIG_H diff --git a/core/pim/datebook/holiday/national/nationalholiday.cpp b/core/pim/datebook/holiday/national/nationalholiday.cpp index 26cd913..52f3489 100644 --- a/core/pim/datebook/holiday/national/nationalholiday.cpp +++ b/core/pim/datebook/holiday/national/nationalholiday.cpp @@ -1,123 +1,130 @@ #include "nationalholiday.h" #include "nationalcfg.h" +#include "nationalcfgwidget.h" #include <opie2/odebug.h> #include <qobject.h> #include <qpe/event.h> #include <qpe/config.h> #include <qpe/qpeapplication.h> NationalHoliday::NationalHoliday() :Opie::Datebook::HolidayPlugin() { _lastyear=0; init_done = false; init(); } QString NationalHoliday::description() { return QObject::tr("National holidays","holidays"); } void NationalHoliday::init() { Config cfg("nationaldays"); cfg.setGroup("entries"); files = cfg.readListEntry("files"); - odebug << "Read " << files << oendl; } void NationalHoliday::load_days() { if (init_done) return; + Config cfg("nationaldays"); + cfg.setGroup("entries"); QStringList::ConstIterator it; NHcfg readit; for (it=files.begin();it!=files.end();++it) { - odebug << QPEApplication::qpeDir()+"/etc/nationaldays/"+(*it) << oendl; - if (!readit.load(QPEApplication::qpeDir()+"/etc/nationaldays/"+(*it))) + if (!readit.load(QPEApplication::qpeDir()+"/etc/nationaldays/"+(*it))) { continue; + } tholidaylist::ConstIterator it; for (it=readit.days().begin();it!=readit.days().end();++it) { _days[it.key()]+=(it.data()); } } init_done = true; } QStringList NationalHoliday::entries(const QDate&aDate) { load_days(); QStringList ret; QDate d(0,aDate.month(),aDate.day()); tholidaylist::Iterator it = _days.find(d); if (it!=_days.end()) { ret+=*it; } return ret; } QStringList NationalHoliday::entries(unsigned year, unsigned month, unsigned day) { return entries(QDate(0,month,day)); } QMap<QDate,QStringList> NationalHoliday::entries(const QDate&start,const QDate&end) { load_days(); QMap<QDate,QStringList> ret; if (start==end) { ret[start]=entries(start); return ret; } QDate d; int daysto; if (end < start) { d = end; daysto = end.daysTo(start); } else { d = start; daysto = start.daysTo(end); } QStringList temp; for (int i=0;i<=daysto;++i) { temp = entries(d.addDays(i)); if (temp.count()==0) continue; ret[d.addDays(i)]+=temp; temp.clear(); } return ret; } QValueList<EffectiveEvent> NationalHoliday::events(const QDate&start,const QDate&end) { QValueList<EffectiveEvent> ret; QDate d = (start<end?start:end); int daysto = start.daysTo(end); if (daysto < 0) { daysto = end.daysTo(start); } QStringList temp; for (int i =0; i<=daysto;++i) { temp = entries(d.addDays(i)); if (temp.count()==0) { continue; } for (unsigned j=0;j<temp.count();++j) { Event ev; ev.setDescription(temp[j]); ev.setStart(d.addDays(i)); ev.setAllDay(true); ret.append(EffectiveEvent(ev,d.addDays(i))); } } return ret; } +Opie::Datebook::HolidayPluginConfigWidget*NationalHoliday::configWidget(QWidget *parent, const char *name, QWidget::WFlags fl) +{ + return new NationalHolidayConfigWidget(parent,name,fl); +} + EXPORT_HOLIDAY_PLUGIN(NationalHoliday); diff --git a/core/pim/datebook/holiday/national/nationalholiday.h b/core/pim/datebook/holiday/national/nationalholiday.h index 6581263..afce3f4 100644 --- a/core/pim/datebook/holiday/national/nationalholiday.h +++ b/core/pim/datebook/holiday/national/nationalholiday.h @@ -1,34 +1,36 @@ #ifndef __NATIONAL_HOLIDAY_H #define __NATIONAL_HOLIDAY_H #include "nationalcfg.h" #include <opie2/oholidayplugin.h> #include <opie2/oholidaypluginif.h> +#include <opie2/oholidayplugincfgwidget.h> #include <qmap.h> #include <qstringlist.h> class NationalHoliday:public Opie::Datebook::HolidayPlugin { public: NationalHoliday(); virtual ~NationalHoliday(){} virtual QString description(); virtual QStringList entries(const QDate&); virtual QStringList entries(unsigned year, unsigned month, unsigned day); virtual QMap<QDate,QStringList> entries(const QDate&,const QDate&); virtual QValueList<EffectiveEvent> events(const QDate&,const QDate&); + virtual Opie::Datebook::HolidayPluginConfigWidget*configWidget(QWidget *parent=0, const char *name = 0, QWidget::WFlags fl = 0); protected: void init(); unsigned int _lastyear; tholidaylist _days; QStringList files; bool init_done:1; void load_days(); }; #endif |