#include <QtWidgets>
#include "Utilities.h"
#include "MdiChild.h"
#include "ui_ExtensibleObjectModelUI.h"
MdiChild::MdiChild()
{
setAttribute(Qt::WA_DeleteOnClose);
isUntitled = true;
connect(document(), SIGNAL(contentsChanged()), this, SIGNAL(documentContentsChanged()));
}
MdiChild::~MdiChild()
{
closing();
}
void MdiChild::newFile()
{
static int sequenceNumber = 1;
isUntitled = true;
curFile = tr("document%1.txt").arg(sequenceNumber++);
setWindowTitle(curFile + "[*]");
connect(document(), SIGNAL(contentsChanged()), this, SLOT(documentWasModified()));
}
bool MdiChild::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(), SIGNAL(contentsChanged()), this, SLOT(documentWasModified()));
return true;
}
bool MdiChild::save()
{
return (isUntitled) ? saveAs() : saveFile(curFile);
}
bool MdiChild::saveAs()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), curFile);
if (fileName.isEmpty())
return false;
return saveFile(fileName);
}
bool MdiChild::saveFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("MDI"),
tr("Cannot write file %1:\n%2.").arg(fileName).arg(file.errorString()));
return false;
}
QTextStream out(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
out << toPlainText();
QApplication::restoreOverrideCursor();
setCurrentFile(fileName);
return true;
}
QString MdiChild::userFriendlyCurrentFile()
{
return strippedName(curFile);
}
void MdiChild::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
event->accept();
} else {
event->ignore();
}
}
void MdiChild::documentWasModified()
{
setWindowModified(document()->isModified());
}
bool MdiChild::maybeSave()
{
if (document()->isModified()) {
QMessageBox::StandardButton ret;
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);
if (ret == QMessageBox::Save)
return save();
else if (ret == QMessageBox::Cancel)
return false;
}
return true;
}
void MdiChild::setCurrentFile(const QString &fileName)
{
curFile = QFileInfo(fileName).canonicalFilePath();
isUntitled = false;
document()->setModified(false);
setWindowModified(false);
setWindowTitle(userFriendlyCurrentFile() + "[*]");
}
QString MdiChild::strippedName(const QString &fullFileName)
{
return QFileInfo(fullFileName).fileName();
}
void MdiChild::markdownSelection(const char* preText, const char* postText)
{
QTextCursor cur = textCursor();
cur.beginEditBlock();
QString selectedText = cur.selection().toPlainText();
cur.removeSelectedText();
cur.insertText(preText + selectedText + postText);
cur.endEditBlock();
}
void MdiChild::bold()
{
markdownSelection("**", "**");
}
void MdiChild::italic()
{
markdownSelection("*", "*");
}
void MdiChild::quote()
{
markdownSelection("`", "`");
}
void MdiChild::code()
{
//markdownSelection("*", "*");
// Need to add indentation of text with 4 spaces each line
}
void MdiChild::heading1()
{
markdownSelection("# ", " #");
}
void MdiChild::heading2()
{
markdownSelection("## ", " ##");
}
void MdiChild::heading3()
{
markdownSelection("### ", " ###");
}
void MdiChild::heading4()
{
markdownSelection("#### ", " ####");
}
void MdiChild::hyperlink()
{
}
void MdiChild::image()
{
}
void MdiChild::unorderedList()
{
}
void MdiChild::orderedList()
{
}
void MdiChild::horizontalRule()
{
}
void MdiChild::timestamp()
{
}
void MdiChild::pageNumber()
{
}
void MdiChild::pageCount()
{
}
void MdiChild::del()
{
//QTextEdit::cursor().pos()
}
void MdiChild::undo()
{
}
void MdiChild::redo()
{
}
void MdiChild::find()
{
}
void MdiChild::findNext()
{
}
void MdiChild::findPrevious()
{
}
void MdiChild::goToLine()
{
}