2
This program is free software; you can redistribute it and/or modify
3
it under the terms of the GNU General Public License as published by
4
the Free Software Foundation; either version 2 of the License, or
5
(at your option) any later version.
9
Copyright (C) 2006 Dario Abatianni <eisfuchs@tigress.com>
12
#include "multilineedit.h"
13
#include "application.h"
17
#include <QVBoxLayout>
20
QString MultilineEdit::returnText; // static
22
MultilineEdit::MultilineEdit(QWidget* parent, const QString& text) :
25
setButtons( KDialog::User1 | KDialog::User2 | KDialog::Ok | KDialog::Cancel );
26
setButtonText( KDialog::User1, i18n("Add &Quotation Indicators") );
27
setButtonText( KDialog::User2, i18n("Remove Newlines") );
28
setDefaultButton( KDialog::Ok );
29
setCaption( i18n("Edit Multiline Paste") );
32
QVBoxLayout* dialogLayout=new QVBoxLayout(mainWidget());
33
dialogLayout->setSpacing(spacingHint());
34
// add the text editor
35
textEditor=new KTextEdit(mainWidget());
36
connect(textEditor, SIGNAL(textChanged()), this, SLOT(dislayNonprintingChars()));
37
textEditor->setPlainText(text);
41
dialogLayout->addWidget(textEditor);
43
setInitialSize(Preferences::self()->multilineEditSize());
45
connect( this, SIGNAL( okClicked() ), this, SLOT( slotOk() ) );
46
connect( this, SIGNAL( cancelClicked() ), this, SLOT( slotCancel() ) );
47
connect( this, SIGNAL( user1Clicked() ), this, SLOT( slotUser1() ) );
48
connect( this, SIGNAL( user2Clicked() ), this, SLOT( slotUser2() ) );
51
MultilineEdit::~MultilineEdit()
53
Preferences::self()->setMultilineEditSize(size());
56
void MultilineEdit::slotCancel()
62
void MultilineEdit::slotOk()
64
removeNonprintingChars();
65
returnText=textEditor->toPlainText();
69
void MultilineEdit::slotUser1()
71
QStringList lines=textEditor->toPlainText().split('\n', QString::KeepEmptyParts);
72
for( QStringList::iterator it=lines.begin() ; it!=lines.end() ; ++it )
74
textEditor->setText(lines.join("\n"));
77
void MultilineEdit::slotUser2()
79
QString pattern("\n");
80
QRegExp searchFor(pattern);
81
searchFor.setPatternSyntax(QRegExp::FixedString);
82
removeNonprintingChars();
83
QString line=textEditor->toPlainText();
84
int index=line.indexOf(searchFor);
85
int patLen = pattern.length();
89
int length,nextLength;
92
if (index!=0) before = line.at(index-1);
93
if (line.length() > length) after = line.at(length);
95
if (before.isSpace() || after.isSpace())
97
line.replace(index, patLen, QString());
102
line.replace(index, patLen, " ");
103
nextLength = index+1;
105
index=line.indexOf(searchFor,nextLength);
107
textEditor->setText(line);
108
dislayNonprintingChars();
111
QString MultilineEdit::edit(QWidget* parent, const QString& text)
113
MultilineEdit dlg(parent,text);
114
return dlg.exec() ? returnText : QString();
117
void MultilineEdit::dislayNonprintingChars()
119
textEditor->blockSignals(true);
121
const int position = textEditor->textCursor().position();
123
removeNonprintingChars();
125
const QString html = QString("<html>" + Qt::escape(textEditor->toPlainText()) + "</html>")
126
.replace(' ', QString::fromUtf8("<span style=\"color:blue\">·</span>"))
127
.replace('\n', QString::fromUtf8("<span style=\"color:blue\">¶</span><br/>"))
128
.replace('\t', QString::fromUtf8("<span style=\"color:blue\">»</span>"))
130
textEditor->setHtml(html);
132
QTextCursor cursor = textEditor->textCursor();
133
cursor.setPosition(position);
134
textEditor->setTextCursor(cursor);
136
textEditor->blockSignals(false);
139
void MultilineEdit::removeNonprintingChars()
141
const bool blockSignals = textEditor->signalsBlocked();
142
textEditor->blockSignals(true);
143
QString text = textEditor->toPlainText();
145
.remove(QString::fromUtf8("¶"))
146
.replace(QString::fromUtf8("»"), "\t")
147
.replace(QString::fromUtf8("·"), " ")
149
textEditor->setPlainText(text);
150
textEditor->blockSignals(blockSignals);
153
#include "multilineedit.moc"