Subversion Repositories Scribus

Rev

Rev 17326 | Rev 17517 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/

/***************************************************************************
                          scribuswin.cpp  -  description
                             -------------------
    begin                : Mit Nov 6 2002
    copyright            : (C) 2002 by Franz Schmid
    email                : Franz.Schmid@altmuehlnet.de
 ***************************************************************************/


/***************************************************************************
 *                                                                         *
 *   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 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/


#include "scribuswin.h"
#include "scribus.h"
#include "commonstrings.h"
#include "fileloader.h"
#include "ui/pagepalette.h"
#include "ui/pageselector.h"
#include "ui/scrspinbox.h"
#include "ui/storyeditor.h"
#include "util.h"
#include "util_file.h"
#include "util_icon.h"

#include <QApplication>
#include <QCloseEvent>
#include <QDir>
#include <QFileInfo>
#include <QMessageBox>

ScribusWin::ScribusWin(QWidget* parent, ScribusDoc* doc) : QMainWindow(parent)
{
        setWindowIcon(loadIcon("AppIcon2.png"));
        setAttribute(Qt::WA_DeleteOnClose);
        m_Doc = doc;
        currentDir = QDir::currentPath();
}

void ScribusWin::setMainWindow(ScribusMainWindow *mw)
{
        m_MainWindow=mw;
}

void ScribusWin::setView(ScribusView* newView)
{
        m_View = newView;
        ++m_Doc->viewCount;
        winIndex = ++m_Doc->viewID;
        statusFrame = new QFrame(this);
        statusFrameLayout = new QHBoxLayout(statusFrame);
        statusFrameLayout->setMargin(0);
        statusFrameLayout->setSpacing(0);
        m_View->unitSwitcher->setParent(statusFrame);
        m_View->previewQualitySwitcher->setParent(statusFrame);
        m_View->layerMenu->setParent(statusFrame);
        m_View->zoomOutToolbarButton->setParent(statusFrame);
        m_View->zoomDefaultToolbarButton->setParent(statusFrame);
        m_View->zoomInToolbarButton->setParent(statusFrame);
        m_View->pageSelector->setParent(statusFrame);
        m_View->zoomSpinBox->setParent(statusFrame);
        m_View->cmsToolbarButton->setParent(statusFrame);
        m_View->previewToolbarButton->setParent(statusFrame);
        m_View->visualMenu->setParent(statusFrame);
        statusFrameLayout->addWidget(m_View->unitSwitcher);
        statusFrameLayout->addWidget(m_View->previewQualitySwitcher);
        statusFrameLayout->addWidget(m_View->zoomSpinBox);
        statusFrameLayout->addWidget(m_View->zoomOutToolbarButton);
        statusFrameLayout->addWidget(m_View->zoomDefaultToolbarButton);
        statusFrameLayout->addWidget(m_View->zoomInToolbarButton);
        statusFrameLayout->addWidget(m_View->pageSelector);
        statusFrameLayout->addWidget(m_View->layerMenu);
        QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
        statusFrameLayout->addItem( spacer );
        statusFrameLayout->addWidget(m_View->cmsToolbarButton);
        statusFrameLayout->addWidget(m_View->previewToolbarButton);
        statusFrameLayout->addWidget(m_View->visualMenu);
        statusBar()->addPermanentWidget(statusFrame, 4);
        currentDir = QDir::currentPath();
        setCentralWidget(newView);
}

void ScribusWin::slotAutoSave()
{
        if ((m_Doc->hasName) && (m_Doc->isModified()))
        {
                //#8081 : change behavior of autosave, autosave writes now to an .autosave file
                //instead of overwriting source document
                //moveFile(m_Doc->DocName, m_Doc->DocName+".bak");
                FileLoader fl(m_Doc->DocName);
                if (fl.saveFile(m_Doc->DocName+".autosave", m_Doc, 0))
                {
                        //#8081 related : do not unset modified flag until user really save file
                        //m_Doc->setModified(false);
                        setWindowTitle(QDir::toNativeSeparators(m_Doc->DocName));
                        qApp->processEvents();
                        emit AutoSaved();
                }
        }
}

void ScribusWin::closeEvent(QCloseEvent *ce)
{
        if (m_Doc->symbolEditMode())
        {
                m_MainWindow->editSymbolEnd();
                ce->ignore();
                return;
        }
        else
        {
                if (m_Doc->isModified() && (m_Doc->viewCount == 1))
                {
                        qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
                        int exit = QMessageBox::information(m_MainWindow, CommonStrings::trWarning, tr("Document:")+" "+
                                                                                                QDir::toNativeSeparators(m_Doc->DocName)+"\n"+
                                                                                                tr("has been changed since the last save."),
                                                                                                QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,
                                                                                                QMessageBox::Cancel);
                        if (exit == QMessageBox::Cancel)
                        {
                                ce->ignore();
                                return;
                        }
                        if (exit == QMessageBox::Save)
                        {
                                if (m_MainWindow->slotFileSave())
                                {
                                        if (m_Doc==m_MainWindow->storyEditor->currentDocument())
                                                m_MainWindow->storyEditor->close();
                                }
                                else
                                {
                                        ce->ignore();
                                        return;
                                }
                        }
                }
                m_MainWindow->DoFileClose();
        }
        ce->accept();
}

void ScribusWin::resizeEvent(QResizeEvent *re)
{
        statusBar()->setSizeGripEnabled(!isMaximized());
}

void ScribusWin::setMasterPagesPaletteShown(bool isShown) const
{
        QString pageName;
        PagePalette* pagePalette = m_MainWindow->pagePalette;
        if (isShown && m_Doc->masterPageMode())
        {
                pageName = m_Doc->currentPage()->pageName();
                pagePalette->startMasterPageMode(pageName);
        }
        else if (pagePalette->masterPageMode())
        {
                pagePalette->endMasterPageMode();
        }
}

void ScribusWin::windowActivationChange ( bool oldActive )
{
        if( isActiveWindow() )
                QDir::setCurrent( currentDir );
        else
                currentDir = QDir::currentPath();
        QMainWindow::windowActivationChange( oldActive );
}