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

kpimtextedit/richtextbuilders

  • kpimtextedit
  • richtextbuilders
  • testapp
krichtexteditor.cpp
1 
22 #include "krichtexteditor.h"
23 
24 #include "kabstractmarkupbuilder.h"
25 #include "kplaintextmarkupbuilder.h"
26 #include "ktexthtmlbuilder.h"
27 #include "bbcodebuilder.h"
28 #include "mediawikimarkupbuilder.h"
29 
30 
31 #include "kmarkupdirector.h"
32 
33 #include <QTextDocument>
34 #include <QDockWidget>
35 #include <QLayout>
36 #include <QPushButton>
37 
38 #include <QtCore/QTextStream>
39 
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>
49 #include <klocale.h>
50 #include <kdebug.h>
51 
52 
53 KRichTextEditor::KRichTextEditor() : KXmlGuiWindow()
54 {
55  setupActions();
56 
57  textArea = new KRichTextWidget(this);
58 
59 
60  QPushButton *b = new QPushButton(i18n("Update!"), this);
61  connect(b, SIGNAL(pressed()), SLOT(updateDockedWidgets()));
62 
63  QVBoxLayout *l = new QVBoxLayout();
64  QWidget *w = new QWidget();
65  l->addWidget(textArea);
66  l->addWidget(b);
67  w->setLayout(l);
68 
69  setCentralWidget(w);
70 
71  textArea->createActions(actionCollection());
72  setupGUI();
73 
74  statusBar()->insertItem(QString(), 0, 1);
75  statusBar()->setItemAlignment(0, Qt::AlignLeft | Qt::AlignVCenter);
76 
77  connect(textArea, SIGNAL(cursorPositionChanged()),
78  SLOT(cursorPositionChanged()));
79 
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);
86 
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);
94 
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);
101 
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);
108 
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);
115 }
116 
117 void KRichTextEditor::updateDockedWidgets()
118 {
119  KTextHTMLBuilder *hb = new KTextHTMLBuilder();
120 
121  KMarkupDirector *hmd = new KMarkupDirector(hb);
122  hmd->constructContent(textArea->document());
123 
124  QString t = hb->getResult();
125 
126  kDebug() << t;
127 
128  kte->setPlainText(t);
129  krte->setHtml(t);
130 
131  KPlainTextMarkupBuilder *pb = new KPlainTextMarkupBuilder();
132 
133  KMarkupDirector *pmd = new KMarkupDirector(pb);
134  pmd->constructContent(textArea->document());
135 
136  kpte->setPlainText(pb->getResult());
137 
138  BBCodeBuilder *bbb = new BBCodeBuilder();
139 
140  KMarkupDirector *bbmd = new KMarkupDirector(bbb);
141  bbmd->constructContent(textArea->document());
142 
143  kbbte->setPlainText(bbb->getResult());
144 
145  MediaWikiMarkupBuilder *mwb = new MediaWikiMarkupBuilder();
146 
147  KMarkupDirector *mwmd = new KMarkupDirector(mwb);
148  mwmd->constructContent(textArea->document());
149 
150  kmwte->setPlainText(mwb->getResult());
151 }
152 
153 KRichTextEditor::~KRichTextEditor()
154 {
155 }
156 
157 void KRichTextEditor::setupActions()
158 {
159  KStandardAction::quit(kapp, SLOT(quit()),
160  actionCollection());
161 
162  KStandardAction::open(this, SLOT(openFile()),
163  actionCollection());
164 
165  KStandardAction::save(this, SLOT(saveFile()),
166  actionCollection());
167 
168  KStandardAction::saveAs(this, SLOT(saveFileAs()),
169  actionCollection());
170 
171  KStandardAction::openNew(this, SLOT(newFile()),
172  actionCollection());
173 }
174 
175 void KRichTextEditor::cursorPositionChanged()
176 {
177 // Show link target in status bar
178  if (textArea->textCursor().charFormat().isAnchor()) {
179  QString text = textArea->currentLinkText();
180  QString url = textArea->currentLinkUrl();
181  statusBar()->changeItem(text + " -> " + url, 0);
182  } else {
183  statusBar()->changeItem(QString(), 0);
184  }
185 }
186 
187 void KRichTextEditor::newFile()
188 {
189 //maybeSave
190  fileName.clear();
191  textArea->clear();
192 }
193 
194 void KRichTextEditor::saveFileAs(const QString &outputFileName)
195 {
196  KSaveFile file(outputFileName);
197  file.open();
198 
199  QByteArray outputByteArray;
200  outputByteArray.append(textArea->toHtml().toUtf8());
201  file.write(outputByteArray);
202  file.finalize();
203  file.close();
204 
205  fileName = outputFileName;
206 }
207 
208 void KRichTextEditor::saveFileAs()
209 {
210  saveFileAs(KFileDialog::getSaveFileName());
211 }
212 
213 void KRichTextEditor::saveFile()
214 {
215  if (!fileName.isEmpty()) {
216  saveFileAs(fileName);
217  } else {
218  saveFileAs();
219  }
220 }
221 
222 void KRichTextEditor::openFile()
223 {
224  QString fileNameFromDialog = KFileDialog::getOpenFileName();
225  if (fileNameFromDialog.isEmpty()) {
226  return;
227  }
228 
229  QString tmpFile;
230  if (KIO::NetAccess::download(fileNameFromDialog, tmpFile,
231  this)) {
232  QFile file(tmpFile);
233  file.open(QIODevice::ReadOnly);
234  textArea->setTextOrHtml(QTextStream(&file).readAll());
235  fileName = fileNameFromDialog;
236 
237  KIO::NetAccess::removeTempFile(tmpFile);
238  } else {
239  KMessageBox::error(this,
240  KIO::NetAccess::lastErrorString());
241  }
242 
243 }
This file is part of the KDE documentation.
Documentation copyright © 1996-2012 The KDE developers.
Generated on Wed Nov 28 2012 21:46:16 by doxygen 1.8.1.2 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.9.3 API Reference

Skip menu "kdepimlibs-4.9.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