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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui/src/FileEditorMdiSubWindow.cpp	Sun Jul 17 17:45:05 2011 +0200
@@ -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();
+}