2
* chateditproxy.cpp - abstraction to change ChatEdit type in runtime
3
* Copyright (C) 2007 Michail Pishchagin
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License
7
* as published by the Free Software Foundation; either version 2
8
* of the License, or (at your option) any later version.
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
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this library; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
#include "chateditproxy.h"
23
#include <QVBoxLayout>
26
#include "psioptions.h"
29
ChatEditProxy::ChatEditProxy(QWidget* parent)
31
, lineEditEnabled_(false)
35
layout_ = new QVBoxLayout(this);
36
layout_->setMargin(0);
37
layout_->setSpacing(0);
39
connect(PsiOptions::instance(), SIGNAL(optionChanged(const QString&)), SLOT(optionsChanged()));
47
* If \a enable is true, then the LineEdit is used as internal
48
* QTextEdit. Updates internal layout if necessary.
50
void ChatEditProxy::setLineEditEnabled(bool enable)
52
if (lineEditEnabled_ == enable)
55
lineEditEnabled_ = enable;
60
* Creates new QTextEdit basing on ChatEditProxy's properties.
62
ChatEdit* ChatEditProxy::createTextEdit()
64
if (lineEditEnabled())
65
return new LineEdit(this);
66
return new ChatEdit(this);
70
* Moves the QTextDocument and QTextCursor data from \a oldTextEdit
73
* NB: Make sure that all QSyntaxHighlighters are detached prior to calling
76
void ChatEditProxy::moveData(QTextEdit* newTextEdit, QTextEdit* oldTextEdit) const
78
QTextDocument* doc = oldTextEdit->document();
79
QTextCursor cursor = oldTextEdit->textCursor();
81
doc->setParent(newTextEdit);
82
oldTextEdit->setDocument(0);
84
newTextEdit->setDocument(doc);
85
newTextEdit->setTextCursor(cursor);
89
* Creates new QTextEdit and moves data to it from the old one.
90
* Text, selection and cursor position are left intact.
92
void ChatEditProxy::updateLayout()
94
ChatEdit* newEdit = createTextEdit();
97
// all syntaxhighlighters should be removed while we move
98
// the documents around, and should be reattached afterwards
99
textEdit_->setCheckSpelling(false);
100
newEdit->setCheckSpelling(false);
102
moveData(newEdit, textEdit_);
104
newEdit->setCheckSpelling(ChatEdit::checkSpellingGloballyEnabled());
109
layout_->addWidget(textEdit_);
110
emit textEditCreated(textEdit_);
114
* Update ChatEdit widget according to current options.
115
* FIXME: When option.chatLineEdit finally makes it to PsiOptions, make this slot
118
void ChatEditProxy::optionsChanged()
120
setLineEditEnabled(option.chatLineEdit);