123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /*************************************************************************
- * Copyright (c) 2011 AT&T Intellectual Property
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors: Details at https://graphviz.org
- *************************************************************************/
- #include "mdichild.h"
- #include "mainwindow.h"
- #include <QtGlobal>
- #include <QtWidgets>
- #include <memory>
- MdiChild::MdiChild() {
- setAttribute(Qt::WA_DeleteOnClose);
- isUntitled = true;
- layoutIdx = 0;
- renderIdx = 0;
- preview = true;
- applyCairo = false;
- settingsSet = false;
- }
- void MdiChild::newFile() {
- static int sequenceNumber = 1;
- isUntitled = true;
- curFile = tr("graph%1.gv").arg(sequenceNumber++);
- setWindowTitle(curFile + QLatin1String("[*]"));
- connect(document(), &QTextDocument::contentsChange, this,
- &MdiChild::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(), &QTextDocument::contentsChange, this,
- &MdiChild::documentWasModified);
- return true;
- }
- bool MdiChild::save() {
- if (isUntitled) {
- return saveAs();
- }
- return 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);
- #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- out.setCodec("UTF-8");
- #endif
- out << toPlainText();
- out.flush();
- 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();
- 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() + QLatin1String("[*]"));
- }
- QString MdiChild::strippedName(const QString &fullFileName) {
- return QFileInfo(fullFileName).fileName();
- }
- bool MdiChild::loadPreview(const QString &fileName) {
- if (previewFrm == nullptr) {
- previewFrm = std::make_unique<ImageViewer>();
- previewFrm->graphWindow = this;
- QMdiSubWindow *s = parentFrm->mdiArea->addSubWindow(previewFrm.get());
- s->resize(600, 400);
- s->move(parentFrm->mdiArea->subWindowList().count() * 5,
- parentFrm->mdiArea->subWindowList().count() * 5);
- previewFrm->subWindowRef = s;
- }
- bool rv = previewFrm->open(fileName);
- if (rv)
- previewFrm->show();
- return rv;
- }
- bool MdiChild::firstTime() { return settingsSet; }
|