• Skip to content
  • Skip to link menu
KDE 4.6 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 }
00448 
00449 // The slot for the combo box when changed
00450 void HolidayRegionSelector::itemChanged( int index )
00451 {
00452   KComboBox *combo = static_cast<KComboBox*> (sender());
00453   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00454   bool found = false;
00455   while ( *it && !found ) {
00456     if ( d->itemCombo( (*it) ) == combo ) {
00457       (*it)->setData( Private::ComboColumn, Qt::UserRole, d->itemCombo( (*it) )->itemData( index ) );
00458       if ( d->itemRegionUseFlags( (*it) ) == NotUsed )  {
00459         d->setItemStatus( (*it), RegionAvailable );
00460       } else {
00461         d->setItemStatus( (*it), RegionSelected );
00462       }
00463       found = true;
00464     }
00465     ++it;
00466   }
00467 }
00468 
00469 void HolidayRegionSelector::clearSelection()
00470 {
00471   d->clearSelection();
00472 }
00473 
00474 void HolidayRegionSelector::setLanguageFilter( const QStringList &languages )
00475 {
00476   // First reset to visible those languages previously hidden
00477   QTreeWidgetItemIterator it( d->m_ui.regionTreeWidget );
00478   while ( *it ) {
00479     if ( !d->m_languageFilter.contains( (*it)->data( Private::LanguageColumn, Qt::UserRole ).toString() ) ) {
00480       d->setItemStatus( (*it), RegionAvailable );
00481     }
00482     ++it;
00483   }
00484   // Now hide those languages not in the new list
00485   d->m_languageFilter = languages;
00486   QTreeWidgetItemIterator it2( d->m_ui.regionTreeWidget );
00487   while ( *it2 ) {
00488     QString language = (*it2)->data( Private::LanguageColumn, Qt::UserRole ).toString();
00489     if ( d->m_languageFilter.contains( language ) ) {
00490       // Make sure the parent is always visible, otherwise the child is not visible
00491       if ( (*it2)->parent() && (*it2)->parent() != d->m_ui.regionTreeWidget->invisibleRootItem() ) {
00492         d->setItemStatus( (*it2)->parent(), RegionAvailable );
00493       }
00494     } else {
00495       d->setItemStatus( (*it2), RegionHidden );
00496     }
00497     ++it2;
00498   }
00499 }
00500 
00501 QStringList HolidayRegionSelector::languageFilter() const
00502 {
00503   return d->m_languageFilter;
00504 }
00505 
00506 void HolidayRegionSelector::setSearchHidden( bool hideSearch )
00507 {
00508   d->m_ui.searchLineWidget->setHidden( hideSearch );
00509 }
00510 
00511 bool HolidayRegionSelector::searchHidden() const
00512 {
00513   return d->m_ui.searchLineWidget->isHidden();
00514 }
00515 
00516 void HolidayRegionSelector::setLanguageHidden( bool hideLanguage )
00517 {
00518   d->m_ui.regionTreeWidget->setColumnHidden( Private::LanguageColumn, hideLanguage );
00519 }
00520 
00521 bool HolidayRegionSelector::languageHidden() const
00522 {
00523   return d->m_ui.regionTreeWidget->isColumnHidden( Private::LanguageColumn );
00524 }
00525 
00526 void HolidayRegionSelector::setDescriptionHidden( bool hideDescription )
00527 {
00528   d->m_ui.regionTreeWidget->setColumnHidden( Private::DescriptionColumn, hideDescription );
00529 }
00530 
00531 bool HolidayRegionSelector::descriptionHidden() const
00532 {
00533   return d->m_ui.regionTreeWidget->isColumnHidden( Private::DescriptionColumn );
00534 }
00535 
00536 #include "holidayregionselector.moc"

KHolidays Library

Skip menu "KHolidays Library"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • 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.3
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