• Skip to content
  • Skip to link menu
KDE 4.7 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • KDE Home
  • Contact Us
 

KHolidays Library

holidayregionselector.cpp
00001 /*
00002   This file is part of the kholidays library.
00003 
00004   Copyright 2010 John Layt <john@layt.net>
00005 
00006   This library is free software; you can redistribute it and/or
00007   modify it under the terms of the GNU Library General Public
00008   License as published by the Free Software Foundation; either
00009   version 2 of the License, or (at your option) any later version.
00010 
00011   This library is distributed in the hope that it will be useful,
00012   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014   GNU Library General Public License for more details.
00015 
00016   You should have received a copy of the GNU Library General Public License
00017   along with this library; see the file COPYING.LIB.  If not, write to the
00018   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019   Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include "holidayregionselector.h"
00023 #include "ui_holidayregionselector.h"
00024 
00025 #include "holidayregion.h"
00026 
00027 #include <KDebug>
00028 #include <KLocale>
00029 #include <KComboBox>
00030 
00031 using namespace KHolidays;
00032 
00033 class HolidayRegionSelector::Private
00034 {
00035 public:
00036   Private( HolidayRegionSelector *q_ptr )
00037   {
00038     q = q_ptr;
00039   }
00040 
00041   ~Private()
00042   {
00043   }
00044 
00045   // Reorder this to change column order
00046   enum Column {
00047     RegionColumn = 0,
00048     LanguageColumn,
00049     DescriptionColumn,
00050     SelectColumn,
00051     ComboColumn
00052   };
00053 
00054   void clearSelection();
00055   QTreeWidgetItem *findItem( const QString &holidayRegionCode );
00056   void initItem( QTreeWidgetItem *listItem, HolidayRegion *region );
00057   QString itemRegion( QTreeWidgetItem *item );
00058   QString itemLanguage( QTreeWidgetItem *item );
00059   SelectionStatus itemSelectionStatus( QTreeWidgetItem *item );
00060   void setItemStatus( QTreeWidgetItem *item, SelectionStatus status );
00061   KComboBox *itemCombo( QTreeWidgetItem *item );
00062   void setItemRegionUseFlags( QTreeWidgetItem *item, RegionUseFlags regionUseFlags );
00063   HolidayRegionSelector::RegionUseFlags itemRegionUseFlags( QTreeWidgetItem *item );
00064 
00065   QAbstractItemView::SelectionMode m_selectionMode;
00066   bool m_enableRegionUseFlags;
00067   QStringList m_languageFilter;
00068   QStringList m_holidayRegionCodes;
00069   Ui::holidayRegionSelector m_ui;
00070   HolidayRegionSelector *q;
00071 };
00072 
00073 void HolidayRegionSelector::Private::clearSelection()
00074 {
00075   m_ui.regionTreeWidget->blockSignals( true );
00076   QTreeWidgetItemIterator it( m_ui.regionTreeWidget, QTreeWidgetItemIterator::Checked );
00077   while ( *it ) {
00078     (*it)->setCheckState( Private::SelectColumn, Qt::Unchecked );
00079     (*it)->setData( Private::SelectColumn, Qt::UserRole, RegionAvailable );
00080     itemCombo( (*it) )->setCurrentIndex( 0 );
00081     (*it)->setData( Private::ComboColumn, Qt::UserRole, NotUsed );
00082     ++it;
00083   }
00084   m_ui.regionTreeWidget->blockSignals( false );
00085 }
00086 
00087 QTreeWidgetItem *HolidayRegionSelector::Private::findItem( const QString &holidayRegionCode )
00088 {
00089   QTreeWidgetItemIterator it( m_ui.regionTreeWidget );
00090   while ( *it ) {
00091     if ( (*it)->data( HolidayRegionSelector::Private::RegionColumn, Qt::UserRole ) == holidayRegionCode ) {
00092       return (*it);
00093     }
00094     ++it;
00095   }
00096   return 0;
00097 }
00098 
00099 void HolidayRegionSelector::Private::initItem( QTreeWidgetItem *listItem, HolidayRegion *region )
00100 {
00101   m_ui.regionTreeWidget->blockSignals( true );
00102   QString languageName = KGlobal::locale()->languageCodeToName( region->languageCode() );
00103   listItem->setCheckState( Private::SelectColumn, Qt::Unchecked );
00104   QString text = i18n("<p>Select to use Holiday Region</p>");
00105   listItem->setToolTip( Private::SelectColumn, text );
00106   listItem->setToolTip( Private::ComboColumn, text );
00107   text = i18n("<p>Select to use Holiday Region</p>");
00108   listItem->setToolTip( Private::SelectColumn, text );
00109   listItem->setToolTip( Private::ComboColumn, text );
00110   listItem->setText( Private::RegionColumn, region->name() );
00111   QString toolTip = i18n("<p><b>Region:</b> %1<br/>"
00112                          "<b>Language:</b> %2<br/>"
00113                          "<b>Description:</b> %3</p>",
00114                          region->name(), languageName, region->description() );
00115   listItem->setToolTip( Private::RegionColumn, toolTip );
00116   listItem->setData( Private::RegionColumn, Qt::UserRole, region->regionCode() );
00117   listItem->setText( Private::LanguageColumn, languageName );
00118   listItem->setData( Private::LanguageColumn, Qt::UserRole, region->languageCode() );
00119   listItem->setText( Private::DescriptionColumn, region->description() );
00120   listItem->setToolTip( Private::DescriptionColumn, region->description() );
00121   KComboBox *combo = new KComboBox();
00122   combo->setAutoFillBackground( true );
00123   QString comboText = i18n("<p>You can choose to display the Holiday Region for information only, or to use the Holiday Region when displaying or calculating days off such as Public Holidays.  If you choose to use the Holiday Region for Days Off, then only those Holiday Events marked in the Holiday Region as Days Off will be used for non-work days, Holiday Events that are not marked in the Holiday Region as Days Off will continue to be work days.</p>");
00124   combo->setToolTip( comboText );
00125   comboText = i18nc("Combobox label, Holiday Region not used", "Not Used");
00126   combo->addItem( comboText, QVariant( NotUsed ) );
00127   comboText = i18nc("Combobox label, use Holiday Region for information only", "Information");
00128   combo->addItem( comboText, QVariant( UseInformationOnly ) );
00129   comboText = i18nc("Combobox label, use Holiday Region for days off", "Days Off");
00130   combo->addItem( comboText, QVariant( UseDaysOff ) );
00131   combo->setCurrentIndex( 0 );
00132   listItem->setData( Private::ComboColumn, Qt::UserRole, NotUsed );
00133   m_ui.regionTreeWidget->setItemWidget( listItem, ComboColumn, combo );
00134   connect( combo, SIGNAL( currentIndexChanged( int ) ),
00135            q,     SLOT(   itemChanged( int ) ) );
00136   m_ui.regionTreeWidget->blockSignals( false );
00137 }
00138 
00139 QString HolidayRegionSelector::Private::itemRegion( QTreeWidgetItem *item )
00140 {
00141   return item->data( Private::RegionColumn, Qt::UserRole ).toString();
00142 }
00143 
00144 QString HolidayRegionSelector::Private::itemLanguage( QTreeWidgetItem *item )
00145 {
00146   return item->data( Private::LanguageColumn, Qt::UserRole ).toString();
00147 }
00148 
00149 HolidayRegionSelector::SelectionStatus HolidayRegionSelector::Private::itemSelectionStatus( QTreeWidgetItem *item )
00150 {
00151   return (HolidayRegionSelector::SelectionStatus)
00152          item->data( Private::SelectColumn, Qt::UserRole ).toInt();
00153 }
00154 
00155 void HolidayRegionSelector::Private::setItemRegionUseFlags( QTreeWidgetItem *item, RegionUseFlags regionUseFlags )
00156 {
00157   // Just do simple flags for now, cheat on the index
00158   item->setData( ComboColumn, Qt::UserRole, QVariant( regionUseFlags ) );
00159   if ( regionUseFlags & UseDaysOff ){
00160     setItemStatus( item, RegionSelected );
00161     itemCombo( item )->setCurrentIndex( 2 );
00162   } else if ( regionUseFlags & UseInformationOnly ) {
00163     setItemStatus( item, RegionSelected );
00164     itemCombo( item )->setCurrentIndex( 1 );
00165   } else { // NotUsed
00166     setItemStatus( item, RegionAvailable );
00167     itemCombo( item )->setCurrentIndex( 0 );
00168   }
00169 }
00170 
00171 HolidayRegionSelector::RegionUseFlags HolidayRegionSelector::Private::itemRegionUseFlags( QTreeWidgetItem *item )
00172 {
00173   return (RegionUseFlags) item->data( ComboColumn, Qt::UserRole ).toInt();
00174 }
00175 
00176 KComboBox *HolidayRegionSelector::Private::itemCombo( QTreeWidgetItem *item )
00177 {
00178   return static_cast<KComboBox*> (m_ui.regionTreeWidget->itemWidget( item, ComboColumn ) );
00179 }
00180 
00181 void HolidayRegionSelector::Private::setItemStatus( QTreeWidgetItem *item, SelectionStatus status )
00182 {
00183   if ( m_selectionMode == QAbstractItemView::SingleSelection &&
00184        status == RegionSelected ) {
00185     clearSelection();
00186   }
00187 
00188   Qt::CheckState selectStatus = Qt::Unchecked;
00189   bool hidden = false;
00190   bool disabled = false;
00191 
00192   switch ( status ) {
00193   case RegionHidden:
00194     hidden = true;
00195     disabled = true;
00196     break;
00197   case RegionDisabled:
00198     disabled = true;
00199     break;
00200   case RegionAvailable:
00201     break;
00202   case RegionSelected:
00203   {
00204     if ( m_selectionMode != QAbstractItemView::NoSelection ) {
00205       selectStatus = Qt::Checked;
00206     }
00207     break;
00208   }
00209   default:
00210     break;
00211   }
00212 
00213   m_ui.regionTreeWidget->blockSignals( true );
00214   item->setData( Private::SelectColumn, Qt::UserRole, status );
00215   item->setCheckState( Private::SelectColumn, selectStatus );
00216   item->setHidden( hidden );
00217   item->setDisabled( disabled );
00218   m_ui.regionTreeWidget->blockSignals( false );
00219 }
00220 
00221 HolidayRegionSelector::HolidayRegionSelector( QWidget *parent )
00222                      : QWidget( parent ),
00223                        d( new Private( this ) )
00224 {
00225   d->m_ui.setupUi( this );
00226 
00227   // Setup the columns
00228   d->m_ui.regionTreeWidget->setColumnCount( 5 );
00229   QTreeWidgetItem *headerItem = d->m_ui.regionTreeWidget->headerItem();
00230   QString header = i18nc( "Header for Select column", "Select" );
00231   QString text = i18n("<p>This column selects to use the Holiday Region</p>");
00232   headerItem->setText( Private::SelectColumn, header );
00233   headerItem->setToolTip( Private::SelectColumn, text );
00234   headerItem->setWhatsThis( Private::SelectColumn, text );
00235   headerItem->setText( Private::ComboColumn, header );
00236   headerItem->setToolTip( Private::ComboColumn, text );
00237   headerItem->setWhatsThis( Private::ComboColumn, text );
00238   header = i18nc( "Header for Holiday Region column", "Region" );
00239   text = i18n("<p>This column displays the name of the Holiday Region</p>");
00240   headerItem->setText( Private::RegionColumn, header );
00241   headerItem->setToolTip( Private::RegionColumn, text );
00242   headerItem->setWhatsThis( Private::RegionColumn, text );
00243   header = i18nc( "Header for Language column", "Language" );
00244   text = i18n("<p>This column displays the language of the Holiday Region</p>");
00245   headerItem->setText( Private::LanguageColumn, header );
00246   headerItem->setToolTip( Private::LanguageColumn, text );
00247   headerItem->setWhatsThis( Private::LanguageColumn, text );
00248   header = i18nc( "Header for Description column", "Description" );
00249   text = i18n("<p>This column displays the description of the Holiday Region</p>");
00250   headerItem->setText( Private::DescriptionColumn, header );
00251   headerItem->setToolTip( Private::DescriptionColumn, text );
00252   headerItem->setWhatsThis( Private::DescriptionColumn, text );
00253 
00254   d->m_ui.regionTreeWidget->setSelectionMode( QAbstractItemView::NoSelection );
00255   d->m_ui.regionTreeWidget->setItemsExpandable( false );
00256   d->m_ui.regionTreeWidget->setUniformRowHeights( true );
00257   d->m_ui.regionTreeWidget->setAllColumnsShowFocus( true );
00258   connect( d->m_ui.regionTreeWidget, SIGNAL( itemChanged( QTreeWidgetItem*, int ) ),
00259            this,                     SLOT(   itemChanged( QTreeWidgetItem*, int ) ) );
00260 
00261   QMap<QString, QStringList> regionCodeMap;
00262   QMap<QString, HolidayRegion*> regionMap;
00263   foreach ( const QString &regionCode, HolidayRegion::regionCodes() ) {
00264     regionMap[regionCode] = new HolidayRegion( regionCode );
00265     QString country = regionMap[regionCode]->countryCode().split('-').at(0);
00266     regionCodeMap[country].append( regionCode );
00267   }
00268 
00269   QMapIterator<QString, QStringList> it( regionCodeMap );
00270   while ( it.hasNext() ) {
00271     it.next();
00272     // if only 1 region for country and that region is the country, then only show the country line
00273     // Otherwise show a non-selectable country header and list all regions below it
00274     QTreeWidgetItem *rootItem = new QTreeWidgetItem( d->m_ui.regionTreeWidget );
00275     QString country = it.key();
00276     if ( it.value().count() == 1 && regionMap[it.value().at( 0 )]->countryCode() == country ) {
00277       d->initItem( rootItem, regionMap[ it.value().at( 0 ) ] );
00278     } else {
00279       rootItem->setText( Private::RegionColumn,
00280                          KGlobal::locale()->countryCodeToName( country ) );
00281       d->m_ui.regionTreeWidget->setFirstItemColumnSpanned ( rootItem, true );
00282       foreach ( const QString &regionCode, it.value() ) {
00283         QTreeWidgetItem *childItem = new QTreeWidgetItem( rootItem );
00284         d->initItem( childItem, regionMap[ regionCode ] );
00285       }
00286     }
00287   }
00288 
00289   QMapIterator<QString, HolidayRegion*> i( regionMap );
00290   while ( i.hasNext() ) {
00291     i.next();
00292     delete i.value();
00293   }
00294 
00295   d->m_ui.regionTreeWidget->expandAll();
00296   d->m_ui.regionTreeWidget->sortItems( Private::RegionColumn, Qt::AscendingOrder );
00297   d->m_ui.regionTreeWidget->resizeColumnToContents( Private::SelectColumn );
00298   d->m_ui.regionTreeWidget->resizeColumnToContents( Private::ComboColumn );
00299   d->m_ui.regionTreeWidget->resizeColumnToContents( Private::RegionColumn );
00300   d->m_ui.regionTreeWidget->resizeColumnToContents( Private::LanguageColumn );
00301 
00302   // Setup search widget
00303   d->m_ui.searchLineWidget->searchLine()->addTreeWidget( d->m_ui.regionTreeWidget );
00304 
00305   // Default to MultiSelection mode with Region Use Flags
00306   setSelectionMode( QAbstractItemView::MultiSelection );
00307   setRegionUseFlagsEnabled( true );
00308 }
00309 
00310 HolidayRegionSelector::~HolidayRegionSelector()
00311 {
00312   delete d;
00313 }
00314 
00315 QStringList HolidayRegionSelector::holidayRegions() const
00316 {
00317   return d->m_holidayRegionCodes;
00318 }
00319 
00320 void HolidayRegionSelector::setSelectionMode( QAbstractItemView::SelectionMode selectionMode )
00321 {
00322   d->m_selectionMode = selectionMode;
00323 
00324   if ( selectionMode == QAbstractItemView::NoSelection ) {
00325     setRegionUseFlagsEnabled( false );
00326   }
00327 }
00328 
00329 QAbstractItemView::SelectionMode HolidayRegionSelector::selectionMode() const
00330 {
00331   return d->m_selectionMode;
00332 }
00333 
00334 void HolidayRegionSelector::setRegionUseFlagsEnabled( bool enableRegionUseFlags )
00335 {
00336   d->m_enableRegionUseFlags = enableRegionUseFlags;
00337   d->m_ui.regionTreeWidget->setColumnHidden( Private::SelectColumn, enableRegionUseFlags );
00338   d->m_ui.regionTreeWidget->setColumnHidden( Private::ComboColumn, !enableRegionUseFlags );
00339 }
00340 
00341 bool HolidayRegionSelector::regionUseFlagsEnabled() const
00342 {
00343   return d->m_enableRegionUseFlags;
00344 }
00345 
00346 void HolidayRegionSelector::setSelectionStatus( const QString &holidayRegionCode,
00347                                                 HolidayRegionSelector::SelectionStatus status )
00348 {
00349   QTreeWidgetItem *item = d->findItem( holidayRegionCode );
00350   if ( item ) {
00351     d->setItemStatus( item, status );
00352   }
00353 }
00354 
00355 HolidayRegionSelector::SelectionStatus HolidayRegionSelector::selectionStatus( const QString &holidayRegionCode ) const
00356 {
00357   QTreeWidgetItem *item = d->findItem( holidayRegionCode );
00358   if ( item ) {
00359     return d->itemSelectionStatus( item );
00360   }
00361   return HolidayRegionSelector::RegionHidden;
00362 }
00363 
00364 QHash<QString, HolidayRegionSelector::SelectionStatus> HolidayRegionSelector::selectionStatus() const
00365 {
00366   QHash<QString, HolidayRegionSelector::SelectionStatus> selection;
00367   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00368   while ( *it ) {
00369     selection.insert( d->itemRegion( (*it) ), d->itemSelectionStatus( (*it) ) );
00370     ++it;
00371   }
00372   return selection;
00373 }
00374 
00375 QStringList HolidayRegionSelector::selection( HolidayRegionSelector::SelectionStatus selectionStatus ) const
00376 {
00377   if ( selectionMode() == QAbstractItemView::NoSelection ) {
00378     return QStringList();
00379   }
00380 
00381   QStringList selection;
00382   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00383   while ( *it ) {
00384     if ( d->itemSelectionStatus( (*it) ) == selectionStatus ) {
00385       selection.append( d->itemRegion( (*it) ) );
00386     }
00387     ++it;
00388   }
00389   return selection;
00390 }
00391 
00392 QStringList HolidayRegionSelector::selection( HolidayRegionSelector::RegionUseFlags regionUseFlags ) const
00393 {
00394   if ( selectionMode() == QAbstractItemView::NoSelection ) {
00395     return QStringList();
00396   }
00397 
00398   QStringList selection;
00399   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00400   while ( *it ) {
00401     if ( d->itemRegionUseFlags( (*it) ) & regionUseFlags ) {
00402       selection.append( d->itemRegion( (*it) ) );
00403     }
00404     ++it;
00405   }
00406   return selection;
00407 }
00408 
00409 void HolidayRegionSelector::setRegionUseFlags( const QString &holidayRegionCode,
00410                                                HolidayRegionSelector::RegionUseFlags regionUseFlags )
00411 {
00412   QTreeWidgetItem *item = d->findItem( holidayRegionCode );
00413   if ( item ) {
00414     d->setItemRegionUseFlags( item, regionUseFlags );
00415   }
00416 }
00417 
00418 HolidayRegionSelector::RegionUseFlags HolidayRegionSelector::regionUseFlags( const QString &holidayRegionCode ) const
00419 {
00420   QTreeWidgetItem *item = d->findItem( holidayRegionCode );
00421   if ( item ) {
00422     return d->itemRegionUseFlags( item );
00423   }
00424   return HolidayRegionSelector::NotUsed;
00425 }
00426 
00427 QHash<QString, HolidayRegionSelector::RegionUseFlags> HolidayRegionSelector::regionUseFlags() const
00428 {
00429   QHash<QString, HolidayRegionSelector::RegionUseFlags> selection;
00430   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00431   while ( *it ) {
00432     selection.insert( d->itemRegion( (*it) ), d->itemRegionUseFlags( (*it) ) );
00433     ++it;
00434   }
00435   return selection;
00436 }
00437 
00438 void HolidayRegionSelector::itemChanged( QTreeWidgetItem *item, int column )
00439 {
00440   if ( column == Private::SelectColumn ) {
00441     if ( item->checkState( Private::SelectColumn ) == Qt::Unchecked ) {
00442       d->setItemStatus( item, RegionAvailable );
00443     } else {
00444       d->setItemStatus( item, RegionSelected );
00445     }
00446   }
00447   emit selectionChanged();
00448 }
00449 
00450 // The slot for the combo box when changed
00451 void HolidayRegionSelector::itemChanged( int index )
00452 {
00453   KComboBox *combo = static_cast<KComboBox*> (sender());
00454   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00455   bool found = false;
00456   while ( *it && !found ) {
00457     if ( d->itemCombo( (*it) ) == combo ) {
00458       (*it)->setData( Private::ComboColumn, Qt::UserRole, d->itemCombo( (*it) )->itemData( index ) );
00459       if ( d->itemRegionUseFlags( (*it) ) == NotUsed )  {
00460         d->setItemStatus( (*it), RegionAvailable );
00461       } else {
00462         d->setItemStatus( (*it), RegionSelected );
00463       }
00464       found = true;
00465     }
00466     ++it;
00467   }
00468 }
00469 
00470 void HolidayRegionSelector::clearSelection()
00471 {
00472   d->clearSelection();
00473 }
00474 
00475 void HolidayRegionSelector::setLanguageFilter( const QStringList &languages )
00476 {
00477   // First reset to visible those languages previously hidden
00478   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00479   while ( *it ) {
00480     if ( !d->m_languageFilter.contains( (*it)->data( Private::LanguageColumn, Qt::UserRole ).toString() ) ) {
00481       d->setItemStatus( (*it), RegionAvailable );
00482     }
00483     ++it;
00484   }
00485   // Now hide those languages not in the new list
00486   d->m_languageFilter = languages;
00487   QTreeWidgetItemIterator it2( d->m_ui.regionTreeWidget );
00488   while ( *it2 ) {
00489     QString language = (*it2)->data( Private::LanguageColumn, Qt::UserRole ).toString();
00490     if ( d->m_languageFilter.contains( language ) ) {
00491       // Make sure the parent is always visible, otherwise the child is not visible
00492       if ( (*it2)->parent() && (*it2)->parent() != d->m_ui.regionTreeWidget->invisibleRootItem() ) {
00493         d->setItemStatus( (*it2)->parent(), RegionAvailable );
00494       }
00495     } else {
00496       d->setItemStatus( (*it2), RegionHidden );
00497     }
00498     ++it2;
00499   }
00500 }
00501 
00502 QStringList HolidayRegionSelector::languageFilter() const
00503 {
00504   return d->m_languageFilter;
00505 }
00506 
00507 void HolidayRegionSelector::setSearchHidden( bool hideSearch )
00508 {
00509   d->m_ui.searchLineWidget->setHidden( hideSearch );
00510 }
00511 
00512 bool HolidayRegionSelector::searchHidden() const
00513 {
00514   return d->m_ui.searchLineWidget->isHidden();
00515 }
00516 
00517 void HolidayRegionSelector::setLanguageHidden( bool hideLanguage )
00518 {
00519   d->m_ui.regionTreeWidget->setColumnHidden( Private::LanguageColumn, hideLanguage );
00520 }
00521 
00522 bool HolidayRegionSelector::languageHidden() const
00523 {
00524   return d->m_ui.regionTreeWidget->isColumnHidden( Private::LanguageColumn );
00525 }
00526 
00527 void HolidayRegionSelector::setDescriptionHidden( bool hideDescription )
00528 {
00529   d->m_ui.regionTreeWidget->setColumnHidden( Private::DescriptionColumn, hideDescription );
00530 }
00531 
00532 bool HolidayRegionSelector::descriptionHidden() const
00533 {
00534   return d->m_ui.regionTreeWidget->isColumnHidden( Private::DescriptionColumn );
00535 }
00536 
00537 #include "holidayregionselector.moc"

KHolidays Library

Skip menu "KHolidays Library"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  •   contact
  •   kmime
  • kabc
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.7.5
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal