File indexing completed on 2024-04-21 03:59:42
0001 /** 0002 KDE Rich Text Editor 0003 SPDX-FileCopyrightText: 2008 Stephen Kelly <steveire@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 0008 #include "krichtexteditor.h" 0009 0010 #include <KStandardAction> 0011 #include <kactioncollection.h> 0012 0013 #include <QApplication> 0014 #include <QFileDialog> 0015 #include <QLabel> 0016 #include <QSaveFile> 0017 #include <QStatusBar> 0018 #include <QTest> 0019 #include <QTextStream> 0020 0021 KRichTextEditor::KRichTextEditor() 0022 : KXmlGuiWindow() 0023 { 0024 setupActions(); 0025 0026 textArea = new KRichTextWidget(this); 0027 setCentralWidget(textArea); 0028 0029 actionCollection()->addActions(textArea->createActions()); 0030 0031 setupGUI(KXmlGuiWindow::Default, QFINDTESTDATA("krichtexteditorui.rc")); 0032 0033 itemLabel = new QLabel; 0034 statusBar()->addWidget(itemLabel); 0035 0036 connect(textArea, &KRichTextWidget::cursorPositionChanged, this, &KRichTextEditor::cursorPositionChanged); 0037 } 0038 0039 KRichTextEditor::~KRichTextEditor() 0040 { 0041 } 0042 0043 void KRichTextEditor::setupActions() 0044 { 0045 KStandardAction::quit(qApp, &QCoreApplication::quit, actionCollection()); 0046 0047 KStandardAction::open(this, &KRichTextEditor::openFile, actionCollection()); 0048 0049 KStandardAction::save(this, &KRichTextEditor::saveFile, actionCollection()); 0050 0051 KStandardAction::saveAs(this, qOverload<>(&KRichTextEditor::saveFileAs), actionCollection()); 0052 0053 KStandardAction::openNew(this, &KRichTextEditor::newFile, actionCollection()); 0054 } 0055 0056 void KRichTextEditor::cursorPositionChanged() 0057 { 0058 // Show link target in status bar 0059 if (textArea->textCursor().charFormat().isAnchor()) { 0060 QString text = textArea->currentLinkText(); 0061 QString url = textArea->currentLinkUrl(); 0062 itemLabel->setText(text + QStringLiteral(" -> ") + url); 0063 } else { 0064 itemLabel->setText(QString()); 0065 } 0066 } 0067 0068 void KRichTextEditor::newFile() 0069 { 0070 // maybeSave 0071 fileName.clear(); 0072 textArea->clear(); 0073 } 0074 0075 void KRichTextEditor::saveFileAs(const QString &outputFileName) 0076 { 0077 QSaveFile file(outputFileName); 0078 if (!file.open(QIODevice::WriteOnly)) { 0079 return; 0080 } 0081 0082 QByteArray outputByteArray; 0083 outputByteArray.append(textArea->toHtml().toUtf8()); 0084 file.write(outputByteArray); 0085 if (!file.commit()) { 0086 return; 0087 } 0088 0089 fileName = outputFileName; 0090 } 0091 0092 void KRichTextEditor::saveFileAs() 0093 { 0094 saveFileAs(QFileDialog::getSaveFileName()); 0095 } 0096 0097 void KRichTextEditor::saveFile() 0098 { 0099 if (!fileName.isEmpty()) { 0100 saveFileAs(fileName); 0101 } else { 0102 saveFileAs(); 0103 } 0104 } 0105 0106 void KRichTextEditor::openFile() 0107 { 0108 QString fileNameFromDialog = QFileDialog::getOpenFileName(); 0109 if (fileNameFromDialog.isEmpty()) { 0110 return; 0111 } 0112 0113 QFile file(fileNameFromDialog); 0114 if (file.open(QIODevice::ReadOnly)) { 0115 textArea->setTextOrHtml(QTextStream(&file).readAll()); 0116 fileName = fileNameFromDialog; 0117 } 0118 } 0119 0120 #include "moc_krichtexteditor.cpp"