kpimtextedit/richtextbuilders
krichtexteditor.cpp
00001 00022 #include "krichtexteditor.h" 00023 00024 #include "kabstractmarkupbuilder.h" 00025 #include "kplaintextmarkupbuilder.h" 00026 #include "ktexthtmlbuilder.h" 00027 #include "bbcodebuilder.h" 00028 #include "mediawikimarkupbuilder.h" 00029 00030 00031 #include "kmarkupdirector.h" 00032 00033 #include <QTextDocument> 00034 #include <QDockWidget> 00035 #include <QLayout> 00036 #include <QPushButton> 00037 00038 #include <QtCore/QTextStream> 00039 00040 #include <kapplication.h> 00041 #include <kactioncollection.h> 00042 #include <kstandardaction.h> 00043 #include <kfiledialog.h> 00044 #include <KRichTextWidget> 00045 #include <kmessagebox.h> 00046 #include <kio/netaccess.h> 00047 #include <ksavefile.h> 00048 #include <kstatusbar.h> 00049 #include <klocale.h> 00050 #include <kdebug.h> 00051 00052 00053 KRichTextEditor::KRichTextEditor() : KXmlGuiWindow() 00054 { 00055 setupActions(); 00056 00057 textArea = new KRichTextWidget(this); 00058 00059 00060 QPushButton *b = new QPushButton(i18n("Update!"), this); 00061 connect(b, SIGNAL(pressed()), SLOT(updateDockedWidgets())); 00062 00063 QVBoxLayout *l = new QVBoxLayout(); 00064 QWidget *w = new QWidget(); 00065 l->addWidget(textArea); 00066 l->addWidget(b); 00067 w->setLayout(l); 00068 00069 setCentralWidget(w); 00070 00071 textArea->createActions(actionCollection()); 00072 setupGUI(); 00073 00074 statusBar()->insertItem(QString(), 0, 1); 00075 statusBar()->setItemAlignment(0, Qt::AlignLeft | Qt::AlignVCenter); 00076 00077 connect(textArea, SIGNAL(cursorPositionChanged()), 00078 SLOT(cursorPositionChanged())); 00079 00080 QDockWidget *dockText = new QDockWidget(QString("HTML"), this); 00081 dockText->setObjectName("HTML"); 00082 dockText->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 00083 kte = new KTextEdit(dockText); 00084 dockText->setWidget(kte); 00085 addDockWidget(Qt::RightDockWidgetArea, dockText); 00086 00087 QDockWidget *dockHtml = new QDockWidget(QString("Re-Rendered"), this); 00088 dockHtml->setObjectName("Re-Rendered"); 00089 dockHtml->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 00090 krte = new KTextEdit(dockHtml); 00091 krte->document()->setDefaultStyleSheet("p {margin-top:0px;margin-bottom:0px;}ul{margin-top:12px;margin-bottom:12px;} "); // ####################### 00092 dockHtml->setWidget(krte); 00093 addDockWidget(Qt::RightDockWidgetArea, dockHtml); 00094 00095 QDockWidget *dockPlain = new QDockWidget(QString("Plain"), this); 00096 dockPlain->setObjectName("Plain"); 00097 dockPlain->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 00098 kpte = new KTextEdit(dockPlain); 00099 dockPlain->setWidget(kpte); 00100 addDockWidget(Qt::RightDockWidgetArea, dockPlain); 00101 00102 QDockWidget *dockBB = new QDockWidget(QString("BBCode"), this); 00103 dockBB->setObjectName("BBCode"); 00104 dockBB->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 00105 kbbte = new KTextEdit(dockBB); 00106 dockBB->setWidget(kbbte); 00107 addDockWidget(Qt::RightDockWidgetArea, dockBB); 00108 00109 QDockWidget *dockMW = new QDockWidget(QString("MediaWiki"), this); 00110 dockMW->setObjectName("MediaWiki"); 00111 dockMW->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 00112 kmwte = new KTextEdit(dockMW); 00113 dockMW->setWidget(kmwte); 00114 addDockWidget(Qt::RightDockWidgetArea, dockMW); 00115 } 00116 00117 void KRichTextEditor::updateDockedWidgets() 00118 { 00119 KTextHTMLBuilder *hb = new KTextHTMLBuilder(); 00120 00121 KMarkupDirector *hmd = new KMarkupDirector(hb); 00122 hmd->constructContent(textArea->document()); 00123 00124 QString t = hb->getResult(); 00125 00126 kDebug() << t; 00127 00128 kte->setPlainText(t); 00129 krte->setHtml(t); 00130 00131 KPlainTextMarkupBuilder *pb = new KPlainTextMarkupBuilder(); 00132 00133 KMarkupDirector *pmd = new KMarkupDirector(pb); 00134 pmd->constructContent(textArea->document()); 00135 00136 kpte->setPlainText(pb->getResult()); 00137 00138 BBCodeBuilder *bbb = new BBCodeBuilder(); 00139 00140 KMarkupDirector *bbmd = new KMarkupDirector(bbb); 00141 bbmd->constructContent(textArea->document()); 00142 00143 kbbte->setPlainText(bbb->getResult()); 00144 00145 MediaWikiMarkupBuilder *mwb = new MediaWikiMarkupBuilder(); 00146 00147 KMarkupDirector *mwmd = new KMarkupDirector(mwb); 00148 mwmd->constructContent(textArea->document()); 00149 00150 kmwte->setPlainText(mwb->getResult()); 00151 } 00152 00153 KRichTextEditor::~KRichTextEditor() 00154 { 00155 } 00156 00157 void KRichTextEditor::setupActions() 00158 { 00159 KStandardAction::quit(kapp, SLOT(quit()), 00160 actionCollection()); 00161 00162 KStandardAction::open(this, SLOT(openFile()), 00163 actionCollection()); 00164 00165 KStandardAction::save(this, SLOT(saveFile()), 00166 actionCollection()); 00167 00168 KStandardAction::saveAs(this, SLOT(saveFileAs()), 00169 actionCollection()); 00170 00171 KStandardAction::openNew(this, SLOT(newFile()), 00172 actionCollection()); 00173 } 00174 00175 void KRichTextEditor::cursorPositionChanged() 00176 { 00177 // Show link target in status bar 00178 if (textArea->textCursor().charFormat().isAnchor()) { 00179 QString text = textArea->currentLinkText(); 00180 QString url = textArea->currentLinkUrl(); 00181 statusBar()->changeItem(text + " -> " + url, 0); 00182 } else { 00183 statusBar()->changeItem(QString(), 0); 00184 } 00185 } 00186 00187 void KRichTextEditor::newFile() 00188 { 00189 //maybeSave 00190 fileName.clear(); 00191 textArea->clear(); 00192 } 00193 00194 void KRichTextEditor::saveFileAs(const QString &outputFileName) 00195 { 00196 KSaveFile file(outputFileName); 00197 file.open(); 00198 00199 QByteArray outputByteArray; 00200 outputByteArray.append(textArea->toHtml().toUtf8()); 00201 file.write(outputByteArray); 00202 file.finalize(); 00203 file.close(); 00204 00205 fileName = outputFileName; 00206 } 00207 00208 void KRichTextEditor::saveFileAs() 00209 { 00210 saveFileAs(KFileDialog::getSaveFileName()); 00211 } 00212 00213 void KRichTextEditor::saveFile() 00214 { 00215 if (!fileName.isEmpty()) { 00216 saveFileAs(fileName); 00217 } else { 00218 saveFileAs(); 00219 } 00220 } 00221 00222 void KRichTextEditor::openFile() 00223 { 00224 QString fileNameFromDialog = KFileDialog::getOpenFileName(); 00225 if (fileNameFromDialog.isEmpty()) { 00226 return; 00227 } 00228 00229 QString tmpFile; 00230 if (KIO::NetAccess::download(fileNameFromDialog, tmpFile, 00231 this)) { 00232 QFile file(tmpFile); 00233 file.open(QIODevice::ReadOnly); 00234 textArea->setTextOrHtml(QTextStream(&file).readAll()); 00235 fileName = fileNameFromDialog; 00236 00237 KIO::NetAccess::removeTempFile(tmpFile); 00238 } else { 00239 KMessageBox::error(this, 00240 KIO::NetAccess::lastErrorString()); 00241 } 00242 00243 }
This file is part of the KDE documentation.
Documentation copyright © 1996-2012 The KDE developers.
Generated on Mon May 14 2012 04:44:29 by doxygen 1.7.5 written by Dimitri van Heesch, © 1997-2006
Documentation copyright © 1996-2012 The KDE developers.
Generated on Mon May 14 2012 04:44:29 by doxygen 1.7.5 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.