21#include "kexidblineedit.h"
22#include "kexidbautofield.h"
25#include <knumvalidator.h>
28#include <tqpopupmenu.h>
31#include <kexiutils/utils.h>
32#include <kexidb/queryschema.h>
33#include <kexidb/fieldvalidator.h>
34#include <kexiutils/utils.h>
40class KexiDBLineEdit_ReadOnlyValidator :
public TQValidator
43 KexiDBLineEdit_ReadOnlyValidator( TQObject * parent )
47 ~KexiDBLineEdit_ReadOnlyValidator() {}
48 virtual State validate( TQString &,
int & )
const {
return Invalid; }
53KexiDBLineEdit::KexiDBLineEdit(TQWidget *parent,
const char *name)
54 : KLineEdit(parent, name)
59 , m_menuExtender(this, this)
60 , m_internalReadOnly(false)
61 , m_slotTextChanged_enabled(true)
63#ifdef USE_KLineEdit_setReadOnly
65 TQPalette p(widget->palette());
66 p.setColor( lighterGrayBackgroundColor(palette()) );
67 widget->setPalette(p);
70 connect(
this, TQ_SIGNAL(textChanged(
const TQString&)),
this, TQ_SLOT(slotTextChanged(
const TQString&)));
73KexiDBLineEdit::~KexiDBLineEdit()
81 KLineEdit::setReadOnly(
true);
83 if (focusPolicy() & TQWidget::TabFocus)
84 setFocusPolicy(TQWidget::ClickFocus);
95 if (add.toString().isEmpty())
98 value = m_origValue.toString() + add.toString();
105 setText(
value.toBool() ?
"1" :
"0" );
108 else if (t == KexiDB::Field::Date) {
109 setText( dateFormatter()->dateToString(
value.toString().isEmpty() ? TQDate() :
value.toDate() ) );
110 setCursorPosition(0);
113 else if (t == KexiDB::Field::Time) {
115 timeFormatter()->timeToString(
117 value.toString().isEmpty() ?
value.toTime() : TQTime(99,0,0)
120 setCursorPosition(0);
123 else if (t == KexiDB::Field::DateTime) {
124 if (
value.toString().isEmpty() ) {
125 setText( TQString() );
129 dateFormatter()->dateToString(
value.toDateTime().date() ) +
" " +
130 timeFormatter()->timeToString(
value.toDateTime().time() )
133 setCursorPosition(0);
139 setText(
m_textFormatter.valueToText(removeOld ? TQVariant() : m_origValue, add.toString()) );
141 setCursorPosition(0);
158 return text().toShort();
161 return text().toInt();
163 return text().toLongLong();
166 return text() ==
"1" ? TQVariant(
true) : TQVariant(
false);
167 case KexiDB::Field::Date:
168 return dateFormatter()->stringToVariant( text() );
169 case KexiDB::Field::Time:
170 return timeFormatter()->stringToVariant( text() );
171 case KexiDB::Field::DateTime:
172 return stringToDateTime(*dateFormatter(), *timeFormatter(), text());
174 return text().toFloat();
176 return text().toDouble();
185void KexiDBLineEdit::slotTextChanged(
const TQString&)
201 if (text().isEmpty())
206 if (t == KexiDB::Field::Date || )
207 return dateFormatter()->isEmpty( text() );
208 else if (t == KexiDB::Field::Time)
209 return timeFormatter()->isEmpty( text() );
210 else if (t == KexiDB::Field::Time)
211 return dateTimeIsEmpty( *dateFormatter(), *timeFormatter(), text() );
215 return text().isEmpty();
230 if (t == KexiDB::Field::Date)
231 return dateFormatter()->stringToVariant( text() ).isValid();
232 else if (t == KexiDB::Field::Time)
233 return timeFormatter()->stringToVariant( text() ).isValid();
234 else if (t == KexiDB::Field::DateTime)
235 return dateTimeIsValid( *dateFormatter(), *timeFormatter(), text() );
247void KexiDBLineEdit::setReadOnly(
bool readOnly )
249#ifdef USE_KLineEdit_setReadOnly
251 return KLineEdit::setReadOnly( readOnly );
268TQPopupMenu * KexiDBLineEdit::createPopupMenu()
270 TQPopupMenu *contextMenu = KLineEdit::createPopupMenu();
283 return cursorPosition()==0;
288 return cursorPosition()==(int)text().length();
310 if (t==KexiDB::Field::Date) {
312 setInputMask( dateFormatter()->inputMask() );
314 else if (t==KexiDB::Field::Time) {
317 setInputMask( timeFormatter()->inputMask() );
319 else if (t==KexiDB::Field::DateTime) {
321 dateTimeInputMask( *dateFormatter(), *timeFormatter() ) );
325 if (!inputMask.isEmpty())
326 setInputMask( inputMask );
337void KexiDBLineEdit::paintEvent ( TQPaintEvent *pe )
339 KLineEdit::paintEvent( pe );
346 const bool ret = KLineEdit::event( e );
348 if (e->type()==TQEvent::FocusOut) {
349 TQFocusEvent *fe =
static_cast<TQFocusEvent*
>(e);
351 if (fe->reason()==TQFocusEvent::Tab || fe->reason()==TQFocusEvent::Backtab) {
354 setCursorPosition(0);
362 return KexiDBAutoField::Top == autoField->labelPosition();
367 if (actionName==
"edit_copy") {
370 else if (actionName==
"edit_paste") {
373 else if (actionName==
"edit_cut") {
385 setFont(params->font);
386 TQPalette pal(palette());
387 pal.setColor(TQPalette::Active, TQColorGroup::Text, params->textColor);
398 KLineEdit::end(
false);
403 KLineEdit::home(
false);
408 KLineEdit::selectAll();
417#include "kexidblineedit.moc"
virtual void setDisplayDefaultValue(TQWidget *widget, bool displayDefaultValue)
virtual bool cursorAtEnd()
TQGuardedPtr< const TQValidator > m_readOnlyValidator
Used for read only flag to disable editing.
virtual void setColumnInfo(KexiDB::QueryColumnInfo *cinfo)
virtual TQVariant value()
virtual bool keyPressed(TQKeyEvent *ke)
virtual bool event(TQEvent *)
virtual void selectAll()
Implemented for KexiDataItemInterface.
virtual void clear()
clears item's data, so the data will contain NULL data
virtual void moveCursorToEnd()
Implemented for KexiDataItemInterface.
bool m_slotTextChanged_enabled
Used in slotTextChanged().
virtual void moveCursorToStart()
Implemented for KexiDataItemInterface.
virtual TQWidget * widget()
virtual void undo()
Reimplemented, so "undo" means the same as "cancelEditor" action.
virtual bool appendStretchRequired(KexiDBAutoField *autoField) const
Implemented for KexiSubwidgetInterface.
virtual bool valueIsEmpty()
virtual bool cursorAtStart()
virtual bool valueIsValid()
TQGuardedPtr< const TQValidator > m_readWriteValidator
Used to remember the previous validator used forf r/w mode, after setting the read only flag.
KexiDBWidgetContextMenuExtender m_menuExtender
Used for extending context menu.
virtual void setValueInternal(const TQVariant &add, bool removeOld)
virtual bool valueIsNull()
virtual bool isReadOnly() const
KexiTextFormatter m_textFormatter
Used to format text.
virtual void handleAction(const TQString &actionName)
virtual void setInvalidState(const TQString &displayText)
An interface providing common text editor's functionality.
void setColumnInfo(KexiDB::QueryColumnInfo *cinfo, TQWidget *w)
Called from KexiFormDataItemInterface::setColumnInfo(KexiDB::QueryColumnInfo* cinfo) implementation.
void event(TQEvent *e, TQWidget *w, bool textIsEmpty)
Called from event( TQEvent * e ) method of the data aware widget.
void paint(TQFrame *w, TQPainter *p, bool textIsEmpty, int alignment, bool hasFocus)
Called from paintEvent( TQPaintEvent *pe ) method of the data aware widget.
A validator for KexiDB data types.
Helper class that assigns additional information for the column in a query.
virtual void signalValueChanged()
Stores set of display parameters used in utility functions.