summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-02-07 06:10:09 (UTC)
committer zautrix <zautrix>2005-02-07 06:10:09 (UTC)
commit301a4a207171549bd87815705d8dcf32ad15559d (patch) (unidiff)
tree715fde2cd0af0c057f767c25d8e67298425b2c82
parent961fc44f4092c1f981eb3be4284715e6829f885c (diff)
downloadkdepimpi-301a4a207171549bd87815705d8dcf32ad15559d.zip
kdepimpi-301a4a207171549bd87815705d8dcf32ad15559d.tar.gz
kdepimpi-301a4a207171549bd87815705d8dcf32ad15559d.tar.bz2
new cool feature
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
@@ -27,193 +27,193 @@
27#include <qpe/qpeapplication.h> 27#include <qpe/qpeapplication.h>
28#include <qtopia/alarmserver.h> 28#include <qtopia/alarmserver.h>
29#include <qtopia/qcopenvelope_qws.h> 29#include <qtopia/qcopenvelope_qws.h>
30#include <unistd.h> // for sleep 30#include <unistd.h> // for sleep
31#else 31#else
32#include <qmenubar.h> 32#include <qmenubar.h>
33#include <qtoolbar.h> 33#include <qtoolbar.h>
34#include <qapplication.h> 34#include <qapplication.h>
35//#include <resource.h> 35//#include <resource.h>
36 36
37#endif 37#endif
38#include <libkcal/calendarlocal.h> 38#include <libkcal/calendarlocal.h>
39#include <libkcal/todo.h> 39#include <libkcal/todo.h>
40#include <libkcal/phoneformat.h> 40#include <libkcal/phoneformat.h>
41#include <libkdepim/ksyncprofile.h> 41#include <libkdepim/ksyncprofile.h>
42#include <libkdepim/phoneaccess.h> 42#include <libkdepim/phoneaccess.h>
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);
107 mWriteBackFutureWeeks->setValue( 8 ); 108 mWriteBackFutureWeeks->setValue( 8 );
108 lay->addWidget( temphb ); 109 lay->addWidget( temphb );
109 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) ); 110 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) );
110 lab->setAlignment (AlignHCenter ); 111 lab->setAlignment (AlignHCenter );
111 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); 112 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this );
112 lay->addWidget( ok ); 113 lay->addWidget( ok );
113 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 114 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
114 lay->addWidget( cancel ); 115 lay->addWidget( cancel );
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() );
204 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 204 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
205 mView->readSettings(); 205 mView->readSettings();
206 bool newFile = false; 206 bool newFile = false;
207 if( !QFile::exists( defaultFileName() ) ) { 207 if( !QFile::exists( defaultFileName() ) ) {
208 QFileInfo finfo ( defaultFileName() ); 208 QFileInfo finfo ( defaultFileName() );
209 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics"); 209 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics");
210 qDebug("oldfile %s ", oldFile.latin1()); 210 qDebug("oldfile %s ", oldFile.latin1());
211 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n"; 211 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n";
212 finfo.setFile( oldFile ); 212 finfo.setFile( oldFile );
213 if (finfo.exists() ) { 213 if (finfo.exists() ) {
214 KMessageBox::information( this, message); 214 KMessageBox::information( this, message);
215 mView->openCalendar( oldFile ); 215 mView->openCalendar( oldFile );
216 qApp->processEvents(); 216 qApp->processEvents();
217 } else { 217 } else {
218 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); 218 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics");
219 finfo.setFile( oldFile ); 219 finfo.setFile( oldFile );
@@ -512,133 +512,139 @@ void MainWindow::initActions()
512 //KOPrefs::instance()->mShowFullMenu 512 //KOPrefs::instance()->mShowFullMenu
513 iconToolBar->clear(); 513 iconToolBar->clear();
514 KOPrefs *p = KOPrefs::instance(); 514 KOPrefs *p = KOPrefs::instance();
515 //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar ); 515 //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar );
516 516
517 QPopupMenu *viewMenu = new QPopupMenu( this ); 517 QPopupMenu *viewMenu = new QPopupMenu( this );
518 QPopupMenu *actionMenu = new QPopupMenu( this ); 518 QPopupMenu *actionMenu = new QPopupMenu( this );
519 QPopupMenu *importMenu = new QPopupMenu( this ); 519 QPopupMenu *importMenu = new QPopupMenu( this );
520 selectFilterMenu = new QPopupMenu( this ); 520 selectFilterMenu = new QPopupMenu( this );
521 selectFilterMenu->setCheckable( true ); 521 selectFilterMenu->setCheckable( true );
522 syncMenu = new QPopupMenu( this ); 522 syncMenu = new QPopupMenu( this );
523 configureAgendaMenu = new QPopupMenu( this ); 523 configureAgendaMenu = new QPopupMenu( this );
524 configureToolBarMenu = new QPopupMenu( this ); 524 configureToolBarMenu = new QPopupMenu( this );
525 QPopupMenu *helpMenu = new QPopupMenu( this ); 525 QPopupMenu *helpMenu = new QPopupMenu( this );
526 if ( KOPrefs::instance()->mShowFullMenu ) { 526 if ( KOPrefs::instance()->mShowFullMenu ) {
527 QMenuBar *menuBar1; 527 QMenuBar *menuBar1;
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" );
629 configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); 635 configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 );
630 QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); 636 QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this );
631 nt_action->addTo( actionMenu ); 637 nt_action->addTo( actionMenu );
632 connect( nt_action, SIGNAL( activated() ), 638 connect( nt_action, SIGNAL( activated() ),
633 mView, SLOT( newTodo() ) ); 639 mView, SLOT( newTodo() ) );
634 640
635 icon = loadPixmap( pathString + "today" ); 641 icon = loadPixmap( pathString + "today" );
636 QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); 642 QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this );
637 today_action->addTo( viewMenu ); 643 today_action->addTo( viewMenu );
638 connect( today_action, SIGNAL( activated() ), 644 connect( today_action, SIGNAL( activated() ),
639 mView, SLOT( goToday() ) ); 645 mView, SLOT( goToday() ) );
640 viewMenu->insertSeparator(); 646 viewMenu->insertSeparator();
641 647
642 icon = loadPixmap( pathString + "navi" ); 648 icon = loadPixmap( pathString + "navi" );
643 action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this ); 649 action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this );
644 action->addTo( viewMenu ); 650 action->addTo( viewMenu );
@@ -1325,98 +1331,104 @@ void MainWindow::aboutKnownBugs()
1325 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), 1331 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"),
1326 QMessageBox::NoIcon, 1332 QMessageBox::NoIcon,
1327 QMessageBox::Ok, 1333 QMessageBox::Ok,
1328 QMessageBox::NoButton, 1334 QMessageBox::NoButton,
1329 QMessageBox::NoButton); 1335 QMessageBox::NoButton);
1330 msg->exec(); 1336 msg->exec();
1331 delete msg; 1337 delete msg;
1332 1338
1333} 1339}
1334 1340
1335QString MainWindow::defaultFileName() 1341QString MainWindow::defaultFileName()
1336{ 1342{
1337 return locateLocal( "data", "korganizer/mycalendar.ics" ); 1343 return locateLocal( "data", "korganizer/mycalendar.ics" );
1338} 1344}
1339QString MainWindow::syncFileName() 1345QString MainWindow::syncFileName()
1340{ 1346{
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
1407 } else { 1419 } else {
1408 if ( incidence->dtStart().time() != incidence->dtEnd().time() ) 1420 if ( incidence->dtStart().time() != incidence->dtEnd().time() )
1409 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ 1421 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+
1410 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); 1422 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time());
1411 if ( incidence->categories().contains( i18n("Birthday") ) || incidence->categories().contains( i18n("Anniversary") ) ) { 1423 if ( incidence->categories().contains( i18n("Birthday") ) || incidence->categories().contains( i18n("Anniversary") ) ) {
1412 bool ok; 1424 bool ok;
1413 QDateTime noc = incidence->getNextOccurence( mView->startDate().addDays(-1), &ok ); 1425 QDateTime noc = incidence->getNextOccurence( mView->startDate().addDays(-1), &ok );
1414 if ( ok ) { 1426 if ( ok ) {
1415 int years = noc.date().year() - incidence->dtStart().date().year(); 1427 int years = noc.date().year() - incidence->dtStart().date().year();
1416 startString += i18n(" (%1 y.)"). arg( years ); 1428 startString += i18n(" (%1 y.)"). arg( years );
1417 } 1429 }
1418 } 1430 }
1419 else 1431 else
1420 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); 1432 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true);
1421 } 1433 }
1422 1434
@@ -1674,97 +1686,97 @@ void MainWindow::keyPressEvent ( QKeyEvent * e )
1674 break; 1686 break;
1675 case Qt::Key_V: 1687 case Qt::Key_V:
1676 mView->viewManager()->showTodoView(); 1688 mView->viewManager()->showTodoView();
1677 break; 1689 break;
1678 case Qt::Key_C: 1690 case Qt::Key_C:
1679 mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); 1691 mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() );
1680 break; 1692 break;
1681 case Qt::Key_P: 1693 case Qt::Key_P:
1682 mView->showDatePicker( ); 1694 mView->showDatePicker( );
1683 break; 1695 break;
1684 case Qt::Key_F: 1696 case Qt::Key_F:
1685 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1697 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1686 mView->editFilters(); 1698 mView->editFilters();
1687 else 1699 else
1688 mView->toggleFilter(); 1700 mView->toggleFilter();
1689 break; 1701 break;
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 );
1755 disable = true; 1767 disable = true;
1756 } 1768 }
1757 selectFilterMenu->insertSeparator(); 1769 selectFilterMenu->insertSeparator();
1758 QPtrList<CalFilter> fili = mView->filters(); 1770 QPtrList<CalFilter> fili = mView->filters();
1759 CalFilter *curfilter = mView->filterView()->selectedFilter(); 1771 CalFilter *curfilter = mView->filterView()->selectedFilter();
1760 CalFilter *filter = fili.first(); 1772 CalFilter *filter = fili.first();
1761 int iii = 2; 1773 int iii = 2;
1762 while(filter) { 1774 while(filter) {
1763 selectFilterMenu->insertItem( filter->name(), iii ); 1775 selectFilterMenu->insertItem( filter->name(), iii );
1764 if ( filter == curfilter) 1776 if ( filter == curfilter)
1765 selectFilterMenu->setItemChecked( iii, true ); 1777 selectFilterMenu->setItemChecked( iii, true );
1766 if ( disable ) 1778 if ( disable )
1767 selectFilterMenu->setItemEnabled( iii, false ); 1779 selectFilterMenu->setItemEnabled( iii, false );
1768 filter = fili.next(); 1780 filter = fili.next();
1769 ++iii; 1781 ++iii;
1770 } 1782 }
@@ -1966,48 +1978,72 @@ void MainWindow::exportVCalendar()
1966 0, 1 ); 1978 0, 1 );
1967 if ( result != 0 ) { 1979 if ( result != 0 ) {
1968 createbup = false; 1980 createbup = false;
1969 } 1981 }
1970 } 1982 }
1971 if ( createbup ) { 1983 if ( createbup ) {
1972 if ( mView->exportVCalendar( fn ) ) { 1984 if ( mView->exportVCalendar( fn ) ) {
1973 KOPrefs::instance()->mLastVcalFile = fn; 1985 KOPrefs::instance()->mLastVcalFile = fn;
1974 if ( fn.length() > 20 ) 1986 if ( fn.length() > 20 )
1975 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; 1987 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ;
1976 else 1988 else
1977 mes = i18n("KO/Pi:Exported to %1").arg(fn ); 1989 mes = i18n("KO/Pi:Exported to %1").arg(fn );
1978 setCaption(mes); 1990 setCaption(mes);
1979 } 1991 }
1980 } 1992 }
1981 1993
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,147 +1,158 @@
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();
85 void fillFilterMenu(); 93 void fillFilterMenu();
86 void selectFilter( int ); 94 void selectFilter( int );
87 void exportToPhone( int ); 95 void exportToPhone( int );
88 void toggleBeamReceive(); 96 void toggleBeamReceive();
89 void disableBR(bool); 97 void disableBR(bool);
90 signals: 98 signals:
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
@@ -262,48 +262,111 @@ protected:
262 virtual void focusInEvent( QFocusEvent *e ); 262 virtual void focusInEvent( QFocusEvent *e );
263 virtual void focusOutEvent( QFocusEvent *e ); 263 virtual void focusOutEvent( QFocusEvent *e );
264 /** 264 /**
265 * The font size of the displayed text. 265 * The font size of the displayed text.
266 */ 266 */
267 int fontsize; 267 int fontsize;
268 /** 268 /**
269 * The currently selected date. 269 * The currently selected date.
270 */ 270 */
271 QDate date; 271 QDate date;
272 /** 272 /**
273 * The day of the first day in the month [1..7]. 273 * The day of the first day in the month [1..7].
274 */ 274 */
275 int firstday; 275 int firstday;
276 /** 276 /**
277 * The number of days in the current month. 277 * The number of days in the current month.
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};