implement the rest of the basic text editor
This commit is contained in:
parent
53b81f78c0
commit
b020fe9c7f
5 changed files with 106 additions and 4 deletions
|
@ -1,6 +1,7 @@
|
||||||
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
|
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
|
||||||
XmlGui
|
XmlGui
|
||||||
TextWidgets
|
TextWidgets
|
||||||
|
KIO
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(TextEditor main.cc MainWindow.cc)
|
add_executable(TextEditor main.cc MainWindow.cc)
|
||||||
|
@ -10,6 +11,7 @@ target_link_libraries(TextEditor
|
||||||
KF5::I18n
|
KF5::I18n
|
||||||
KF5::XmlGui
|
KF5::XmlGui
|
||||||
KF5::TextWidgets
|
KF5::TextWidgets
|
||||||
|
KF5::KIOCore
|
||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS TextEditor ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
install(TARGETS TextEditor ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||||
|
|
|
@ -1,12 +1,17 @@
|
||||||
#include "MainWindow.hh"
|
#include "MainWindow.hh"
|
||||||
#include <KLocalizedString>
|
|
||||||
#include <QAction>
|
|
||||||
#include <KActionCollection>
|
#include <KActionCollection>
|
||||||
|
#include <KLocalizedString>
|
||||||
|
#include <KMessageBox>
|
||||||
#include <KStandardAction>
|
#include <KStandardAction>
|
||||||
|
#include <QAction>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QSaveFile>
|
||||||
|
#include <QTextStream>
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget* parent)
|
MainWindow::MainWindow(QWidget* parent)
|
||||||
: KXmlGuiWindow(parent)
|
: KXmlGuiWindow(parent)
|
||||||
|
, fileName(QString())
|
||||||
{
|
{
|
||||||
// setup the TextArea
|
// setup the TextArea
|
||||||
textArea = new KTextEdit();
|
textArea = new KTextEdit();
|
||||||
|
@ -16,7 +21,7 @@ MainWindow::MainWindow(QWidget* parent)
|
||||||
setupActions();
|
setupActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setupActions()
|
void MainWindow::setupClearAction()
|
||||||
{
|
{
|
||||||
QAction* clearAction = new QAction(this);
|
QAction* clearAction = new QAction(this);
|
||||||
clearAction->setText(i18n("&Clear"));
|
clearAction->setText(i18n("&Clear"));
|
||||||
|
@ -24,8 +29,83 @@ void MainWindow::setupActions()
|
||||||
actionCollection()->addAction("clear", clearAction);
|
actionCollection()->addAction("clear", clearAction);
|
||||||
actionCollection()->setDefaultShortcut(clearAction, Qt::CTRL + Qt::Key_W);
|
actionCollection()->setDefaultShortcut(clearAction, Qt::CTRL + Qt::Key_W);
|
||||||
connect(clearAction, &QAction::triggered, textArea, &KTextEdit::clear);
|
connect(clearAction, &QAction::triggered, textArea, &KTextEdit::clear);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupActions()
|
||||||
|
{
|
||||||
|
setupClearAction();
|
||||||
|
|
||||||
KStandardAction::quit(qApp, &QCoreApplication::quit, actionCollection());
|
KStandardAction::quit(qApp, &QCoreApplication::quit, actionCollection());
|
||||||
|
KStandardAction::open(this, &MainWindow::openFile, actionCollection());
|
||||||
|
KStandardAction::save(this, &MainWindow::saveFile, actionCollection());
|
||||||
|
KStandardAction::saveAs(this, &MainWindow::saveFileAs, actionCollection());
|
||||||
|
KStandardAction::openNew(this, &MainWindow::newFile, actionCollection());
|
||||||
|
|
||||||
setupGUI(Default, "TextEditorUI.rc");
|
setupGUI(Default, "TextEditorUI.rc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::saveFileToDisk(const QString& outputFileName)
|
||||||
|
{
|
||||||
|
if (outputFileName.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QSaveFile file(outputFileName);
|
||||||
|
// open the file as write only
|
||||||
|
file.open(QIODevice::WriteOnly);
|
||||||
|
|
||||||
|
QByteArray outputByteArray;
|
||||||
|
outputByteArray.append(textArea->toPlainText().toUtf8());
|
||||||
|
|
||||||
|
file.write(outputByteArray);
|
||||||
|
file.commit();
|
||||||
|
|
||||||
|
fileName = outputFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::newFile()
|
||||||
|
{
|
||||||
|
fileName.clear();
|
||||||
|
textArea->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::openFile()
|
||||||
|
{
|
||||||
|
const QUrl fileNameFromDialog = QFileDialog::getOpenFileUrl(this, i18n("Open File"));
|
||||||
|
|
||||||
|
if (fileNameFromDialog.isEmpty())
|
||||||
|
return;
|
||||||
|
KIO::Job* job = KIO::storedGet(fileNameFromDialog);
|
||||||
|
fileName = fileNameFromDialog.toLocalFile();
|
||||||
|
|
||||||
|
connect(job, &KJob::result, this, &MainWindow::downloadFinished);
|
||||||
|
job->exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::saveFile()
|
||||||
|
{
|
||||||
|
if (!fileName.isEmpty()) {
|
||||||
|
saveFileToDisk(fileName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
saveFileAs();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::saveFileAs()
|
||||||
|
{
|
||||||
|
saveFileToDisk(QFileDialog::getSaveFileName(this, i18n("Save File As")));
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::downloadFinished(KJob* job)
|
||||||
|
{
|
||||||
|
if (job->error()) {
|
||||||
|
KMessageBox::error(this, job->errorString());
|
||||||
|
fileName.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const KIO::StoredTransferJob* storedJob = qobject_cast<KIO::StoredTransferJob*>(job);
|
||||||
|
if (storedJob) {
|
||||||
|
textArea->setPlainText(QTextStream(storedJob->data(), QIODevice::ReadOnly).readAll());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,14 +3,29 @@
|
||||||
|
|
||||||
#include <KTextEdit>
|
#include <KTextEdit>
|
||||||
#include <KXmlGuiWindow>
|
#include <KXmlGuiWindow>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
class MainWindow : public KXmlGuiWindow {
|
class MainWindow : public KXmlGuiWindow {
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit MainWindow(QWidget* parent = nullptr);
|
explicit MainWindow(QWidget* parent = nullptr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KTextEdit* textArea;
|
|
||||||
void setupActions();
|
void setupActions();
|
||||||
|
void saveFileToDisk(const QString& outputFileName);
|
||||||
|
void setupClearAction();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void newFile();
|
||||||
|
void openFile();
|
||||||
|
void saveFile();
|
||||||
|
void saveFileAs();
|
||||||
|
|
||||||
|
void downloadFinished(KJob *job);
|
||||||
|
|
||||||
|
private:
|
||||||
|
KTextEdit* textArea;
|
||||||
|
QString fileName;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,6 +6,10 @@
|
||||||
<Menu name="file">
|
<Menu name="file">
|
||||||
<Action name="clear" />
|
<Action name="clear" />
|
||||||
</Menu>
|
</Menu>
|
||||||
|
<Menu>
|
||||||
|
<text>Another Meownu</text>
|
||||||
|
<Action name="clear" />
|
||||||
|
</Menu>
|
||||||
</MenuBar>
|
</MenuBar>
|
||||||
<ToolBar name="mainToolBar">
|
<ToolBar name="mainToolBar">
|
||||||
<text>Main Toolbar</text>
|
<text>Main Toolbar</text>
|
||||||
|
|
|
@ -23,6 +23,7 @@ int main(int argc, char* argv[])
|
||||||
// Copyright Statement
|
// Copyright Statement
|
||||||
i18n("2023"));
|
i18n("2023"));
|
||||||
|
|
||||||
|
// Set the AboutData to the aboutData variable
|
||||||
KAboutData::setApplicationData(aboutData);
|
KAboutData::setApplicationData(aboutData);
|
||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
|
|
Loading…
Reference in a new issue