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 ®ionCode, 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 ®ionCode, 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"