Mercurial > hg > octave-lyh
diff gui/src/FileEditorMdiSubWindow.cpp @ 13501:86d6c3b90ad7
Added new gui files.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Sun, 17 Jul 2011 17:45:05 +0200 |
parents | |
children | 5ab40ef3d241 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/gui/src/FileEditorMdiSubWindow.cpp @@ -0,0 +1,203 @@ +/* Quint - A graphical user interface for Octave + * Copyright (C) 2011 Jacob Dawid + * jacob.dawid@googlemail.com + * + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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/>. + */ + +#include "FileEditorMdiSubWindow.h" +#include <QVBoxLayout> +#include <QApplication> +#include <QFile> +#include <QFileDialog> +#include <QMessageBox> +#include <QAction> +#include <QStyle> +#include <QTextStream> + +FileEditorMdiSubWindow::FileEditorMdiSubWindow(QWidget *parent) + : QMdiSubWindow(parent) { + construct(); +} + +FileEditorMdiSubWindow::~FileEditorMdiSubWindow() { + while(checkFileModified("Close File")) { + } // don't close if something went wrong while saving the file +} + +void FileEditorMdiSubWindow::loadFile(QString fileName) { + QFile file(fileName); + if (!file.open(QFile::ReadOnly)) { + QMessageBox::warning(this, tr("File Editor"), + tr("Cannot read file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + QTextStream in(&file); + QApplication::setOverrideCursor(Qt::WaitCursor); + m_editor->setText(in.readAll()); + QApplication::restoreOverrideCursor(); + + m_fileName = fileName; + setWindowTitle(fileName); + m_statusBar->showMessage(tr("File loaded."), 2000); +} + +void FileEditorMdiSubWindow::newFile() { + if(checkFileModified("Open New File")) { + return; // something went wrong while saving the old file + } + m_fileName = "<unnamed>"; + setWindowTitle(m_fileName); + //m_simpleEditor->setPlainText(""); +} + +int FileEditorMdiSubWindow::checkFileModified(QString msg) { + if(m_modified) { + int decision + = QMessageBox::question(this, + msg, + "Do you want to save the current file?", + QMessageBox::Yes, QMessageBox::No); + + if(decision == QMessageBox::Yes) { + saveFile(); + if(m_modified) { + // If the user attempted to save the file, but it's still + // modified, then probably something went wrong, so return error + return(1); + } + } + } + return(0); +} + +void FileEditorMdiSubWindow::saveFile() { + if(m_fileName.isEmpty()) { + m_fileName = QFileDialog::getSaveFileName(this, "Save File", m_fileName); + if(m_fileName.isEmpty()) + return; + } + + QFile file(m_fileName); + if (!file.open(QFile::WriteOnly)) { + QMessageBox::warning(this, tr("File Editor"), + tr("Cannot write file %1:\n%2.") + .arg(m_fileName) + .arg(file.errorString())); + return; + } + + QTextStream out(&file); + QApplication::setOverrideCursor(Qt::WaitCursor); + out << m_editor->text(); + QApplication::restoreOverrideCursor(); + m_statusBar->showMessage(tr("File saved"), 2000); +} + +void FileEditorMdiSubWindow::saveFileAs() {/* + QString saveFileName = QFileDialog::getSaveFileName(this, "Save File", m_fileName); + if(saveFileName.isEmpty()) + return; + + QFile file(saveFileName); + file.open(QFile::WriteOnly); + + if(file.write(m_simpleEditor->toPlainText().toLocal8Bit()) == -1) { + QMessageBox::warning(this, + "Error Saving File", + QString("The file could not be saved: %1.").arg(file.errorString())); + } else { + m_simpleEditor->document()->setModified(false); + m_fileName = saveFileName; + setWindowTitle(m_fileName); + } + + file.close();*/ +} + +void FileEditorMdiSubWindow::showToolTipNew() { + m_statusBar->showMessage("Create a new file.", 2000); +} + +void FileEditorMdiSubWindow::showToolTipSave() { + m_statusBar->showMessage("Save the file.", 2000); +} + +void FileEditorMdiSubWindow::showToolTipSaveAs() { + m_statusBar->showMessage("Save the file as.", 2000); +} +void FileEditorMdiSubWindow::showToolTipUndo() { + m_statusBar->showMessage("Revert previous changes.", 2000); +} + +void FileEditorMdiSubWindow::showToolTipRedo() { + m_statusBar->showMessage("Append previous changes.", 2000); +} + +void FileEditorMdiSubWindow::registerModified(bool modified) { + m_modified = modified; +} + +void FileEditorMdiSubWindow::construct() { + QStyle *style = QApplication::style(); + setWidget(new QWidget()); + m_toolBar = new QToolBar(this); + m_statusBar = new QStatusBar(this); + m_editor = new QsciScintilla(this); + m_editor->setMarginLineNumbers(QsciScintilla::TextMargin, true); + m_editor->setMarginWidth(QsciScintilla::TextMargin, "xxxx"); + + QAction *newAction = new QAction(style->standardIcon(QStyle::SP_FileIcon), + "", m_toolBar); + QAction *saveAction = new QAction(style->standardIcon(QStyle::SP_DriveHDIcon), + "", m_toolBar); + QAction *saveActionAs = new QAction(style->standardIcon(QStyle::SP_DriveFDIcon), + "", m_toolBar); + QAction *undoAction = new QAction(style->standardIcon(QStyle::SP_ArrowLeft), + "", m_toolBar); + QAction *redoAction = new QAction(style->standardIcon(QStyle::SP_ArrowRight), + "", m_toolBar); + + m_toolBar->addAction(newAction); + m_toolBar->addAction(saveAction); + m_toolBar->addAction(saveActionAs); + m_toolBar->addAction(undoAction); + m_toolBar->addAction(redoAction); + + QVBoxLayout *layout = new QVBoxLayout(); + layout->addWidget(m_toolBar); + layout->addWidget(m_editor); + layout->addWidget(m_statusBar); + layout->setMargin(2); + widget()->setLayout(layout); + + connect(newAction, SIGNAL(triggered()), this, SLOT(newFile())); + connect(undoAction, SIGNAL(triggered()), m_editor, SLOT(undo())); + connect(redoAction, SIGNAL(triggered()), m_editor, SLOT(redo())); + connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile())); + connect(saveActionAs, SIGNAL(triggered()), this, SLOT(saveFileAs())); + + connect(newAction, SIGNAL(hovered()), this, SLOT(showToolTipNew())); + connect(undoAction, SIGNAL(hovered()), this, SLOT(showToolTipUndo())); + connect(redoAction, SIGNAL(hovered()), this, SLOT(showToolTipRedo())); + connect(saveAction, SIGNAL(hovered()), this, SLOT(showToolTipSave())); + connect(saveActionAs, SIGNAL(hovered()), this, SLOT(showToolTipSaveAs())); + + m_fileName = ""; + setWindowTitle(m_fileName); + show(); +}