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
|
||||
XmlGui
|
||||
TextWidgets
|
||||
KIO
|
||||
)
|
||||
|
||||
add_executable(TextEditor main.cc MainWindow.cc)
|
||||
|
@ -10,6 +11,7 @@ target_link_libraries(TextEditor
|
|||
KF5::I18n
|
||||
KF5::XmlGui
|
||||
KF5::TextWidgets
|
||||
KF5::KIOCore
|
||||
)
|
||||
|
||||
install(TARGETS TextEditor ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
#include "MainWindow.hh"
|
||||
#include <KLocalizedString>
|
||||
#include <QAction>
|
||||
#include <KActionCollection>
|
||||
#include <KLocalizedString>
|
||||
#include <KMessageBox>
|
||||
#include <KStandardAction>
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
#include <QFileDialog>
|
||||
#include <QSaveFile>
|
||||
#include <QTextStream>
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent)
|
||||
: KXmlGuiWindow(parent)
|
||||
, fileName(QString())
|
||||
{
|
||||
// setup the TextArea
|
||||
textArea = new KTextEdit();
|
||||
|
@ -16,7 +21,7 @@ MainWindow::MainWindow(QWidget* parent)
|
|||
setupActions();
|
||||
}
|
||||
|
||||
void MainWindow::setupActions()
|
||||
void MainWindow::setupClearAction()
|
||||
{
|
||||
QAction* clearAction = new QAction(this);
|
||||
clearAction->setText(i18n("&Clear"));
|
||||
|
@ -24,8 +29,83 @@ void MainWindow::setupActions()
|
|||
actionCollection()->addAction("clear", clearAction);
|
||||
actionCollection()->setDefaultShortcut(clearAction, Qt::CTRL + Qt::Key_W);
|
||||
connect(clearAction, &QAction::triggered, textArea, &KTextEdit::clear);
|
||||
}
|
||||
|
||||
void MainWindow::setupActions()
|
||||
{
|
||||
setupClearAction();
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
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 <KXmlGuiWindow>
|
||||
#include <KIO/Job>
|
||||
|
||||
class MainWindow : public KXmlGuiWindow {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget* parent = nullptr);
|
||||
|
||||
private:
|
||||
KTextEdit* textArea;
|
||||
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
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
<Menu name="file">
|
||||
<Action name="clear" />
|
||||
</Menu>
|
||||
<Menu>
|
||||
<text>Another Meownu</text>
|
||||
<Action name="clear" />
|
||||
</Menu>
|
||||
</MenuBar>
|
||||
<ToolBar name="mainToolBar">
|
||||
<text>Main Toolbar</text>
|
||||
|
|
|
@ -23,6 +23,7 @@ int main(int argc, char* argv[])
|
|||
// Copyright Statement
|
||||
i18n("2023"));
|
||||
|
||||
// Set the AboutData to the aboutData variable
|
||||
KAboutData::setApplicationData(aboutData);
|
||||
|
||||
QCommandLineParser parser;
|
||||
|
|
Loading…
Reference in a new issue