summaryrefslogtreecommitdiffstats
path: root/korganizer/navigatorbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'korganizer/navigatorbar.cpp')
-rw-r--r--korganizer/navigatorbar.cpp193
1 files changed, 193 insertions, 0 deletions
diff --git a/korganizer/navigatorbar.cpp b/korganizer/navigatorbar.cpp
new file mode 100644
index 000000000..dd7b45ea6
--- /dev/null
+++ b/korganizer/navigatorbar.cpp
@@ -0,0 +1,193 @@
+/*
+ This file is part of KOrganizer.
+
+ Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qstring.h>
+#include <qtooltip.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qframe.h>
+#include <qpopupmenu.h>
+#include <qlabel.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+
+#include "koglobals.h"
+#include "koprefs.h"
+
+#include <kcalendarsystem.h>
+
+#include "navigatorbar.h"
+
+ActiveLabel::ActiveLabel( QWidget *parent, const char *name )
+ : QLabel( parent, name )
+{
+}
+
+void ActiveLabel::mouseReleaseEvent( QMouseEvent * )
+{
+ emit clicked();
+}
+
+
+NavigatorBar::NavigatorBar( QWidget *parent, const char *name )
+ : QWidget( parent, name ), mHasMinWidth( false )
+{
+ QFont tfont = font();
+ tfont.setPointSize( 10 );
+ tfont.setBold( false );
+
+ bool isRTL = KOGlobals::self()->reverseLayout();
+
+ QPixmap pix;
+ // Create backward navigation buttons
+ mPrevYear = new QPushButton( this );
+ pix = KOGlobals::self()->smallIcon( isRTL ? "2rightarrow" : "2leftarrow" );
+ mPrevYear->setPixmap( pix );
+ mPrevYear->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ QToolTip::add( mPrevYear, i18n("Previous year") );
+
+ pix = KOGlobals::self()->smallIcon( isRTL ? "1rightarrow" : "1leftarrow");
+ mPrevMonth = new QPushButton( this );
+ mPrevMonth->setPixmap( pix );
+ mPrevMonth->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ QToolTip::add( mPrevMonth, i18n("Previous month") );
+
+ // Create forward navigation buttons
+ pix = KOGlobals::self()->smallIcon( isRTL ? "1leftarrow" : "1rightarrow");
+ mNextMonth = new QPushButton( this );
+ mNextMonth->setPixmap( pix );
+ mNextMonth->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ QToolTip::add( mNextMonth, i18n("Next month") );
+
+ pix = KOGlobals::self()->smallIcon( isRTL ? "2leftarrow" : "2rightarrow");
+ mNextYear = new QPushButton( this );
+ mNextYear->setPixmap( pix );
+ mNextYear->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
+ QToolTip::add( mNextYear, i18n("Next year") );
+
+ // Create month name button
+ mMonth = new ActiveLabel( this );
+ mMonth->setFont( tfont );
+ mMonth->setAlignment( AlignCenter );
+ mMonth->setMinimumHeight( mPrevYear->sizeHint().height() );
+ QToolTip::add( mMonth, i18n("Select a month") );
+
+ // set up control frame layout
+ QBoxLayout *ctrlLayout = new QHBoxLayout( this, 0, 4 );
+ ctrlLayout->addWidget( mPrevYear, 3 );
+ ctrlLayout->addWidget( mPrevMonth, 3 );
+ ctrlLayout->addWidget( mMonth, 3 );
+ ctrlLayout->addWidget( mNextMonth, 3 );
+ ctrlLayout->addWidget( mNextYear, 3 );
+
+ connect( mPrevYear, SIGNAL( clicked() ), SIGNAL( goPrevYear() ) );
+ connect( mPrevMonth, SIGNAL( clicked() ), SIGNAL( goPrevMonth() ) );
+ connect( mNextMonth, SIGNAL( clicked() ), SIGNAL( goNextMonth() ) );
+ connect( mNextYear, SIGNAL( clicked() ), SIGNAL( goNextYear() ) );
+ connect( mMonth, SIGNAL( clicked() ), SLOT( selectMonth() ) );
+}
+
+NavigatorBar::~NavigatorBar()
+{
+}
+
+void NavigatorBar::showButtons( bool left, bool right )
+{
+ if ( left ) {
+ mPrevYear->show();
+ mPrevMonth->show();
+ } else {
+ mPrevYear->hide();
+ mPrevMonth->hide();
+ }
+
+ if ( right ) {
+ mNextYear->show();
+ mNextMonth->show();
+ } else {
+ mNextYear->hide();
+ mNextMonth->hide();
+ }
+
+}
+
+void NavigatorBar::selectDates( const KCal::DateList &dateList )
+{
+ if ( dateList.count() > 0 ) {
+ mDate = dateList.first();
+
+ const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
+
+ if ( !mHasMinWidth ) {
+ // Set minimum width to width of widest month name label
+ int i;
+ int maxwidth = 0;
+
+ for( i = 1; i <= calSys->monthsInYear( mDate ); ++i ) {
+ int w = QFontMetrics( mMonth->font() ).width( QString("%1 8888")
+ .arg( calSys->monthName( i, calSys->year( mDate ) ) ) );
+ if ( w > maxwidth ) maxwidth = w;
+ }
+ mMonth->setMinimumWidth( maxwidth );
+
+ mHasMinWidth = true;
+ }
+
+ // compute the label at the top of the navigator
+ mMonth->setText( i18n( "monthname year", "%1 %2" )
+ .arg( calSys->monthName( mDate ) )
+ .arg( calSys->year( mDate ) ) );
+ }
+}
+
+void NavigatorBar::selectMonth()
+{
+ // every year can have different month names (in some calendar systems)
+ const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
+
+ int i, month, months = calSys->monthsInYear( mDate );
+
+ QPopupMenu *popup = new QPopupMenu( mMonth );
+
+ for ( i = 1; i <= months; i++ )
+ popup->insertItem( calSys->monthName( i, calSys->year( mDate ) ), i );
+
+ popup->setActiveItem( calSys->month( mDate ) - 1 );
+ popup->setMinimumWidth( mMonth->width() );
+
+ if ( ( month = popup->exec( mMonth->mapToGlobal( QPoint( 0, 0 ) ),
+ calSys->month( mDate ) - 1 ) ) == -1 ) {
+ delete popup;
+ return; // canceled
+ }
+
+ emit goMonth( month );
+
+ delete popup;
+}
+
+#include "navigatorbar.moc"