⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datebookmonth.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qtoolbutton.h>#include <qspinbox.h>#include <qcombobox.h>#include <qdatetime.h>#include <qpainter.h>#include <qpopupmenu.h>#include <qvaluestack.h>#include <qwhatsthis.h>#include "config.h"#include "datebookmonth.h"#include "datebookdb.h"#include "resource.h"#include "qpeapplication.h"#include "timestring.h"QIconSet qtopia_internal_loadIconSet( const QString &pix );DateBookMonthHeader::DateBookMonthHeader( QWidget *parent, const char *name )    : QHBox( parent, name ){    setBackgroundMode( PaletteButton );    begin = new QToolButton( this );    begin->setFocusPolicy(NoFocus);    begin->setIconSet( qtopia_internal_loadIconSet( "start" ) ); // No tr    begin->setAutoRaise( TRUE );    begin->setFixedSize( begin->sizeHint() );    QWhatsThis::add( begin, tr("Show January in the selected year") );    back = new QToolButton( this );    back->setFocusPolicy(NoFocus);    back->setIconSet( qtopia_internal_loadIconSet( "back" ) ); // No tr    back->setAutoRaise( TRUE );    back->setFixedSize( back->sizeHint() );    QWhatsThis::add( back, tr("Show the previous month") );    month = new QComboBox( FALSE, this );    for ( int i = 0; i < 12; ++i )	month->insertItem( Calendar::nameOfMonth( i + 1 ) );    year = new QSpinBox( 1753, 8000, 1, this );    next = new QToolButton( this );    next->setFocusPolicy(NoFocus);    next->setIconSet( qtopia_internal_loadIconSet( "forward" ) ); // No tr    next->setAutoRaise( TRUE );    next->setFixedSize( next->sizeHint() );    QWhatsThis::add( next, tr("Show the next month") );    end = new QToolButton( this );    end->setFocusPolicy(NoFocus);    end->setIconSet( qtopia_internal_loadIconSet( "finish" ) ); // No tr    end->setAutoRaise( TRUE );    end->setFixedSize( end->sizeHint() );    QWhatsThis::add( end, tr("Show December in the selected year") );    connect( month, SIGNAL( activated(int) ),	     this, SLOT( updateDate() ) );    connect( year, SIGNAL( valueChanged(int) ),	     this, SLOT( updateDate() ) );    connect( begin, SIGNAL( clicked() ),	     this, SLOT( firstMonth() ) );    connect( end, SIGNAL( clicked() ),	     this, SLOT( lastMonth() ) );    connect( back, SIGNAL( clicked() ),	     this, SLOT( monthBack() ) );    connect( next, SIGNAL( clicked() ),	     this, SLOT( monthForward() ) );    back->setAutoRepeat( TRUE );    next->setAutoRepeat( TRUE );}DateBookMonthHeader::~DateBookMonthHeader(){}void DateBookMonthHeader::updateDate(){    emit dateChanged( year->value(), month->currentItem() + 1 );}void DateBookMonthHeader::firstMonth(){    emit dateChanged( year->value(), 1 );    month->setCurrentItem( 0 );}void DateBookMonthHeader::lastMonth(){    emit dateChanged( year->value(), 12 );    month->setCurrentItem( 11 );}void DateBookMonthHeader::monthBack(){    if ( month->currentItem() > 0 ) {	emit dateChanged( year->value(), month->currentItem() );	month->setCurrentItem( month->currentItem() - 1 );    } else {	emit dateChanged( year->value() - 1, 12 );	// we have a signal set to a changed value in year so we only need to change	// year to get the result...	month->setCurrentItem( 11 );	year->setValue( year->value() - 1 );    }}void DateBookMonthHeader::monthForward(){    if ( month->currentItem() < 11 ) {	emit dateChanged( year->value(), month->currentItem() + 2 );	month->setCurrentItem( month->currentItem() + 1 );    } else {	// we have a signal set to a changed value in year so we only need to change	// year to get the result...	month->setCurrentItem( 0 );	year->setValue( year->value() + 1 );    }}void DateBookMonthHeader::setDate( int y, int m ){    year->setValue( y );    month->setCurrentItem( m - 1 );}//---------------------------------------------------------------------------class DateBookMonthTablePrivate{public:    DateBookMonthTablePrivate() {};    ~DateBookMonthTablePrivate() { mMonthEvents.clear(); };    QValueList<EffectiveEvent> mMonthEvents;    bool onMonday;};DateBookMonthTable::DateBookMonthTable( QWidget *parent, const char *name,                                        DateBookDB *newDb  )    : QTable( 6, 7, parent, name ),      db( newDb ){    d = new DateBookMonthTablePrivate();    selYear = -1;    selMonth = -1;    selDay = -1;    year = -1;    month = -1;    Config cfg( "qpe" );    cfg.setGroup( "Time" );    d->onMonday = cfg.readBoolEntry( "MONDAY" );    horizontalHeader()->setResizeEnabled( FALSE );    int i;    // we have to do this here... or suffer the consequences later...    for ( i = 0; i < 7; i++ ){	horizontalHeader()->resizeSection( i, 30 );	setColumnStretchable( i, TRUE );    }    setupLabels();    verticalHeader()->hide();    setLeftMargin( 0 );    for ( i = 0; i < 6; ++i )	    setRowStretchable( i, TRUE );    setSelectionMode( NoSelection );    connect( this, SIGNAL( clicked(int,int,int,const QPoint&) ),	     this, SLOT( dayClicked(int,int) ) );    connect( this, SIGNAL( currentChanged(int,int) ),             this, SLOT( dragDay(int,int) ) );    setVScrollBarMode( AlwaysOff );    setHScrollBarMode( AlwaysOff );}DateBookMonthTable::~DateBookMonthTable(){    monthsEvents.clear();    delete d;}void DateBookMonthTable::setDate(int y, int m, int d){    if (month == m && year == y) {	if ( selYear == -1 )	    year = selYear;	if ( selMonth == -1 )	    month = selMonth;	int r1, c1, r2, c2;	findDay(selDay, r1, c1);	selDay = day = d;	findDay(selDay, r2, c2);	setCurrentCell( r2, c2 );	//updateCell(r1,c1);	//updateCell(r2,c2);    } else {	selYear = year = y;	selMonth = month = m;	selDay = day = d;	setupTable();    }}void DateBookMonthTable::redraw(){    setupLabels();    setupTable();}void DateBookMonthTable::setWeekStart( bool onMonday ){    d->onMonday = onMonday;    setupLabels();    setupTable();}void DateBookMonthTable::setupTable(){    QValueList<Calendar::Day> days = Calendar::daysOfMonth( year, month, d->onMonday );    QValueList<Calendar::Day>::Iterator it = days.begin();    int row = 0, col = 0;    int crow = 0;    int ccol = 0;    for ( ; it != days.end(); ++it ) {	DayItemMonth *i = (DayItemMonth *)item( row, col );	if ( !i ) {	    i = new DayItemMonth( this, QTableItem::Never, "" );	    setItem( row, col, i );	}	Calendar::Day calDay = *it;	i->clearEffEvents();	i->setDay( calDay.date );	i->setType( calDay.type );	if ( i->day() == day && calDay.type == Calendar::Day::ThisMonth ) {	    crow = row;	    ccol = col;	}	updateCell( row, col );	if ( col == 6 ) {	    ++row;	    col = 0;	} else {	    ++col;	}    }    setCurrentCell( crow, ccol );    getEvents();}void DateBookMonthTable::findDay( int day, int &row, int &col ){    QDate dtBegin( year, month, 1 );    int skips = dtBegin.dayOfWeek();    int effective_day = day + skips - 1; // row/columns begin at 0    // make an extra adjustment if we start on Mondays.    if ( d->onMonday )	effective_day--;    row = effective_day / 7;    col = effective_day % 7;}void DateBookMonthTable::dayClicked( int row, int col ){    changeDaySelection( row, col );    emit dateClicked( selYear, selMonth,  selDay );}void DateBookMonthTable::dragDay( int row, int col ){    changeDaySelection( row, col );}void DateBookMonthTable::changeDaySelection( int row, int col ){    DayItemMonth *i = (DayItemMonth*)item( row, col );    if ( !i )	return;    switch ( i->type() ) {	case Calendar::Day::ThisMonth:	    selMonth = month;	    break;	case Calendar::Day::PrevMonth:	    selMonth = month-1;	    break;	default:	    selMonth = month+1;    }    selYear = year;    if ( selMonth <= 0 ) {	selMonth = 12;	selYear--;    } else if ( selMonth > 12 ) {	selMonth = 1;	selYear++;    }    selDay = i->day();}void DateBookMonthTable::viewportMouseReleaseEvent( QMouseEvent * ){    dayClicked( currentRow(), currentColumn() );}void DateBookMonthTable::getEvents(){    if ( !db )	return;    QDate dtStart( year, month, 1 );    d->mMonthEvents = db->getEffectiveEvents( dtStart,					      QDate( year, month,						     dtStart.daysInMonth() ) );    QValueListIterator<EffectiveEvent> it = d->mMonthEvents.begin();    // now that the events are sorted, basically go through the list, make    // a small list for every day and set it for each item...    // clear all the items...    while ( it != d->mMonthEvents.end() ) {	QValueList<EffectiveEvent> dayEvent;	EffectiveEvent e = *it;	++it;	dayEvent.append( e );	while ( it != d->mMonthEvents.end()	        && e.date() == (*it).date() ) {	    dayEvent.append( *it );	    ++it;	}	int row, col;	findDay( e.date().day(), row, col );	DayItemMonth* w = static_cast<DayItemMonth*>( item( row, col ) );	w->setEvents( dayEvent );	updateCell( row, col );	dayEvent.clear();    }}void DateBookMonthTable::setupLabels(){    for ( int i = 0; i < 7; ++i ) {// 	horizontalHeader()->resizeSection( i, 30 );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -