21#include "kexidbdatetimeedit.h"
23#include <tqtoolbutton.h>
25#include <tdepopupmenu.h>
26#include <kdatepicker.h>
28#include <kexiutils/utils.h>
30KexiDBDateTimeEdit::KexiDBDateTimeEdit(
const TQDateTime &datetime, TQWidget *parent,
const char *name)
33 m_invalidState =
false;
37 m_dateEdit =
new TQDateEdit(datetime.date(),
this);
38 m_dateEdit->setAutoAdvance(
true);
39 m_dateEdit->setSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::MinimumExpanding);
41 connect(m_dateEdit, TQ_SIGNAL(valueChanged(
const TQDate&)),
this, TQ_SLOT(slotValueChanged()));
42 connect(m_dateEdit, TQ_SIGNAL(valueChanged(
const TQDate&)),
this, TQ_SIGNAL(dateTimeChanged()));
44 TQToolButton* btn =
new TQToolButton(
this);
46 btn->setFixedWidth( TQFontMetrics(btn->font()).width(
" ... ") );
47 btn->setPopupDelay(1);
49 m_timeEdit =
new TQTimeEdit(datetime.time(),
this);;
50 m_timeEdit->setAutoAdvance(
true);
51 m_timeEdit->setSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::MinimumExpanding);
52 connect(m_timeEdit, TQ_SIGNAL(valueChanged(
const TQTime&)),
this, TQ_SLOT(slotValueChanged()));
53 connect(m_timeEdit, TQ_SIGNAL(valueChanged(
const TQTime&)),
this, TQ_SIGNAL(dateTimeChanged()));
55#ifdef TQDateTimeEditor_HACK
62 m_datePickerPopupMenu =
new TDEPopupMenu(0,
"date_popup");
63 connect(m_datePickerPopupMenu, TQ_SIGNAL(aboutToShow()),
this, TQ_SLOT(slotShowDatePicker()));
64 m_datePicker =
new KDatePicker(m_datePickerPopupMenu, TQDate::currentDate(), 0);
68 connect(dt, TQ_SIGNAL(tableClicked()),
this, TQ_SLOT(acceptDate()));
69 m_datePicker->setCloseButton(
true);
70 m_datePicker->installEventFilter(
this);
71 m_datePickerPopupMenu->insertItem(m_datePicker);
72 btn->setPopup(m_datePickerPopupMenu);
74 TQHBoxLayout* layout =
new TQHBoxLayout(
this);
75 layout->addWidget(m_dateEdit, 0);
76 layout->addWidget(btn, 0);
77 layout->addWidget(m_timeEdit, 0);
80 setFocusProxy(m_dateEdit);
83KexiDBDateTimeEdit::~KexiDBDateTimeEdit()
91 m_invalidState =
true;
93 if (focusPolicy() & TabFocus)
94 setFocusPolicy(TQWidget::ClickFocus);
98KexiDBDateTimeEdit::setEnabled(
bool enabled)
101 if(enabled && m_invalidState)
103 TQWidget::setEnabled(enabled);
108 m_dateEdit->setDate(m_origValue.toDate());
109 m_timeEdit->setTime(m_origValue.toTime());
115 return TQDateTime(m_dateEdit->date(), m_timeEdit->time());
120 return !m_dateEdit->date().isValid() || m_dateEdit->date().isNull()
121 || !m_timeEdit->time().isValid() || m_timeEdit->time().isNull();
136void KexiDBDateTimeEdit::setReadOnly(
bool set)
149#ifdef TQDateTimeEditor_HACK
150 return m_dte_date && m_dateEdit->hasFocus() && m_dte_date->focusSection()==0;
158#ifdef TQDateTimeEditor_HACK
159 return m_dte_time && m_timeEdit->hasFocus()
160 && m_dte_time->focusSection()==int(m_dte_time->sectionCount()-1);
168 m_dateEdit->setDate(TQDate());
169 m_timeEdit->setTime(TQTime());
174KexiDBDateTimeEdit::slotValueChanged()
180KexiDBDateTimeEdit::slotShowDatePicker()
182 TQDate date = m_dateEdit->date();
184 m_datePicker->setDate(date);
185 m_datePicker->setFocus();
186 m_datePicker->show();
187 m_datePicker->setFocus();
191KexiDBDateTimeEdit::acceptDate()
193 m_dateEdit->setDate(m_datePicker->date());
194 m_datePickerPopupMenu->hide();
198KexiDBDateTimeEdit::eventFilter(TQObject *o, TQEvent *e)
200 if (o != m_datePicker)
205 m_datePickerPopupMenu->hide();
207 case TQEvent::KeyPress:
208 case TQEvent::KeyRelease: {
209 TQKeyEvent *ke = (TQKeyEvent *)e;
210 if (ke->key()==TQt::Key_Enter || ke->key()==TQt::Key_Return) {
215 else if (ke->key()==TQt::Key_Escape) {
217 m_datePickerPopupMenu->hide();
221 m_datePickerPopupMenu->setFocus();
231KexiDBDateTimeEdit::dateTime()
const
233 return TQDateTime(m_dateEdit->date(), m_timeEdit->time());
237KexiDBDateTimeEdit::setDateTime(
const TQDateTime &dt)
239 m_dateEdit->setDate(dt.date());
240 m_timeEdit->setTime(dt.time());
243#include "kexidbdatetimeedit.moc"
virtual TQWidget * widget()
virtual void setInvalidState(const TQString &displayText)
virtual bool valueIsEmpty()
virtual bool cursorAtStart()
virtual bool valueIsNull()
virtual TQVariant value()
virtual void setValueInternal(const TQVariant &add, bool removeOld)
virtual bool cursorAtEnd()
virtual void clear()
clears item's data, so the data will contain NULL data
virtual bool isReadOnly() const
type * findFirstChild(TQObject *o, const char *className, const char *objName=0)