diff options
Diffstat (limited to 'kdeui/kdatetbl.cpp')
-rw-r--r-- | kdeui/kdatetbl.cpp | 1031 |
1 files changed, 0 insertions, 1031 deletions
diff --git a/kdeui/kdatetbl.cpp b/kdeui/kdatetbl.cpp deleted file mode 100644 index a2bbdf9d3..000000000 --- a/kdeui/kdatetbl.cpp +++ /dev/null @@ -1,1031 +0,0 @@ -/* -*- C++ -*- - This file is part of the KDE libraries - Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org) - (C) 1998-2001 Mirko Boehm (mirko@kde.org) - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -/////////////////// KDateTable widget class ////////////////////// -// -// Copyright (C) 1997 Tim D. Gilman -// (C) 1998-2001 Mirko Boehm -// Written using Qt (http://www.troll.no) for the -// KDE project (http://www.kde.org) -// -// This is a support class for the KDatePicker class. It just -// draws the calender table without titles, but could theoretically -// be used as a standalone. -// -// When a date is selected by the user, it emits a signal: -// dateSelected(TQDate) - -#include <kconfig.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <kapplication.h> -#include <kaccel.h> -#include <klocale.h> -#include <kdebug.h> -#include <knotifyclient.h> -#include <kcalendarsystem.h> -#include <kshortcut.h> -#include <kstdaccel.h> -#include "kdatepicker.h" -#include "kdatetbl.h" -#include "kpopupmenu.h" -#include <tqdatetime.h> -#include <tqguardedptr.h> -#include <tqstring.h> -#include <tqpen.h> -#include <tqpainter.h> -#include <tqdialog.h> -#include <tqdict.h> -#include <assert.h> - - -class KDateTable::KDateTablePrivate -{ -public: - KDateTablePrivate() - { - popupMenuEnabled=false; - useCustomColors=false; - } - - ~KDateTablePrivate() - { - } - - bool popupMenuEnabled; - bool useCustomColors; - - struct DatePaintingMode - { - TQColor fgColor; - TQColor bgColor; - BackgroundMode bgMode; - }; - TQDict <DatePaintingMode> customPaintingModes; - -}; - - -KDateValidator::KDateValidator(TQWidget* parent, const char* name) - : TQValidator(TQT_TQOBJECT(parent), name) -{ -} - -TQValidator::State -KDateValidator::validate(TQString& text, int&) const -{ - TQDate temp; - // ----- everything is tested in date(): - return date(text, temp); -} - -TQValidator::State -KDateValidator::date(const TQString& text, TQDate& d) const -{ - TQDate tmp = KGlobal::locale()->readDate(text); - if (!tmp.isNull()) - { - d = tmp; - return Acceptable; - } else - return Valid; -} - -void -KDateValidator::fixup( TQString& ) const -{ - -} - -KDateTable::KDateTable(TQWidget *parent, TQDate date_, const char* name, WFlags f) - : TQGridView(parent, name, (f | TQt::WNoAutoErase)) -{ - d = new KDateTablePrivate; - setFontSize(10); - if(!date_.isValid()) - { - kdDebug() << "KDateTable ctor: WARNING: Given date is invalid, using current date." << endl; - date_=TQDate::currentDate(); - } - setFocusPolicy( TQ_StrongFocus ); - setNumRows(7); // 6 weeks max + headline - setNumCols(7); // 7 days a week - setHScrollBarMode(AlwaysOff); - setVScrollBarMode(AlwaysOff); - viewport()->setEraseColor(KGlobalSettings::baseColor()); - setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth - - initAccels(); -} - -KDateTable::KDateTable(TQWidget *parent, const char* name, WFlags f) - : TQGridView(parent, name, (f | TQt::WNoAutoErase)) -{ - d = new KDateTablePrivate; - setFontSize(10); - setFocusPolicy( TQ_StrongFocus ); - setNumRows(7); // 6 weeks max + headline - setNumCols(7); // 7 days a week - setHScrollBarMode(AlwaysOff); - setVScrollBarMode(AlwaysOff); - viewport()->setEraseColor(KGlobalSettings::baseColor()); - setDate(TQDate::currentDate()); // this initializes firstday, numdays, numDaysPrevMonth - initAccels(); -} - -KDateTable::~KDateTable() -{ - delete d; -} - -void KDateTable::initAccels() -{ - KAccel* accel = new KAccel(this, "date table accel"); - accel->insert(KStdAccel::Next, TQT_TQOBJECT(this), TQT_SLOT(nextMonth())); - accel->insert(KStdAccel::Prior, TQT_TQOBJECT(this), TQT_SLOT(previousMonth())); - accel->insert(KStdAccel::Home, TQT_TQOBJECT(this), TQT_SLOT(beginningOfMonth())); - accel->insert(KStdAccel::End, TQT_TQOBJECT(this), TQT_SLOT(endOfMonth())); - accel->insert(KStdAccel::BeginningOfLine, TQT_TQOBJECT(this), TQT_SLOT(beginningOfWeek())); - accel->insert(KStdAccel::EndOfLine, TQT_TQOBJECT(this), TQT_SLOT(endOfWeek())); - accel->readSettings(); -} - -int KDateTable::posFromDate( const TQDate &dt ) -{ - const KCalendarSystem * calendar = KGlobal::locale()->calendar(); - const int firstWeekDay = KGlobal::locale()->weekStartDay(); - int pos = calendar->day( dt ); - int offset = (firstday - firstWeekDay + 7) % 7; - // make sure at least one day of the previous month is visible. - // adjust this <1 if more days should be forced visible: - if ( offset < 1 ) offset += 7; - return pos + offset; -} - -TQDate KDateTable::dateFromPos( int pos ) -{ - TQDate pCellDate; - const KCalendarSystem * calendar = KGlobal::locale()->calendar(); - calendar->setYMD(pCellDate, calendar->year(date), calendar->month(date), 1); - - int firstWeekDay = KGlobal::locale()->weekStartDay(); - int offset = (firstday - firstWeekDay + 7) % 7; - // make sure at least one day of the previous month is visible. - // adjust this <1 if more days should be forced visible: - if ( offset < 1 ) offset += 7; - pCellDate = calendar->addDays( pCellDate, pos - offset ); - return pCellDate; -} - -void -KDateTable::paintEmptyArea(TQPainter *paint, int, int, int, int) -{ - // Erase the unused areas on the right and bottom. - TQRect unusedRight = frameRect(); - unusedRight.setLeft(gridSize().width()); - - TQRect unusedBottom = frameRect(); - unusedBottom.setTop(gridSize().height()); - - paint->eraseRect(unusedRight); - paint->eraseRect(unusedBottom); -} - -void -KDateTable::paintCell(TQPainter *painter, int row, int col) -{ - const KCalendarSystem * calendar = KGlobal::locale()->calendar(); - - TQRect rect; - TQString text; - TQPen pen; - int w=cellWidth(); - int h=cellHeight(); - TQFont font=KGlobalSettings::generalFont(); - // ----- - - if(row == 0) - { // we are drawing the headline - font.setBold(true); - painter->setFont(font); - bool normalday = true; - int firstWeekDay = KGlobal::locale()->weekStartDay(); - int daynum = ( col+firstWeekDay < 8 ) ? col+firstWeekDay : - col+firstWeekDay-7; - if ( daynum == calendar->weekDayOfPray() || - ( daynum == 6 && calendar->calendarName() == "gregorian" ) ) - normalday=false; - - TQBrush brushInvertTitle(tqcolorGroup().base()); - TQColor titleColor(isEnabled()?( KGlobalSettings::activeTitleColor() ):( KGlobalSettings::inactiveTitleColor() ) ); - TQColor textColor(isEnabled()?( KGlobalSettings::activeTextColor() ):( KGlobalSettings::inactiveTextColor() ) ); - if (!normalday) - { - painter->setPen(textColor); - painter->setBrush(textColor); - painter->drawRect(0, 0, w, h); - painter->setPen(titleColor); - } else { - painter->setPen(titleColor); - painter->setBrush(titleColor); - painter->drawRect(0, 0, w, h); - painter->setPen(textColor); - } - painter->drawText(0, 0, w, h-1, AlignCenter, - calendar->weekDayName(daynum, true), -1, &rect); - painter->setPen(tqcolorGroup().text()); - painter->moveTo(0, h-1); - painter->lineTo(w-1, h-1); - // ----- draw the weekday: - } else { - bool paintRect=true; - painter->setFont(font); - int pos=7*(row-1)+col; - - TQDate pCellDate = dateFromPos( pos ); - // First day of month - text = calendar->dayString(pCellDate, true); - if( calendar->month(pCellDate) != calendar->month(date) ) - { // we are either - // ° painting a day of the previous month or - // ° painting a day of the following month - // TODO: don't hardcode gray here! Use a color with less contrast to the background than normal text. - painter->setPen( tqcolorGroup().mid() ); -// painter->setPen(gray); - } else { // paint a day of the current month - if ( d->useCustomColors ) - { - KDateTablePrivate::DatePaintingMode *mode=d->customPaintingModes[pCellDate.toString()]; - if (mode) - { - if (mode->bgMode != NoBgMode) - { - TQBrush oldbrush=painter->brush(); - painter->setBrush( mode->bgColor ); - switch(mode->bgMode) - { - case(CircleMode) : painter->drawEllipse(0,0,w,h);break; - case(RectangleMode) : painter->drawRect(0,0,w,h);break; - case(NoBgMode) : // Should never be here, but just to get one - // less warning when compiling - default: break; - } - painter->setBrush( oldbrush ); - paintRect=false; - } - painter->setPen( mode->fgColor ); - } else - painter->setPen(tqcolorGroup().text()); - } else //if ( firstWeekDay < 4 ) // <- this doesn' make sense at all! - painter->setPen(tqcolorGroup().text()); - } - - pen=painter->pen(); - int firstWeekDay=KGlobal::locale()->weekStartDay(); - int offset=firstday-firstWeekDay; - if(offset<1) - offset+=7; - int d = calendar->day(date); - if( (offset+d) == (pos+1)) - { - // draw the currently selected date - if (isEnabled()) - { - painter->setPen(tqcolorGroup().highlight()); - painter->setBrush(tqcolorGroup().highlight()); - } - else - { - painter->setPen(tqcolorGroup().text()); - painter->setBrush(tqcolorGroup().text()); - } - pen=TQPen(tqcolorGroup().highlightedText()); - } else { - painter->setBrush(paletteBackgroundColor()); - painter->setPen(paletteBackgroundColor()); -// painter->setBrush(tqcolorGroup().base()); -// painter->setPen(tqcolorGroup().base()); - } - - if ( pCellDate == TQDate::currentDate() ) - { - painter->setPen(tqcolorGroup().text()); - } - - if ( paintRect ) painter->drawRect(0, 0, w, h); - painter->setPen(pen); - painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect); - } - if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width()); - if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height()); -} - -void KDateTable::nextMonth() -{ - const KCalendarSystem * calendar = KGlobal::locale()->calendar(); - setDate(calendar->addMonths( date, 1 )); -} - -void KDateTable::previousMonth() -{ - const KCalendarSystem * calendar = KGlobal::locale()->calendar(); - setDate(calendar->addMonths( date, -1 )); -} - -void KDateTable::beginningOfMonth() -{ - setDate(TQT_TQDATE_OBJECT(date.addDays(1 - date.day()))); -} - -void KDateTable::endOfMonth() -{ - setDate(TQT_TQDATE_OBJECT(date.addDays(date.daysInMonth() - date.day()))); -} - -void KDateTable::beginningOfWeek() -{ - setDate(TQT_TQDATE_OBJECT(date.addDays(1 - date.dayOfWeek()))); -} - -void KDateTable::endOfWeek() -{ - setDate(TQT_TQDATE_OBJECT(date.addDays(7 - date.dayOfWeek()))); -} - -void -KDateTable::keyPressEvent( TQKeyEvent *e ) -{ - switch( e->key() ) { - case Key_Up: - setDate(TQT_TQDATE_OBJECT(date.addDays(-7))); - break; - case Key_Down: - setDate(TQT_TQDATE_OBJECT(date.addDays(7))); - break; - case Key_Left: - setDate(TQT_TQDATE_OBJECT(date.addDays(-1))); - break; - case Key_Right: - setDate(TQT_TQDATE_OBJECT(date.addDays(1))); - break; - case Key_Minus: - setDate(TQT_TQDATE_OBJECT(date.addDays(-1))); - break; - case Key_Plus: - setDate(TQT_TQDATE_OBJECT(date.addDays(1))); - break; - case Key_N: - setDate(TQDate::currentDate()); - break; - case Key_Return: - case Key_Enter: - emit tableClicked(); - break; - case Key_Control: - case Key_Alt: - case Key_Meta: - case Key_Shift: - // Don't beep for modifiers - break; - default: - if (!e->state()) { // hm - KNotifyClient::beep(); -} - } -} - -void -KDateTable::viewportResizeEvent(TQResizeEvent * e) -{ - TQGridView::viewportResizeEvent(e); - - setCellWidth(viewport()->width()/7); - setCellHeight(viewport()->height()/7); -} - -void -KDateTable::setFontSize(int size) -{ - int count; - TQFontMetrics metrics(fontMetrics()); - TQRect rect; - // ----- store rectangles: - fontsize=size; - // ----- find largest day name: - maxCell.setWidth(0); - maxCell.setHeight(0); - for(count=0; count<7; ++count) - { - rect=metrics.boundingRect(KGlobal::locale()->calendar() - ->weekDayName(count+1, true)); - maxCell.setWidth(QMAX(maxCell.width(), rect.width())); - maxCell.setHeight(QMAX(maxCell.height(), rect.height())); - } - // ----- compare with a real wide number and add some space: - rect=metrics.boundingRect(TQString::tqfromLatin1("88")); - maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); - maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); -} - -void -KDateTable::wheelEvent ( TQWheelEvent * e ) -{ - setDate(TQT_TQDATE_OBJECT(date.addMonths( -(int)(e->delta()/120)) )); - e->accept(); -} - -void -KDateTable::contentsMousePressEvent(TQMouseEvent *e) -{ - - if(e->type()!=TQEvent::MouseButtonPress) - { // the KDatePicker only reacts on mouse press events: - return; - } - if(!isEnabled()) - { - KNotifyClient::beep(); - return; - } - - // ----- - int row, col, pos, temp; - TQPoint mouseCoord; - // ----- - mouseCoord = e->pos(); - row=rowAt(mouseCoord.y()); - col=columnAt(mouseCoord.x()); - if(row<1 || col<0) - { // the user clicked on the frame of the table - return; - } - - // Rows and columns are zero indexed. The (row - 1) below is to avoid counting - // the row with the days of the week in the calculation. - - // old selected date: - temp = posFromDate( date ); - // new position and date - pos = (7 * (row - 1)) + col; - TQDate clickedDate = dateFromPos( pos ); - - // set the new date. If it is in the previous or next month, the month will - // automatically be changed, no need to do that manually... - setDate( clickedDate ); - - // call updateCell on the old and new selection. If setDate switched to a different - // month, these cells will be painted twice, but that's no problem. - updateCell( temp/7+1, temp%7 ); - updateCell( row, col ); - - emit tableClicked(); - - if ( e->button() == Qt::RightButton && d->popupMenuEnabled ) - { - KPopupMenu *menu = new KPopupMenu(); - menu->insertTitle( KGlobal::locale()->formatDate(clickedDate) ); - emit aboutToShowContextMenu( menu, clickedDate ); - menu->popup(e->globalPos()); - } -} - -bool -KDateTable::setDate(const TQDate& date_) -{ - bool changed=false; - TQDate temp; - // ----- - if(!date_.isValid()) - { - kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; - return false; - } - if(date!=date_) - { - emit(dateChanged(date, date_)); - date=date_; - emit(dateChanged(date)); - changed=true; - } - const KCalendarSystem * calendar = KGlobal::locale()->calendar(); - - calendar->setYMD(temp, calendar->year(date), calendar->month(date), 1); - //temp.setYMD(date.year(), date.month(), 1); - //kdDebug() << "firstDayInWeek: " << temp.toString() << endl; - firstday=temp.dayOfWeek(); - numdays=calendar->daysInMonth(date); - - temp = calendar->addMonths(temp, -1); - numDaysPrevMonth=calendar->daysInMonth(temp); - if(changed) - { - repaintContents(false); - } - return true; -} - -const TQDate& -KDateTable::getDate() const -{ - return date; -} - -// what are those repaintContents() good for? (pfeiffer) -void KDateTable::focusInEvent( TQFocusEvent *e ) -{ -// repaintContents(false); - TQGridView::focusInEvent( e ); -} - -void KDateTable::focusOutEvent( TQFocusEvent *e ) -{ -// repaintContents(false); - TQGridView::focusOutEvent( e ); -} - -TQSize -KDateTable::tqsizeHint() const -{ - if(maxCell.height()>0 && maxCell.width()>0) - { - return TQSize(maxCell.width()*numCols()+2*frameWidth(), - (maxCell.height()+2)*numRows()+2*frameWidth()); - } else { - kdDebug() << "KDateTable::tqsizeHint: obscure failure - " << endl; - return TQSize(-1, -1); - } -} - -void KDateTable::setPopupMenuEnabled( bool enable ) -{ - d->popupMenuEnabled=enable; -} - -bool KDateTable::popupMenuEnabled() const -{ - return d->popupMenuEnabled; -} - -void KDateTable::setCustomDatePainting(const TQDate &date, const TQColor &fgColor, BackgroundMode bgMode, const TQColor &bgColor) -{ - if (!fgColor.isValid()) - { - unsetCustomDatePainting( date ); - return; - } - - KDateTablePrivate::DatePaintingMode *mode=new KDateTablePrivate::DatePaintingMode; - mode->bgMode=bgMode; - mode->fgColor=fgColor; - mode->bgColor=bgColor; - - d->customPaintingModes.replace( date.toString(), mode ); - d->useCustomColors=true; - update(); -} - -void KDateTable::unsetCustomDatePainting( const TQDate &date ) -{ - d->customPaintingModes.remove( date.toString() ); -} - -KDateInternalWeekSelector::KDateInternalWeekSelector -(TQWidget* parent, const char* name) - : TQLineEdit(parent, name), - val(new TQIntValidator(TQT_TQOBJECT(this))), - result(0) -{ - TQFont font; - // ----- - font=KGlobalSettings::generalFont(); - setFont(font); - setFrameStyle(TQFrame::NoFrame); - setValidator(val); - connect(this, TQT_SIGNAL(returnPressed()), TQT_SLOT(weekEnteredSlot())); -} - -void -KDateInternalWeekSelector::weekEnteredSlot() -{ - bool ok; - int week; - // ----- check if this is a valid week: - week=text().toInt(&ok); - if(!ok) - { - KNotifyClient::beep(); - emit(closeMe(0)); - return; - } - result=week; - emit(closeMe(1)); -} - -int -KDateInternalWeekSelector::getWeek() -{ - return result; -} - -void -KDateInternalWeekSelector::setWeek(int week) -{ - TQString temp; - // ----- - temp.setNum(week); - setText(temp); -} - -void -KDateInternalWeekSelector::setMaxWeek(int max) -{ - val->setRange(1, max); -} - -// ### CFM To avoid binary incompatibility. -// In future releases, remove this and replace by a QDate -// private member, needed in KDateInternalMonthPicker::paintCell -class KDateInternalMonthPicker::KDateInternalMonthPrivate { -public: - KDateInternalMonthPrivate (int y, int m, int d) - : year(y), month(m), day(d) - {} - int year; - int month; - int day; -}; - -KDateInternalMonthPicker::~KDateInternalMonthPicker() { - delete d; -} - -KDateInternalMonthPicker::KDateInternalMonthPicker -(const TQDate & date, TQWidget* parent, const char* name) - : TQGridView(parent, name), - result(0) // invalid -{ - TQRect rect; - TQFont font; - // ----- - activeCol = -1; - activeRow = -1; - font=KGlobalSettings::generalFont(); - setFont(font); - setHScrollBarMode(AlwaysOff); - setVScrollBarMode(AlwaysOff); - setFrameStyle(TQFrame::NoFrame); - setNumCols(3); - d = new KDateInternalMonthPrivate(date.year(), date.month(), date.day()); - // For monthsInYear != 12 - setNumRows( (KGlobal::locale()->calendar()->monthsInYear(date) + 2) / 3); - // enable to find drawing failures: - // setTableFlags(Tbl_clipCellPainting); - viewport()->setEraseColor(KGlobalSettings::baseColor()); // for consistency with the datepicker - // ----- find the preferred size - // (this is slow, possibly, but unfortunately it is needed here): - TQFontMetrics metrics(font); - for(int i = 1; ; ++i) - { - TQString str = KGlobal::locale()->calendar()->monthName(i, - KGlobal::locale()->calendar()->year(date), false); - if (str.isNull()) break; - rect=metrics.boundingRect(str); - if(max.width()<rect.width()) max.setWidth(rect.width()); - if(max.height()<rect.height()) max.setHeight(rect.height()); - } -} - -TQSize -KDateInternalMonthPicker::tqsizeHint() const -{ - return TQSize((max.width()+6)*numCols()+2*frameWidth(), - (max.height()+6)*numRows()+2*frameWidth()); -} - -int -KDateInternalMonthPicker::getResult() const -{ - return result; -} - -void -KDateInternalMonthPicker::setupPainter(TQPainter *p) -{ - p->setPen(KGlobalSettings::textColor()); -} - -void -KDateInternalMonthPicker::viewportResizeEvent(TQResizeEvent*) -{ - setCellWidth(width() / numCols()); - setCellHeight(height() / numRows()); -} - -void -KDateInternalMonthPicker::paintCell(TQPainter* painter, int row, int col) -{ - int index; - TQString text; - // ----- find the number of the cell: - index=3*row+col+1; - text=KGlobal::locale()->calendar()->monthName(index, - KGlobal::locale()->calendar()->year(TQDate(d->year, d->month, - d->day)), false); - painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); - if ( activeCol == col && activeRow == row ) - painter->drawRect( 0, 0, cellWidth(), cellHeight() ); -} - -void -KDateInternalMonthPicker::contentsMousePressEvent(TQMouseEvent *e) -{ - if(!isEnabled() || e->button() != Qt::LeftButton) - { - KNotifyClient::beep(); - return; - } - // ----- - int row, col; - TQPoint 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 -KDateInternalMonthPicker::contentsMouseMoveEvent(TQMouseEvent *e) -{ - if (e->state() & Qt::LeftButton) - { - int row, col; - TQPoint 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 ) // tqrepaint the former active cell - updateCell( tmpRow, tmpCol /*, true */ ); - } -} - -void -KDateInternalMonthPicker::contentsMouseReleaseEvent(TQMouseEvent *e) -{ - if(!isEnabled()) - { - return; - } - // ----- - int row, col, pos; - TQPoint 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)); - return; - } - - pos=3*row+col+1; - result=pos; - emit(closeMe(1)); -} - - - -KDateInternalYearSelector::KDateInternalYearSelector -(TQWidget* parent, const char* name) - : TQLineEdit(parent, name), - val(new TQIntValidator(TQT_TQOBJECT(this))), - result(0) -{ - TQFont font; - // ----- - font=KGlobalSettings::generalFont(); - setFont(font); - setFrameStyle(TQFrame::NoFrame); - // we have to respect the limits of TQDate here, I fear: - val->setRange(0, 8000); - setValidator(val); - connect(this, TQT_SIGNAL(returnPressed()), TQT_SLOT(yearEnteredSlot())); -} - -void -KDateInternalYearSelector::yearEnteredSlot() -{ - bool ok; - int year; - TQDate date; - // ----- check if this is a valid year: - year=text().toInt(&ok); - if(!ok) - { - KNotifyClient::beep(); - emit(closeMe(0)); - return; - } - //date.setYMD(year, 1, 1); - KGlobal::locale()->calendar()->setYMD(date, year, 1, 1); - if(!date.isValid()) - { - KNotifyClient::beep(); - emit(closeMe(0)); - return; - } - result=year; - emit(closeMe(1)); -} - -int -KDateInternalYearSelector::getYear() -{ - return result; -} - -void -KDateInternalYearSelector::setYear(int year) -{ - TQString temp; - // ----- - temp.setNum(year); - setText(temp); -} - -class KPopupFrame::KPopupFramePrivate -{ - public: - KPopupFramePrivate() : exec(false) {} - - bool exec; -}; - -KPopupFrame::KPopupFrame(TQWidget* parent, const char* name) - : TQFrame(parent, name, (WFlags)WType_Popup), - result(0), // rejected - main(0), - d(new KPopupFramePrivate) -{ - setFrameStyle(TQFrame::Box|TQFrame::Raised); - setMidLineWidth(2); -} - -KPopupFrame::~KPopupFrame() -{ - delete d; -} - -void -KPopupFrame::keyPressEvent(TQKeyEvent* e) -{ - if(e->key()==Key_Escape) - { - result=0; // rejected - d->exec = false; - tqApp->exit_loop(); - } -} - -void -KPopupFrame::close(int r) -{ - result=r; - d->exec = false; - tqApp->exit_loop(); -} - -void -KPopupFrame::hide() -{ - TQFrame::hide(); - if (d->exec) - { - d->exec = false; - tqApp->exit_loop(); - } -} - -void -KPopupFrame::setMainWidget(TQWidget* m) -{ - main=m; - if(main) - { - resize(main->width()+2*frameWidth(), main->height()+2*frameWidth()); - } -} - -void -KPopupFrame::resizeEvent(TQResizeEvent*) -{ - if(main) - { - main->setGeometry(frameWidth(), frameWidth(), - width()-2*frameWidth(), height()-2*frameWidth()); - } -} - -void -KPopupFrame::popup(const TQPoint &pos) -{ - // Make sure the whole popup is visible. - TQRect d = KGlobalSettings::desktopGeometry(pos); - - int x = pos.x(); - int y = pos.y(); - int w = width(); - int h = height(); - if (x+w > d.x()+d.width()) - x = d.width() - w; - if (y+h > d.y()+d.height()) - y = d.height() - h; - if (x < d.x()) - x = 0; - if (y < d.y()) - y = 0; - - // Pop the thingy up. - move(x, y); - show(); -} - -int -KPopupFrame::exec(TQPoint pos) -{ - popup(pos); - tqrepaint(); - d->exec = true; - const TQGuardedPtr<TQObject> that = TQT_TQOBJECT(this); - tqApp->enter_loop(); - if ( !that ) - return TQDialog::Rejected; - hide(); - return result; -} - -int -KPopupFrame::exec(int x, int y) -{ - return exec(TQPoint(x, y)); -} - -void KPopupFrame::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KDateTable::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -#include "kdatetbl.moc" |