• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.8.3 API Reference
  • KDE Home
  • Contact Us
 

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

KDE's Doxygen guidelines are available online.

kpimtextedit/richtextbuilders

Skip menu "kpimtextedit/richtextbuilders"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

kdepimlibs-4.8.3 API Reference

Skip menu "kdepimlibs-4.8.3 API Reference"
  • akonadi
  •   contact
  •   kmime
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal