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"