-rw-r--r-- | korganizer/mainwindow.cpp | 110 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 15 | ||||
-rw-r--r-- | microkde/kdatetbl.cpp | 165 | ||||
-rw-r--r-- | microkde/kdatetbl.h | 63 |
4 files changed, 314 insertions, 39 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 348dd5e..119e28a 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -72,6 +72,7 @@ using namespace KCal; #endif #include "mainwindow.h" + class KOex2phonePrefs : public QDialog { public: @@ -144,10 +145,11 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : setIcon(SmallIcon( "ko24" ) ); mBlockAtStartup = true; mFlagKeyPressed = false; + setCaption("KOrganizer/Pi"); KOPrefs *p = KOPrefs::instance(); KPimGlobalPrefs::instance()->setGlobalConfig(); - if ( p->mHourSize > 18 ) - p->mHourSize = 18; + if ( p->mHourSize > 22 ) + p->mHourSize = 22; QMainWindow::ToolBarDock tbd; if ( p->mToolBarHor ) { if ( p->mToolBarUp ) @@ -167,8 +169,6 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : iconToolBar = new QPEToolBar( this ); addToolBar (iconToolBar , tbd ); mCalendarModifiedFlag = false; - - setCaption("KOrganizer/Pi"); QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); splash->setAlignment ( AlignCenter ); setCentralWidget( splash ); @@ -557,43 +557,49 @@ void MainWindow::initActions() } connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); connect ( selectFilterMenu, SIGNAL( aboutToShow() ), this, SLOT (fillFilterMenu() ) ); - - menuBarWeek = new QPEMenuBar( iconToolBar ); - QPopupMenu * wpo = new QPopupMenu (this); - QPopupMenu * all = new QPopupMenu (this); - //wpo->insertItem( i18n("W#"), 0 ); - int first = 1; - int i; - for ( i = 1; i < 50; ++i ) { - if ( !(i%10) ) { - all->insertItem( i18n("Select week %1-%2" ).arg(first).arg( i-1) ,wpo ); - connect( wpo, SIGNAL( activated(int) ), SIGNAL( selectWeek ( int ) ) ); - first = i; - wpo = new QPopupMenu (this); - } - wpo->insertItem( QString::number(i), i ); - } - for ( i = 50; i < 53; ++i ) { - wpo->insertItem( QString::number(i), i); - } - all->insertItem( i18n("Select week %1-%2" ).arg(first).arg( i-1) ,wpo ); - connect( wpo, SIGNAL( activated(int) ), SIGNAL( selectWeek ( int ) ) ); - menuBarWeek->insertItem( "00",all,1); - menuBarWeek->setMaximumSize( menuBarWeek->sizeHint( )); + QIconSet icon; + int pixWid = 22, pixHei = 22; + QString pathString = ""; + if ( !p->mToolBarMiniIcons ) { + if ( QApplication::desktop()->width() < 480 ) { + pathString += "icons16/"; + pixWid = 18; pixHei = 16; + } + } else { + pathString += "iconsmini/"; + pixWid = 18; pixHei = 16; + } + mWeekBgColor = iconToolBar->backgroundColor(); + mWeekPixmap.resize( pixWid , pixHei ); + mWeekPixmap.fill( mWeekBgColor ); + icon = mWeekPixmap; + mWeekAction = new QAction( i18n("Select week number"),icon, i18n("Select week number"), 0, this ); + mWeekAction->addTo( iconToolBar ); + mWeekFont = font(); + + int fontPoint = mWeekFont.pointSize(); + QFontMetrics f( mWeekFont ); + int fontWid = f.width( "30" ); + while ( fontWid > pixWid ) { + --fontPoint; + mWeekFont.setPointSize( fontPoint ); + QFontMetrics f( mWeekFont ); + fontWid = f.width( "30" ); + qDebug("dec-- "); + } + + connect( mWeekAction, SIGNAL( activated() ), + this, SLOT( weekAction() ) ); connect( this, SIGNAL( selectWeek ( int ) ), mView->dateNavigator(), SLOT( selectWeek ( int ) ) ); + + //#endif // ****************** QAction *action; - QIconSet icon; // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); configureToolBarMenu->setCheckable( true ); - QString pathString = ""; - if ( !p->mToolBarMiniIcons ) { - if ( QApplication::desktop()->width() < 480 ) - pathString += "icons16/"; - } else - pathString += "iconsmini/"; + configureAgendaMenu->setCheckable( true ); int iii ; for ( iii = 1;iii<= 10 ;++iii ){ @@ -1370,8 +1376,14 @@ void MainWindow::updateWeek(QDate seda) // we have the first week of the year.we are on monday weekNum = d.daysTo( seda ) / 7 +1; } - //qDebug("weeknum %s ", QString::number( weekNum).latin1()); - menuBarWeek-> changeItem(1, QString::number( weekNum) ); + + mWeekPixmap.fill( mWeekBgColor ); + QPainter p ( &mWeekPixmap ); + p.setFont( mWeekFont ); + p.drawText( 0,0,mWeekPixmap.width(), mWeekPixmap.height(),AlignCenter, QString::number( weekNum) ); + p.end(); + QIconSet icon3 ( mWeekPixmap ); + mWeekAction->setIconSet ( icon3 ); } void MainWindow::updateWeekNum(const DateList &selectedDates) @@ -1719,7 +1731,7 @@ void MainWindow::keyPressEvent ( QKeyEvent * e ) break; case Qt::Key_Plus: size = p->mHourSize +2; - if ( size <= 18 ) + if ( size <= 22 ) configureAgenda( size ); break; case Qt::Key_Minus: @@ -2011,3 +2023,27 @@ void MainWindow::printCal() mView->print();//mCp->showDialog(); } + +#include "libkdepim/kdatepicker.h" +#include <kdatetbl.h> +void MainWindow::weekAction() +{ + int month; + KPopupFrame* popup = new KPopupFrame(this); + int size = 12; + if ( QApplication::desktop()->width() >= 480 ) + size = 18; + KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(size, popup); + // ----- + picker->resize(picker->sizeHint()); + popup->setMainWidget(picker); + picker->setFocus(); + connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); + if(popup->exec(iconToolBar->mapToGlobal(QPoint(0, iconToolBar->height())))) + { + month = picker->getResult(); + emit selectWeek ( month ); + //qDebug("weekSelected %d ", month); + } + delete popup; +} diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index 076ab94..5b9f903 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h @@ -5,6 +5,7 @@ #include <qtimer.h> #include <qdict.h> #include <qfile.h> +#include <qmenubar.h> #include <qtextstream.h> #include <qregexp.h> @@ -23,13 +24,19 @@ class KSyncProfile; #define QPEMenuBar QMenuBar #endif class QPEToolBar; -class QPEMenuBar; namespace KCal { class CalendarLocal; } +class KOMenuBar : public QMenuBar +{ + public: + KOMenuBar( QWidget *parent=0 ): QMenuBar (parent ) {;} + QSize sizeHint () const{ qDebug("sizejint ");return QSize ( 40,25 );} +}; + using namespace KCal; class MainWindow : public QMainWindow @@ -50,6 +57,7 @@ class MainWindow : public QMainWindow void recieve( const QCString& msg, const QByteArray& data ); protected slots: void setCaptionToDates(); + void weekAction(); void about(); void licence(); void faq(); @@ -120,7 +128,10 @@ class MainWindow : public QMainWindow CalendarLocal *mCalendar; CalendarView *mView; QAction *mNewSubTodoAction; - QPEMenuBar *menuBarWeek; + QAction *mWeekAction; + QFont mWeekFont; + QPixmap mWeekPixmap; + QColor mWeekBgColor; QAction *mShowAction; QAction *mEditAction; diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp index 508ce31..fce0e5a 100644 --- a/microkde/kdatetbl.cpp +++ b/microkde/kdatetbl.cpp @@ -748,3 +748,168 @@ void KDateTable::virtual_hook( int, void* ) { /*BASE::virtual_hook( id, data );*/ } //#include "kdatetbl.moc" + + +KDateInternalWeekPicker::KDateInternalWeekPicker +(int fontsize, QWidget* parent, const char* name) + : QGridView(parent, name), + result(0) // invalid +{ + QRect rect; + QFont font; + // ----- + activeCol = -1; + activeRow = -1; + font=KGlobalSettings::generalFont(); + font.setPointSize(fontsize); + setFont(font); + setHScrollBarMode(AlwaysOff); + setVScrollBarMode(AlwaysOff); + setFrameStyle(QFrame::NoFrame); + setNumRows(13); + setNumCols(4); + // enable to find drawing failures: + // setTableFlags(Tbl_clipCellPainting); +#if 0 + viewport()->setEraseColor(lightGray); // for consistency with the datepicker +#endif + // ----- find the preferred size + // (this is slow, possibly, but unfortunatly it is needed here): + QFontMetrics metrics(font); + for(int i=1; i <= 52; ++i) + { + rect=metrics.boundingRect(QString::number( i )); + if(max.width()<rect.width()) max.setWidth(rect.width()); + if(max.height()<rect.height()) max.setHeight(rect.height()); + } + +} + +QSize +KDateInternalWeekPicker::sizeHint() const +{ + return QSize((max.width()+6)*numCols()+2*frameWidth(), + (max.height()+6)*numRows()+2*frameWidth()); +} + +int +KDateInternalWeekPicker::getResult() const +{ + return result; +} + +void +KDateInternalWeekPicker::setupPainter(QPainter *p) +{ + p->setPen(black); +} + +void +KDateInternalWeekPicker::viewportResizeEvent(QResizeEvent*) +{ + setCellWidth(width()/4); + setCellHeight(height()/13); +} + +void +KDateInternalWeekPicker::paintCell(QPainter* painter, int row, int col) +{ + int index; + QString text; + // ----- find the number of the cell: + index=4*row+col+1; + text=QString::number( index ); + painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); + if ( activeCol == col && activeRow == row ) + painter->drawRect( 0, 0, cellWidth(), cellHeight() ); +} + +void +KDateInternalWeekPicker::contentsMousePressEvent(QMouseEvent *e) +{ + if(!isEnabled() || e->button() != LeftButton) + { + KNotifyClient::beep(); + return; + } + // ----- + int row, col; + QPoint mouseCoord; + // ----- + mouseCoord = e->pos(); + row=rowAt(mouseCoord.y()); + col=columnAt(mouseCoord.x()); + + if(row<0 || col<0) + { // the user clicked on the frame of the table + activeCol = -1; + activeRow = -1; + } else { + activeCol = col; + activeRow = row; + updateCell( row, col /*, false */ ); + } +} + +void +KDateInternalWeekPicker::contentsMouseMoveEvent(QMouseEvent *e) +{ + if (e->state() & LeftButton) + { + int row, col; + QPoint mouseCoord; + // ----- + mouseCoord = e->pos(); + row=rowAt(mouseCoord.y()); + col=columnAt(mouseCoord.x()); + int tmpRow = -1, tmpCol = -1; + if(row<0 || col<0) + { // the user clicked on the frame of the table + if ( activeCol > -1 ) + { + tmpRow = activeRow; + tmpCol = activeCol; + } + activeCol = -1; + activeRow = -1; + } else { + bool differentCell = (activeRow != row || activeCol != col); + if ( activeCol > -1 && differentCell) + { + tmpRow = activeRow; + tmpCol = activeCol; + } + if ( differentCell) + { + activeRow = row; + activeCol = col; + updateCell( row, col /*, false */ ); // mark the new active cell + } + } + if ( tmpRow > -1 ) // repaint the former active cell + updateCell( tmpRow, tmpCol /*, true */ ); + } +} + +void +KDateInternalWeekPicker::contentsMouseReleaseEvent(QMouseEvent *e) +{ + if(!isEnabled()) + { + return; + } + // ----- + int row, col, pos; + QPoint mouseCoord; + // ----- + mouseCoord = e->pos(); + row=rowAt(mouseCoord.y()); + col=columnAt(mouseCoord.x()); + if(row<0 || col<0) + { // the user clicked on the frame of the table + emit(closeMe(0)); + } + pos=4*row+col+1; + result=pos; + emit(closeMe(1)); +} diff --git a/microkde/kdatetbl.h b/microkde/kdatetbl.h index b4d3e16..2efa532 100644 --- a/microkde/kdatetbl.h +++ b/microkde/kdatetbl.h @@ -307,3 +307,66 @@ private: }; #endif // KDATETBL_H +class KDateInternalWeekPicker : public QGridView +{ + Q_OBJECT +protected: + /** + * Store the month that has been clicked [1..12]. + */ + int result; + /** + * the cell under mouse cursor when LBM is pressed + */ + short int activeCol; + short int activeRow; + /** + * Contains the largest rectangle needed by the month names. + */ + QRect max; +signals: + /** + * This is send from the mouse click event handler. + */ + void closeMe(int); +public: + /** + * The constructor. + */ + KDateInternalWeekPicker(int fontsize, QWidget* parent, const char* name=0); + /** + * The size hint. + */ + QSize sizeHint() const; + /** + * Return the result. 0 means no selection (reject()), 1..12 are the + * months. + */ + int getResult() const; +protected: + /** + * Set up the painter. + */ + void setupPainter(QPainter *p); + /** + * The resize event. + */ + void viewportResizeEvent(QResizeEvent*); + /** + * Paint a cell. This simply draws the month names in it. + */ + virtual void paintCell(QPainter* painter, int row, int col); + /** + * Catch mouse click and move events to paint a rectangle around the item. + */ + void contentsMousePressEvent(QMouseEvent *e); + void contentsMouseMoveEvent(QMouseEvent *e); + /** + * Emit monthSelected(int) when a cell has been released. + */ + void contentsMouseReleaseEvent(QMouseEvent *e); + +private: + class KDateInternalMonthPrivate; + KDateInternalMonthPrivate *d; +}; |