22 #include "krichtexteditor.h"
24 #include "kabstractmarkupbuilder.h"
25 #include "kplaintextmarkupbuilder.h"
26 #include "ktexthtmlbuilder.h"
27 #include "bbcodebuilder.h"
28 #include "mediawikimarkupbuilder.h"
31 #include "kmarkupdirector.h"
33 #include <QTextDocument>
34 #include <QDockWidget>
36 #include <QPushButton>
38 #include <QtCore/QTextStream>
40 #include <kapplication.h>
41 #include <kactioncollection.h>
42 #include <kstandardaction.h>
43 #include <kfiledialog.h>
44 #include <KRichTextWidget>
45 #include <kmessagebox.h>
46 #include <kio/netaccess.h>
47 #include <ksavefile.h>
48 #include <kstatusbar.h>
53 KRichTextEditor::KRichTextEditor() : KXmlGuiWindow()
57 textArea =
new KRichTextWidget(
this);
60 QPushButton *b =
new QPushButton(i18n(
"Update!"),
this);
61 connect(b, SIGNAL(pressed()), SLOT(updateDockedWidgets()));
63 QVBoxLayout *l =
new QVBoxLayout();
64 QWidget *w =
new QWidget();
65 l->addWidget(textArea);
71 textArea->createActions(actionCollection());
74 statusBar()->insertItem(QString(), 0, 1);
75 statusBar()->setItemAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
77 connect(textArea, SIGNAL(cursorPositionChanged()),
78 SLOT(cursorPositionChanged()));
80 QDockWidget *dockText =
new QDockWidget(QString(
"HTML"),
this);
81 dockText->setObjectName(
"HTML");
82 dockText->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
83 kte =
new KTextEdit(dockText);
84 dockText->setWidget(kte);
85 addDockWidget(Qt::RightDockWidgetArea, dockText);
87 QDockWidget *dockHtml =
new QDockWidget(QString(
"Re-Rendered"),
this);
88 dockHtml->setObjectName(
"Re-Rendered");
89 dockHtml->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
90 krte =
new KTextEdit(dockHtml);
91 krte->document()->setDefaultStyleSheet(
"p {margin-top:0px;margin-bottom:0px;}ul{margin-top:12px;margin-bottom:12px;} ");
92 dockHtml->setWidget(krte);
93 addDockWidget(Qt::RightDockWidgetArea, dockHtml);
95 QDockWidget *dockPlain =
new QDockWidget(QString(
"Plain"),
this);
96 dockPlain->setObjectName(
"Plain");
97 dockPlain->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
98 kpte =
new KTextEdit(dockPlain);
99 dockPlain->setWidget(kpte);
100 addDockWidget(Qt::RightDockWidgetArea, dockPlain);
102 QDockWidget *dockBB =
new QDockWidget(QString(
"BBCode"),
this);
103 dockBB->setObjectName(
"BBCode");
104 dockBB->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
105 kbbte =
new KTextEdit(dockBB);
106 dockBB->setWidget(kbbte);
107 addDockWidget(Qt::RightDockWidgetArea, dockBB);
109 QDockWidget *dockMW =
new QDockWidget(QString(
"MediaWiki"),
this);
110 dockMW->setObjectName(
"MediaWiki");
111 dockMW->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
112 kmwte =
new KTextEdit(dockMW);
113 dockMW->setWidget(kmwte);
114 addDockWidget(Qt::RightDockWidgetArea, dockMW);
117 void KRichTextEditor::updateDockedWidgets()
128 kte->setPlainText(t);
153 KRichTextEditor::~KRichTextEditor()
157 void KRichTextEditor::setupActions()
159 KStandardAction::quit(kapp, SLOT(quit()),
162 KStandardAction::open(
this, SLOT(openFile()),
165 KStandardAction::save(
this, SLOT(saveFile()),
168 KStandardAction::saveAs(
this, SLOT(saveFileAs()),
171 KStandardAction::openNew(
this, SLOT(newFile()),
175 void KRichTextEditor::cursorPositionChanged()
178 if (textArea->textCursor().charFormat().isAnchor()) {
179 QString text = textArea->currentLinkText();
180 QString url = textArea->currentLinkUrl();
181 statusBar()->changeItem(text +
" -> " + url, 0);
183 statusBar()->changeItem(QString(), 0);
187 void KRichTextEditor::newFile()
194 void KRichTextEditor::saveFileAs(
const QString &outputFileName)
196 KSaveFile file(outputFileName);
199 QByteArray outputByteArray;
200 outputByteArray.append(textArea->toHtml().toUtf8());
201 file.write(outputByteArray);
205 fileName = outputFileName;
208 void KRichTextEditor::saveFileAs()
210 saveFileAs(KFileDialog::getSaveFileName());
213 void KRichTextEditor::saveFile()
215 if (!fileName.isEmpty()) {
216 saveFileAs(fileName);
222 void KRichTextEditor::openFile()
224 QString fileNameFromDialog = KFileDialog::getOpenFileName();
225 if (fileNameFromDialog.isEmpty()) {
230 if (KIO::NetAccess::download(fileNameFromDialog, tmpFile,
233 file.open(QIODevice::ReadOnly);
234 textArea->setTextOrHtml(QTextStream(&file).readAll());
235 fileName = fileNameFromDialog;
237 KIO::NetAccess::removeTempFile(tmpFile);
239 KMessageBox::error(
this,
240 KIO::NetAccess::lastErrorString());