QtHPConnect/texteditor.cpp

173 lines
4.6 KiB
C++
Raw Normal View History

2020-02-02 18:13:27 +01:00
/*
* This file is part of the QtHPConnect distribution (https://github.com/Indy970/QtHPConnect.git).
* Copyright (c) 2020 Ian Gebbie.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 or later.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
2019-02-10 14:32:15 +01:00
#include "texteditor.h"
2019-02-10 14:43:00 +01:00
#include <QtWidgets>
#include <QRect>
2020-02-02 18:13:27 +01:00
#include <QSettings>
2019-02-10 14:32:15 +01:00
textEditor::textEditor(QWidget *parent) :
2019-02-10 14:43:00 +01:00
QTextEdit(parent)
2019-02-10 14:32:15 +01:00
{
2020-02-02 18:13:27 +01:00
QSettings appSettings("IRGP","QtHPconnect");
2019-02-10 14:43:00 +01:00
wParent = parent;
setAttribute(Qt::WA_DeleteOnClose);
setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
isUntitled = true;
2020-02-02 18:13:27 +01:00
defaultPath=QDir(appSettings.value("contentPath").toString());
qDebug()<<defaultPath;
2019-02-10 14:32:15 +01:00
}
2019-02-10 14:43:00 +01:00
void textEditor::newFile()
2019-02-10 14:32:15 +01:00
{
2019-02-10 14:43:00 +01:00
static int sequenceNumber = 1;
isUntitled = true;
curFile = tr("document%1.txt").arg(sequenceNumber++);
setWindowTitle(curFile + "[*]");
connect(document(), &QTextDocument::contentsChanged,
this, &textEditor::documentWasModified);
}
bool textEditor::loadFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("MDI"),
tr("Cannot read file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return false;
}
QTextStream in(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
setPlainText(in.readAll());
QApplication::restoreOverrideCursor();
setCurrentFile(fileName);
connect(document(), &QTextDocument::contentsChanged,
this, &textEditor::documentWasModified);
return true;
}
bool textEditor::save()
{
if (isUntitled) {
return saveAs();
} else {
return saveFile(curFile);
}
}
bool textEditor::saveAs()
{
2020-02-02 18:13:27 +01:00
QFileInfo fileinfo(defaultPath,curFile);
2019-02-10 14:43:00 +01:00
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
2020-02-02 18:13:27 +01:00
fileinfo.absoluteFilePath());
2019-02-10 14:43:00 +01:00
if (fileName.isEmpty())
return false;
return saveFile(fileName);
}
bool textEditor::saveFile(const QString &fileName)
{
2020-02-02 18:13:27 +01:00
QFileInfo fileinfo(defaultPath,fileName);
QFile file(fileinfo.absoluteFilePath());
2019-02-10 14:43:00 +01:00
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("MDI"),
tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), file.errorString()));
return false;
}
QTextStream out(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
out << toPlainText();
QApplication::restoreOverrideCursor();
setCurrentFile(fileName);
return true;
}
QString textEditor::userFriendlyCurrentFile()
{
return strippedName(curFile);
}
void textEditor::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
event->accept();
} else {
event->ignore();
}
}
void textEditor::documentWasModified()
{
setWindowModified(document()->isModified());
}
bool textEditor::maybeSave()
{
if (!document()->isModified())
return true;
2020-02-02 18:13:27 +01:00
2019-02-10 14:43:00 +01:00
const QMessageBox::StandardButton ret
= QMessageBox::warning(this, tr("MDI"),
tr("'%1' has been modified.\n"
"Do you want to save your changes?")
.arg(userFriendlyCurrentFile()),
QMessageBox::Save | QMessageBox::Discard
| QMessageBox::Cancel);
switch (ret) {
case QMessageBox::Save:
return save();
case QMessageBox::Cancel:
return false;
default:
break;
}
return true;
}
void textEditor::setCurrentFile(const QString &fileName)
{
curFile = QFileInfo(fileName).canonicalFilePath();
isUntitled = false;
document()->setModified(false);
setWindowModified(false);
setWindowTitle(userFriendlyCurrentFile() + "[*]");
}
QString textEditor::strippedName(const QString &fullFileName)
{
return QFileInfo(fullFileName).fileName();
}
textEditor::~textEditor() {
2019-09-15 17:23:44 +02:00
qDebug()<<"textEditor:: delete";
2019-02-10 14:32:15 +01:00
}