kexidbtextedit.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2005 Cedric Pasteur <cedric.pasteur@free.fr>
3 Copyright (C) 2004-2006 Jaroslaw Staniek <js@iidea.pl>
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this program; see the file COPYING. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19*/
20
21#include "kexidbtextedit.h"
22#include "kexidblineedit.h"
23#include <kexidb/queryschema.h>
24
25#include <tdeapplication.h>
26#include <tdestdaccel.h>
27#include <kdebug.h>
28
29#include <tqpainter.h>
30
31KexiDBTextEdit::KexiDBTextEdit(TQWidget *parent, const char *name)
32 : KTextEdit(parent, name)
35 , m_menuExtender(this, this)
36 , m_slotTextChanged_enabled(true)
37{
38 connect(this, TQ_SIGNAL(textChanged()), this, TQ_SLOT(slotTextChanged()));
39 installEventFilter(this);
40}
41
42KexiDBTextEdit::~KexiDBTextEdit()
43{
44}
45
46void KexiDBTextEdit::setInvalidState( const TQString& displayText )
47{
48 setReadOnly(true);
50 if (focusPolicy() & TQWidget::TabFocus)
51 setFocusPolicy(TQWidget::ClickFocus);
52 KTextEdit::setText(displayText);
53}
54
55void KexiDBTextEdit::setValueInternal(const TQVariant& add, bool removeOld)
56{
57 if (m_columnInfo && m_columnInfo->field->type()==KexiDB::Field::Boolean) {
59 KTextEdit::setText( add.toBool() ? "1" : "0" );
60 }
61 else {
62 if (removeOld)
63 KTextEdit::setText( add.toString() );
64 else
65 KTextEdit::setText( m_origValue.toString() + add.toString() );
66 }
67}
68
70{
71 return text();
72}
73
74void KexiDBTextEdit::slotTextChanged()
75{
77 return;
79}
80
82{
83 return text().isNull();
84}
85
87{
88 return text().isEmpty();
89}
90
92{
93 return KTextEdit::isReadOnly();
94}
95
96void KexiDBTextEdit::setReadOnly( bool readOnly )
97{
98 KTextEdit::setReadOnly( readOnly );
99 TQPalette p = palette();
100 TQColor c(readOnly ? lighterGrayBackgroundColor(kapp->palette()) : p.color(TQPalette::Normal, TQColorGroup::Base));
101 setPaper( c );
102 p.setColor(TQColorGroup::Base, c);
103 p.setColor(TQColorGroup::Background, c);
104 setPalette( p );
105}
106
107void KexiDBTextEdit::setText( const TQString & text, const TQString & context )
108{
109 KTextEdit::setText(text, context);
110}
111
113{
114 return this;
115}
116
118{
119 int para, index;
120 getCursorPosition ( &para, &index );
121 return para==0 && index==0;
122}
123
125{
126 int para, index;
127 getCursorPosition ( &para, &index );
128 return (paragraphs()-1)==para && (paragraphLength(paragraphs()-1)-1)==index;
129}
130
132{
133 setText(TQString(), TQString());
134}
135
137{
139 if (!cinfo)
140 return;
142}
143
144void KexiDBTextEdit::paintEvent ( TQPaintEvent *pe )
145{
146 KTextEdit::paintEvent( pe );
147 TQPainter p(this);
148 KexiDBTextWidgetInterface::paint( this, &p, text().isEmpty(), alignment(), hasFocus() );
149}
150
151TQPopupMenu * KexiDBTextEdit::createPopupMenu(const TQPoint & pos)
152{
153 TQPopupMenu *contextMenu = KTextEdit::createPopupMenu(pos);
154 m_menuExtender.createTitle(contextMenu);
155 return contextMenu;
156}
157
159{
160 cancelEditor();
161}
162
163void KexiDBTextEdit::setDisplayDefaultValue(TQWidget* widget, bool displayDefaultValue)
164{
166 // initialize display parameters for default / entered value
169 TQPalette pal(palette());
170 pal.setColor(TQPalette::Active, TQColorGroup::Text, params->textColor);
171 setPalette(pal);
172 setFont(params->font);
174/* m_slotTextChanged_enabled = false;
175 //for rich text...
176 const TQString origText( text() );
177 KTextEdit::setText(TQString());
178 setCurrentFont(params->font);
179 setColor(params->textColor);
180 KTextEdit::setText(origText);
181 m_slotTextChanged_enabled = true;*/
182}
183
185{
186 KTextEdit::setCursorPosition(paragraphs()-1, paragraphLength( paragraphs()-1 ));
187}
188
190{
191 KTextEdit::setCursorPosition(0 /*para*/, 0 /*index*/);
192}
193
195{
196 KTextEdit::selectAll();
197}
198
199void KexiDBTextEdit::keyPressEvent( TQKeyEvent *ke )
200{
201 // for instance, Windows uses Ctrl+Tab for moving between tabs, so do not steal this shortcut
202 if (TDEStdAccel::tabNext().contains( KKey(ke) ) || TDEStdAccel::tabPrev().contains( KKey(ke) )) {
203 ke->ignore();
204 return;
205 }
206 KTextEdit::keyPressEvent(ke);
207}
208
209#include "kexidbtextedit.moc"
virtual void setDisplayDefaultValue(TQWidget *widget, bool displayDefaultValue)
virtual void setColumnInfo(KexiDB::QueryColumnInfo *cinfo)
virtual TQVariant value()
virtual void keyPressEvent(TQKeyEvent *ke)
Windows uses Ctrl+Tab for moving between tabs, so do not steal this shortcut.
bool m_slotTextChanged_enabled
Used to disable slotTextChanged()
virtual bool valueIsNull()
virtual TQWidget * widget()
virtual void undo()
Reimplemented, so "undo" means the same as "cancelEditor" action.
virtual bool cursorAtStart()
virtual bool isReadOnly() const
virtual void moveCursorToEnd()
Implemented for KexiDataItemInterface.
virtual void setInvalidState(const TQString &displayText)
virtual bool cursorAtEnd()
virtual void clear()
clears item's data, so the data will contain NULL data
virtual void selectAll()
Implemented for KexiDataItemInterface.
virtual void setValueInternal(const TQVariant &add, bool removeOld)
KexiDBWidgetContextMenuExtender m_menuExtender
Used for extending context menu.
virtual void moveCursorToStart()
Implemented for KexiDataItemInterface.
virtual bool valueIsEmpty()
An interface providing common text editor's functionality.
void setColumnInfo(KexiDB::QueryColumnInfo *cinfo, TQWidget *w)
Called from KexiFormDataItemInterface::setColumnInfo(KexiDB::QueryColumnInfo* cinfo) implementation.
void paint(TQFrame *w, TQPainter *p, bool textIsEmpty, int alignment, bool hasFocus)
Called from paintEvent( TQPaintEvent *pe ) method of the data aware widget.
void createTitle(TQPopupMenu *menu)
Creates title for context menu menu.
Type type() const
Definition field.cpp:134
Helper class that assigns additional information for the column in a query.
Definition queryschema.h:49
Stores set of display parameters used in utility functions.
An interface for declaring form widgets to be data-aware.
virtual void setColumnInfo(KexiDB::QueryColumnInfo *cinfo)
virtual void setDisplayDefaultValue(TQWidget *widget, bool displayDefaultValue)
KexiDisplayUtils::DisplayParameters * m_displayParametersForEnteredValue
used in setDisplayDefaultValue()
KexiDisplayUtils::DisplayParameters * m_displayParametersForDefaultValue
used in setDisplayDefaultValue()