/****************************************************************************+ −
**+ −
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).+ −
** All rights reserved.+ −
** Contact: Nokia Corporation (qt-info@nokia.com)+ −
**+ −
** This file is part of the examples of the Qt Toolkit.+ −
**+ −
** $QT_BEGIN_LICENSE:LGPL$+ −
** No Commercial Usage+ −
** This file contains pre-release code and may not be distributed.+ −
** You may use this file in accordance with the terms and conditions+ −
** contained in the Technology Preview License Agreement accompanying+ −
** this package.+ −
**+ −
** GNU Lesser General Public License Usage+ −
** Alternatively, this file may be used under the terms of the GNU Lesser+ −
** General Public License version 2.1 as published by the Free Software+ −
** Foundation and appearing in the file LICENSE.LGPL included in the+ −
** packaging of this file. Please review the following information to+ −
** ensure the GNU Lesser General Public License version 2.1 requirements+ −
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.+ −
**+ −
** In addition, as a special exception, Nokia gives you certain additional+ −
** rights. These rights are described in the Nokia Qt LGPL Exception+ −
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.+ −
**+ −
** If you have questions regarding the use of this file, please contact+ −
** Nokia at qt-info@nokia.com.+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
** $QT_END_LICENSE$+ −
**+ −
****************************************************************************/+ −
+ −
//! [0]+ −
#include <QtGui>+ −
+ −
#include "mainwindow.h"+ −
//! [0]+ −
+ −
//! [1]+ −
MainWindow::MainWindow()+ −
//! [1] //! [2]+ −
{+ −
textEdit = new QPlainTextEdit;+ −
setCentralWidget(textEdit);+ −
+ −
createActions();+ −
createMenus();+ −
createToolBars();+ −
createStatusBar();+ −
+ −
readSettings();+ −
+ −
connect(textEdit->document(), SIGNAL(contentsChanged()),+ −
this, SLOT(documentWasModified()));+ −
+ −
setCurrentFile("");+ −
setUnifiedTitleAndToolBarOnMac(true);+ −
}+ −
//! [2]+ −
+ −
//! [3]+ −
void MainWindow::closeEvent(QCloseEvent *event)+ −
//! [3] //! [4]+ −
{+ −
if (maybeSave()) {+ −
writeSettings();+ −
event->accept();+ −
} else {+ −
event->ignore();+ −
}+ −
}+ −
//! [4]+ −
+ −
//! [5]+ −
void MainWindow::newFile()+ −
//! [5] //! [6]+ −
{+ −
if (maybeSave()) {+ −
textEdit->clear();+ −
setCurrentFile("");+ −
}+ −
}+ −
//! [6]+ −
+ −
//! [7]+ −
void MainWindow::open()+ −
//! [7] //! [8]+ −
{+ −
if (maybeSave()) {+ −
QString fileName = QFileDialog::getOpenFileName(this);+ −
if (!fileName.isEmpty())+ −
loadFile(fileName);+ −
}+ −
}+ −
//! [8]+ −
+ −
//! [9]+ −
bool MainWindow::save()+ −
//! [9] //! [10]+ −
{+ −
if (curFile.isEmpty()) {+ −
return saveAs();+ −
} else {+ −
return saveFile(curFile);+ −
}+ −
}+ −
//! [10]+ −
+ −
//! [11]+ −
bool MainWindow::saveAs()+ −
//! [11] //! [12]+ −
{+ −
QString fileName = QFileDialog::getSaveFileName(this);+ −
if (fileName.isEmpty())+ −
return false;+ −
+ −
return saveFile(fileName);+ −
}+ −
//! [12]+ −
+ −
//! [13]+ −
void MainWindow::about()+ −
//! [13] //! [14]+ −
{+ −
QMessageBox::about(this, tr("About Application"),+ −
tr("The <b>Application</b> example demonstrates how to "+ −
"write modern GUI applications using Qt, with a menu bar, "+ −
"toolbars, and a status bar."));+ −
}+ −
//! [14]+ −
+ −
//! [15]+ −
void MainWindow::documentWasModified()+ −
//! [15] //! [16]+ −
{+ −
setWindowModified(textEdit->document()->isModified());+ −
}+ −
//! [16]+ −
+ −
//! [17]+ −
void MainWindow::createActions()+ −
//! [17] //! [18]+ −
{+ −
newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);+ −
newAct->setShortcuts(QKeySequence::New);+ −
newAct->setStatusTip(tr("Create a new file"));+ −
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));+ −
+ −
//! [19]+ −
openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);+ −
openAct->setShortcuts(QKeySequence::Open);+ −
openAct->setStatusTip(tr("Open an existing file"));+ −
connect(openAct, SIGNAL(triggered()), this, SLOT(open()));+ −
//! [18] //! [19]+ −
+ −
saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"), this);+ −
saveAct->setShortcuts(QKeySequence::Save);+ −
saveAct->setStatusTip(tr("Save the document to disk"));+ −
connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));+ −
+ −
saveAsAct = new QAction(tr("Save &As..."), this);+ −
saveAsAct->setShortcuts(QKeySequence::SaveAs);+ −
saveAsAct->setStatusTip(tr("Save the document under a new name"));+ −
connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));+ −
+ −
//! [20]+ −
exitAct = new QAction(tr("E&xit"), this);+ −
exitAct->setShortcuts(QKeySequence::Quit);+ −
//! [20]+ −
exitAct->setStatusTip(tr("Exit the application"));+ −
connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));+ −
+ −
//! [21]+ −
cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);+ −
//! [21]+ −
cutAct->setShortcuts(QKeySequence::Cut);+ −
cutAct->setStatusTip(tr("Cut the current selection's contents to the "+ −
"clipboard"));+ −
connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut()));+ −
+ −
copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this);+ −
copyAct->setShortcuts(QKeySequence::Copy);+ −
copyAct->setStatusTip(tr("Copy the current selection's contents to the "+ −
"clipboard"));+ −
connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy()));+ −
+ −
pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this);+ −
pasteAct->setShortcuts(QKeySequence::Paste);+ −
pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "+ −
"selection"));+ −
connect(pasteAct, SIGNAL(triggered()), textEdit, SLOT(paste()));+ −
+ −
aboutAct = new QAction(tr("&About"), this);+ −
aboutAct->setStatusTip(tr("Show the application's About box"));+ −
connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));+ −
+ −
//! [22]+ −
aboutQtAct = new QAction(tr("About &Qt"), this);+ −
aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));+ −
connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));+ −
//! [22]+ −
+ −
//! [23]+ −
cutAct->setEnabled(false);+ −
//! [23] //! [24]+ −
copyAct->setEnabled(false);+ −
connect(textEdit, SIGNAL(copyAvailable(bool)),+ −
cutAct, SLOT(setEnabled(bool)));+ −
connect(textEdit, SIGNAL(copyAvailable(bool)),+ −
copyAct, SLOT(setEnabled(bool)));+ −
}+ −
//! [24]+ −
+ −
//! [25] //! [26]+ −
void MainWindow::createMenus()+ −
//! [25] //! [27]+ −
{+ −
fileMenu = menuBar()->addMenu(tr("&File"));+ −
fileMenu->addAction(newAct);+ −
//! [28]+ −
fileMenu->addAction(openAct);+ −
//! [28]+ −
fileMenu->addAction(saveAct);+ −
//! [26]+ −
fileMenu->addAction(saveAsAct);+ −
fileMenu->addSeparator();+ −
fileMenu->addAction(exitAct);+ −
+ −
editMenu = menuBar()->addMenu(tr("&Edit"));+ −
editMenu->addAction(cutAct);+ −
editMenu->addAction(copyAct);+ −
editMenu->addAction(pasteAct);+ −
+ −
menuBar()->addSeparator();+ −
+ −
helpMenu = menuBar()->addMenu(tr("&Help"));+ −
helpMenu->addAction(aboutAct);+ −
helpMenu->addAction(aboutQtAct);+ −
}+ −
//! [27]+ −
+ −
//! [29] //! [30]+ −
void MainWindow::createToolBars()+ −
{+ −
fileToolBar = addToolBar(tr("File"));+ −
fileToolBar->addAction(newAct);+ −
//! [29] //! [31]+ −
fileToolBar->addAction(openAct);+ −
//! [31]+ −
fileToolBar->addAction(saveAct);+ −
+ −
editToolBar = addToolBar(tr("Edit"));+ −
editToolBar->addAction(cutAct);+ −
editToolBar->addAction(copyAct);+ −
editToolBar->addAction(pasteAct);+ −
}+ −
//! [30]+ −
+ −
//! [32]+ −
void MainWindow::createStatusBar()+ −
//! [32] //! [33]+ −
{+ −
statusBar()->showMessage(tr("Ready"));+ −
}+ −
//! [33]+ −
+ −
//! [34] //! [35]+ −
void MainWindow::readSettings()+ −
//! [34] //! [36]+ −
{+ −
QSettings settings("Trolltech", "Application Example");+ −
QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();+ −
QSize size = settings.value("size", QSize(400, 400)).toSize();+ −
resize(size);+ −
move(pos);+ −
}+ −
//! [35] //! [36]+ −
+ −
//! [37] //! [38]+ −
void MainWindow::writeSettings()+ −
//! [37] //! [39]+ −
{+ −
QSettings settings("Trolltech", "Application Example");+ −
settings.setValue("pos", pos());+ −
settings.setValue("size", size());+ −
}+ −
//! [38] //! [39]+ −
+ −
//! [40]+ −
bool MainWindow::maybeSave()+ −
//! [40] //! [41]+ −
{+ −
if (textEdit->document()->isModified()) {+ −
QMessageBox::StandardButton ret;+ −
ret = QMessageBox::warning(this, tr("Application"),+ −
tr("The document has been modified.\n"+ −
"Do you want to save your changes?"),+ −
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);+ −
if (ret == QMessageBox::Save)+ −
return save();+ −
else if (ret == QMessageBox::Cancel)+ −
return false;+ −
}+ −
return true;+ −
}+ −
//! [41]+ −
+ −
//! [42]+ −
void MainWindow::loadFile(const QString &fileName)+ −
//! [42] //! [43]+ −
{+ −
QFile file(fileName);+ −
if (!file.open(QFile::ReadOnly | QFile::Text)) {+ −
QMessageBox::warning(this, tr("Application"),+ −
tr("Cannot read file %1:\n%2.")+ −
.arg(fileName)+ −
.arg(file.errorString()));+ −
return;+ −
}+ −
+ −
QTextStream in(&file);+ −
#ifndef QT_NO_CURSOR+ −
QApplication::setOverrideCursor(Qt::WaitCursor);+ −
#endif+ −
textEdit->setPlainText(in.readAll());+ −
#ifndef QT_NO_CURSOR+ −
QApplication::restoreOverrideCursor();+ −
#endif+ −
+ −
setCurrentFile(fileName);+ −
statusBar()->showMessage(tr("File loaded"), 2000);+ −
}+ −
//! [43]+ −
+ −
//! [44]+ −
bool MainWindow::saveFile(const QString &fileName)+ −
//! [44] //! [45]+ −
{+ −
QFile file(fileName);+ −
if (!file.open(QFile::WriteOnly | QFile::Text)) {+ −
QMessageBox::warning(this, tr("Application"),+ −
tr("Cannot write file %1:\n%2.")+ −
.arg(fileName)+ −
.arg(file.errorString()));+ −
return false;+ −
}+ −
+ −
QTextStream out(&file);+ −
#ifndef QT_NO_CURSOR+ −
QApplication::setOverrideCursor(Qt::WaitCursor);+ −
#endif+ −
out << textEdit->toPlainText();+ −
#ifndef QT_NO_CURSOR+ −
QApplication::restoreOverrideCursor();+ −
#endif+ −
+ −
setCurrentFile(fileName);+ −
statusBar()->showMessage(tr("File saved"), 2000);+ −
return true;+ −
}+ −
//! [45]+ −
+ −
//! [46]+ −
void MainWindow::setCurrentFile(const QString &fileName)+ −
//! [46] //! [47]+ −
{+ −
curFile = fileName;+ −
textEdit->document()->setModified(false);+ −
setWindowModified(false);+ −
+ −
QString shownName = curFile;+ −
if (curFile.isEmpty())+ −
shownName = "untitled.txt";+ −
setWindowFilePath(shownName);+ −
}+ −
//! [47]+ −
+ −
//! [48]+ −
QString MainWindow::strippedName(const QString &fullFileName)+ −
//! [48] //! [49]+ −
{+ −
return QFileInfo(fullFileName).fileName();+ −
}+ −
//! [49]+ −