| /**************************************************************************** |
| ** |
| ** Copyright (C) 2017 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:BSD$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** BSD License Usage |
| ** Alternatively, you may use this file under the terms of the BSD license |
| ** as follows: |
| ** |
| ** "Redistribution and use in source and binary forms, with or without |
| ** modification, are permitted provided that the following conditions are |
| ** met: |
| ** * Redistributions of source code must retain the above copyright |
| ** notice, this list of conditions and the following disclaimer. |
| ** * Redistributions in binary form must reproduce the above copyright |
| ** notice, this list of conditions and the following disclaimer in |
| ** the documentation and/or other materials provided with the |
| ** distribution. |
| ** * Neither the name of The Qt Company Ltd nor the names of its |
| ** contributors may be used to endorse or promote products derived |
| ** from this software without specific prior written permission. |
| ** |
| ** |
| ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include <QFile> |
| #include <QFileDialog> |
| #include <QTextStream> |
| #include <QMessageBox> |
| #if defined(QT_PRINTSUPPORT_LIB) |
| #include <QtPrintSupport/qtprintsupportglobal.h> |
| #if QT_CONFIG(printer) |
| #if QT_CONFIG(printdialog) |
| #include <QPrintDialog> |
| #endif // QT_CONFIG(printdialog) |
| #include <QPrinter> |
| #endif // QT_CONFIG(printer) |
| #endif // QT_PRINTSUPPORT_LIB |
| #include <QFont> |
| #include <QFontDialog> |
| |
| #include "notepad.h" |
| #include "ui_notepad.h" |
| |
| Notepad::Notepad(QWidget *parent) : |
| QMainWindow(parent), |
| ui(new Ui::Notepad) |
| { |
| ui->setupUi(this); |
| this->setCentralWidget(ui->textEdit); |
| |
| connect(ui->actionNew, &QAction::triggered, this, &Notepad::newDocument); |
| connect(ui->actionOpen, &QAction::triggered, this, &Notepad::open); |
| connect(ui->actionSave, &QAction::triggered, this, &Notepad::save); |
| connect(ui->actionSave_as, &QAction::triggered, this, &Notepad::saveAs); |
| connect(ui->actionPrint, &QAction::triggered, this, &Notepad::print); |
| connect(ui->actionExit, &QAction::triggered, this, &Notepad::exit); |
| connect(ui->actionCopy, &QAction::triggered, this, &Notepad::copy); |
| connect(ui->actionCut, &QAction::triggered, this, &Notepad::cut); |
| connect(ui->actionPaste, &QAction::triggered, this, &Notepad::paste); |
| connect(ui->actionUndo, &QAction::triggered, this, &Notepad::undo); |
| connect(ui->actionRedo, &QAction::triggered, this, &Notepad::redo); |
| connect(ui->actionFont, &QAction::triggered, this, &Notepad::selectFont); |
| connect(ui->actionBold, &QAction::triggered, this, &Notepad::setFontBold); |
| connect(ui->actionUnderline, &QAction::triggered, this, &Notepad::setFontUnderline); |
| connect(ui->actionItalic, &QAction::triggered, this, &Notepad::setFontItalic); |
| connect(ui->actionAbout, &QAction::triggered, this, &Notepad::about); |
| |
| // Disable menu actions for unavailable features |
| #if !QT_CONFIG(printer) |
| ui->actionPrint->setEnabled(false); |
| #endif |
| |
| #if !QT_CONFIG(clipboard) |
| ui->actionCut->setEnabled(false); |
| ui->actionCopy->setEnabled(false); |
| ui->actionPaste->setEnabled(false); |
| #endif |
| } |
| |
| Notepad::~Notepad() |
| { |
| delete ui; |
| } |
| |
| void Notepad::newDocument() |
| { |
| currentFile.clear(); |
| ui->textEdit->setText(QString()); |
| } |
| |
| void Notepad::open() |
| { |
| QString fileName = QFileDialog::getOpenFileName(this, "Open the file"); |
| QFile file(fileName); |
| currentFile = fileName; |
| if (!file.open(QIODevice::ReadOnly | QFile::Text)) { |
| QMessageBox::warning(this, "Warning", "Cannot open file: " + file.errorString()); |
| return; |
| } |
| setWindowTitle(fileName); |
| QTextStream in(&file); |
| QString text = in.readAll(); |
| ui->textEdit->setText(text); |
| file.close(); |
| } |
| |
| void Notepad::save() |
| { |
| QString fileName; |
| // If we don't have a filename from before, get one. |
| if (currentFile.isEmpty()) { |
| fileName = QFileDialog::getSaveFileName(this, "Save"); |
| currentFile = fileName; |
| } else { |
| fileName = currentFile; |
| } |
| QFile file(fileName); |
| if (!file.open(QIODevice::WriteOnly | QFile::Text)) { |
| QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString()); |
| return; |
| } |
| setWindowTitle(fileName); |
| QTextStream out(&file); |
| QString text = ui->textEdit->toPlainText(); |
| out << text; |
| file.close(); |
| } |
| |
| void Notepad::saveAs() |
| { |
| QString fileName = QFileDialog::getSaveFileName(this, "Save as"); |
| QFile file(fileName); |
| |
| if (!file.open(QFile::WriteOnly | QFile::Text)) { |
| QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString()); |
| return; |
| } |
| currentFile = fileName; |
| setWindowTitle(fileName); |
| QTextStream out(&file); |
| QString text = ui->textEdit->toPlainText(); |
| out << text; |
| file.close(); |
| } |
| |
| void Notepad::print() |
| { |
| #if QT_CONFIG(printer) |
| QPrinter printDev; |
| #if QT_CONFIG(printdialog) |
| QPrintDialog dialog(&printDev, this); |
| if (dialog.exec() == QDialog::Rejected) |
| return; |
| #endif // QT_CONFIG(printdialog) |
| ui->textEdit->print(&printDev); |
| #endif // QT_CONFIG(printer) |
| } |
| |
| void Notepad::exit() |
| { |
| QCoreApplication::quit(); |
| } |
| |
| void Notepad::copy() |
| { |
| #if QT_CONFIG(clipboard) |
| ui->textEdit->copy(); |
| #endif |
| } |
| |
| void Notepad::cut() |
| { |
| #if QT_CONFIG(clipboard) |
| ui->textEdit->cut(); |
| #endif |
| } |
| |
| void Notepad::paste() |
| { |
| #if QT_CONFIG(clipboard) |
| ui->textEdit->paste(); |
| #endif |
| } |
| |
| void Notepad::undo() |
| { |
| ui->textEdit->undo(); |
| } |
| |
| void Notepad::redo() |
| { |
| ui->textEdit->redo(); |
| } |
| |
| void Notepad::selectFont() |
| { |
| bool fontSelected; |
| QFont font = QFontDialog::getFont(&fontSelected, this); |
| if (fontSelected) |
| ui->textEdit->setFont(font); |
| } |
| |
| void Notepad::setFontUnderline(bool underline) |
| { |
| ui->textEdit->setFontUnderline(underline); |
| } |
| |
| void Notepad::setFontItalic(bool italic) |
| { |
| ui->textEdit->setFontItalic(italic); |
| } |
| |
| void Notepad::setFontBold(bool bold) |
| { |
| bold ? ui->textEdit->setFontWeight(QFont::Bold) : |
| ui->textEdit->setFontWeight(QFont::Normal); |
| } |
| |
| void Notepad::about() |
| { |
| QMessageBox::about(this, tr("About MDI"), |
| tr("The <b>Notepad</b> example demonstrates how to code a basic " |
| "text editor using QtWidgets")); |
| |
| } |