diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2019-04-21 23:22:20 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2019-04-21 23:22:20 +0900 |
commit | dba036816b279bc1539a9f3894fbc414665d2bce (patch) | |
tree | 29e4bf00bafe515e7afdd02168d65a47a3f9fbc0 /tqtinterface/qt4/src/widgets/tqdatetimeedit.cpp | |
parent | 6f1b4f0c7505a049d992a33f6e409b7c75732d4b (diff) | |
download | experimental-dba036816b279bc1539a9f3894fbc414665d2bce.tar.gz experimental-dba036816b279bc1539a9f3894fbc414665d2bce.zip |
Removed unnecessary and/or TDE-unrelated code.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqdatetimeedit.cpp')
-rw-r--r-- | tqtinterface/qt4/src/widgets/tqdatetimeedit.cpp | 2845 |
1 files changed, 0 insertions, 2845 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqdatetimeedit.cpp b/tqtinterface/qt4/src/widgets/tqdatetimeedit.cpp deleted file mode 100644 index be63178..0000000 --- a/tqtinterface/qt4/src/widgets/tqdatetimeedit.cpp +++ /dev/null @@ -1,2845 +0,0 @@ -/**************************************************************************** -** -** Implementation of date and time edit classes -** -** Created : 001103 -** -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** This file is part of the widgets module of the TQt GUI Toolkit. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at sales@trolltech.com. -** -** This file may be used under the terms of the Q Public License as -** defined by Trolltech ASA and appearing in the file LICENSE.TQPL -** included in the packaging of this file. Licensees holding valid TQt -** Commercial licenses may use this file in accordance with the TQt -** Commercial License Agreement provided with the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "tqdatetimeedit.h" - -#ifndef TQT_NO_DATETIMEEDIT - -#include "../kernel/tqinternal_p.h" -#include "../kernel/tqrichtext_p.h" -#include "tqrangecontrol.h" -#include "tqapplication.h" -#include "tqpixmap.h" -#include "tqapplication.h" -#include "tqvaluelist.h" -#include "tqstring.h" -#include "tqstyle.h" - -#if defined(TQ_WS_WIN) -#include "tqt_windows.h" -#endif - -#define TQDATETIMEEDIT_HIDDEN_CHAR '0' - -class TQ_EXPORT TQNumberSection -{ -public: - TQNumberSection( int selStart = 0, int selEnd = 0, bool separat = TRUE, int actual = -1 ) - : selstart( selStart ), selend( selEnd ), act( actual ), sep( separat ) - {} - int selectionStart() const { return selstart; } - void setSelectionStart( int s ) { selstart = s; } - int selectionEnd() const { return selend; } - void setSelectionEnd( int s ) { selend = s; } - int width() const { return selend - selstart; } - int index() const { return act; } - bool separator() const { return sep; } - TQ_DUMMY_COMPARISON_OPERATOR( TQNumberSection ) -private: - int selstart :12; - int selend :12; - int act :7; - bool sep :1; -}; - -static TQString *lDateSep = 0; -static TQString *lTimeSep = 0; -static bool lAMPM = FALSE; -static TQString *lAM = 0; -static TQString *lPM = 0; -static TQDateEdit::Order lOrder = TQDateEdit::YMD; -static int refcount = 0; - -static void cleanup() -{ - delete lDateSep; - lDateSep = 0; - delete lTimeSep; - lTimeSep = 0; - delete lAM; - lAM = 0; - delete lPM; - lPM = 0; -} - -/*! -\internal -try to get the order of DMY and the date/time separator from the locale settings -*/ -static void readLocaleSettings() -{ - int dpos, mpos, ypos; - cleanup(); - - lDateSep = new TQString(); - lTimeSep = new TQString(); - -#if defined(TQ_WS_WIN) - TQT_WA( { - TCHAR data[10]; - GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SDATE, data, 10 ); - *lDateSep = TQString::fromUcs2( (ushort*)data ); - GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_STIME, data, 10 ); - *lTimeSep = TQString::fromUcs2( (ushort*)data ); - GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_ITIME, data, 10 ); - lAMPM = TQString::fromUcs2( (ushort*)data ).toInt()==0; - GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_S1159, data, 10 ); - TQString am = TQString::fromUcs2( (ushort*)data ); - if ( !am.isEmpty() ) - lAM = new TQString( am ); - GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_S2359, data, 10 ); - TQString pm = TQString::fromUcs2( (ushort*)data ); - if ( !pm.isEmpty() ) - lPM = new TQString( pm ); - } , { - char data[10]; - GetLocaleInfoA( LOCALE_USER_DEFAULT, LOCALE_SDATE, (char*)&data, 10 ); - *lDateSep = TQString::fromLocal8Bit( data ); - GetLocaleInfoA( LOCALE_USER_DEFAULT, LOCALE_STIME, (char*)&data, 10 ); - *lTimeSep = TQString::fromLocal8Bit( data ); - GetLocaleInfoA( LOCALE_USER_DEFAULT, LOCALE_ITIME, (char*)&data, 10 ); - lAMPM = TQString::fromLocal8Bit( data ).toInt()==0; - GetLocaleInfoA( LOCALE_USER_DEFAULT, LOCALE_S1159, (char*)&data, 10 ); - TQString am = TQString::fromLocal8Bit( data ); - if ( !am.isEmpty() ) - lAM = new TQString( am ); - GetLocaleInfoA( LOCALE_USER_DEFAULT, LOCALE_S2359, (char*)&data, 10 ); - TQString pm = TQString::fromLocal8Bit( data ); - if ( !pm.isEmpty() ) - lPM = new TQString( pm ); - } ); -#else - *lDateSep = "-"; - *lTimeSep = ":"; -#endif - TQString d = TQDate( 1999, 11, 22 ).toString( Qt::LocalDate ); - dpos = d.find( "22" ); - mpos = d.find( "11" ); - ypos = d.find( "99" ); - if ( dpos > -1 && mpos > -1 && ypos > -1 ) { - // test for DMY, MDY, YMD, YDM - if ( dpos < mpos && mpos < ypos ) { - lOrder = TQDateEdit::DMY; - } else if ( mpos < dpos && dpos < ypos ) { - lOrder = TQDateEdit::MDY; - } else if ( ypos < mpos && mpos < dpos ) { - lOrder = TQDateEdit::YMD; - } else if ( ypos < dpos && dpos < mpos ) { - lOrder = TQDateEdit::YDM; - } else { - // cannot determine the dateformat - use the default - return; - } - - // this code needs to change if new formats are added - -#ifndef TQ_WS_WIN - TQString sep = d.mid( TQMIN( dpos, mpos ) + 2, TQABS( dpos - mpos ) - 2 ); - if ( d.contains( sep ) == 2 ) { - *lDateSep = sep; - } -#endif - } - -#ifndef TQ_WS_WIN - TQString t = TQTime( 11, 22, 33 ).toString( Qt::LocalDate ); - dpos = t.find( "11" ); - mpos = t.find( "22" ); - ypos = t.find( "33" ); - // We only allow hhmmss - if ( dpos > -1 && dpos < mpos && mpos < ypos ) { - TQString sep = t.mid( dpos + 2, mpos - dpos - 2 ); - if ( sep == t.mid( mpos + 2, ypos - mpos - 2 ) ) { - *lTimeSep = sep; - } - } -#endif -} - -static TQDateEdit::Order localOrder() { - if ( !lDateSep ) { - readLocaleSettings(); - } - return lOrder; -} - -static TQString localDateSep() { - if ( !lDateSep ) { - readLocaleSettings(); - } - return *lDateSep; -} - -static TQString localTimeSep() { - if ( !lTimeSep ) { - readLocaleSettings(); - } - return *lTimeSep; -} - -class TQDateTimeEditorPrivate -{ -public: - TQDateTimeEditorPrivate() - : frm( TRUE ), - parag( new TQTextParagraph( 0, 0, 0, FALSE ) ), - focusSec(0) - { - parag->formatter()->setWrapEnabled( FALSE ); - cursor = new TQTextCursor( 0 ); - cursor->setParagraph( parag ); - offset = 0; - sep = localDateSep(); - refcount++; - } - ~TQDateTimeEditorPrivate() - { - delete parag; - delete cursor; - if ( !--refcount ) - cleanup(); - } - - void appendSection( const TQNumberSection& sec ) - { - sections.append( sec ); - - } - void clearSections() - { - sections.clear(); - } - void setSectionSelection( int sec, int selstart, int selend ) - { - if ( sec < 0 || sec > (int)sections.count() ) - return; - sections[sec].setSelectionStart( selstart ); - sections[sec].setSelectionEnd( selend ); - } - uint sectionCount() const { return (uint)sections.count(); } - void setSeparator( const TQString& s ) { sep = s; } - TQString separator() const { return sep; } - - void setFrame( bool f ) { frm = f; } - bool frame() const { return frm; } - - int focusSection() const { return focusSec; } - int section( const TQPoint& p ) - { - cursor->place( p + TQPoint( offset, 0 ), parag ); - int idx = cursor->index(); - for ( uint i = 0; i < sections.count(); ++i ) { - if ( idx >= sections[i].selectionStart() && - idx <= sections[i].selectionEnd() ) - return i; - } - return -1; - } - TQNumberSection section( int idx ) const - { - return sections[idx]; - } - bool setFocusSection( int idx ) - { - if ( idx > (int)sections.count()-1 || idx < 0 ) - return FALSE; - if ( idx != focusSec ) { - focusSec = idx; - applyFocusSelection(); - return TRUE; - } - return FALSE; - } - - bool inSectionSelection( int idx ) - { - for ( uint i = 0; i < sections.count(); ++i ) { - if ( idx >= sections[i].selectionStart() && - idx <= sections[i].selectionEnd() ) - return TRUE; - } - return FALSE; - } - - void paint( const TQString& txt, bool focus, TQPainter& p, - const TQColorGroup& cg, const TQRect& rect, TQStyle& style ) - { - int fw = 0; - if ( frm ) - fw = style.tqpixelMetric(TQStyle::PM_DefaultFrameWidth); - - parag->truncate( 0 ); - parag->append( txt ); - if ( !focus ) - parag->removeSelection( TQTextDocument::Standard ); - else { - applyFocusSelection(); - } - - /* color all TQDATETIMEEDIT_HIDDEN_CHAR chars to background color */ - TQTextFormat *fb = parag->formatCollection()->format( p.font(), - cg.base() ); - TQTextFormat *nf = parag->formatCollection()->format( p.font(), - cg.text() ); - for ( uint i = 0; i < txt.length(); ++i ) { - parag->setFormat( i, 1, nf ); - if ( inSectionSelection( i ) ) - continue; - if ( txt.at(i) == TQDATETIMEEDIT_HIDDEN_CHAR ) - parag->setFormat( i, 1, fb ); - else - parag->setFormat( i, 1, nf ); - } - fb->removeRef(); - nf->removeRef(); - - TQRect r( rect.x(), rect.y(), rect.width() - 2 * ( 2 + fw ), rect.height() ); - parag->pseudoDocument()->docRect = r; - parag->tqinvalidate(0); - parag->format(); - - int xoff = 2 + fw - offset; - int yoff = ( rect.height() - parag->rect().height() + 1 ) / 2; - if ( yoff < 0 ) - yoff = 0; - - p.translate( xoff, yoff ); - parag->paint( p, cg, 0, TRUE ); - if ( frm ) - p.translate( -xoff, -yoff ); - } - - void resize( const TQSize& size ) { sz = size; } - - int mapSection( int sec ) - { - return sections[sec].index(); - } - -protected: - void applyFocusSelection() - { - if ( focusSec > -1 ) { - int selstart = sections[ focusSec ].selectionStart(); - int selend = sections[ focusSec ].selectionEnd(); - parag->setSelection( TQTextDocument::Standard, selstart, selend ); - parag->format(); - if ( parag->at( selstart )->x < offset || - parag->at( selend )->x + parag->string()->width( selend ) > offset + sz.width() ) { - offset = parag->at( selstart )->x; - } - } - } -private: - bool frm; - TQTextParagraph *parag; - TQTextCursor *cursor; - TQSize sz; - int focusSec; - TQValueList< TQNumberSection > sections; - TQString sep; - int offset; -}; - -class TQDateTimeEditor : public TQWidget -{ - Q_OBJECT - TQ_OBJECT -public: - TQDateTimeEditor( TQDateTimeEditBase * widget, TQWidget *parent, - const char * name=0 ); - ~TQDateTimeEditor(); - - void setControlWidget( TQDateTimeEditBase * widget ); - TQDateTimeEditBase * controlWidget() const; - - void setSeparator( const TQString& s ); - TQString separator() const; - - int focusSection() const; - bool setFocusSection( int s ); - void appendSection( const TQNumberSection& sec ); - void clearSections(); - void setSectionSelection( int sec, int selstart, int selend ); - bool eventFilter( TQObject *o, TQEvent *e ); - int sectionAt( const TQPoint &p ); - int mapSection( int sec ); - -protected: - void init(); - bool event( TQEvent *e ); - void resizeEvent( TQResizeEvent * ); - void paintEvent( TQPaintEvent * ); - void mousePressEvent( TQMouseEvent *e ); - -private: - TQDateTimeEditBase* cw; - TQDateTimeEditorPrivate* d; -}; - -class TQDateTimeSpinWidget : public TQSpinWidget -{ - Q_OBJECT - TQ_OBJECT -public: - TQDateTimeSpinWidget( TQWidget *parent, const char *name ) - : TQSpinWidget( parent, name ) - { - } - - void enabledChange(bool notenabled) - { - TQDateEdit *de = ::tqqt_cast<TQDateEdit*>(parentWidget()); - if (de && !notenabled) { - setUpEnabled(de->date() < de->maxValue()); - setDownEnabled(de->date() > de->minValue()); - } else { - setUpEnabled(!notenabled); - setDownEnabled(!notenabled); - } - } - -protected: -#ifndef TQT_NO_WHEELEVENT - void wheelEvent( TQWheelEvent *e ) - { - TQDateTimeEditor *editor = (TQDateTimeEditor*)editWidget()->tqqt_cast( "TQDateTimeEditor" ); - TQ_ASSERT( editor ); - if ( !editor ) - return; - - int section = editor->sectionAt( e->pos() ); - editor->setFocusSection( section ); - - if ( section == -1 ) - return; - TQSpinWidget::wheelEvent( e ); - } -#endif -}; - -/*! - Constructs an empty datetime editor with parent \a parent and - called \a name. -*/ -TQDateTimeEditor::TQDateTimeEditor( TQDateTimeEditBase * widget, TQWidget *parent, - const char * name ) - : TQWidget( parent, name, TQt::WNoAutoErase ) -{ - d = new TQDateTimeEditorPrivate(); - cw = widget; - init(); -} - -/*! - Destroys the object and frees any allocated resources. -*/ - -TQDateTimeEditor::~TQDateTimeEditor() -{ - delete d; -} - -/*! \internal - -*/ - -void TQDateTimeEditor::init() -{ - setBackgroundMode( TQt::PaletteBase ); - setFocusSection( -1 ); - installEventFilter( this ); - setFocusPolicy( Qt::WheelFocus ); -} - - -/*! \reimp - -*/ - -bool TQDateTimeEditor::event( TQEvent *e ) -{ - if ( e->type() == TQEvent::FocusIn || e->type() == TQEvent::FocusOut ) { - if ( e->type() == TQEvent::FocusOut ) - tqApp->sendEvent( cw, e ); - update( rect() ); - } else if ( e->type() == TQEvent::AccelOverride ) { - TQKeyEvent* ke = (TQKeyEvent*) e; - switch ( ke->key() ) { - case Qt::Key_Delete: - case Qt::Key_Backspace: - case Qt::Key_Up: - case Qt::Key_Down: - case Qt::Key_Left: - case Qt::Key_Right: - ke->accept(); - default: - break; - } - } - return TQWidget::event( e ); -} - -/*! \reimp - -*/ - -void TQDateTimeEditor::resizeEvent( TQResizeEvent *e ) -{ - d->resize( e->size() ); - TQWidget::resizeEvent( e ); -} - - -/*! \reimp - -*/ - -void TQDateTimeEditor::paintEvent( TQPaintEvent * ) -{ - TQString txt; - for ( uint i = 0; i < d->sectionCount(); ++i ) { - txt += cw->sectionFormattedText( i ); - if ( i < d->sectionCount()-1 ) { - if ( d->section( i+1 ).separator() ) - txt += d->separator(); - else - txt += " "; - } - } - - TQSharedDoubleBuffer buffer( this ); - const TQBrush &bg = - tqcolorGroup().brush( isEnabled() ? TQColorGroup::Base : TQColorGroup::Background ); - buffer.painter()->fillRect( 0, 0, width(), height(), bg ); - d->paint( txt, hasFocus(), *buffer.painter(), tqcolorGroup(), rect(), - tqstyle() ); - buffer.end(); -} - - -/*! - Returns the section index at point \a p. -*/ -int TQDateTimeEditor::sectionAt( const TQPoint &p ) -{ - return d->section( p ); -} - -int TQDateTimeEditor::mapSection( int sec ) -{ - return d->mapSection( sec ); -} - - -/*! \reimp - -*/ - -void TQDateTimeEditor::mousePressEvent( TQMouseEvent *e ) -{ - TQPoint p( e->pos().x(), 0 ); - int sec = sectionAt( p ); - if ( sec != -1 ) { - cw->setFocusSection( sec ); - tqrepaint( rect(), FALSE ); - } -} - -/*! \reimp - -*/ -bool TQDateTimeEditor::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(this) ) { - if ( e->type() == TQEvent::KeyPress ) { - TQKeyEvent *ke = (TQKeyEvent*)e; - switch ( ke->key() ) { - case Qt::Key_Right: - if ( d->focusSection() < (int)d->sectionCount()-1 ) { - if ( cw->setFocusSection( focusSection()+1 ) ) - tqrepaint( rect(), FALSE ); - } - return TRUE; - case Qt::Key_Left: - if ( d->focusSection() > 0 ) { - if ( cw->setFocusSection( focusSection()-1 ) ) - tqrepaint( rect(), FALSE ); - } - return TRUE; - case Qt::Key_Up: - cw->stepUp(); - return TRUE; - case Qt::Key_Down: - cw->stepDown(); - return TRUE; - case Qt::Key_Backspace: - if ( ::tqqt_cast<TQDateEdit*>(cw) ) - ((TQDateEdit*)cw)->removeFirstNumber( d->focusSection() ); - else if ( ::tqqt_cast<TQTimeEdit*>(cw) ) - ((TQTimeEdit*)cw)->removeFirstNumber( d->focusSection() ); - return TRUE; - case Qt::Key_Delete: - cw->removeLastNumber( d->focusSection() ); - return TRUE; - case Qt::Key_Tab: - case TQt::Key_BackTab: { - if ( ke->state() == ControlButton ) - return FALSE; - - TQWidget *w = this; - bool hadDateEdit = FALSE; - while ( w ) { - if ( (::tqqt_cast<TQDateTimeSpinWidget*>(w) && qstrcmp( w->name(), "qt_spin_widget" ) != 0) || - ::tqqt_cast<TQDateTimeEdit*>(w) ) - break; - hadDateEdit = hadDateEdit || ::tqqt_cast<TQDateEdit*>(w); - w = w->parentWidget(); - } - - if ( w ) { - if ( !::tqqt_cast<TQDateTimeEdit*>(w) ) { - w = w->parentWidget(); - } else { - TQDateTimeEdit *ed = (TQDateTimeEdit*)w; - if ( hadDateEdit && ke->key() == Qt::Key_Tab ) { - ed->timeEdit()->setFocus(); - return TRUE; - } else if ( !hadDateEdit && ke->key() == TQt::Key_BackTab ) { - ed->dateEdit()->setFocus(); - return TRUE; - } else { - while ( w && !::tqqt_cast<TQDateTimeEdit*>(w) ) - w = w->parentWidget(); - } - } - - tqApp->sendEvent( w, e ); - return TRUE; - } - } break; - default: - TQString txt = TQT_TQSTRING(ke->text()).lower(); - if ( !txt.isEmpty() && !separator().isEmpty() && txt[0] == separator()[0] ) { - // do the same thing as KEY_RIGHT when the user presses the separator key - if ( d->focusSection() < 2 ) { - if ( cw->setFocusSection( focusSection()+1 ) ) - tqrepaint( rect(), FALSE ); - } - return TRUE; - } else if ( !txt.isEmpty() && ::tqqt_cast<TQTimeEdit*>(cw) && focusSection() == (int) d->sectionCount()-1 ) { - // the first character of the AM/PM indicator toggles if the section has focus - TQTimeEdit *te = (TQTimeEdit*)cw; - TQTime time = te->time(); - if ( lAMPM && lAM && lPM && (te->display()&TQTimeEdit::AMPM) ) { - if ( txt[0] == (*lAM).lower()[0] && time.hour() >= 12 ) { - time.setHMS( time.hour()-12, time.minute(), time.second(), time.msec() ); - te->setTime( time ); - } else if ( txt[0] == (*lPM).lower()[0] && time.hour() < 12 ) { - time.setHMS( time.hour()+12, time.minute(), time.second(), time.msec() ); - te->setTime( time ); - } - } - } - - int num = txt[0].digitValue(); - if ( num != -1 ) { - cw->addNumber( d->focusSection(), num ); - return TRUE; - } - } - } - } - return FALSE; -} - - -/*! - Appends the number section \a sec to the editor. -*/ - -void TQDateTimeEditor::appendSection( const TQNumberSection& sec ) -{ - d->appendSection( sec ); -} - -/*! - Removes all sections from the editor. -*/ - -void TQDateTimeEditor::clearSections() -{ - d->clearSections(); -} - -/*! - Sets the selection of \a sec to start at \a selstart and end at \a - selend. -*/ - -void TQDateTimeEditor::setSectionSelection( int sec, int selstart, int selend ) -{ - d->setSectionSelection( sec, selstart, selend ); -} - -/*! - Sets the separator for all numbered sections to \a s. Note that - currently, only the first character of \a s is used. -*/ - -void TQDateTimeEditor::setSeparator( const TQString& s ) -{ - d->setSeparator( s ); - update(); -} - - -/*! - Returns the editor's separator. -*/ - -TQString TQDateTimeEditor::separator() const -{ - return d->separator(); -} - -/*! - Returns the number of the section that has focus. -*/ - -int TQDateTimeEditor::focusSection() const -{ - return d->focusSection(); -} - - -/*! - Sets the focus to section \a sec. If \a sec does not exist, - nothing happens. -*/ - -bool TQDateTimeEditor::setFocusSection( int sec ) -{ - return d->setFocusSection( sec ); -} - -/*! \class TQDateTimeEditBase - \brief The TQDateTimeEditBase class provides an abstraction for date and edit editors. - - Small abstract class that provides some functions that are common - for both TQDateEdit and TQTimeEdit. It is used internally by - TQDateTimeEditor. -*/ - -/*! - \fn TQDateTimeEditBase::TQDateTimeEditBase(TQWidget *, const char*) - \internal -*/ - -/*! - \fn TQDateTimeEditBase::setFocusSection(int) - \internal -*/ - -/*! \fn TQString TQDateTimeEditBase::sectionFormattedText( int sec ) - \internal - - Pure virtual function which returns the formatted text of section \a - sec. - -*/ - -/*! \fn void TQDateTimeEditBase::stepUp() - \internal - - Pure virtual slot which is called whenever the user increases the - number in a section by pressing the widget's arrow buttons or the - keyboard's arrow keys. -*/ - -/*! \fn void TQDateTimeEditBase::stepDown() - \internal - - Pure virtual slot which is called whenever the user decreases the - number in a section by pressing the widget's arrow buttons or the - keyboard's arrow keys. - -*/ - -/*! \fn void TQDateTimeEditBase::addNumber( int sec, int num ) - \internal - - Pure virtual function which is called whenever the user types a number. - \a sec indicates the section where the number should be added. \a - num is the number that was pressed. -*/ - -/*! \fn void TQDateTimeEditBase::removeLastNumber( int sec ) - \internal - - Pure virtual function which is called whenever the user tries to - remove the last number from \a sec by pressing the delete key. -*/ - -//////////////// - -class TQDateEditPrivate -{ -public: - int y; - int m; - int d; - // remebers the last entry for the day. - // if the day is 31 and you cycle through the months, - // the day will be 31 again if you reach a month with 31 days - // otherwise it will be the highest day in the month - int dayCache; - int yearSection; - int monthSection; - int daySection; - TQDateEdit::Order ord; - bool overwrite; - bool adv; - int timerId; - bool typing; - TQDate min; - TQDate max; - bool changed; - TQDateTimeEditor *ed; - TQSpinWidget *controls; -}; - - -/*! - \class TQDateEdit tqdatetimeedit.h - \brief The TQDateEdit class provides a date editor. - - \ingroup advanced - \ingroup time - \mainclass - - TQDateEdit allows the user to edit dates by using the keyboard or - the arrow keys to increase/decrease date values. The arrow keys - can be used to move from section to section within the TQDateEdit - box. Dates appear in accordance with the local date/time settings - or in year, month, day order if the system doesn't provide this - information. It is recommended that the TQDateEdit be initialised - with a date, e.g. - - \code - TQDateEdit *dateEdit = new TQDateEdit( TQDate::tqcurrentDate(), this ); - dateEdit->setRange( TQDate::tqcurrentDate().addDays( -365 ), - TQDate::tqcurrentDate().addDays( 365 ) ); - dateEdit->setOrder( TQDateEdit::MDY ); - dateEdit->setAutoAdvance( TRUE ); - \endcode - - Here we've created a new TQDateEdit object initialised with today's - date and restricted the valid date range to today plus or minus - 365 days. We've set the order to month, day, year. If the auto - advance property is TRUE (as we've set it here) when the user - completes a section of the date, e.g. enters two digits for the - month, they are automatically taken to the next section. - - The maximum and minimum values for a date value in the date editor - default to the maximum and minimum values for a TQDate. You can - change this by calling setMinValue(), setMaxValue() or setRange(). - - Terminology: A TQDateEdit widget comprises three 'sections', one - each for the year, month and day. You can change the separator - character using TQDateTimeEditor::setSeparator(), by default the - separator will be taken from the systems settings. If that is - not possible, it defaults to "-". - - \img datetimewidgets.png Date Time Widgets - - \sa TQDate TQTimeEdit TQDateTimeEdit -*/ - -/*! - \enum TQDateEdit::Order - - This enum defines the order in which the sections that comprise a - date appear. - \value MDY month-day-year - \value DMY day-month-year - \value YMD year-month-day (the default) - \value YDM year-day-month (included for completeness; but should - not be used) -*/ - -/*! - \enum TQTimeEdit::Display - - This enum defines the sections that comprise a time - - \value Hours The hours section - \value Minutes The minutes section - \value Seconds The seconds section - \value AMPM The AM/PM section - - The values can be or'ed together to show any combination. -*/ - -/*! - Constructs an empty date editor which is a child of \a parent and - called name \a name. -*/ - -TQDateEdit::TQDateEdit( TQWidget * parent, const char * name ) - : TQDateTimeEditBase( parent, name ) -{ - init(); - updateButtons(); -} - -/*! - \overload - - Constructs a date editor with the initial value \a date, parent \a - parent and called \a name. - - The date editor is initialized with \a date. -*/ - -TQDateEdit::TQDateEdit( const QDate& date, QWidget * parent, const char * name ) - : TQDateTimeEditBase( TQT_TQWIDGET(parent), name ) -{ - init(); - setDate( TQT_TQDATE_OBJECT(date) ); -} - -/*! \internal -*/ -void TQDateEdit::init() -{ - d = new TQDateEditPrivate(); - d->controls = new TQDateTimeSpinWidget( this, qstrcmp( name(), "qt_datetime_dateedit" ) == 0 ? "qt_spin_widget" : "date edit controls" ); - d->ed = new TQDateTimeEditor( this, d->controls, "date editor" ); - d->controls->setEditWidget( d->ed ); - setFocusProxy( d->ed ); - connect( d->controls, TQT_SIGNAL( stepUpPressed() ), TQT_SLOT( stepUp() ) ); - connect( d->controls, TQT_SIGNAL( stepDownPressed() ), TQT_SLOT( stepDown() ) ); - connect( this, TQT_SIGNAL( valueChanged(const TQDate&) ), - TQT_SLOT( updateButtons() ) ); - d->ed->appendSection( TQNumberSection( 0,4 ) ); - d->ed->appendSection( TQNumberSection( 5,7 ) ); - d->ed->appendSection( TQNumberSection( 8,10 ) ); - - d->yearSection = -1; - d->monthSection = -1; - d->daySection = -1; - - d->y = 0; - d->m = 0; - d->d = 0; - d->dayCache = 0; - setOrder( localOrder() ); - setFocusSection( 0 ); - d->overwrite = TRUE; - d->adv = FALSE; - d->timerId = 0; - d->typing = FALSE; - d->min = TQDate( 1752, 9, 14 ); - d->max = TQDate( 8000, 12, 31 ); - d->changed = FALSE; - - tqsetSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Fixed ); - - refcount++; -} - -/*! - Destroys the object and frees any allocated resources. -*/ - -TQDateEdit::~TQDateEdit() -{ - delete d; - if ( !--refcount ) - cleanup(); -} - -/*! - \property TQDateEdit::minValue - - \brief the editor's minimum value - - Setting the minimum date value is equivalent to calling - TQDateEdit::setRange( \e d, maxValue() ), where \e d is the minimum - date. The default minimum date is 1752-09-14. - - \sa maxValue setRange() -*/ - -TQDate TQDateEdit::minValue() const -{ - return d->min; -} - -/*! - \property TQDateEdit::maxValue - - \brief the editor's maximum value - - Setting the maximum date value for the editor is equivalent to - calling TQDateEdit::setRange( minValue(), \e d ), where \e d is the - maximum date. The default maximum date is 8000-12-31. - - \sa minValue setRange() -*/ - -TQDate TQDateEdit::maxValue() const -{ - return d->max; -} - - -/*! - Sets the valid input range for the editor to be from \a min to \a - max inclusive. If \a min is invalid no minimum date will be set. - Similarly, if \a max is invalid no maximum date will be set. -*/ - -void TQDateEdit::setRange( const TQDate& min, const TQDate& max ) -{ - if ( min.isValid() ) - d->min = min; - if ( max.isValid() ) - d->max = max; -} - -/*! - Sets the separator to \a s. Note that currently only the first - character of \a s is used. -*/ - -void TQDateEdit::setSeparator( const TQString& s ) -{ - d->ed->setSeparator( s ); -} - -/*! - Returns the editor's separator. -*/ - -TQString TQDateEdit::separator() const -{ - return d->ed->separator(); -} - - -/*! - Enables/disables the push buttons according to the min/max date - for this widget. -*/ - -void TQDateEdit::updateButtons() -{ - if ( !isEnabled() ) - return; - - bool upEnabled = date() < maxValue(); - bool downEnabled = date() > minValue(); - - d->controls->setUpEnabled( upEnabled ); - d->controls->setDownEnabled( downEnabled ); -} - -/*! \reimp - */ -void TQDateEdit::resizeEvent( TQResizeEvent * ) -{ - d->controls->resize( width(), height() ); -} - -/*! \reimp - -*/ -TQSize TQDateEdit::tqsizeHint() const -{ - constPolish(); - TQFontMetrics fm( font() ); - int fw = tqstyle().tqpixelMetric( TQStyle::PM_DefaultFrameWidth, this ); - int h = TQMAX( fm.lineSpacing(), 14 ) + 2; - int w = 2 + fm.width( '9' ) * 8 + fm.width( d->ed->separator() ) * 2 + d->controls->upRect().width() + fw * 4; - - return TQSize( w, TQMAX(h + fw * 2,20) ).expandedTo( TQApplication::globalStrut() ); -} - -/*! \reimp - -*/ -TQSize TQDateEdit::tqminimumSizeHint() const -{ - return tqsizeHint(); -} - - -/*! - Returns the formatted number for section \a sec. This will - correspond to either the year, month or day section, depending on - the current display order. - - \sa setOrder() -*/ - -TQString TQDateEdit::sectionFormattedText( int sec ) -{ - TQString txt; - txt = sectionText( sec ); - if ( d->typing && sec == d->ed->focusSection() ) - d->ed->setSectionSelection( sec, sectionOffsetEnd( sec ) - txt.length(), - sectionOffsetEnd( sec ) ); - else - d->ed->setSectionSelection( sec, sectionOffsetEnd( sec ) - sectionLength( sec ), - sectionOffsetEnd( sec ) ); - txt = txt.rightJustify( sectionLength( sec ), TQDATETIMEEDIT_HIDDEN_CHAR ); - return txt; -} - - -/*! - Returns the desired length (number of digits) of section \a sec. - This will correspond to either the year, month or day section, - depending on the current display order. - - \sa setOrder() -*/ - -int TQDateEdit::sectionLength( int sec ) const -{ - int val = 0; - if ( sec == d->yearSection ) { - val = 4; - } else if ( sec == d->monthSection ) { - val = 2; - } else if ( sec == d->daySection ) { - val = 2; - } - return val; -} - -/*! - Returns the text of section \a sec. This will correspond to either - the year, month or day section, depending on the current display - order. - - \sa setOrder() -*/ - -TQString TQDateEdit::sectionText( int sec ) const -{ - int val = 0; - if ( sec == d->yearSection ) { - val = d->y; - } else if ( sec == d->monthSection ) { - val = d->m; - } else if ( sec == d->daySection ) { - val = d->d; - } - return TQString::number( val ); -} - -/*! \internal - - Returns the end of the section offset \a sec. - -*/ - -int TQDateEdit::sectionOffsetEnd( int sec ) const -{ - if ( sec == d->yearSection ) { - switch( d->ord ) { - case DMY: - case MDY: - return sectionOffsetEnd( sec-1) + separator().length() + sectionLength( sec ); - case YMD: - case YDM: - return sectionLength( sec ); - } - } else if ( sec == d->monthSection ) { - switch( d->ord ) { - case DMY: - case YDM: - case YMD: - return sectionOffsetEnd( sec-1) + separator().length() + sectionLength( sec ); - case MDY: - return sectionLength( sec ); - } - } else if ( sec == d->daySection ) { - switch( d->ord ) { - case DMY: - return sectionLength( sec ); - case YMD: - case MDY: - case YDM: - return sectionOffsetEnd( sec-1 ) + separator().length() + sectionLength( sec ); - } - } - return 0; -} - - -/*! - \property TQDateEdit::order - \brief the order in which the year, month and day appear - - The default order is locale dependent. - - \sa Order -*/ - -void TQDateEdit::setOrder( TQDateEdit::Order order ) -{ - d->ord = order; - switch( d->ord ) { - case DMY: - d->yearSection = 2; - d->monthSection = 1; - d->daySection = 0; - break; - case MDY: - d->yearSection = 2; - d->monthSection = 0; - d->daySection = 1; - break; - case YMD: - d->yearSection = 0; - d->monthSection = 1; - d->daySection = 2; - break; - case YDM: - d->yearSection = 0; - d->monthSection = 2; - d->daySection = 1; - break; - } - if ( isVisible() ) - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - - -TQDateEdit::Order TQDateEdit::order() const -{ - return d->ord; -} - - -/*! \reimp - -*/ -void TQDateEdit::stepUp() -{ - int sec = d->ed->focusSection(); - bool accepted = FALSE; - if ( sec == d->yearSection ) { - if ( !outOfRange( d->y+1, d->m, d->d ) ) { - accepted = TRUE; - setYear( d->y+1 ); - } - } else if ( sec == d->monthSection ) { - if ( !outOfRange( d->y, d->m+1, d->d ) ) { - accepted = TRUE; - setMonth( d->m+1 ); - } - } else if ( sec == d->daySection ) { - if ( !outOfRange( d->y, d->m, d->d+1 ) ) { - accepted = TRUE; - setDay( d->d+1 ); - } - } - if ( accepted ) { - d->changed = FALSE; - emit valueChanged( date() ); - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - - - -/*! \reimp - -*/ - -void TQDateEdit::stepDown() -{ - int sec = d->ed->focusSection(); - bool accepted = FALSE; - if ( sec == d->yearSection ) { - if ( !outOfRange( d->y-1, d->m, d->d ) ) { - accepted = TRUE; - setYear( d->y-1 ); - } - } else if ( sec == d->monthSection ) { - if ( !outOfRange( d->y, d->m-1, d->d ) ) { - accepted = TRUE; - setMonth( d->m-1 ); - } - } else if ( sec == d->daySection ) { - if ( !outOfRange( d->y, d->m, d->d-1 ) ) { - accepted = TRUE; - setDay( d->d-1 ); - } - } - if ( accepted ) { - d->changed = FALSE; - emit valueChanged( date() ); - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -/*! - Sets the year to \a year, which must be a valid year. The range - currently supported is from 1752 to 8000. - - \sa TQDate -*/ - -void TQDateEdit::setYear( int year ) -{ - if ( year < 1752 ) - year = 1752; - if ( year > 8000 ) - year = 8000; - if ( !outOfRange( year, d->m, d->d ) ) { - d->y = year; - setMonth( d->m ); - int tmp = d->dayCache; - setDay( d->dayCache ); - d->dayCache = tmp; - } -} - - -/*! - Sets the month to \a month, which must be a valid month, i.e. - between 1 and 12. -*/ - -void TQDateEdit::setMonth( int month ) -{ - if ( month < 1 ) - month = 1; - if ( month > 12 ) - month = 12; - if ( !outOfRange( d->y, month, d->d ) ) { - d->m = month; - int tmp = d->dayCache; - setDay( d->dayCache ); - d->dayCache = tmp; - } -} - - -/*! - Sets the day to \a day, which must be a valid day. The function - will ensure that the \a day set is valid for the month and year. -*/ - -void TQDateEdit::setDay( int day ) -{ - if ( day < 1 ) - day = 1; - if ( day > 31 ) - day = 31; - if ( d->m > 0 && d->y > 1752 ) { - while ( !TQDate::isValid( d->y, d->m, day ) ) - --day; - if ( !outOfRange( d->y, d->m, day ) ) - d->d = day; - } else if ( d->m > 0 ) { - if ( day > 0 && day < 32 ) { - if ( !outOfRange( d->y, d->m, day ) ) - d->d = day; - } - } - d->dayCache = d->d; -} - - -/*! - \property TQDateEdit::date - \brief the editor's date value. - - If the date property is not valid, the editor displays all zeroes - and TQDateEdit::date() will return an invalid date. It is strongly - recommended that the editor is given a default date value (e.g. - currentDate()). That way, attempts to set the date property to an - invalid date will fail. - - When changing the date property, if the date is less than - minValue(), or is greater than maxValue(), nothing happens. -*/ - -void TQDateEdit::setDate( const TQDate& date ) -{ - if ( !date.isValid() ) { - d->y = 0; - d->m = 0; - d->d = 0; - d->dayCache = 0; - } else { - if ( date > maxValue() || date < minValue() ) - return; - d->y = date.year(); - d->m = date.month(); - d->d = date.day(); - d->dayCache = d->d; - emit valueChanged( date ); - } - d->changed = FALSE; - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -TQDate TQDateEdit::date() const -{ - if ( TQDate::isValid( d->y, d->m, d->d ) ) - return TQDate( d->y, d->m, d->d ); - return TQDate(); -} - -/*! \internal - - Returns TRUE if \a y, \a m, \a d is out of range, otherwise returns - FALSE. - - \sa setRange() - -*/ - -bool TQDateEdit::outOfRange( int y, int m, int d ) const -{ - if ( TQDate::isValid( y, m, d ) ) { - TQDate tqcurrentDate( y, m, d ); - if ( tqcurrentDate > maxValue() || - tqcurrentDate < minValue() ) { - //## outOfRange should set overwrite? - return TRUE; - } - return FALSE; - } - return FALSE; /* assume ok */ -} - -/*! \reimp - -*/ - -void TQDateEdit::addNumber( int sec, int num ) -{ - if ( sec == -1 ) - return; - killTimer( d->timerId ); - bool overwrite = FALSE; - bool accepted = FALSE; - d->typing = TRUE; - TQString txt; - if ( sec == d->yearSection ) { - txt = TQString::number( d->y ); - if ( d->overwrite || txt.length() == 4 ) { - accepted = TRUE; - d->y = num; - } else { - txt += TQString::number( num ); - if ( txt.length() == 4 ) { - int val = txt.toInt(); - if ( val < 1792 ) - d->y = 1792; - else if ( val > 8000 ) - d->y = 8000; - else if ( outOfRange( val, d->m, d->d ) ) - txt = TQString::number( d->y ); - else { - accepted = TRUE; - d->y = val; - } - } else { - accepted = TRUE; - d->y = txt.toInt(); - } - if ( d->adv && txt.length() == 4 ) { - d->ed->setFocusSection( d->ed->focusSection()+1 ); - overwrite = TRUE; - } - } - } else if ( sec == d->monthSection ) { - txt = TQString::number( d->m ); - if ( d->overwrite || txt.length() == 2 ) { - accepted = TRUE; - d->m = num; - } else { - txt += TQString::number( num ); - int temp = txt.toInt(); - if ( temp > 12 ) - temp = num; - if ( outOfRange( d->y, temp, d->d ) ) - txt = TQString::number( d->m ); - else { - accepted = TRUE; - d->m = temp; - } - if ( d->adv && txt.length() == 2 ) { - d->ed->setFocusSection( d->ed->focusSection()+1 ); - overwrite = TRUE; - } - } - } else if ( sec == d->daySection ) { - txt = TQString::number( d->d ); - if ( d->overwrite || txt.length() == 2 ) { - accepted = TRUE; - d->d = num; - d->dayCache = d->d; - } else { - txt += TQString::number( num ); - int temp = txt.toInt(); - if ( temp > 31 ) - temp = num; - if ( outOfRange( d->y, d->m, temp ) ) - txt = TQString::number( d->d ); - else { - accepted = TRUE; - d->d = temp; - d->dayCache = d->d; - } - if ( d->adv && txt.length() == 2 ) { - d->ed->setFocusSection( d->ed->focusSection()+1 ); - overwrite = TRUE; - } - } - } - if ( accepted ) { - d->changed = FALSE; - emit valueChanged( date() ); - } - d->overwrite = overwrite; - d->timerId = startTimer( tqApp->doubleClickInterval()*4 ); - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - - -/*! \reimp - -*/ - -bool TQDateEdit::setFocusSection( int s ) -{ - if ( s != d->ed->focusSection() ) { - killTimer( d->timerId ); - d->overwrite = TRUE; - d->typing = FALSE; - fix(); // will emit valueChanged if necessary - } - return d->ed->setFocusSection( s ); -} - - -/*! - Attempts to fix any invalid date entries. - - The rules applied are as follows: - - \list - \i If the year has four digits it is left unchanged. - \i If the year has two digits, the year will be changed to four - digits in the range current year - 70 to current year + 29. - \i If the year has three digits in the range 100..999, the - current millennium, i.e. 2000, will be added giving a year - in the range 2100..2999. - \i If the day or month is 0 then it will be set to 1 or the - minimum valid day\month in the range. - \endlist - -*/ - -void TQDateEdit::fix() -{ - bool changed = FALSE; - int currentYear = TQDate::currentDate().year(); - int year = d->y; - if ( year < 100 ) { - int currentCentury = currentYear / 100; - year += currentCentury * 100; - if ( currentYear > year ) { - if ( currentYear > year + 70 ) - year += 100; - } else { - if ( year >= currentYear + 30 ) - year -= 100; - } - changed = TRUE; - } else if ( year < 1000 ) { - int currentMillennium = currentYear / 10; - year += currentMillennium * 10; - changed = TRUE; - } else if (d->d == 0) { - d->d = 1; - changed = TRUE; - } else if (d->m == 0) { - d->m = 1; - changed = TRUE; - } - if ( outOfRange( year, d->m, d->d ) ) { - if ( minValue().isValid() && date() < minValue() ) { - d->d = minValue().day(); - d->dayCache = d->d; - d->m = minValue().month(); - d->y = minValue().year(); - } - if ( date() > maxValue() ) { - d->d = maxValue().day(); - d->dayCache = d->d; - d->m = maxValue().month(); - d->y = maxValue().year(); - } - changed = TRUE; - } else if ( changed ) - setYear( year ); - if ( changed ) { - emit valueChanged( date() ); - d->changed = FALSE; - } -} - - -/*! \reimp - -*/ - -bool TQDateEdit::event( TQEvent *e ) -{ - if( e->type() == TQEvent::FocusOut ) { - d->typing = FALSE; - fix(); - // the following can't be done in fix() because fix() called - // from all over the place and it will break the old behaviour - if ( !TQDate::isValid( d->y, d->m, d->d ) ) { - d->dayCache = d->d; - int i = d->d; - for ( ; i > 0; i-- ) { - d->d = i; - if ( TQDate::isValid( d->y, d->m, d->d ) ) - break; - } - d->changed = TRUE; - } - if ( d->changed ) { - emit valueChanged( date() ); - d->changed = FALSE; - } - } else if ( e->type() == TQEvent::LocaleChange ) { - readLocaleSettings(); - d->ed->setSeparator( localDateSep() ); - setOrder( localOrder() ); - } - return TQDateTimeEditBase::event( e ); -} - -/*! - \internal - - Function which is called whenever the user tries to - remove the first number from \a sec by pressing the backspace key. -*/ - -void TQDateEdit::removeFirstNumber( int sec ) -{ - if ( sec == -1 ) - return; - TQString txt; - if ( sec == d->yearSection ) { - txt = TQString::number( d->y ); - txt = txt.mid( 1, txt.length() ) + "0"; - d->y = txt.toInt(); - } else if ( sec == d->monthSection ) { - txt = TQString::number( d->m ); - txt = txt.mid( 1, txt.length() ) + "0"; - d->m = txt.toInt(); - } else if ( sec == d->daySection ) { - txt = TQString::number( d->d ); - txt = txt.mid( 1, txt.length() ) + "0"; - d->d = txt.toInt(); - d->dayCache = d->d; - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -/*! \reimp - -*/ - -void TQDateEdit::removeLastNumber( int sec ) -{ - if ( sec == -1 ) - return; - TQString txt; - if ( sec == d->yearSection ) { - txt = TQString::number( d->y ); - txt = txt.mid( 0, txt.length()-1 ); - d->y = txt.toInt(); - } else if ( sec == d->monthSection ) { - txt = TQString::number( d->m ); - txt = txt.mid( 0, txt.length()-1 ); - d->m = txt.toInt(); - } else if ( sec == d->daySection ) { - txt = TQString::number( d->d ); - txt = txt.mid( 0, txt.length()-1 ); - d->d = txt.toInt(); - d->dayCache = d->d; - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -/*! - \property TQDateEdit::autoAdvance - \brief whether the editor automatically advances to the next - section - - If autoAdvance is TRUE, the editor will automatically advance - focus to the next date section if a user has completed a section. - The default is FALSE. -*/ - -void TQDateEdit::setAutoAdvance( bool advance ) -{ - d->adv = advance; -} - - -bool TQDateEdit::autoAdvance() const -{ - return d->adv; -} - -/*! \reimp -*/ - -void TQDateEdit::timerEvent( TQTimerEvent * ) -{ - d->overwrite = TRUE; -} - -/*! - \fn void TQDateEdit::valueChanged( const TQDate& date ) - - This signal is emitted whenever the editor's value changes. The \a - date parameter is the new value. -*/ - -/////////// - -class TQTimeEditPrivate -{ -public: - int h; - int m; - int s; - uint display; - bool adv; - bool overwrite; - int timerId; - bool typing; - TQTime min; - TQTime max; - bool changed; - TQDateTimeEditor *ed; - TQSpinWidget *controls; -}; - -/*! - \class TQTimeEdit tqdatetimeedit.h - \brief The TQTimeEdit class provides a time editor. - - \ingroup advanced - \ingroup time - \mainclass - - TQTimeEdit allows the user to edit times by using the keyboard or - the arrow keys to increase/decrease time values. The arrow keys - can be used to move from section to section within the TQTimeEdit - box. The user can automatically be moved to the next section once - they complete a section using setAutoAdvance(). Times appear in - hour, minute, second order. It is recommended that the TQTimeEdit - is initialised with a time, e.g. - \code - TQTime timeNow = TQTime::currentTime(); - TQTimeEdit *timeEdit = new TQTimeEdit( timeNow, this ); - timeEdit->setRange( timeNow, timeNow.addSecs( 60 * 60 ) ); - \endcode - Here we've created a TQTimeEdit widget set to the current time. - We've also set the minimum value to the current time and the - maximum time to one hour from now. - - The maximum and minimum values for a time value in the time editor - default to the maximum and minimum values for a TQTime. You can - change this by calling setMinValue(), setMaxValue() or setRange(). - - Terminology: A TQTimeWidget consists of three sections, one each - for the hour, minute and second. You can change the separator - character using setSeparator(), by default the separator is read - from the system's settings. - - \img datetimewidgets.png Date Time Widgets - - \sa TQTime TQDateEdit TQDateTimeEdit -*/ - - -/*! - Constructs an empty time edit with parent \a parent and called \a - name. -*/ - -TQTimeEdit::TQTimeEdit( TQWidget * parent, const char * name ) - : TQDateTimeEditBase( parent, name ) -{ - init(); -} - -/*! - \overload - - Constructs a time edit with the initial time value, \a time, - parent \a parent and called \a name. -*/ - -TQTimeEdit::TQTimeEdit( const QTime& time, QWidget * parent, const char * name ) - : TQDateTimeEditBase( TQT_TQWIDGET(parent), name ) -{ - init(); - setTime( TQT_TQTIME_OBJECT(time) ); -} - -/*! \internal - */ - -void TQTimeEdit::init() -{ - d = new TQTimeEditPrivate(); - d->controls = new TQDateTimeSpinWidget( this, qstrcmp( name(), "qt_datetime_timeedit" ) == 0 ? "qt_spin_widget" : "time edit controls" ); - d->ed = new TQDateTimeEditor( this, d->controls, "time edit base" ); - d->controls->setEditWidget( d->ed ); - setFocusProxy( d->ed ); - connect( d->controls, TQT_SIGNAL( stepUpPressed() ), TQT_SLOT( stepUp() ) ); - connect( d->controls, TQT_SIGNAL( stepDownPressed() ), TQT_SLOT( stepDown() ) ); - - d->ed->appendSection( TQNumberSection( 0,0, TRUE, 0 ) ); - d->ed->appendSection( TQNumberSection( 0,0, TRUE, 1 ) ); - d->ed->appendSection( TQNumberSection( 0,0, TRUE, 2 ) ); - d->ed->setSeparator( localTimeSep() ); - - d->h = 0; - d->m = 0; - d->s = 0; - d->display = Hours | Minutes | Seconds; - if ( lAMPM ) { - d->display |= AMPM; - d->ed->appendSection( TQNumberSection( 0,0, FALSE, 3 ) ); - } - d->adv = FALSE; - d->overwrite = TRUE; - d->timerId = 0; - d->typing = FALSE; - d->min = TQTime( 0, 0, 0 ); - d->max = TQTime( 23, 59, 59 ); - d->changed = FALSE; - - tqsetSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Fixed ); - - refcount++; -} - -/*! - Destroys the object and frees any allocated resources. -*/ - -TQTimeEdit::~TQTimeEdit() -{ - delete d; - if ( !--refcount ) - cleanup(); -} - -/*! - \property TQTimeEdit::minValue - \brief the minimum time value - - Setting the minimum time value is equivalent to calling - TQTimeEdit::setRange( \e t, maxValue() ), where \e t is the minimum - time. The default minimum time is 00:00:00. - - \sa maxValue setRange() -*/ - -TQTime TQTimeEdit::minValue() const -{ - return d->min; -} - -/*! - \property TQTimeEdit::maxValue - \brief the maximum time value - - Setting the maximum time value is equivalent to calling - TQTimeEdit::setRange( minValue(), \e t ), where \e t is the maximum - time. The default maximum time is 23:59:59. - - \sa minValue setRange() -*/ - -TQTime TQTimeEdit::maxValue() const -{ - return d->max; -} - - -/*! - Sets the valid input range for the editor to be from \a min to \a - max inclusive. If \a min is invalid no minimum time is set. - Similarly, if \a max is invalid no maximum time is set. -*/ - -void TQTimeEdit::setRange( const TQTime& min, const TQTime& max ) -{ - if ( min.isValid() ) - d->min = min; - if ( max.isValid() ) - d->max = max; -} - -/*! - \property TQTimeEdit::display - \brief the sections that are displayed in the time edit - - The value can be any combination of the values in the Display enum. - By default, the widget displays hours, minutes and seconds. -*/ -void TQTimeEdit::setDisplay( uint display ) -{ - if ( d->display == display ) - return; - - d->ed->clearSections(); - d->display = display; - if ( d->display & Hours ) - d->ed->appendSection( TQNumberSection( 0,0, TRUE, 0 ) ); - if ( d->display & Minutes ) - d->ed->appendSection( TQNumberSection( 0,0, TRUE, 1 ) ); - if ( d->display & Seconds ) - d->ed->appendSection( TQNumberSection( 0,0, TRUE, 2 ) ); - if ( d->display & AMPM ) - d->ed->appendSection( TQNumberSection( 0,0, FALSE, 3 ) ); - - d->ed->setFocusSection( 0 ); - d->ed->update(); -} - -uint TQTimeEdit::display() const -{ - return d->display; -} - -/*! - \property TQTimeEdit::time - \brief the editor's time value. - - When changing the time property, if the time is less than - minValue(), or is greater than maxValue(), nothing happens. -*/ - -void TQTimeEdit::setTime( const TQTime& time ) -{ - if ( !time.isValid() ) { - d->h = 0; - d->m = 0; - d->s = 0; - } else { - if ( time > maxValue() || time < minValue() ) - return; - d->h = time.hour(); - d->m = time.minute(); - d->s = time.second(); - emit valueChanged( time ); - } - d->changed = FALSE; - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -TQTime TQTimeEdit::time() const -{ - if ( TQTime::isValid( d->h, d->m, d->s ) ) - return TQTime( d->h, d->m, d->s ); - return TQTime(); -} - -/*! - \property TQTimeEdit::autoAdvance - \brief whether the editor automatically advances to the next - section - - If autoAdvance is TRUE, the editor will automatically advance - focus to the next time section if a user has completed a section. - The default is FALSE. -*/ - -void TQTimeEdit::setAutoAdvance( bool advance ) -{ - d->adv = advance; -} - -bool TQTimeEdit::autoAdvance() const -{ - return d->adv; -} - -/*! - Sets the separator to \a s. Note that currently only the first - character of \a s is used. -*/ - -void TQTimeEdit::setSeparator( const TQString& s ) -{ - d->ed->setSeparator( s ); -} - -/*! - Returns the editor's separator. -*/ - -TQString TQTimeEdit::separator() const -{ - return d->ed->separator(); -} - - -/*! - \fn void TQTimeEdit::valueChanged( const TQTime& time ) - - This signal is emitted whenever the editor's value changes. The \a - time parameter is the new value. -*/ - -/*! \reimp - -*/ - -bool TQTimeEdit::event( TQEvent *e ) -{ - if ( e->type() == TQEvent::FocusOut ) { - d->typing = FALSE; - if ( d->changed ) { - emit valueChanged( time() ); - d->changed = FALSE; - } - } else if ( e->type() == TQEvent::LocaleChange ) { - readLocaleSettings(); - d->ed->setSeparator( localTimeSep() ); - } - return TQDateTimeEditBase::event( e ); -} - -/*! \reimp - -*/ - -void TQTimeEdit::timerEvent( TQTimerEvent * ) -{ - d->overwrite = TRUE; -} - - -/*! \reimp - -*/ - -void TQTimeEdit::stepUp() -{ - if (minValue() > maxValue()) { - return; - } - int sec = d->ed->mapSection( d->ed->focusSection() ); - bool accepted = TRUE; - switch( sec ) { - case 0: - do { - d->h = (d->h + 1) % 24; - } while (outOfRange(d->h, d->m, d->s)); - break; - case 1: - do { - d->m = (d->m + 1) % 60; - } while (outOfRange(d->h, d->m, d->s)); - break; - case 2: - do { - d->s = (d->s + 1) % 60; - } while (outOfRange(d->h, d->m, d->s)); - break; - case 3: - if ( d->h < 12 ) - setHour( d->h+12 ); - else - setHour( d->h-12 ); - break; - default: - accepted = FALSE; -#ifdef TQT_CHECK_RANGE - qWarning( "TQTimeEdit::stepUp: Focus section out of range!" ); -#endif - break; - } - if ( accepted ) { - d->changed = FALSE; - emit valueChanged( time() ); - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - - -/*! \reimp - -*/ - -void TQTimeEdit::stepDown() -{ - if (minValue() > maxValue()) { - return; - } - - int sec = d->ed->mapSection( d->ed->focusSection() ); - bool accepted = TRUE; - switch( sec ) { - case 0: - do { - if (--d->h < 0) - d->h = 23; - } while (outOfRange(d->h, d->m, d->s)); - break; - case 1: - do { - if (--d->m < 0) - d->m = 59; - } while (outOfRange(d->h, d->m, d->s)); - break; - case 2: - do { - if (--d->s < 0) - d->s = 59; - } while (outOfRange(d->h, d->m, d->s)); - break; - case 3: - if ( d->h > 11 ) - setHour( d->h-12 ); - else - setHour( d->h+12 ); - break; - default: - accepted = FALSE; -#ifdef TQT_CHECK_RANGE - qWarning( "TQTimeEdit::stepDown: Focus section out of range!" ); -#endif - break; - } - if ( accepted ) { - d->changed = FALSE; - emit valueChanged( time() ); - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - - -/*! - Returns the formatted number for section \a sec. This will - correspond to either the hour, minute or second section, depending - on \a sec. -*/ - -TQString TQTimeEdit::sectionFormattedText( int sec ) -{ - TQString txt; - txt = sectionText( sec ); - txt = txt.rightJustify( 2, TQDATETIMEEDIT_HIDDEN_CHAR ); - int offset = sec*2+sec*separator().length() + txt.length(); - if ( d->typing && sec == d->ed->focusSection() ) - d->ed->setSectionSelection( sec, offset - txt.length(), offset ); - else - d->ed->setSectionSelection( sec, offset - txt.length(), offset ); - - return txt; -} - - -/*! \reimp - -*/ - -bool TQTimeEdit::setFocusSection( int sec ) -{ - if ( sec != d->ed->focusSection() ) { - killTimer( d->timerId ); - d->overwrite = TRUE; - d->typing = FALSE; - TQString txt = sectionText( sec ); - txt = txt.rightJustify( 2, TQDATETIMEEDIT_HIDDEN_CHAR ); - int offset = sec*2+sec*separator().length() + txt.length(); - d->ed->setSectionSelection( sec, offset - txt.length(), offset ); - if ( d->changed ) { - emit valueChanged( time() ); - d->changed = FALSE; - } - } - return d->ed->setFocusSection( sec ); -} - - -/*! - Sets the hour to \a h, which must be a valid hour, i.e. in the - range 0..24. -*/ - -void TQTimeEdit::setHour( int h ) -{ - if ( h < 0 ) - h = 0; - if ( h > 23 ) - h = 23; - d->h = h; -} - - -/*! - Sets the minute to \a m, which must be a valid minute, i.e. in the - range 0..59. -*/ - -void TQTimeEdit::setMinute( int m ) -{ - if ( m < 0 ) - m = 0; - if ( m > 59 ) - m = 59; - d->m = m; -} - - -/*! - Sets the second to \a s, which must be a valid second, i.e. in the - range 0..59. -*/ - -void TQTimeEdit::setSecond( int s ) -{ - if ( s < 0 ) - s = 0; - if ( s > 59 ) - s = 59; - d->s = s; -} - - -/*! \internal - - Returns the text of section \a sec. - -*/ - -TQString TQTimeEdit::sectionText( int sec ) -{ - sec = d->ed->mapSection( sec ); - - TQString txt; - switch( sec ) { - case 0: - if ( !(d->display & AMPM) || ( d->h < 13 && d->h ) ) { // I wished the day stared at 0:00 for everybody - txt = TQString::number( d->h ); - } else { - if ( d->h ) - txt = TQString::number( d->h - 12 ); - else - txt = "12"; - } - break; - case 1: - txt = TQString::number( d->m ); - break; - case 2: - txt = TQString::number( d->s ); - break; - case 3: - if ( d->h < 12 ) { - if ( lAM ) - txt = *lAM; - else - txt = TQString::tqfromLatin1( "AM" ); - } else { - if ( lPM ) - txt = *lPM; - else - txt = TQString::tqfromLatin1( "PM" ); - } - break; - default: - break; - } - return txt; -} - - -/*! \internal - Returns TRUE if \a h, \a m, and \a s are out of range. - */ - -bool TQTimeEdit::outOfRange( int h, int m, int s ) const -{ - if ( TQTime::isValid( h, m, s ) ) { - TQTime currentTime( h, m, s ); - if ( currentTime > maxValue() || - currentTime < minValue() ) - return TRUE; - else - return FALSE; - } - return TRUE; -} - -/*! \reimp - -*/ - -void TQTimeEdit::addNumber( int sec, int num ) -{ - if ( sec == -1 ) - return; - sec = d->ed->mapSection( sec ); - killTimer( d->timerId ); - bool overwrite = FALSE; - bool accepted = FALSE; - d->typing = TRUE; - TQString txt; - - switch( sec ) { - case 0: - txt = ( d->display & AMPM && d->h > 12 ) ? - TQString::number( d->h - 12 ) : TQString::number( d->h ); - - if ( d->overwrite || txt.length() == 2 ) { - if ( d->display & AMPM && num == 0 ) - break; // Don't process 0 in 12 hour clock mode - if ( d->display & AMPM && d->h > 11 ) - num += 12; - if ( !outOfRange( num, d->m, d->s ) ) { - accepted = TRUE; - d->h = num; - } - } else { - txt += TQString::number( num ); - int temp = txt.toInt(); - - if ( d->display & AMPM ) { - if ( temp == 12 ) { - if ( d->h < 12 ) { - temp = 0; - } - accepted = TRUE; - } else if ( outOfRange( temp + 12, d->m, d->s ) ) { - txt = TQString::number( d->h ); - } else { - if ( d->h > 11 ) { - temp += 12; - } - accepted = TRUE; - } - } else if ( !(d->display & AMPM) && outOfRange( temp, d->m, d->s ) ) { - txt = TQString::number( d->h ); - } else { - accepted = TRUE; - } - - if ( accepted ) - d->h = temp; - - if ( d->adv && txt.length() == 2 ) { - setFocusSection( d->ed->focusSection()+1 ); - overwrite = TRUE; - } - } - break; - - case 1: - txt = TQString::number( d->m ); - if ( d->overwrite || txt.length() == 2 ) { - if ( !outOfRange( d->h, num, d->s ) ) { - accepted = TRUE; - d->m = num; - } - } else { - txt += TQString::number( num ); - int temp = txt.toInt(); - if ( temp > 59 ) - temp = num; - if ( outOfRange( d->h, temp, d->s ) ) - txt = TQString::number( d->m ); - else { - accepted = TRUE; - d->m = temp; - } - if ( d->adv && txt.length() == 2 ) { - setFocusSection( d->ed->focusSection()+1 ); - overwrite = TRUE; - } - } - break; - - case 2: - txt = TQString::number( d->s ); - if ( d->overwrite || txt.length() == 2 ) { - if ( !outOfRange( d->h, d->m, num ) ) { - accepted = TRUE; - d->s = num; - } - } else { - txt += TQString::number( num ); - int temp = txt.toInt(); - if ( temp > 59 ) - temp = num; - if ( outOfRange( d->h, d->m, temp ) ) - txt = TQString::number( d->s ); - else { - accepted = TRUE; - d->s = temp; - } - if ( d->adv && txt.length() == 2 ) { - setFocusSection( d->ed->focusSection()+1 ); - overwrite = TRUE; - } - } - break; - - case 3: - break; - - default: - break; - } - d->changed = !accepted; - if ( accepted ) - emit valueChanged( time() ); - d->overwrite = overwrite; - d->timerId = startTimer( tqApp->doubleClickInterval()*4 ); - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - - -/*! - \internal - - Function which is called whenever the user tries to - remove the first number from \a sec by pressing the backspace key. -*/ - -void TQTimeEdit::removeFirstNumber( int sec ) -{ - if ( sec == -1 ) - return; - sec = d->ed->mapSection( sec ); - TQString txt; - switch( sec ) { - case 0: - txt = TQString::number( d->h ); - break; - case 1: - txt = TQString::number( d->m ); - break; - case 2: - txt = TQString::number( d->s ); - break; - } - txt = txt.mid( 1, txt.length() ) + "0"; - switch( sec ) { - case 0: - d->h = txt.toInt(); - break; - case 1: - d->m = txt.toInt(); - break; - case 2: - d->s = txt.toInt(); - break; - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -/*! \reimp - -*/ -void TQTimeEdit::removeLastNumber( int sec ) -{ - if ( sec == -1 ) - return; - sec = d->ed->mapSection( sec ); - TQString txt; - switch( sec ) { - case 0: - txt = TQString::number( d->h ); - break; - case 1: - txt = TQString::number( d->m ); - break; - case 2: - txt = TQString::number( d->s ); - break; - } - txt = txt.mid( 0, txt.length()-1 ); - switch( sec ) { - case 0: - d->h = txt.toInt(); - break; - case 1: - d->m = txt.toInt(); - break; - case 2: - d->s = txt.toInt(); - break; - } - d->ed->tqrepaint( d->ed->rect(), FALSE ); -} - -/*! \reimp - */ -void TQTimeEdit::resizeEvent( TQResizeEvent * ) -{ - d->controls->resize( width(), height() ); -} - -/*! \reimp -*/ -TQSize TQTimeEdit::tqsizeHint() const -{ - constPolish(); - TQFontMetrics fm( font() ); - int fw = tqstyle().tqpixelMetric( TQStyle::PM_DefaultFrameWidth, this ); - int h = fm.lineSpacing() + 2; - int w = 2 + fm.width( '9' ) * 6 + fm.width( d->ed->separator() ) * 2 + - d->controls->upRect().width() + fw * 4; - if ( d->display & AMPM ) { - if ( lAM ) - w += fm.width( *lAM ) + 4; - else - w += fm.width( TQString::tqfromLatin1( "AM" ) ) + 4; - } - - return TQSize( w, TQMAX(h + fw * 2,20) ).expandedTo( TQApplication::globalStrut() ); -} - -/*! \reimp -*/ -TQSize TQTimeEdit::tqminimumSizeHint() const -{ - return tqsizeHint(); -} - -/*! - \internal - Enables/disables the push buttons according to the min/max time - for this widget. -*/ - -// ### Remove in 4.0? - -void TQTimeEdit::updateButtons() -{ - if ( !isEnabled() ) - return; - - bool upEnabled = time() < maxValue(); - bool downEnabled = time() > minValue(); - - d->controls->setUpEnabled( upEnabled ); - d->controls->setDownEnabled( downEnabled ); -} - - -class TQDateTimeEditPrivate -{ -public: - bool adv; -}; - -/*! - \class TQDateTimeEdit tqdatetimeedit.h - \brief The TQDateTimeEdit class combines a TQDateEdit and TQTimeEdit - widget into a single widget for editing datetimes. - - \ingroup advanced - \ingroup time - \mainclass - - TQDateTimeEdit consists of a TQDateEdit and TQTimeEdit widget placed - side by side and offers the functionality of both. The user can - edit the date and time by using the keyboard or the arrow keys to - increase/decrease date or time values. The Tab key can be used to - move from section to section within the TQDateTimeEdit widget, and - the user can be moved automatically when they complete a section - using setAutoAdvance(). The datetime can be set with - setDateTime(). - - The date format is read from the system's locale settings. It is - set to year, month, day order if that is not possible. See - TQDateEdit::setOrder() to change this. Times appear in the order - hours, minutes, seconds using the 24 hour clock. - - It is recommended that the TQDateTimeEdit is initialised with a - datetime, e.g. - \code - TQDateTimeEdit *dateTimeEdit = new TQDateTimeEdit( TQDateTime::tqcurrentDateTime(), this ); - dateTimeEdit->dateEdit()->setRange( TQDateTime::tqcurrentDate(), - TQDateTime::tqcurrentDate().addDays( 7 ) ); - \endcode - Here we've created a new TQDateTimeEdit set to the current date and - time, and set the date to have a minimum date of now and a maximum - date of a week from now. - - Terminology: A TQDateEdit widget consists of three 'sections', one - each for the year, month and day. Similarly a TQTimeEdit consists - of three sections, one each for the hour, minute and second. The - character that separates each date section is specified with - setDateSeparator(); similarly setTimeSeparator() is used for the - time sections. - - \img datetimewidgets.png Date Time Widgets - - \sa TQDateEdit TQTimeEdit -*/ - -/*! - Constructs an empty datetime edit with parent \a parent and called - \a name. -*/ -TQDateTimeEdit::TQDateTimeEdit( TQWidget * parent, const char * name ) - : TQWidget( parent, name ) -{ - init(); -} - - -/*! - \overload - - Constructs a datetime edit with the initial value \a datetime, - parent \a parent and called \a name. -*/ -TQDateTimeEdit::TQDateTimeEdit( const TQDateTime& datetime, - TQWidget * parent, const char * name ) - : TQWidget( parent, name ) -{ - init(); - setDateTime( datetime ); -} - - - -/*! - Destroys the object and frees any allocated resources. -*/ - -TQDateTimeEdit::~TQDateTimeEdit() -{ - delete d; -} - - -/*! - \reimp - - Intercepts and handles resize events which have special meaning - for the TQDateTimeEdit. -*/ - -void TQDateTimeEdit::resizeEvent( TQResizeEvent * ) -{ - int dw = de->tqsizeHint().width(); - int tw = te->tqsizeHint().width(); - int w = width(); - int h = height(); - int extra = w - ( dw + tw ); - - if ( tw + extra < 0 ) { - dw = w; - } else { - dw += 9 * extra / 16; - } - tw = w - dw; - - de->setGeometry( 0, 0, dw, h ); - te->setGeometry( dw, 0, tw, h ); -} - -/*! \reimp -*/ - -TQSize TQDateTimeEdit::tqminimumSizeHint() const -{ - TQSize dsh = de->tqminimumSizeHint(); - TQSize tsh = te->tqminimumSizeHint(); - return TQSize( dsh.width() + tsh.width(), - TQMAX( dsh.height(), tsh.height() ) ); -} - -/*! \internal - */ - -void TQDateTimeEdit::init() -{ - d = new TQDateTimeEditPrivate(); - de = new TQDateEdit( this, "qt_datetime_dateedit" ); - te = new TQTimeEdit( this, "qt_datetime_timeedit" ); - d->adv = FALSE; - connect( de, TQT_SIGNAL( valueChanged(const TQDate&) ), - this, TQT_SLOT( newValue(const TQDate&) ) ); - connect( te, TQT_SIGNAL( valueChanged(const TQTime&) ), - this, TQT_SLOT( newValue(const TQTime&) ) ); - setFocusProxy( de ); - tqsetSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Fixed ); -} - -/*! \reimp - */ - -TQSize TQDateTimeEdit::tqsizeHint() const -{ - constPolish(); - TQSize dsh = de->tqsizeHint(); - TQSize tsh = te->tqsizeHint(); - return TQSize( dsh.width() + tsh.width(), - TQMAX( dsh.height(), tsh.height() ) ); -} - -/*! - \property TQDateTimeEdit::dateTime - \brief the editor's datetime value - - The datetime edit's datetime which may be an invalid datetime. -*/ - -void TQDateTimeEdit::setDateTime( const TQDateTime & dt ) -{ - if ( dt.isValid() ) { - de->setDate( TQT_TQDATE_OBJECT(dt.date()) ); - te->setTime( TQT_TQTIME_OBJECT(dt.time()) ); - emit valueChanged( dt ); - } -} - -TQDateTime TQDateTimeEdit::dateTime() const -{ - return TQDateTime( de->date(), te->time() ); -} - -/*! - \fn void TQDateTimeEdit::valueChanged( const TQDateTime& datetime ) - - This signal is emitted every time the date or time changes. The \a - datetime argument is the new datetime. -*/ - - -/*! \internal - - Re-emits the value \a d. - */ - -void TQDateTimeEdit::newValue( const TQDate& ) -{ - TQDateTime dt = dateTime(); - emit valueChanged( dt ); -} - -/*! \internal - \overload - Re-emits the value \a t. - */ - -void TQDateTimeEdit::newValue( const TQTime& ) -{ - TQDateTime dt = dateTime(); - emit valueChanged( dt ); -} - - -/*! - Sets the auto advance property of the editor to \a advance. If set - to TRUE, the editor will automatically advance focus to the next - date or time section if the user has completed a section. -*/ - -void TQDateTimeEdit::setAutoAdvance( bool advance ) -{ - de->setAutoAdvance( advance ); - te->setAutoAdvance( advance ); -} - -/*! - Returns TRUE if auto-advance is enabled, otherwise returns FALSE. - - \sa setAutoAdvance() -*/ - -bool TQDateTimeEdit::autoAdvance() const -{ - return de->autoAdvance(); -} - -/*! - \fn TQDateEdit* TQDateTimeEdit::dateEdit() - - Returns the internal widget used for editing the date part of the - datetime. -*/ - -/*! - \fn TQTimeEdit* TQDateTimeEdit::timeEdit() - - Returns the internal widget used for editing the time part of the - datetime. -*/ - -#include "tqdatetimeedit.tqmoc" - -#endif |