korganizer Library API Documentation

navigatorbar.cpp

00001 /* 00002 This file is part of KOrganizer. 00003 00004 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 00005 00006 This program is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 This program 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 General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program; if not, write to the Free Software 00018 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00019 00020 As a special exception, permission is given to link this program 00021 with any edition of Qt, and distribute the resulting executable, 00022 without including the source code for Qt in the source distribution. 00023 */ 00024 00025 #include <qstring.h> 00026 #include <qtooltip.h> 00027 #include <qpushbutton.h> 00028 #include <qlayout.h> 00029 #include <qframe.h> 00030 #include <qpopupmenu.h> 00031 #include <qlabel.h> 00032 00033 #include <kdebug.h> 00034 #include <klocale.h> 00035 #include <kglobal.h> 00036 #include <kiconloader.h> 00037 00038 #include "koglobals.h" 00039 #include "koprefs.h" 00040 #ifndef KORG_NOPLUGINS 00041 #include "kocore.h" 00042 #endif 00043 00044 #include <kcalendarsystem.h> 00045 00046 #include "navigatorbar.h" 00047 00048 ActiveLabel::ActiveLabel( QWidget *parent, const char *name ) 00049 : QLabel( parent, name ) 00050 { 00051 } 00052 00053 void ActiveLabel::mouseReleaseEvent( QMouseEvent * ) 00054 { 00055 emit clicked(); 00056 } 00057 00058 00059 NavigatorBar::NavigatorBar( QWidget *parent, const char *name ) 00060 : QWidget( parent, name ), mHasMinWidth( false ) 00061 { 00062 QBoxLayout *topLayout = new QHBoxLayout( this ); 00063 00064 // Set up the control buttons and date label 00065 mCtrlFrame = new QFrame( this ); 00066 mCtrlFrame->setFrameStyle( QFrame::Panel | QFrame::Raised ); 00067 mCtrlFrame->setLineWidth( 1 ); 00068 00069 topLayout->addWidget( mCtrlFrame ); 00070 00071 QFont tfont = font(); 00072 tfont.setPointSize( 10 ); 00073 tfont.setBold( false ); 00074 00075 bool isRTL = KOGlobals::self()->reverseLayout(); 00076 00077 // Create month name button 00078 mMonth = new ActiveLabel( mCtrlFrame ); 00079 mMonth->setFont( tfont ); 00080 mMonth->setAlignment( AlignCenter ); 00081 QToolTip::add( mMonth, i18n("Select a month") ); 00082 00083 QPixmap pix; 00084 // Create backward navigation buttons 00085 mPrevYear = new QPushButton( mCtrlFrame ); 00086 pix = KOGlobals::self()->smallIcon( isRTL ? "2rightarrow" : "2leftarrow" ); 00087 mPrevYear->setPixmap( pix ); 00088 mPrevYear->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); 00089 QToolTip::add( mPrevYear, i18n("Previous year") ); 00090 00091 pix = KOGlobals::self()->smallIcon( isRTL ? "1rightarrow" : "1leftarrow"); 00092 mPrevMonth = new QPushButton( mCtrlFrame ); 00093 mPrevMonth->setPixmap( pix ); 00094 mPrevMonth->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); 00095 QToolTip::add( mPrevMonth, i18n("Previous month") ); 00096 00097 // Create forward navigation buttons 00098 pix = KOGlobals::self()->smallIcon( isRTL ? "1leftarrow" : "1rightarrow"); 00099 mNextMonth = new QPushButton( mCtrlFrame ); 00100 mNextMonth->setPixmap( pix ); 00101 mNextMonth->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); 00102 QToolTip::add( mNextMonth, i18n("Next month") ); 00103 00104 pix = KOGlobals::self()->smallIcon( isRTL ? "2leftarrow" : "2rightarrow"); 00105 mNextYear = new QPushButton( mCtrlFrame ); 00106 mNextYear->setPixmap( pix ); 00107 mNextYear->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); 00108 QToolTip::add( mNextYear, i18n("Next year") ); 00109 00110 // set up control frame layout 00111 QBoxLayout *ctrlLayout = new QHBoxLayout( mCtrlFrame, 1 ); 00112 ctrlLayout->addWidget( mPrevYear, 3 ); 00113 ctrlLayout->addWidget( mPrevMonth, 3 ); 00114 ctrlLayout->addSpacing( 2 ); 00115 ctrlLayout->addWidget( mMonth, 3 ); 00116 ctrlLayout->addSpacing( 2 ); 00117 ctrlLayout->addWidget( mNextMonth, 3 ); 00118 ctrlLayout->addWidget( mNextYear, 3 ); 00119 00120 connect( mPrevYear, SIGNAL( clicked() ), SIGNAL( goPrevYear() ) ); 00121 connect( mPrevMonth, SIGNAL( clicked() ), SIGNAL( goPrevMonth() ) ); 00122 connect( mNextMonth, SIGNAL( clicked() ), SIGNAL( goNextMonth() ) ); 00123 connect( mNextYear, SIGNAL( clicked() ), SIGNAL( goNextYear() ) ); 00124 connect( mMonth, SIGNAL( clicked() ), SLOT( selectMonth() ) ); 00125 } 00126 00127 NavigatorBar::~NavigatorBar() 00128 { 00129 } 00130 00131 void NavigatorBar::showButtons( bool left, bool right ) 00132 { 00133 if ( left ) { 00134 mPrevYear->show(); 00135 mPrevMonth->show(); 00136 } else { 00137 mPrevYear->hide(); 00138 mPrevMonth->hide(); 00139 } 00140 00141 if ( right ) { 00142 mNextYear->show(); 00143 mNextMonth->show(); 00144 } else { 00145 mNextYear->hide(); 00146 mNextMonth->hide(); 00147 } 00148 00149 } 00150 00151 void NavigatorBar::selectDates( const KCal::DateList &dateList ) 00152 { 00153 if ( dateList.count() > 0 ) { 00154 mDate = dateList.first(); 00155 00156 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem(); 00157 00158 if ( !mHasMinWidth ) { 00159 // Set minimum width to width of widest month name label 00160 int i; 00161 int maxwidth = 0; 00162 00163 for( i = 1; i <= calSys->monthsInYear( mDate ); ++i ) { 00164 int w = QFontMetrics( mMonth->font() ).width( QString("%1 8888") 00165 .arg( calSys->monthName( i, calSys->year( mDate ) ) ) ); 00166 if ( w > maxwidth ) maxwidth = w; 00167 } 00168 mMonth->setMinimumWidth( maxwidth ); 00169 00170 mHasMinWidth = true; 00171 } 00172 00173 // compute the label at the top of the navigator 00174 mMonth->setText( QString("%1 %2").arg( calSys->monthName( mDate ) ) 00175 .arg( calSys->year( mDate ) ) ); 00176 } 00177 } 00178 00179 void NavigatorBar::selectMonth() 00180 { 00181 // every year can have different month names (in some calendar systems) 00182 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem(); 00183 00184 int i, month, months = calSys->monthsInYear( mDate ); 00185 00186 QPopupMenu *popup = new QPopupMenu( mMonth ); 00187 00188 for ( i = 1; i <= months; i++ ) 00189 popup->insertItem( calSys->monthName( i, calSys->year( mDate ) ), i ); 00190 00191 popup->setActiveItem( calSys->month( mDate ) - 1 ); 00192 popup->setMinimumWidth( mMonth->width() ); 00193 00194 if ( ( month = popup->exec( mMonth->mapToGlobal( QPoint( 0, 0 ) ), 00195 calSys->month( mDate ) - 1 ) ) == -1 ) { 00196 delete popup; 00197 return; // canceled 00198 } 00199 00200 emit goMonth( month ); 00201 00202 delete popup; 00203 } 00204 00205 #include "navigatorbar.moc"
KDE Logo
This file is part of the documentation for korganizer Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 1 15:19:32 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003