summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/mainwindow.cpp106
-rw-r--r--korganizer/mainwindow.h15
-rw-r--r--microkde/kdatetbl.cpp1091
-rw-r--r--microkde/kdatetbl.h63
4 files changed, 775 insertions, 500 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 348dd5e..119e28a 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -43,64 +43,65 @@
43#include <libkcal/kincidenceformatter.h> 43#include <libkcal/kincidenceformatter.h>
44#include <libkdepim/kpimglobalprefs.h> 44#include <libkdepim/kpimglobalprefs.h>
45 45
46#include "calendarview.h" 46#include "calendarview.h"
47#include "koviewmanager.h" 47#include "koviewmanager.h"
48#include "datenavigator.h" 48#include "datenavigator.h"
49#include "koagendaview.h" 49#include "koagendaview.h"
50#include "koagenda.h" 50#include "koagenda.h"
51#include "kodialogmanager.h" 51#include "kodialogmanager.h"
52#include "kdialogbase.h" 52#include "kdialogbase.h"
53#include "kapplication.h" 53#include "kapplication.h"
54#include "kofilterview.h" 54#include "kofilterview.h"
55#include "kstandarddirs.h" 55#include "kstandarddirs.h"
56#include "koprefs.h" 56#include "koprefs.h"
57#include "kfiledialog.h" 57#include "kfiledialog.h"
58#include "koglobals.h" 58#include "koglobals.h"
59#include "kglobal.h" 59#include "kglobal.h"
60#include "klocale.h" 60#include "klocale.h"
61#include "kconfig.h" 61#include "kconfig.h"
62#include "simplealarmclient.h" 62#include "simplealarmclient.h"
63#include "externalapphandler.h" 63#include "externalapphandler.h"
64 64
65using namespace KCal; 65using namespace KCal;
66#ifndef _WIN32_ 66#ifndef _WIN32_
67#include <unistd.h> 67#include <unistd.h>
68#else 68#else
69#ifdef _OL_IMPORT_ 69#ifdef _OL_IMPORT_
70#include "koimportoldialog.h" 70#include "koimportoldialog.h"
71#endif 71#endif
72#endif 72#endif
73#include "mainwindow.h" 73#include "mainwindow.h"
74 74
75
75class KOex2phonePrefs : public QDialog 76class KOex2phonePrefs : public QDialog
76{ 77{
77 public: 78 public:
78 KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) : 79 KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) :
79 QDialog( parent, name, true ) 80 QDialog( parent, name, true )
80 { 81 {
81 setCaption( i18n("Export to phone options") ); 82 setCaption( i18n("Export to phone options") );
82 QVBoxLayout* lay = new QVBoxLayout( this ); 83 QVBoxLayout* lay = new QVBoxLayout( this );
83 lay->setSpacing( 3 ); 84 lay->setSpacing( 3 );
84 lay->setMargin( 3 ); 85 lay->setMargin( 3 );
85 QLabel *lab; 86 QLabel *lab;
86 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); 87 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) );
87 lab->setAlignment (AlignHCenter ); 88 lab->setAlignment (AlignHCenter );
88 QHBox* temphb; 89 QHBox* temphb;
89 temphb = new QHBox( this ); 90 temphb = new QHBox( this );
90 new QLabel( i18n("I/O device: "), temphb ); 91 new QLabel( i18n("I/O device: "), temphb );
91 mPhoneDevice = new QLineEdit( temphb); 92 mPhoneDevice = new QLineEdit( temphb);
92 lay->addWidget( temphb ); 93 lay->addWidget( temphb );
93 temphb = new QHBox( this ); 94 temphb = new QHBox( this );
94 new QLabel( i18n("Connection: "), temphb ); 95 new QLabel( i18n("Connection: "), temphb );
95 mPhoneConnection = new QLineEdit( temphb); 96 mPhoneConnection = new QLineEdit( temphb);
96 lay->addWidget( temphb ); 97 lay->addWidget( temphb );
97 temphb = new QHBox( this ); 98 temphb = new QHBox( this );
98 new QLabel( i18n("Model(opt.): "), temphb ); 99 new QLabel( i18n("Model(opt.): "), temphb );
99 mPhoneModel = new QLineEdit( temphb); 100 mPhoneModel = new QLineEdit( temphb);
100 lay->addWidget( temphb ); 101 lay->addWidget( temphb );
101 mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this ); 102 mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this );
102 mWriteBackFuture->setChecked( true ); 103 mWriteBackFuture->setChecked( true );
103 lay->addWidget( mWriteBackFuture ); 104 lay->addWidget( mWriteBackFuture );
104 temphb = new QHBox( this ); 105 temphb = new QHBox( this );
105 new QLabel( i18n("Max. weeks in future: ") , temphb ); 106 new QLabel( i18n("Max. weeks in future: ") , temphb );
106 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb); 107 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb);
@@ -115,89 +116,88 @@ class KOex2phonePrefs : public QDialog
115 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 116 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
116 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 117 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
117 resize( 220, 240 ); 118 resize( 220, 240 );
118 qApp->processEvents(); 119 qApp->processEvents();
119 int dw = QApplication::desktop()->width(); 120 int dw = QApplication::desktop()->width();
120 int dh = QApplication::desktop()->height(); 121 int dh = QApplication::desktop()->height();
121 move( (dw-width())/2, (dh - height() )/2 ); 122 move( (dw-width())/2, (dh - height() )/2 );
122 } 123 }
123 124
124public: 125public:
125 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; 126 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel;
126 QCheckBox* mWriteBackFuture; 127 QCheckBox* mWriteBackFuture;
127 QSpinBox* mWriteBackFutureWeeks; 128 QSpinBox* mWriteBackFutureWeeks;
128}; 129};
129 130
130int globalFlagBlockStartup; 131int globalFlagBlockStartup;
131MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : 132MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
132 QMainWindow( parent, name ) 133 QMainWindow( parent, name )
133{ 134{
134 135
135 136
136#ifdef DESKTOP_VERSION 137#ifdef DESKTOP_VERSION
137 setFont( QFont("Arial"), 14 ); 138 setFont( QFont("Arial"), 14 );
138#endif 139#endif
139 mClosed = false; 140 mClosed = false;
140 //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; 141 //QString confFile = KStandardDirs::appDir() + "config/korganizerrc";
141 QString confFile = locateLocal("config","korganizerrc"); 142 QString confFile = locateLocal("config","korganizerrc");
142 QFileInfo finf ( confFile ); 143 QFileInfo finf ( confFile );
143 bool showWarning = !finf.exists(); 144 bool showWarning = !finf.exists();
144 setIcon(SmallIcon( "ko24" ) ); 145 setIcon(SmallIcon( "ko24" ) );
145 mBlockAtStartup = true; 146 mBlockAtStartup = true;
146 mFlagKeyPressed = false; 147 mFlagKeyPressed = false;
148 setCaption("KOrganizer/Pi");
147 KOPrefs *p = KOPrefs::instance(); 149 KOPrefs *p = KOPrefs::instance();
148 KPimGlobalPrefs::instance()->setGlobalConfig(); 150 KPimGlobalPrefs::instance()->setGlobalConfig();
149 if ( p->mHourSize > 18 ) 151 if ( p->mHourSize > 22 )
150 p->mHourSize = 18; 152 p->mHourSize = 22;
151 QMainWindow::ToolBarDock tbd; 153 QMainWindow::ToolBarDock tbd;
152 if ( p->mToolBarHor ) { 154 if ( p->mToolBarHor ) {
153 if ( p->mToolBarUp ) 155 if ( p->mToolBarUp )
154 tbd = Bottom; 156 tbd = Bottom;
155 else 157 else
156 tbd = Top; 158 tbd = Top;
157 } 159 }
158 else { 160 else {
159 if ( p->mToolBarUp ) 161 if ( p->mToolBarUp )
160 tbd = Right; 162 tbd = Right;
161 else 163 else
162 tbd = Left; 164 tbd = Left;
163 } 165 }
164 if ( KOPrefs::instance()->mUseAppColors ) 166 if ( KOPrefs::instance()->mUseAppColors )
165 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 167 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
166 globalFlagBlockStartup = 1; 168 globalFlagBlockStartup = 1;
167 iconToolBar = new QPEToolBar( this ); 169 iconToolBar = new QPEToolBar( this );
168 addToolBar (iconToolBar , tbd ); 170 addToolBar (iconToolBar , tbd );
169 mCalendarModifiedFlag = false; 171 mCalendarModifiedFlag = false;
170
171 setCaption("KOrganizer/Pi");
172 QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); 172 QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this );
173 splash->setAlignment ( AlignCenter ); 173 splash->setAlignment ( AlignCenter );
174 setCentralWidget( splash ); 174 setCentralWidget( splash );
175#ifndef DESKTOP_VERSION 175#ifndef DESKTOP_VERSION
176 showMaximized(); 176 showMaximized();
177#endif 177#endif
178 178
179 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); 179 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ());
180 setDefaultPreferences(); 180 setDefaultPreferences();
181 mCalendar = new CalendarLocal(); 181 mCalendar = new CalendarLocal();
182 mView = new CalendarView( mCalendar, this,"mCalendar " ); 182 mView = new CalendarView( mCalendar, this,"mCalendar " );
183 mView->hide(); 183 mView->hide();
184 //mView->resize(splash->size() ); 184 //mView->resize(splash->size() );
185 initActions(); 185 initActions();
186 mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu); 186 mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu);
187 mSyncManager->setBlockSave(false); 187 mSyncManager->setBlockSave(false);
188 mView->setSyncManager(mSyncManager); 188 mView->setSyncManager(mSyncManager);
189#ifndef DESKTOP_VERSION 189#ifndef DESKTOP_VERSION
190 iconToolBar->show(); 190 iconToolBar->show();
191 qApp->processEvents(); 191 qApp->processEvents();
192#endif 192#endif
193 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); 193 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ());
194 int vh = height() ; 194 int vh = height() ;
195 int vw = width(); 195 int vw = width();
196 //qDebug("Toolbar hei %d ",iconToolBar->height() ); 196 //qDebug("Toolbar hei %d ",iconToolBar->height() );
197 if ( iconToolBar->orientation () == Qt:: Horizontal ) { 197 if ( iconToolBar->orientation () == Qt:: Horizontal ) {
198 vh -= iconToolBar->height(); 198 vh -= iconToolBar->height();
199 } else { 199 } else {
200 vw -= iconToolBar->height(); 200 vw -= iconToolBar->height();
201 } 201 }
202 //mView->setMaximumSize( splash->size() ); 202 //mView->setMaximumSize( splash->size() );
203 //mView->resize( splash->size() ); 203 //mView->resize( splash->size() );
@@ -528,101 +528,107 @@ void MainWindow::initActions()
528 menuBar1 = menuBar(); 528 menuBar1 = menuBar();
529 menuBar1->insertItem( i18n("File"), importMenu ); 529 menuBar1->insertItem( i18n("File"), importMenu );
530 menuBar1->insertItem( i18n("View"), viewMenu ); 530 menuBar1->insertItem( i18n("View"), viewMenu );
531 menuBar1->insertItem( i18n("Actions"), actionMenu ); 531 menuBar1->insertItem( i18n("Actions"), actionMenu );
532#ifdef DESKTOP_VERSION 532#ifdef DESKTOP_VERSION
533 menuBar1->insertItem( i18n("Synchronize"), syncMenu ); 533 menuBar1->insertItem( i18n("Synchronize"), syncMenu );
534 menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu ); 534 menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu );
535#else 535#else
536 menuBar1->insertItem( i18n("Sync"), syncMenu ); 536 menuBar1->insertItem( i18n("Sync"), syncMenu );
537 menuBar1->insertItem( i18n("Agenda"),configureAgendaMenu ); 537 menuBar1->insertItem( i18n("Agenda"),configureAgendaMenu );
538#endif 538#endif
539 //menuBar1->insertItem( i18n("Toolbar"),configureToolBarMenu ); 539 //menuBar1->insertItem( i18n("Toolbar"),configureToolBarMenu );
540 menuBar1->insertItem( i18n("Filter"),selectFilterMenu ); 540 menuBar1->insertItem( i18n("Filter"),selectFilterMenu );
541 menuBar1->insertItem( i18n("Help"), helpMenu ); 541 menuBar1->insertItem( i18n("Help"), helpMenu );
542 } else { 542 } else {
543 QPEMenuBar *menuBar1; 543 QPEMenuBar *menuBar1;
544 menuBar1 = new QPEMenuBar( iconToolBar ); 544 menuBar1 = new QPEMenuBar( iconToolBar );
545 QPopupMenu *menuBar = new QPopupMenu( this ); 545 QPopupMenu *menuBar = new QPopupMenu( this );
546 menuBar1->insertItem( i18n("ME"), menuBar); 546 menuBar1->insertItem( i18n("ME"), menuBar);
547 menuBar->insertItem( i18n("File"), importMenu ); 547 menuBar->insertItem( i18n("File"), importMenu );
548 menuBar->insertItem( i18n("View"), viewMenu ); 548 menuBar->insertItem( i18n("View"), viewMenu );
549 menuBar->insertItem( i18n("Actions"), actionMenu ); 549 menuBar->insertItem( i18n("Actions"), actionMenu );
550 menuBar->insertItem( i18n("Synchronize"), syncMenu ); 550 menuBar->insertItem( i18n("Synchronize"), syncMenu );
551 menuBar->insertItem( i18n("AgendaSize"),configureAgendaMenu ); 551 menuBar->insertItem( i18n("AgendaSize"),configureAgendaMenu );
552 menuBar->insertItem( i18n("Toolbar"),configureToolBarMenu ); 552 menuBar->insertItem( i18n("Toolbar"),configureToolBarMenu );
553 menuBar->insertItem( i18n("Filter"),selectFilterMenu ); 553 menuBar->insertItem( i18n("Filter"),selectFilterMenu );
554 menuBar->insertItem( i18n("Help"), helpMenu ); 554 menuBar->insertItem( i18n("Help"), helpMenu );
555 //menuBar1->setMaximumWidth( menuBar1->sizeHint().width() ); 555 //menuBar1->setMaximumWidth( menuBar1->sizeHint().width() );
556 menuBar1->setMaximumSize( menuBar1->sizeHint( )); 556 menuBar1->setMaximumSize( menuBar1->sizeHint( ));
557 } 557 }
558 connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); 558 connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) );
559 connect ( selectFilterMenu, SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenu() ) ); 559 connect ( selectFilterMenu, SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenu() ) );
560 560 QIconSet icon;
561 menuBarWeek = new QPEMenuBar( iconToolBar ); 561 int pixWid = 22, pixHei = 22;
562 QPopupMenu * wpo = new QPopupMenu (this); 562 QString pathString = "";
563 QPopupMenu * all = new QPopupMenu (this); 563 if ( !p->mToolBarMiniIcons ) {
564 //wpo->insertItem( i18n("W#"), 0 ); 564 if ( QApplication::desktop()->width() < 480 ) {
565 int first = 1; 565 pathString += "icons16/";
566 int i; 566 pixWid = 18; pixHei = 16;
567 for ( i = 1; i < 50; ++i ) {
568 if ( !(i%10) ) {
569 all->insertItem( i18n("Select week %1-%2" ).arg(first).arg( i-1) ,wpo );
570 connect( wpo, SIGNAL( activated(int) ), SIGNAL( selectWeek ( int ) ) );
571 first = i;
572 wpo = new QPopupMenu (this);
573 } 567 }
574 wpo->insertItem( QString::number(i), i ); 568 } else {
575 } 569 pathString += "iconsmini/";
576 for ( i = 50; i < 53; ++i ) { 570 pixWid = 18; pixHei = 16;
577 wpo->insertItem( QString::number(i), i); 571 }
572 mWeekBgColor = iconToolBar->backgroundColor();
573 mWeekPixmap.resize( pixWid , pixHei );
574 mWeekPixmap.fill( mWeekBgColor );
575 icon = mWeekPixmap;
576 mWeekAction = new QAction( i18n("Select week number"),icon, i18n("Select week number"), 0, this );
577 mWeekAction->addTo( iconToolBar );
578 mWeekFont = font();
579
580 int fontPoint = mWeekFont.pointSize();
581 QFontMetrics f( mWeekFont );
582 int fontWid = f.width( "30" );
583 while ( fontWid > pixWid ) {
584 --fontPoint;
585 mWeekFont.setPointSize( fontPoint );
586 QFontMetrics f( mWeekFont );
587 fontWid = f.width( "30" );
588 qDebug("dec-- ");
578 } 589 }
579 all->insertItem( i18n("Select week %1-%2" ).arg(first).arg( i-1) ,wpo ); 590
580 connect( wpo, SIGNAL( activated(int) ), SIGNAL( selectWeek ( int ) ) ); 591 connect( mWeekAction, SIGNAL( activated() ),
581 menuBarWeek->insertItem( "00",all,1); 592 this, SLOT( weekAction() ) );
582 menuBarWeek->setMaximumSize( menuBarWeek->sizeHint( ));
583 593
584 connect( this, SIGNAL( selectWeek ( int ) ), mView->dateNavigator(), SLOT( selectWeek ( int ) ) ); 594 connect( this, SIGNAL( selectWeek ( int ) ), mView->dateNavigator(), SLOT( selectWeek ( int ) ) );
595
596 //#endif
585 // ****************** 597 // ******************
586 QAction *action; 598 QAction *action;
587 QIconSet icon;
588 // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); 599 // QPopupMenu *configureMenu= new QPopupMenu( menuBar );
589 configureToolBarMenu->setCheckable( true ); 600 configureToolBarMenu->setCheckable( true );
590 601
591 QString pathString = ""; 602
592 if ( !p->mToolBarMiniIcons ) {
593 if ( QApplication::desktop()->width() < 480 )
594 pathString += "icons16/";
595 } else
596 pathString += "iconsmini/";
597 configureAgendaMenu->setCheckable( true ); 603 configureAgendaMenu->setCheckable( true );
598 int iii ; 604 int iii ;
599 for ( iii = 1;iii<= 10 ;++iii ){ 605 for ( iii = 1;iii<= 10 ;++iii ){
600 configureAgendaMenu->insertItem(i18n("Size %1").arg(iii), (iii+1)*2 ); 606 configureAgendaMenu->insertItem(i18n("Size %1").arg(iii), (iii+1)*2 );
601 } 607 }
602 //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); 608 //configureMenu->insertItem( "AgendaSize",configureAgendaMenu );
603 609
604 connect( configureAgendaMenu, SIGNAL( aboutToShow()), 610 connect( configureAgendaMenu, SIGNAL( aboutToShow()),
605 this, SLOT( showConfigureAgenda( ) ) ); 611 this, SLOT( showConfigureAgenda( ) ) );
606 612
607 icon = loadPixmap( pathString + "configure" ); 613 icon = loadPixmap( pathString + "configure" );
608 action = new QAction( i18n("Configure"),icon, i18n("Configure..."), 0, this ); 614 action = new QAction( i18n("Configure"),icon, i18n("Configure..."), 0, this );
609 action->addTo( actionMenu ); 615 action->addTo( actionMenu );
610 connect( action, SIGNAL( activated() ), 616 connect( action, SIGNAL( activated() ),
611 mView, SLOT( edit_options() ) ); 617 mView, SLOT( edit_options() ) );
612 actionMenu->insertSeparator(); 618 actionMenu->insertSeparator();
613 619
614 action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); 620 action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this );
615 action->addTo( actionMenu ); 621 action->addTo( actionMenu );
616 connect( action, SIGNAL( activated() ), 622 connect( action, SIGNAL( activated() ),
617 mView, SLOT( undo_delete() ) ); 623 mView, SLOT( undo_delete() ) );
618 actionMenu->insertSeparator(); 624 actionMenu->insertSeparator();
619 625
620 icon = loadPixmap( pathString + "newevent" ); 626 icon = loadPixmap( pathString + "newevent" );
621 configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); 627 configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 );
622 configureToolBarMenu->insertSeparator(); 628 configureToolBarMenu->insertSeparator();
623 configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 ); 629 configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 );
624 QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); 630 QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this );
625 ne_action->addTo( actionMenu ); 631 ne_action->addTo( actionMenu );
626 connect( ne_action, SIGNAL( activated() ), 632 connect( ne_action, SIGNAL( activated() ),
627 mView, SLOT( newEvent() ) ); 633 mView, SLOT( newEvent() ) );
628 icon = loadPixmap( pathString + "newtodo" ); 634 icon = loadPixmap( pathString + "newtodo" );
@@ -1341,66 +1347,72 @@ QString MainWindow::syncFileName()
1341#ifdef DESKTOP_VERSION 1347#ifdef DESKTOP_VERSION
1342 return locateLocal( "tmp", "synccalendar.ics" ); 1348 return locateLocal( "tmp", "synccalendar.ics" );
1343#else 1349#else
1344 return QString( "/tmp/synccalendar.ics" ); 1350 return QString( "/tmp/synccalendar.ics" );
1345#endif 1351#endif
1346} 1352}
1347void MainWindow::updateWeek(QDate seda) 1353void MainWindow::updateWeek(QDate seda)
1348{ 1354{
1349 int weekNum = 0; 1355 int weekNum = 0;
1350 QDate d = QDate ( seda.year(), 1,1); 1356 QDate d = QDate ( seda.year(), 1,1);
1351 seda = seda.addDays( 1-seda.dayOfWeek() );//we are on monday 1357 seda = seda.addDays( 1-seda.dayOfWeek() );//we are on monday
1352 if ( seda.addDays(6).year() != seda.year() ) { 1358 if ( seda.addDays(6).year() != seda.year() ) {
1353 if ( seda.year() != d.year() ) { 1359 if ( seda.year() != d.year() ) {
1354 if ( d.dayOfWeek() > 4 ) 1360 if ( d.dayOfWeek() > 4 )
1355 d = QDate ( seda.year(), 1,1); 1361 d = QDate ( seda.year(), 1,1);
1356 else 1362 else
1357 weekNum = 1; 1363 weekNum = 1;
1358 } else { 1364 } else {
1359 QDate dd( seda.year()+1, 1,1); 1365 QDate dd( seda.year()+1, 1,1);
1360 if ( dd.dayOfWeek() <= 4 ) 1366 if ( dd.dayOfWeek() <= 4 )
1361 weekNum = 1; 1367 weekNum = 1;
1362 } 1368 }
1363 } 1369 }
1364 if ( weekNum == 0 ){ 1370 if ( weekNum == 0 ){
1365 int dow = d.dayOfWeek(); 1371 int dow = d.dayOfWeek();
1366 if ( dow <= 4 ) 1372 if ( dow <= 4 )
1367 d = d.addDays( 1-dow ); 1373 d = d.addDays( 1-dow );
1368 else // 5,6,7 1374 else // 5,6,7
1369 d = d.addDays( 8-dow ); 1375 d = d.addDays( 8-dow );
1370 // we have the first week of the year.we are on monday 1376 // we have the first week of the year.we are on monday
1371 weekNum = d.daysTo( seda ) / 7 +1; 1377 weekNum = d.daysTo( seda ) / 7 +1;
1372 } 1378 }
1373 //qDebug("weeknum %s ", QString::number( weekNum).latin1()); 1379
1374 menuBarWeek-> changeItem(1, QString::number( weekNum) ); 1380 mWeekPixmap.fill( mWeekBgColor );
1381 QPainter p ( &mWeekPixmap );
1382 p.setFont( mWeekFont );
1383 p.drawText( 0,0,mWeekPixmap.width(), mWeekPixmap.height(),AlignCenter, QString::number( weekNum) );
1384 p.end();
1385 QIconSet icon3 ( mWeekPixmap );
1386 mWeekAction->setIconSet ( icon3 );
1375 1387
1376} 1388}
1377void MainWindow::updateWeekNum(const DateList &selectedDates) 1389void MainWindow::updateWeekNum(const DateList &selectedDates)
1378{ 1390{
1379 updateWeek( selectedDates.first() ); 1391 updateWeek( selectedDates.first() );
1380} 1392}
1381void MainWindow::processIncidenceSelection( Incidence *incidence ) 1393void MainWindow::processIncidenceSelection( Incidence *incidence )
1382{ 1394{
1383 1395
1384 if ( !incidence ) { 1396 if ( !incidence ) {
1385 enableIncidenceActions( false ); 1397 enableIncidenceActions( false );
1386 1398
1387 mNewSubTodoAction->setEnabled( false ); 1399 mNewSubTodoAction->setEnabled( false );
1388 setCaptionToDates(); 1400 setCaptionToDates();
1389 return; 1401 return;
1390 1402
1391 } 1403 }
1392 1404
1393 //KGlobal::locale()->formatDateTime(nextA, true); 1405 //KGlobal::locale()->formatDateTime(nextA, true);
1394 QString startString = ""; 1406 QString startString = "";
1395 if ( incidence->type() != "Todo" ) { 1407 if ( incidence->type() != "Todo" ) {
1396 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { 1408 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) {
1397 if ( incidence->doesFloat() ) { 1409 if ( incidence->doesFloat() ) {
1398 startString += ": "+incidence->dtStartDateStr( true ); 1410 startString += ": "+incidence->dtStartDateStr( true );
1399 startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); 1411 startString += " --- "+((Event*)incidence)->dtEndDateStr( true );
1400 1412
1401 } else { 1413 } else {
1402 startString = ": "+incidence->dtStartStr(true); 1414 startString = ": "+incidence->dtStartStr(true);
1403 startString += " --- "+((Event*)incidence)->dtEndStr(true); 1415 startString += " --- "+((Event*)incidence)->dtEndStr(true);
1404 1416
1405 } 1417 }
1406 1418
@@ -1690,65 +1702,65 @@ void MainWindow::keyPressEvent ( QKeyEvent * e )
1690 case Qt::Key_X: 1702 case Qt::Key_X:
1691 mView->toggleDateNavigatorWidget(); 1703 mView->toggleDateNavigatorWidget();
1692 break; 1704 break;
1693 case Qt::Key_Space: 1705 case Qt::Key_Space:
1694 mView->toggleExpand(); 1706 mView->toggleExpand();
1695 break; 1707 break;
1696 case Qt::Key_A: 1708 case Qt::Key_A:
1697 mView->toggleAllDaySize(); 1709 mView->toggleAllDaySize();
1698 break; 1710 break;
1699 case Qt::Key_T: 1711 case Qt::Key_T:
1700 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1712 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1701 mView->newTodo(); 1713 mView->newTodo();
1702 else { 1714 else {
1703 mView->goToday(); 1715 mView->goToday();
1704 showSelectedDates = true; 1716 showSelectedDates = true;
1705 } 1717 }
1706 break; 1718 break;
1707 case Qt::Key_J: 1719 case Qt::Key_J:
1708 mView->viewManager()->showJournalView(); 1720 mView->viewManager()->showJournalView();
1709 break; 1721 break;
1710 case Qt::Key_B: 1722 case Qt::Key_B:
1711 mView->editIncidenceDescription();; 1723 mView->editIncidenceDescription();;
1712 break; 1724 break;
1713 // case Qt::Key_Return: 1725 // case Qt::Key_Return:
1714 case Qt::Key_E: 1726 case Qt::Key_E:
1715 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1727 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1716 mView->newEvent(); 1728 mView->newEvent();
1717 else 1729 else
1718 mView->editIncidence(); 1730 mView->editIncidence();
1719 break; 1731 break;
1720 case Qt::Key_Plus: 1732 case Qt::Key_Plus:
1721 size = p->mHourSize +2; 1733 size = p->mHourSize +2;
1722 if ( size <= 18 ) 1734 if ( size <= 22 )
1723 configureAgenda( size ); 1735 configureAgenda( size );
1724 break; 1736 break;
1725 case Qt::Key_Minus: 1737 case Qt::Key_Minus:
1726 size = p->mHourSize - 2; 1738 size = p->mHourSize - 2;
1727 if ( size >= 4 ) 1739 if ( size >= 4 )
1728 configureAgenda( size ); 1740 configureAgenda( size );
1729 break; 1741 break;
1730 1742
1731 1743
1732 default: 1744 default:
1733 e->ignore(); 1745 e->ignore();
1734 } 1746 }
1735 if ( pro > 0 ) { 1747 if ( pro > 0 ) {
1736 mView->selectFilter( pro-1 ); 1748 mView->selectFilter( pro-1 );
1737 } 1749 }
1738 if ( showSelectedDates ) { 1750 if ( showSelectedDates ) {
1739 ;// setCaptionToDates(); 1751 ;// setCaptionToDates();
1740 } 1752 }
1741 1753
1742} 1754}
1743 1755
1744void MainWindow::fillFilterMenu() 1756void MainWindow::fillFilterMenu()
1745{ 1757{
1746 selectFilterMenu->clear(); 1758 selectFilterMenu->clear();
1747 bool disable = false; 1759 bool disable = false;
1748 selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); 1760 selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 );
1749 selectFilterMenu->insertSeparator(); 1761 selectFilterMenu->insertSeparator();
1750 if ( mView->filterView()->filtersEnabled() ) { 1762 if ( mView->filterView()->filtersEnabled() ) {
1751 selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 ); 1763 selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 );
1752 } 1764 }
1753 else { 1765 else {
1754 selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 ); 1766 selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 );
@@ -1982,32 +1994,56 @@ void MainWindow::exportVCalendar()
1982} 1994}
1983 1995
1984void MainWindow::syncFileRequest() 1996void MainWindow::syncFileRequest()
1985{ 1997{
1986 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 1998 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
1987 mSyncManager->slotSyncMenu( 999 ); 1999 mSyncManager->slotSyncMenu( 999 );
1988 } 2000 }
1989 save(); 2001 save();
1990} 2002}
1991void MainWindow::getFile( bool success ) 2003void MainWindow::getFile( bool success )
1992{ 2004{
1993 if ( ! success ) { 2005 if ( ! success ) {
1994 setCaption( i18n("Error receiving file. Nothing changed!") ); 2006 setCaption( i18n("Error receiving file. Nothing changed!") );
1995 return; 2007 return;
1996 } 2008 }
1997 mView->openCalendar( defaultFileName() ); 2009 mView->openCalendar( defaultFileName() );
1998 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 2010 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
1999 mSyncManager->slotSyncMenu( 999 ); 2011 mSyncManager->slotSyncMenu( 999 );
2000 } 2012 }
2001 setCaption( i18n("Pi-Sync successful!") ); 2013 setCaption( i18n("Pi-Sync successful!") );
2002} 2014}
2003 2015
2004void MainWindow::printSel( ) 2016void MainWindow::printSel( )
2005{ 2017{
2006 mView->viewManager()->agendaView()->agenda()->printSelection(); 2018 mView->viewManager()->agendaView()->agenda()->printSelection();
2007} 2019}
2008 2020
2009void MainWindow::printCal() 2021void MainWindow::printCal()
2010{ 2022{
2011 mView->print();//mCp->showDialog(); 2023 mView->print();//mCp->showDialog();
2012} 2024}
2013 2025
2026
2027#include "libkdepim/kdatepicker.h"
2028#include <kdatetbl.h>
2029void MainWindow::weekAction()
2030{
2031 int month;
2032 KPopupFrame* popup = new KPopupFrame(this);
2033 int size = 12;
2034 if ( QApplication::desktop()->width() >= 480 )
2035 size = 18;
2036 KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(size, popup);
2037 // -----
2038 picker->resize(picker->sizeHint());
2039 popup->setMainWidget(picker);
2040 picker->setFocus();
2041 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
2042 if(popup->exec(iconToolBar->mapToGlobal(QPoint(0, iconToolBar->height()))))
2043 {
2044 month = picker->getResult();
2045 emit selectWeek ( month );
2046 //qDebug("weekSelected %d ", month);
2047 }
2048 delete popup;
2049}
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h
index 076ab94..5b9f903 100644
--- a/korganizer/mainwindow.h
+++ b/korganizer/mainwindow.h
@@ -1,84 +1,92 @@
1#ifndef KORGE_MAINWINDOW_H 1#ifndef KORGE_MAINWINDOW_H
2#define KORGE_MAINWINDOW_H 2#define KORGE_MAINWINDOW_H
3 3
4#include <qmainwindow.h> 4#include <qmainwindow.h>
5#include <qtimer.h> 5#include <qtimer.h>
6#include <qdict.h> 6#include <qdict.h>
7#include <qfile.h> 7#include <qfile.h>
8#include <qmenubar.h>
8#include <qtextstream.h> 9#include <qtextstream.h>
9#include <qregexp.h> 10#include <qregexp.h>
10 11
11#include <libkcal/incidence.h> 12#include <libkcal/incidence.h>
12#include "simplealarmclient.h" 13#include "simplealarmclient.h"
13#include <ksyncmanager.h> 14#include <ksyncmanager.h>
14#ifndef DESKTOP_VERSION 15#ifndef DESKTOP_VERSION
15#include <qcopchannel_qws.h> 16#include <qcopchannel_qws.h>
16#endif 17#endif
17class QAction; 18class QAction;
18class CalendarView; 19class CalendarView;
19class KSyncProfile; 20class KSyncProfile;
20#ifdef DESKTOP_VERSION 21#ifdef DESKTOP_VERSION
21 22
22#define QPEToolBar QToolBar 23#define QPEToolBar QToolBar
23#define QPEMenuBar QMenuBar 24#define QPEMenuBar QMenuBar
24#endif 25#endif
25class QPEToolBar; 26class QPEToolBar;
26class QPEMenuBar;
27 27
28 28
29namespace KCal { 29namespace KCal {
30class CalendarLocal; 30class CalendarLocal;
31} 31}
32 32
33class KOMenuBar : public QMenuBar
34{
35 public:
36 KOMenuBar( QWidget *parent=0 ): QMenuBar (parent ) {;}
37 QSize sizeHint () const{ qDebug("sizejint ");return QSize ( 40,25 );}
38};
39
33using namespace KCal; 40using namespace KCal;
34 41
35class MainWindow : public QMainWindow 42class MainWindow : public QMainWindow
36{ 43{
37 Q_OBJECT 44 Q_OBJECT
38 public: 45 public:
39 MainWindow( QWidget *parent = 0, const char *name = 0, QString command = ""); 46 MainWindow( QWidget *parent = 0, const char *name = 0, QString command = "");
40 ~MainWindow(); 47 ~MainWindow();
41 bool beamReceiveEnabled(); 48 bool beamReceiveEnabled();
42 static QString defaultFileName(); 49 static QString defaultFileName();
43 static QString syncFileName(); 50 static QString syncFileName();
44 static QString resourcePath(); 51 static QString resourcePath();
45 public slots: 52 public slots:
46 void updateWeekNum(const KCal::DateList &); 53 void updateWeekNum(const KCal::DateList &);
47 void updateWeek(QDate); 54 void updateWeek(QDate);
48 virtual void showMaximized (); 55 virtual void showMaximized ();
49 void configureAgenda( int ); 56 void configureAgenda( int );
50 void recieve( const QCString& msg, const QByteArray& data ); 57 void recieve( const QCString& msg, const QByteArray& data );
51 protected slots: 58 protected slots:
52 void setCaptionToDates(); 59 void setCaptionToDates();
60 void weekAction();
53 void about(); 61 void about();
54 void licence(); 62 void licence();
55 void faq(); 63 void faq();
56 void usertrans(); 64 void usertrans();
57 void features(); 65 void features();
58 void synchowto(); 66 void synchowto();
59 void kdesynchowto(); 67 void kdesynchowto();
60 void multisynchowto(); 68 void multisynchowto();
61 void whatsNew(); 69 void whatsNew();
62 void keyBindings(); 70 void keyBindings();
63 void aboutAutoSaving();; 71 void aboutAutoSaving();;
64 void aboutKnownBugs(); 72 void aboutKnownBugs();
65 73
66 void processIncidenceSelection( Incidence * ); 74 void processIncidenceSelection( Incidence * );
67 75
68 void importQtopia(); 76 void importQtopia();
69 void importBday(); 77 void importBday();
70 void importOL(); 78 void importOL();
71 void importIcal(); 79 void importIcal();
72 void importFile( QString, bool ); 80 void importFile( QString, bool );
73 void quickImportIcal(); 81 void quickImportIcal();
74 82
75 void slotModifiedChanged( bool ); 83 void slotModifiedChanged( bool );
76 84
77 void save(); 85 void save();
78 void saveStopTimer(); 86 void saveStopTimer();
79 void configureToolBar( int ); 87 void configureToolBar( int );
80 void printSel(); 88 void printSel();
81 void printCal(); 89 void printCal();
82 void saveCalendar(); 90 void saveCalendar();
83 void loadCalendar(); 91 void loadCalendar();
84 void exportVCalendar(); 92 void exportVCalendar();
@@ -91,57 +99,60 @@ class MainWindow : public QMainWindow
91 void selectWeek ( int ); 99 void selectWeek ( int );
92 private slots: 100 private slots:
93 void showConfigureAgenda(); 101 void showConfigureAgenda();
94 void getFile( bool ); 102 void getFile( bool );
95 void syncFileRequest(); 103 void syncFileRequest();
96 104
97 protected: 105 protected:
98 void displayText( QString, QString); 106 void displayText( QString, QString);
99 void enableIncidenceActions( bool ); 107 void enableIncidenceActions( bool );
100 108
101 private: 109 private:
102 bool mBRdisabled; 110 bool mBRdisabled;
103#ifndef DESKTOP_VERSION 111#ifndef DESKTOP_VERSION
104 QCopChannel* infrared; 112 QCopChannel* infrared;
105#endif 113#endif
106 QAction* brAction; 114 QAction* brAction;
107 KSyncManager* mSyncManager; 115 KSyncManager* mSyncManager;
108 bool mClosed; 116 bool mClosed;
109 void saveOnClose(); 117 void saveOnClose();
110 bool mFlagKeyPressed; 118 bool mFlagKeyPressed;
111 bool mBlockAtStartup; 119 bool mBlockAtStartup;
112 QPEToolBar *iconToolBar; 120 QPEToolBar *iconToolBar;
113 void initActions(); 121 void initActions();
114 void setDefaultPreferences(); 122 void setDefaultPreferences();
115 void keyPressEvent ( QKeyEvent * ) ; 123 void keyPressEvent ( QKeyEvent * ) ;
116 void keyReleaseEvent ( QKeyEvent * ) ; 124 void keyReleaseEvent ( QKeyEvent * ) ;
117 QPopupMenu *configureToolBarMenu; 125 QPopupMenu *configureToolBarMenu;
118 QPopupMenu *selectFilterMenu; 126 QPopupMenu *selectFilterMenu;
119 QPopupMenu *configureAgendaMenu, *syncMenu; 127 QPopupMenu *configureAgendaMenu, *syncMenu;
120 CalendarLocal *mCalendar; 128 CalendarLocal *mCalendar;
121 CalendarView *mView; 129 CalendarView *mView;
122 QAction *mNewSubTodoAction; 130 QAction *mNewSubTodoAction;
123 QPEMenuBar *menuBarWeek; 131 QAction *mWeekAction;
132 QFont mWeekFont;
133 QPixmap mWeekPixmap;
134 QColor mWeekBgColor;
124 135
125 QAction *mShowAction; 136 QAction *mShowAction;
126 QAction *mEditAction; 137 QAction *mEditAction;
127 QAction *mDeleteAction; 138 QAction *mDeleteAction;
128 QAction *mCloneAction; 139 QAction *mCloneAction;
129 QAction *mMoveAction; 140 QAction *mMoveAction;
130 QAction *mBeamAction; 141 QAction *mBeamAction;
131 QAction *mCancelAction; 142 QAction *mCancelAction;
132 143
133 QAction *mToggleNav; 144 QAction *mToggleNav;
134 QAction *mToggleFilter; 145 QAction *mToggleFilter;
135 QAction *mToggleAllday; 146 QAction *mToggleAllday;
136 147
137 148
138 void closeEvent( QCloseEvent* ce ); 149 void closeEvent( QCloseEvent* ce );
139 SimpleAlarmClient mAlarmClient; 150 SimpleAlarmClient mAlarmClient;
140 QTimer mSaveTimer; 151 QTimer mSaveTimer;
141 //bool mBlockSaveFlag; 152 //bool mBlockSaveFlag;
142 bool mCalendarModifiedFlag; 153 bool mCalendarModifiedFlag;
143 QPixmap loadPixmap( QString ); 154 QPixmap loadPixmap( QString );
144}; 155};
145 156
146 157
147#endif 158#endif
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index 508ce31..fce0e5a 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -1,750 +1,915 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 This file is part of the KDE libraries 2 This file is part of the KDE libraries
3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org) 3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
4 (C) 1998-2001 Mirko Boehm (mirko@kde.org) 4 (C) 1998-2001 Mirko Boehm (mirko@kde.org)
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/////////////////// KDateTable widget class ////////////////////// 21/////////////////// KDateTable widget class //////////////////////
22// 22//
23// Copyright (C) 1997 Tim D. Gilman 23// Copyright (C) 1997 Tim D. Gilman
24// (C) 1998-2001 Mirko Boehm 24// (C) 1998-2001 Mirko Boehm
25// Written using Qt (http://www.troll.no) for the 25// Written using Qt (http://www.troll.no) for the
26// KDE project (http://www.kde.org) 26// KDE project (http://www.kde.org)
27// 27//
28// This is a support class for the KDatePicker class. It just 28// This is a support class for the KDatePicker class. It just
29// draws the calender table without titles, but could theoretically 29// draws the calender table without titles, but could theoretically
30// be used as a standalone. 30// be used as a standalone.
31// 31//
32// When a date is selected by the user, it emits a signal: 32// When a date is selected by the user, it emits a signal:
33// dateSelected(QDate) 33// dateSelected(QDate)
34 34
35#include <kglobal.h> 35#include <kglobal.h>
36#include <kglobalsettings.h> 36#include <kglobalsettings.h>
37#include <kapplication.h> 37#include <kapplication.h>
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <knotifyclient.h> 40#include <knotifyclient.h>
41#include "kdatetbl.h" 41#include "kdatetbl.h"
42#include <qdatetime.h> 42#include <qdatetime.h>
43#include <qstring.h> 43#include <qstring.h>
44#include <qpen.h> 44#include <qpen.h>
45#include <qpainter.h> 45#include <qpainter.h>
46#include <qdialog.h> 46#include <qdialog.h>
47#include <assert.h> 47#include <assert.h>
48#include <qapplication.h> 48#include <qapplication.h>
49 49
50KDateValidator::KDateValidator(QWidget* parent, const char* name) 50KDateValidator::KDateValidator(QWidget* parent, const char* name)
51 : QValidator(parent, name) 51 : QValidator(parent, name)
52{ 52{
53} 53}
54 54
55QValidator::State 55QValidator::State
56KDateValidator::validate(QString& text, int&) const 56KDateValidator::validate(QString& text, int&) const
57{ 57{
58 QDate temp; 58 QDate temp;
59 // ----- everything is tested in date(): 59 // ----- everything is tested in date():
60 return date(text, temp); 60 return date(text, temp);
61} 61}
62 62
63QValidator::State 63QValidator::State
64KDateValidator::date(const QString& text, QDate& d) const 64KDateValidator::date(const QString& text, QDate& d) const
65{ 65{
66 QDate tmp = KGlobal::locale()->readDate(text); 66 QDate tmp = KGlobal::locale()->readDate(text);
67 if (!tmp.isNull()) 67 if (!tmp.isNull())
68 { 68 {
69 d = tmp; 69 d = tmp;
70 return Acceptable; 70 return Acceptable;
71 } else 71 } else
72 return Valid; 72 return Valid;
73} 73}
74 74
75void 75void
76KDateValidator::fixup( QString& ) const 76KDateValidator::fixup( QString& ) const
77{ 77{
78 78
79} 79}
80 80
81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f) 81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f)
82 : QGridView(parent, name, f) 82 : QGridView(parent, name, f)
83{ 83{
84 setFontSize(10); 84 setFontSize(10);
85 if(!date_.isValid()) 85 if(!date_.isValid())
86 { 86 {
87 date_=QDate::currentDate(); 87 date_=QDate::currentDate();
88 } 88 }
89 setFocusPolicy( QWidget::StrongFocus ); 89 setFocusPolicy( QWidget::StrongFocus );
90 setNumRows(7); // 6 weeks max + headline 90 setNumRows(7); // 6 weeks max + headline
91 setNumCols(7); // 7 days a week 91 setNumCols(7); // 7 days a week
92 setHScrollBarMode(AlwaysOff); 92 setHScrollBarMode(AlwaysOff);
93 setVScrollBarMode(AlwaysOff); 93 setVScrollBarMode(AlwaysOff);
94 viewport()->setBackgroundColor(QColor(220,245,255)); 94 viewport()->setBackgroundColor(QColor(220,245,255));
95#if 0 95#if 0
96 viewport()->setEraseColor(lightGray); 96 viewport()->setEraseColor(lightGray);
97#endif 97#endif
98 mMarkCurrent = false; 98 mMarkCurrent = false;
99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth 99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth
100} 100}
101 101
102void 102void
103KDateTable::paintCell(QPainter *painter, int row, int col) 103KDateTable::paintCell(QPainter *painter, int row, int col)
104{ 104{
105 QRect rect; 105 QRect rect;
106 QString text; 106 QString text;
107 QPen pen; 107 QPen pen;
108 int w=cellWidth(); 108 int w=cellWidth();
109 int h=cellHeight(); 109 int h=cellHeight();
110 int pos; 110 int pos;
111 QBrush brushBlue(blue); 111 QBrush brushBlue(blue);
112 QBrush brushLightblue(QColor(220,245,255)); 112 QBrush brushLightblue(QColor(220,245,255));
113 QFont font=KGlobalSettings::generalFont(); 113 QFont font=KGlobalSettings::generalFont();
114 // ----- 114 // -----
115 font.setPointSize(fontsize); 115 font.setPointSize(fontsize);
116 if(row==0) 116 if(row==0)
117 { // we are drawing the headline 117 { // we are drawing the headline
118 font.setBold(true); 118 font.setBold(true);
119 painter->setFont(font); 119 painter->setFont(font);
120 bool normalday = true; 120 bool normalday = true;
121 QString daystr; 121 QString daystr;
122 if (KGlobal::locale()->weekStartsMonday()) 122 if (KGlobal::locale()->weekStartsMonday())
123 { 123 {
124 daystr = KGlobal::locale()->weekDayName(col+1, true); 124 daystr = KGlobal::locale()->weekDayName(col+1, true);
125 if (col == 5 || col == 6) 125 if (col == 5 || col == 6)
126 normalday = false; 126 normalday = false;
127 } else { 127 } else {
128 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true); 128 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true);
129 if (col == 0 || col == 6) 129 if (col == 0 || col == 6)
130 normalday = false; 130 normalday = false;
131 }
132 if (!normalday)
133 {
134 painter->setPen(QColor(220,245,255));
135 painter->setBrush(brushLightblue);
136 painter->drawRect(0, 0, w, h);
137 painter->setPen(blue);
138 } else {
139 painter->setPen(blue);
140 painter->setBrush(brushBlue);
141 painter->drawRect(0, 0, w, h);
142 painter->setPen(white);
143 }
144 painter->drawText(0, 0, w, h-1, AlignCenter,
145 daystr, -1, &rect);
146 painter->setPen(black);
147 painter->moveTo(0, h-1);
148 painter->lineTo(w-1, h-1);
149 // ----- draw the weekday:
150 } else {
151 painter->setFont(font);
152 pos=7*(row-1)+col;
153 if (KGlobal::locale()->weekStartsMonday())
154 pos++;
155 if(pos<firstday || (firstday+numdays<=pos))
156 { // we are either
157 // ° painting a day of the previous month or
158 // ° painting a day of the following month
159 if(pos<firstday)
160 { // previous month
161 text.setNum(numDaysPrevMonth+pos-firstday+1);
162 } else { // following month
163 text.setNum(pos-firstday-numdays+1);
164 } 131 }
165 painter->setPen(gray); 132 if (!normalday)
166 } else { // paint a day of the current month 133 {
167 text.setNum(pos-firstday+1); 134 painter->setPen(QColor(220,245,255));
168 painter->setPen(black); 135 painter->setBrush(brushLightblue);
136 painter->drawRect(0, 0, w, h);
137 painter->setPen(blue);
138 } else {
139 painter->setPen(blue);
140 painter->setBrush(brushBlue);
141 painter->drawRect(0, 0, w, h);
142 painter->setPen(white);
143 }
144 painter->drawText(0, 0, w, h-1, AlignCenter,
145 daystr, -1, &rect);
146 painter->setPen(black);
147 painter->moveTo(0, h-1);
148 painter->lineTo(w-1, h-1);
149 // ----- draw the weekday:
150 } else {
151 painter->setFont(font);
152 pos=7*(row-1)+col;
153 if (KGlobal::locale()->weekStartsMonday())
154 pos++;
155 if(pos<firstday || (firstday+numdays<=pos))
156 { // we are either
157 // ° painting a day of the previous month or
158 // ° painting a day of the following month
159 if(pos<firstday)
160 { // previous month
161 text.setNum(numDaysPrevMonth+pos-firstday+1);
162 } else { // following month
163 text.setNum(pos-firstday-numdays+1);
164 }
165 painter->setPen(gray);
166 } else { // paint a day of the current month
167 text.setNum(pos-firstday+1);
168 painter->setPen(black);
169 } 169 }
170 170
171 pen=painter->pen(); 171 pen=painter->pen();
172 if(firstday+date.day()-1==pos) 172 if(firstday+date.day()-1==pos)
173 { 173 {
174 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 174 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
175 painter->setPen(green); 175 painter->setPen(green);
176 else 176 else
177 painter->setPen(red); 177 painter->setPen(red);
178 if(hasFocus()) 178 if(hasFocus())
179 { 179 {
180 painter->setBrush(darkRed); 180 painter->setBrush(darkRed);
181 pen=white; 181 pen=white;
182 } else {
183 painter->setBrush(darkGray);
184 pen=white;
185 }
182 } else { 186 } else {
183 painter->setBrush(darkGray); 187 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
184 pen=white; 188 {
189 painter->setPen(green);
190 painter->setBrush(darkGreen);
191 pen=white;
192 } else {
193 painter->setBrush(QColor(220,245,255));
194 painter->setPen(QColor(220,245,255));
185 } 195 }
186 } else { 196 }
187 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 197 painter->drawRect(0, 0, w, h);
188 { 198 painter->setPen(pen);
189 painter->setPen(green); 199 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect);
190 painter->setBrush(darkGreen);
191 pen=white;
192 } else {
193 painter->setBrush(QColor(220,245,255));
194 painter->setPen(QColor(220,245,255));
195 }
196 }
197 painter->drawRect(0, 0, w, h);
198 painter->setPen(pen);
199 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect);
200 } 200 }
201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width()); 201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width());
202 if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height()); 202 if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height());
203} 203}
204 204
205void 205void
206KDateTable::keyPressEvent( QKeyEvent *e ) 206KDateTable::keyPressEvent( QKeyEvent *e )
207{ 207{
208 /* 208 /*
209 // not working properly 209 // not working properly
210 if ( e->key() == Qt::Key_Prior ) { 210 if ( e->key() == Qt::Key_Prior ) {
211 if ( date.month() == 1 ) { 211 if ( date.month() == 1 ) {
212 KNotifyClient::beep(); 212 KNotifyClient::beep();
213 return; 213 return;
214 } 214 }
215 int day = date.day(); 215 int day = date.day();
216 if ( day > 27 ) 216 if ( day > 27 )
217 while ( !QDate::isValid( date.year(), date.month()-1, day ) ) 217 while ( !QDate::isValid( date.year(), date.month()-1, day ) )
218 day--; 218 day--;
219 setDate(QDate(date.year(), date.month()-1, day)); 219 setDate(QDate(date.year(), date.month()-1, day));
220 return; 220 return;
221 } 221 }
222 if ( e->key() == Qt::Key_Next ) { 222 if ( e->key() == Qt::Key_Next ) {
223 if ( date.month() == 12 ) { 223 if ( date.month() == 12 ) {
224 KNotifyClient::beep(); 224 KNotifyClient::beep();
225 return; 225 return;
226 } 226 }
227 int day = date.day(); 227 int day = date.day();
228 if ( day > 27 ) 228 if ( day > 27 )
229 while ( !QDate::isValid( date.year(), date.month()+1, day ) ) 229 while ( !QDate::isValid( date.year(), date.month()+1, day ) )
230 day--; 230 day--;
231 setDate(QDate(date.year(), date.month()+1, day)); 231 setDate(QDate(date.year(), date.month()+1, day));
232 return; 232 return;
233 } 233 }
234 */ 234 */
235 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 235 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
236 236
237 int temp=firstday+date.day()-dayoff; 237 int temp=firstday+date.day()-dayoff;
238 int pos = temp; 238 int pos = temp;
239 bool irgnore = true; 239 bool irgnore = true;
240 if ( e->state() != Qt::ControlButton ) { 240 if ( e->state() != Qt::ControlButton ) {
241 if ( e->key() == Qt::Key_Up ) { 241 if ( e->key() == Qt::Key_Up ) {
242 pos -= 7; 242 pos -= 7;
243 irgnore = false; 243 irgnore = false;
244 } 244 }
245 if ( e->key() == Qt::Key_Down ) { 245 if ( e->key() == Qt::Key_Down ) {
246 pos += 7; 246 pos += 7;
247 irgnore = false; 247 irgnore = false;
248 } 248 }
249 if ( e->key() == Qt::Key_Left ) { 249 if ( e->key() == Qt::Key_Left ) {
250 pos--; 250 pos--;
251 irgnore = false; 251 irgnore = false;
252 } 252 }
253 if ( e->key() == Qt::Key_Right ) { 253 if ( e->key() == Qt::Key_Right ) {
254 pos++; 254 pos++;
255 irgnore = false; 255 irgnore = false;
256 } 256 }
257 } 257 }
258 if ( irgnore ) 258 if ( irgnore )
259 e->ignore(); 259 e->ignore();
260 260
261 if(pos+dayoff<=firstday) 261 if(pos+dayoff<=firstday)
262 { // this day is in the previous month 262 { // this day is in the previous month
263 KNotifyClient::beep(); 263 KNotifyClient::beep();
264 return; 264 return;
265 } 265 }
266 if(firstday+numdays<pos+dayoff) 266 if(firstday+numdays<pos+dayoff)
267 { // this date is in the next month 267 { // this date is in the next month
268 KNotifyClient::beep(i18n( "Month not long enough" )); 268 KNotifyClient::beep(i18n( "Month not long enough" ));
269 return; 269 return;
270 } 270 }
271 271
272 if ( pos == temp ) 272 if ( pos == temp )
273 return; 273 return;
274 274
275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff));
276 updateCell(temp/7+1, temp%7); // Update the previously selected cell 276 updateCell(temp/7+1, temp%7); // Update the previously selected cell
277 updateCell(pos/7+1, pos%7); // Update the selected cell 277 updateCell(pos/7+1, pos%7); // Update the selected cell
278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
279 279
280 280
281} 281}
282 282
283void 283void
284KDateTable::viewportResizeEvent(QResizeEvent * e) 284KDateTable::viewportResizeEvent(QResizeEvent * e)
285{ 285{
286 QGridView::viewportResizeEvent(e); 286 QGridView::viewportResizeEvent(e);
287 287
288 setCellWidth(viewport()->width()/7); 288 setCellWidth(viewport()->width()/7);
289 setCellHeight(viewport()->height()/7); 289 setCellHeight(viewport()->height()/7);
290} 290}
291 291
292void 292void
293KDateTable::setFontSize(int size) 293KDateTable::setFontSize(int size)
294{ 294{
295 int count; 295 int count;
296 QRect rect; 296 QRect rect;
297 // ----- store rectangles: 297 // ----- store rectangles:
298 fontsize=size; 298 fontsize=size;
299 QFont font = KGlobalSettings::generalFont(); 299 QFont font = KGlobalSettings::generalFont();
300 font.setPointSize(fontsize); 300 font.setPointSize(fontsize);
301 font.setBold( true ); 301 font.setBold( true );
302 QFontMetrics metrics(font); 302 QFontMetrics metrics(font);
303 303
304 // ----- find largest day name: 304 // ----- find largest day name:
305 maxCell.setWidth(0); 305 maxCell.setWidth(0);
306 maxCell.setHeight(0); 306 maxCell.setHeight(0);
307 for(count=0; count<7; ++count) 307 for(count=0; count<7; ++count)
308 { 308 {
309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true)); 309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true));
310 maxCell.setWidth(QMAX(maxCell.width(), rect.width())); 310 maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
311 maxCell.setHeight(QMAX(maxCell.height(), rect.height())); 311 maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
312 } 312 }
313 // ----- compare with a real wide number and add some space: 313 // ----- compare with a real wide number and add some space:
314 rect=metrics.boundingRect(QString::fromLatin1("88")); 314 rect=metrics.boundingRect(QString::fromLatin1("88"));
315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); 315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); 316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) 317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 )
318 maxCell.setHeight(maxCell.width() * 1000 / 1900 ); 318 maxCell.setHeight(maxCell.width() * 1000 / 1900 );
319} 319}
320 320
321void 321void
322KDateTable::contentsMousePressEvent(QMouseEvent *e) 322KDateTable::contentsMousePressEvent(QMouseEvent *e)
323{ 323{
324 if(e->type()!=QEvent::MouseButtonPress) 324 if(e->type()!=QEvent::MouseButtonPress)
325 { // the KDatePicker only reacts on mouse press events: 325 { // the KDatePicker only reacts on mouse press events:
326 return; 326 return;
327 } 327 }
328 if(!isEnabled()) 328 if(!isEnabled())
329 { 329 {
330 KNotifyClient::beep(); 330 KNotifyClient::beep();
331 return; 331 return;
332 } 332 }
333 333
334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
335 // ----- 335 // -----
336 int row, col, pos, temp; 336 int row, col, pos, temp;
337 QPoint mouseCoord; 337 QPoint mouseCoord;
338 // ----- 338 // -----
339 mouseCoord = e->pos(); 339 mouseCoord = e->pos();
340 row=rowAt(mouseCoord.y()); 340 row=rowAt(mouseCoord.y());
341 col=columnAt(mouseCoord.x()); 341 col=columnAt(mouseCoord.x());
342 if(row<0 || col<0) 342 if(row<0 || col<0)
343 { // the user clicked on the frame of the table 343 { // the user clicked on the frame of the table
344 return; 344 return;
345 } 345 }
346 pos=7*(row-1)+col+1; 346 pos=7*(row-1)+col+1;
347#if 0 347#if 0
348 if(pos+dayoff<=firstday) 348 if(pos+dayoff<=firstday)
349 { // this day is in the previous month 349 { // this day is in the previous month
350 KNotifyClient::beep(); 350 KNotifyClient::beep();
351 return; 351 return;
352 } 352 }
353 if(firstday+numdays<pos+dayoff) 353 if(firstday+numdays<pos+dayoff)
354 { // this date is in the next month 354 { // this date is in the next month
355 KNotifyClient::beep(); 355 KNotifyClient::beep();
356 return; 356 return;
357 } 357 }
358#endif 358#endif
359 temp=firstday+date.day()-dayoff-1; 359 temp=firstday+date.day()-dayoff-1;
360 QDate da = QDate(date.year(), date.month(),1); 360 QDate da = QDate(date.year(), date.month(),1);
361 setDate(da.addDays( pos-firstday+dayoff-1)); 361 setDate(da.addDays( pos-firstday+dayoff-1));
362 updateCell(temp/7+1, temp%7); // Update the previously selected cell 362 updateCell(temp/7+1, temp%7); // Update the previously selected cell
363 updateCell(row, col); // Update the selected cell 363 updateCell(row, col); // Update the selected cell
364 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 364 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
365 emit(tableClicked()); 365 emit(tableClicked());
366} 366}
367 367
368bool 368bool
369KDateTable::setDate(const QDate& date_) 369KDateTable::setDate(const QDate& date_)
370{ 370{
371 bool changed=false; 371 bool changed=false;
372 QDate temp; 372 QDate temp;
373 mMarkCurrent = false; 373 mMarkCurrent = false;
374 // ----- 374 // -----
375 if(!date_.isValid()) 375 if(!date_.isValid())
376 { 376 {
377 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; 377 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl;
378 return false; 378 return false;
379 } 379 }
380 if(date!=date_) 380 if(date!=date_)
381 { 381 {
382 date=date_; 382 date=date_;
383 changed=true; 383 changed=true;
384 } 384 }
385 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() ); 385 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() );
386 temp.setYMD(date.year(), date.month(), 1); 386 temp.setYMD(date.year(), date.month(), 1);
387 firstday=temp.dayOfWeek(); 387 firstday=temp.dayOfWeek();
388 if(firstday==1) firstday=8; 388 if(firstday==1) firstday=8;
389 numdays=date.daysInMonth(); 389 numdays=date.daysInMonth();
390 if(date.month()==1) 390 if(date.month()==1)
391 { // set to december of previous year 391 { // set to december of previous year
392 temp.setYMD(date.year()-1, 12, 1); 392 temp.setYMD(date.year()-1, 12, 1);
393 } else { // set to previous month 393 } else { // set to previous month
394 temp.setYMD(date.year(), date.month()-1, 1); 394 temp.setYMD(date.year(), date.month()-1, 1);
395 }
396 numDaysPrevMonth=temp.daysInMonth();
397 if(changed)
398 {
399 repaintContents(false);
400 } 395 }
401 emit(dateChanged(date)); 396 numDaysPrevMonth=temp.daysInMonth();
402 return true; 397 if(changed)
398 {
399 repaintContents(false);
400 }
401 emit(dateChanged(date));
402 return true;
403} 403}
404 404
405const QDate& 405const QDate&
406KDateTable::getDate() const 406KDateTable::getDate() const
407{ 407{
408 return date; 408 return date;
409} 409}
410 410
411void KDateTable::focusInEvent( QFocusEvent *e ) 411void KDateTable::focusInEvent( QFocusEvent *e )
412{ 412{
413 repaintContents(false); 413 repaintContents(false);
414 QGridView::focusInEvent( e ); 414 QGridView::focusInEvent( e );
415} 415}
416 416
417void KDateTable::focusOutEvent( QFocusEvent *e ) 417void KDateTable::focusOutEvent( QFocusEvent *e )
418{ 418{
419 repaintContents(false); 419 repaintContents(false);
420 QGridView::focusOutEvent( e ); 420 QGridView::focusOutEvent( e );
421} 421}
422 422
423QSize 423QSize
424KDateTable::sizeHint() const 424KDateTable::sizeHint() const
425{ 425{
426 if(maxCell.height()>0 && maxCell.width()>0) 426 if(maxCell.height()>0 && maxCell.width()>0)
427 { 427 {
428 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(), 428 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(),
429 (maxCell.height()+4)*numRows()+2*frameWidth()); 429 (maxCell.height()+4)*numRows()+2*frameWidth());
430 } else { 430 } else {
431 return QSize(-1, -1); 431 return QSize(-1, -1);
432 } 432 }
433} 433}
434 434
435KDateInternalMonthPicker::KDateInternalMonthPicker 435KDateInternalMonthPicker::KDateInternalMonthPicker
436(int fontsize, QWidget* parent, const char* name) 436(int fontsize, QWidget* parent, const char* name)
437 : QGridView(parent, name), 437 : QGridView(parent, name),
438 result(0) // invalid 438 result(0) // invalid
439{ 439{
440 QRect rect; 440 QRect rect;
441 QFont font; 441 QFont font;
442 // ----- 442 // -----
443 activeCol = -1; 443 activeCol = -1;
444 activeRow = -1; 444 activeRow = -1;
445 font=KGlobalSettings::generalFont(); 445 font=KGlobalSettings::generalFont();
446 font.setPointSize(fontsize); 446 font.setPointSize(fontsize);
447 setFont(font); 447 setFont(font);
448 setHScrollBarMode(AlwaysOff); 448 setHScrollBarMode(AlwaysOff);
449 setVScrollBarMode(AlwaysOff); 449 setVScrollBarMode(AlwaysOff);
450 setFrameStyle(QFrame::NoFrame); 450 setFrameStyle(QFrame::NoFrame);
451 setNumRows(4); 451 setNumRows(4);
452 setNumCols(3); 452 setNumCols(3);
453 // enable to find drawing failures: 453 // enable to find drawing failures:
454 // setTableFlags(Tbl_clipCellPainting); 454 // setTableFlags(Tbl_clipCellPainting);
455#if 0 455#if 0
456 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 456 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
457#endif 457#endif
458 // ----- find the preferred size 458 // ----- find the preferred size
459 // (this is slow, possibly, but unfortunatly it is needed here): 459 // (this is slow, possibly, but unfortunatly it is needed here):
460 QFontMetrics metrics(font); 460 QFontMetrics metrics(font);
461 for(int i=1; i <= 12; ++i) 461 for(int i=1; i <= 12; ++i)
462 { 462 {
463 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false)); 463 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false));
464 if(max.width()<rect.width()) max.setWidth(rect.width()); 464 if(max.width()<rect.width()) max.setWidth(rect.width());
465 if(max.height()<rect.height()) max.setHeight(rect.height()); 465 if(max.height()<rect.height()) max.setHeight(rect.height());
466 } 466 }
467 467
468} 468}
469 469
470QSize 470QSize
471KDateInternalMonthPicker::sizeHint() const 471KDateInternalMonthPicker::sizeHint() const
472{ 472{
473 return QSize((max.width()+6)*numCols()+2*frameWidth(), 473 return QSize((max.width()+6)*numCols()+2*frameWidth(),
474 (max.height()+6)*numRows()+2*frameWidth()); 474 (max.height()+6)*numRows()+2*frameWidth());
475} 475}
476 476
477int 477int
478KDateInternalMonthPicker::getResult() const 478KDateInternalMonthPicker::getResult() const
479{ 479{
480 return result; 480 return result;
481} 481}
482 482
483void 483void
484KDateInternalMonthPicker::setupPainter(QPainter *p) 484KDateInternalMonthPicker::setupPainter(QPainter *p)
485{ 485{
486 p->setPen(black); 486 p->setPen(black);
487} 487}
488 488
489void 489void
490KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*) 490KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*)
491{ 491{
492 setCellWidth(width()/3); 492 setCellWidth(width()/3);
493 setCellHeight(height()/4); 493 setCellHeight(height()/4);
494} 494}
495 495
496void 496void
497KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col) 497KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col)
498{ 498{
499 int index; 499 int index;
500 QString text; 500 QString text;
501 // ----- find the number of the cell: 501 // ----- find the number of the cell:
502 index=3*row+col+1; 502 index=3*row+col+1;
503 text=KGlobal::locale()->monthName(index, false); 503 text=KGlobal::locale()->monthName(index, false);
504 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); 504 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
505 if ( activeCol == col && activeRow == row ) 505 if ( activeCol == col && activeRow == row )
506 painter->drawRect( 0, 0, cellWidth(), cellHeight() ); 506 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
507} 507}
508 508
509void 509void
510KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e) 510KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e)
511{ 511{
512 if(!isEnabled() || e->button() != LeftButton) 512 if(!isEnabled() || e->button() != LeftButton)
513 { 513 {
514 KNotifyClient::beep(); 514 KNotifyClient::beep();
515 return; 515 return;
516 }
517 // -----
518 int row, col;
519 QPoint mouseCoord;
520 // -----
521 mouseCoord = e->pos();
522 row=rowAt(mouseCoord.y());
523 col=columnAt(mouseCoord.x());
524
525 if(row<0 || col<0)
526 { // the user clicked on the frame of the table
527 activeCol = -1;
528 activeRow = -1;
529 } else {
530 activeCol = col;
531 activeRow = row;
532 updateCell( row, col /*, false */ );
516 } 533 }
517 // -----
518 int row, col;
519 QPoint mouseCoord;
520 // -----
521 mouseCoord = e->pos();
522 row=rowAt(mouseCoord.y());
523 col=columnAt(mouseCoord.x());
524
525 if(row<0 || col<0)
526 { // the user clicked on the frame of the table
527 activeCol = -1;
528 activeRow = -1;
529 } else {
530 activeCol = col;
531 activeRow = row;
532 updateCell( row, col /*, false */ );
533 }
534} 534}
535 535
536void 536void
537KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e) 537KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e)
538{ 538{
539 if (e->state() & LeftButton) 539 if (e->state() & LeftButton)
540 { 540 {
541 int row, col; 541 int row, col;
542 QPoint mouseCoord; 542 QPoint mouseCoord;
543 // ----- 543 // -----
544 mouseCoord = e->pos(); 544 mouseCoord = e->pos();
545 row=rowAt(mouseCoord.y()); 545 row=rowAt(mouseCoord.y());
546 col=columnAt(mouseCoord.x()); 546 col=columnAt(mouseCoord.x());
547 int tmpRow = -1, tmpCol = -1; 547 int tmpRow = -1, tmpCol = -1;
548 if(row<0 || col<0) 548 if(row<0 || col<0)
549 { // the user clicked on the frame of the table 549 { // the user clicked on the frame of the table
550 if ( activeCol > -1 ) 550 if ( activeCol > -1 )
551 { 551 {
552 tmpRow = activeRow; 552 tmpRow = activeRow;
553 tmpCol = activeCol; 553 tmpCol = activeCol;
554 } 554 }
555 activeCol = -1; 555 activeCol = -1;
556 activeRow = -1; 556 activeRow = -1;
557 } else { 557 } else {
558 bool differentCell = (activeRow != row || activeCol != col); 558 bool differentCell = (activeRow != row || activeCol != col);
559 if ( activeCol > -1 && differentCell) 559 if ( activeCol > -1 && differentCell)
560 { 560 {
561 tmpRow = activeRow; 561 tmpRow = activeRow;
562 tmpCol = activeCol; 562 tmpCol = activeCol;
563 } 563 }
564 if ( differentCell) 564 if ( differentCell)
565 { 565 {
566 activeRow = row; 566 activeRow = row;
567 activeCol = col; 567 activeCol = col;
568 updateCell( row, col /*, false */ ); // mark the new active cell 568 updateCell( row, col /*, false */ ); // mark the new active cell
569 }
569 } 570 }
571 if ( tmpRow > -1 ) // repaint the former active cell
572 updateCell( tmpRow, tmpCol /*, true */ );
570 } 573 }
571 if ( tmpRow > -1 ) // repaint the former active cell
572 updateCell( tmpRow, tmpCol /*, true */ );
573 }
574} 574}
575 575
576void 576void
577KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e) 577KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e)
578{ 578{
579 if(!isEnabled()) 579 if(!isEnabled())
580 { 580 {
581 return; 581 return;
582 } 582 }
583 // ----- 583 // -----
584 int row, col, pos; 584 int row, col, pos;
585 QPoint mouseCoord; 585 QPoint mouseCoord;
586 // ----- 586 // -----
587 mouseCoord = e->pos(); 587 mouseCoord = e->pos();
588 row=rowAt(mouseCoord.y()); 588 row=rowAt(mouseCoord.y());
589 col=columnAt(mouseCoord.x()); 589 col=columnAt(mouseCoord.x());
590 if(row<0 || col<0) 590 if(row<0 || col<0)
591 { // the user clicked on the frame of the table 591 { // the user clicked on the frame of the table
592 emit(closeMe(0)); 592 emit(closeMe(0));
593 } 593 }
594 pos=3*row+col+1; 594 pos=3*row+col+1;
595 result=pos; 595 result=pos;
596 emit(closeMe(1)); 596 emit(closeMe(1));
597} 597}
598 598
599 599
600 600
601KDateInternalYearSelector::KDateInternalYearSelector 601KDateInternalYearSelector::KDateInternalYearSelector
602(int fontsize, QWidget* parent, const char* name) 602(int fontsize, QWidget* parent, const char* name)
603 : QLineEdit(parent, name), 603 : QLineEdit(parent, name),
604 val(new QIntValidator(this)), 604 val(new QIntValidator(this)),
605 result(0) 605 result(0)
606{ 606{
607 QFont font; 607 QFont font;
608 // ----- 608 // -----
609 font=KGlobalSettings::generalFont(); 609 font=KGlobalSettings::generalFont();
610 font.setPointSize(fontsize); 610 font.setPointSize(fontsize);
611 setFont(font); 611 setFont(font);
612#if 0 612#if 0
613 setFrameStyle(QFrame::NoFrame); 613 setFrameStyle(QFrame::NoFrame);
614#endif 614#endif
615 // we have to respect the limits of QDate here, I fear: 615 // we have to respect the limits of QDate here, I fear:
616 val->setRange(0, 8000); 616 val->setRange(0, 8000);
617 setValidator(val); 617 setValidator(val);
618 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot())); 618 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot()));
619} 619}
620 620
621void 621void
622KDateInternalYearSelector::yearEnteredSlot() 622KDateInternalYearSelector::yearEnteredSlot()
623{ 623{
624 bool ok; 624 bool ok;
625 int year; 625 int year;
626 QDate date; 626 QDate date;
627 // ----- check if this is a valid year: 627 // ----- check if this is a valid year:
628 year=text().toInt(&ok); 628 year=text().toInt(&ok);
629 if(!ok) 629 if(!ok)
630 { 630 {
631 KNotifyClient::beep(); 631 KNotifyClient::beep();
632 return; 632 return;
633 } 633 }
634 date.setYMD(year, 1, 1); 634 date.setYMD(year, 1, 1);
635 if(!date.isValid()) 635 if(!date.isValid())
636 { 636 {
637 KNotifyClient::beep(); 637 KNotifyClient::beep();
638 return; 638 return;
639 } 639 }
640 result=year; 640 result=year;
641 emit(closeMe(1)); 641 emit(closeMe(1));
642} 642}
643 643
644int 644int
645KDateInternalYearSelector::getYear() 645KDateInternalYearSelector::getYear()
646{ 646{
647 return result; 647 return result;
648} 648}
649 649
650void 650void
651KDateInternalYearSelector::setYear(int year) 651KDateInternalYearSelector::setYear(int year)
652{ 652{
653 QString temp; 653 QString temp;
654 // ----- 654 // -----
655 temp.setNum(year); 655 temp.setNum(year);
656 setText(temp); 656 setText(temp);
657} 657}
658 658
659KPopupFrame::KPopupFrame(QWidget* parent, const char* name) 659KPopupFrame::KPopupFrame(QWidget* parent, const char* name)
660 : QFrame(parent, name, WType_Popup), 660 : QFrame(parent, name, WType_Popup),
661 result(0), // rejected 661 result(0), // rejected
662 main(0) 662 main(0)
663{ 663{
664 setFrameStyle(QFrame::Box|QFrame::Raised); 664 setFrameStyle(QFrame::Box|QFrame::Raised);
665 setMidLineWidth(2); 665 setMidLineWidth(2);
666} 666}
667 667
668void 668void
669KPopupFrame::keyPressEvent(QKeyEvent* e) 669KPopupFrame::keyPressEvent(QKeyEvent* e)
670{ 670{
671 if(e->key()==Key_Escape) 671 if(e->key()==Key_Escape)
672 { 672 {
673 result=0; // rejected 673 result=0; // rejected
674 qApp->exit_loop(); 674 qApp->exit_loop();
675 } 675 }
676} 676}
677 677
678void 678void
679KPopupFrame::close(int r) 679KPopupFrame::close(int r)
680{ 680{
681 result=r; 681 result=r;
682 qApp->exit_loop(); 682 qApp->exit_loop();
683} 683}
684 684
685void 685void
686KPopupFrame::setMainWidget(QWidget* m) 686KPopupFrame::setMainWidget(QWidget* m)
687{ 687{
688 main=m; 688 main=m;
689 if(main!=0) 689 if(main!=0)
690 { 690 {
691 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth()); 691 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth());
692 } 692 }
693} 693}
694 694
695void 695void
696KPopupFrame::resizeEvent(QResizeEvent*) 696KPopupFrame::resizeEvent(QResizeEvent*)
697{ 697{
698 if(main!=0) 698 if(main!=0)
699 { 699 {
700 main->setGeometry(frameWidth(), frameWidth(), 700 main->setGeometry(frameWidth(), frameWidth(),
701 width()-2*frameWidth(), height()-2*frameWidth()); 701 width()-2*frameWidth(), height()-2*frameWidth());
702 } 702 }
703} 703}
704 704
705void 705void
706KPopupFrame::popup(const QPoint &pos) 706KPopupFrame::popup(const QPoint &pos)
707{ 707{
708 // Make sure the whole popup is visible. 708 // Make sure the whole popup is visible.
709 QRect d = QApplication::desktop()->frameGeometry(); 709 QRect d = QApplication::desktop()->frameGeometry();
710 int x = pos.x(); 710 int x = pos.x();
711 int y = pos.y(); 711 int y = pos.y();
712 int w = width(); 712 int w = width();
713 int h = height(); 713 int h = height();
714 if (x+w > d.x()+d.width()) 714 if (x+w > d.x()+d.width())
715 x = d.width() - w; 715 x = d.width() - w;
716 if (y+h > d.y()+d.height()) 716 if (y+h > d.y()+d.height())
717 y = d.height() - h; 717 y = d.height() - h;
718 if (x < d.x()) 718 if (x < d.x())
719 x = 0; 719 x = 0;
720 if (y < d.y()) 720 if (y < d.y())
721 y = 0; 721 y = 0;
722 722
723 // Pop the thingy up. 723 // Pop the thingy up.
724 move(x, y); 724 move(x, y);
725 show(); 725 show();
726} 726}
727 727
728int 728int
729KPopupFrame::exec(QPoint pos) 729KPopupFrame::exec(QPoint pos)
730{ 730{
731 popup(pos); 731 popup(pos);
732 repaint(); 732 repaint();
733 qApp->enter_loop(); 733 qApp->enter_loop();
734 hide(); 734 hide();
735 return result; 735 return result;
736} 736}
737 737
738int 738int
739KPopupFrame::exec(int x, int y) 739KPopupFrame::exec(int x, int y)
740{ 740{
741 return exec(QPoint(x, y)); 741 return exec(QPoint(x, y));
742} 742}
743 743
744void KPopupFrame::virtual_hook( int, void* ) 744void KPopupFrame::virtual_hook( int, void* )
745{ /*BASE::virtual_hook( id, data );*/ } 745{ /*BASE::virtual_hook( id, data );*/ }
746 746
747void KDateTable::virtual_hook( int, void* ) 747void KDateTable::virtual_hook( int, void* )
748{ /*BASE::virtual_hook( id, data );*/ } 748{ /*BASE::virtual_hook( id, data );*/ }
749 749
750//#include "kdatetbl.moc" 750//#include "kdatetbl.moc"
751
752
753KDateInternalWeekPicker::KDateInternalWeekPicker
754(int fontsize, QWidget* parent, const char* name)
755 : QGridView(parent, name),
756 result(0) // invalid
757{
758 QRect rect;
759 QFont font;
760 // -----
761 activeCol = -1;
762 activeRow = -1;
763 font=KGlobalSettings::generalFont();
764 font.setPointSize(fontsize);
765 setFont(font);
766 setHScrollBarMode(AlwaysOff);
767 setVScrollBarMode(AlwaysOff);
768 setFrameStyle(QFrame::NoFrame);
769 setNumRows(13);
770 setNumCols(4);
771 // enable to find drawing failures:
772 // setTableFlags(Tbl_clipCellPainting);
773#if 0
774 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
775#endif
776 // ----- find the preferred size
777 // (this is slow, possibly, but unfortunatly it is needed here):
778 QFontMetrics metrics(font);
779 for(int i=1; i <= 52; ++i)
780 {
781 rect=metrics.boundingRect(QString::number( i ));
782 if(max.width()<rect.width()) max.setWidth(rect.width());
783 if(max.height()<rect.height()) max.setHeight(rect.height());
784 }
785
786}
787
788QSize
789KDateInternalWeekPicker::sizeHint() const
790{
791 return QSize((max.width()+6)*numCols()+2*frameWidth(),
792 (max.height()+6)*numRows()+2*frameWidth());
793}
794
795int
796KDateInternalWeekPicker::getResult() const
797{
798 return result;
799}
800
801void
802KDateInternalWeekPicker::setupPainter(QPainter *p)
803{
804 p->setPen(black);
805}
806
807void
808KDateInternalWeekPicker::viewportResizeEvent(QResizeEvent*)
809{
810 setCellWidth(width()/4);
811 setCellHeight(height()/13);
812}
813
814void
815KDateInternalWeekPicker::paintCell(QPainter* painter, int row, int col)
816{
817 int index;
818 QString text;
819 // ----- find the number of the cell:
820 index=4*row+col+1;
821 text=QString::number( index );
822 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
823 if ( activeCol == col && activeRow == row )
824 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
825}
826
827void
828KDateInternalWeekPicker::contentsMousePressEvent(QMouseEvent *e)
829{
830 if(!isEnabled() || e->button() != LeftButton)
831 {
832 KNotifyClient::beep();
833 return;
834 }
835 // -----
836 int row, col;
837 QPoint mouseCoord;
838 // -----
839 mouseCoord = e->pos();
840 row=rowAt(mouseCoord.y());
841 col=columnAt(mouseCoord.x());
842
843 if(row<0 || col<0)
844 { // the user clicked on the frame of the table
845 activeCol = -1;
846 activeRow = -1;
847 } else {
848 activeCol = col;
849 activeRow = row;
850 updateCell( row, col /*, false */ );
851 }
852}
853
854void
855KDateInternalWeekPicker::contentsMouseMoveEvent(QMouseEvent *e)
856{
857 if (e->state() & LeftButton)
858 {
859 int row, col;
860 QPoint mouseCoord;
861 // -----
862 mouseCoord = e->pos();
863 row=rowAt(mouseCoord.y());
864 col=columnAt(mouseCoord.x());
865 int tmpRow = -1, tmpCol = -1;
866 if(row<0 || col<0)
867 { // the user clicked on the frame of the table
868 if ( activeCol > -1 )
869 {
870 tmpRow = activeRow;
871 tmpCol = activeCol;
872 }
873 activeCol = -1;
874 activeRow = -1;
875 } else {
876 bool differentCell = (activeRow != row || activeCol != col);
877 if ( activeCol > -1 && differentCell)
878 {
879 tmpRow = activeRow;
880 tmpCol = activeCol;
881 }
882 if ( differentCell)
883 {
884 activeRow = row;
885 activeCol = col;
886 updateCell( row, col /*, false */ ); // mark the new active cell
887 }
888 }
889 if ( tmpRow > -1 ) // repaint the former active cell
890 updateCell( tmpRow, tmpCol /*, true */ );
891 }
892}
893
894void
895KDateInternalWeekPicker::contentsMouseReleaseEvent(QMouseEvent *e)
896{
897 if(!isEnabled())
898 {
899 return;
900 }
901 // -----
902 int row, col, pos;
903 QPoint mouseCoord;
904 // -----
905 mouseCoord = e->pos();
906 row=rowAt(mouseCoord.y());
907 col=columnAt(mouseCoord.x());
908 if(row<0 || col<0)
909 { // the user clicked on the frame of the table
910 emit(closeMe(0));
911 }
912 pos=4*row+col+1;
913 result=pos;
914 emit(closeMe(1));
915}
diff --git a/microkde/kdatetbl.h b/microkde/kdatetbl.h
index b4d3e16..2efa532 100644
--- a/microkde/kdatetbl.h
+++ b/microkde/kdatetbl.h
@@ -278,32 +278,95 @@ protected:
278 */ 278 */
279 int numdays; 279 int numdays;
280 /** 280 /**
281 * The number of days in the previous month. 281 * The number of days in the previous month.
282 */ 282 */
283 int numDaysPrevMonth; 283 int numDaysPrevMonth;
284 /** 284 /**
285 * unused 285 * unused
286 */ 286 */
287 bool unused_hasSelection; 287 bool unused_hasSelection;
288 /** 288 /**
289 * Save the size of the largest used cell content. 289 * Save the size of the largest used cell content.
290 */ 290 */
291 QRect maxCell; 291 QRect maxCell;
292signals: 292signals:
293 /** 293 /**
294 * The selected date changed. 294 * The selected date changed.
295 */ 295 */
296 void dateChanged(QDate); 296 void dateChanged(QDate);
297 /** 297 /**
298 * A date has been selected by clicking on the table. 298 * A date has been selected by clicking on the table.
299 */ 299 */
300 void tableClicked(); 300 void tableClicked();
301 301
302protected: 302protected:
303 virtual void virtual_hook( int id, void* data ); 303 virtual void virtual_hook( int id, void* data );
304private: 304private:
305 class KDateTablePrivate; 305 class KDateTablePrivate;
306 KDateTablePrivate *d; 306 KDateTablePrivate *d;
307}; 307};
308 308
309#endif // KDATETBL_H 309#endif // KDATETBL_H
310class KDateInternalWeekPicker : public QGridView
311{
312 Q_OBJECT
313protected:
314 /**
315 * Store the month that has been clicked [1..12].
316 */
317 int result;
318 /**
319 * the cell under mouse cursor when LBM is pressed
320 */
321 short int activeCol;
322 short int activeRow;
323 /**
324 * Contains the largest rectangle needed by the month names.
325 */
326 QRect max;
327signals:
328 /**
329 * This is send from the mouse click event handler.
330 */
331 void closeMe(int);
332public:
333 /**
334 * The constructor.
335 */
336 KDateInternalWeekPicker(int fontsize, QWidget* parent, const char* name=0);
337 /**
338 * The size hint.
339 */
340 QSize sizeHint() const;
341 /**
342 * Return the result. 0 means no selection (reject()), 1..12 are the
343 * months.
344 */
345 int getResult() const;
346protected:
347 /**
348 * Set up the painter.
349 */
350 void setupPainter(QPainter *p);
351 /**
352 * The resize event.
353 */
354 void viewportResizeEvent(QResizeEvent*);
355 /**
356 * Paint a cell. This simply draws the month names in it.
357 */
358 virtual void paintCell(QPainter* painter, int row, int col);
359 /**
360 * Catch mouse click and move events to paint a rectangle around the item.
361 */
362 void contentsMousePressEvent(QMouseEvent *e);
363 void contentsMouseMoveEvent(QMouseEvent *e);
364 /**
365 * Emit monthSelected(int) when a cell has been released.
366 */
367 void contentsMouseReleaseEvent(QMouseEvent *e);
368
369private:
370 class KDateInternalMonthPrivate;
371 KDateInternalMonthPrivate *d;
372};