Subversion Repositories Scribus

Rev

Rev 19009 | Rev 19101 | 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.
*/

/***************************************************************************
    begin                : Jan 2005
    copyright            : (C) 2005 by Craig Bradney
    email                : cbradney@zip.com.au
 ***************************************************************************/


/***************************************************************************
 *                                                                         *
 *   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 <QMenu>
#include <QIcon>
#include <QVector>
#include "scraction.h"
#include "scribus.h"
#include "scribusdoc.h"
#include "util_icon.h"

ScrAction::ScrAction( QObject * parent ) : QAction( parent )
{
        initScrAction();
}

ScrAction::ScrAction( const QString & menuText, QKeySequence accel, QObject * parent ) : QAction( menuText, parent )
{
        setShortcut(accel);
        initScrAction();
}

ScrAction::ScrAction(ActionType aType, const QString & menuText, QKeySequence accel, QObject * parent, QVariant d) : QAction( menuText, parent )
{
        setShortcut(accel);
        initScrAction();
        setData(d);
        _actionType=aType;

        if (_actionType!=Normal)
                connect (this, SIGNAL(triggered()), this, SLOT(triggeredToTriggeredData()));
}

ScrAction::ScrAction(ActionType aType, const QPixmap & icon16, const QPixmap & icon22, const QString & menuText, QKeySequence accel, QObject * parent, QVariant d) : QAction( QIcon(icon16), menuText, parent )
{
        setShortcut(accel);
        initScrAction();
        icon().addPixmap(icon22, QIcon::Normal, QIcon::On);

        _actionType=aType;
        setData(d);
        if (_actionType!=Normal)
                connect (this, SIGNAL(triggered()), this, SLOT(triggeredToTriggeredData()));
}

ScrAction::ScrAction( const QPixmap & icon16, const QPixmap & icon22, const QString & menuText, QKeySequence accel, QObject * parent ) : QAction( QIcon(icon16), menuText, parent )
{
        setShortcut(accel);
        setMenuRole(QAction::NoRole);
        initScrAction();
        icon().addPixmap(icon22, QIcon::Normal, QIcon::On);
}


ScrAction::ScrAction(QKeySequence accel, QObject * parent, QVariant d)
        : QAction( QIcon(QPixmap()), "", parent )
{
        setShortcut(accel);
        initScrAction();
        icon().addPixmap(QPixmap(), QIcon::Normal, QIcon::On);
        _actionType=UnicodeChar;
        setData(d);
        connect (this, SIGNAL(triggered()), this, SLOT(triggeredToTriggeredData()));
}


void ScrAction::initScrAction()
{
        _actionType=ScrAction::Normal;
        menuIndex=-1;
        savedKeySequence=QKeySequence("");
        shortcutSaved=false;
        fakeToggle=false;
}

ScrAction::~ScrAction()
{
}

void ScrAction::triggeredToTriggeredData()
{
        if (_actionType==ScrAction::DataInt)
                emit triggeredData(data().toInt());
        if (_actionType==ScrAction::DataDouble)
                emit triggeredData(data().toDouble());
        if (_actionType==ScrAction::DataQString)
                emit triggeredData(data().toString());
        if (_actionType==ScrAction::DLL)
                qDebug()<<"if (_actionType==ScrAction::DLL): please fix in ScrAction::triggeredToTriggeredData()";
//              emit triggeredData(pluginID);
        if (_actionType==ScrAction::Window)
                qDebug()<<"if (_actionType==ScrAction::Window): please fix in ScrAction::triggeredToTriggeredData()";
//              emit triggeredData(windowID);
        if (_actionType==ScrAction::RecentFile)
                emit triggeredData(data().toString());
        if (_actionType==ScrAction::RecentPaste)
                emit triggeredData(data().toString());
        if (_actionType==ScrAction::RecentScript)
                qDebug()<<"if (_actionType==ScrAction::RecentScript): please fix in ScrAction::triggeredToTriggeredData()";
//              emit triggeredData(text());
        if (_actionType==ScrAction::UnicodeChar)
                emit triggeredUnicodeShortcut(data().toInt());
        if (_actionType==ScrAction::Layer)
                qDebug()<<"if (_actionType==ScrAction::Layer): please fix in ScrAction::triggeredToTriggeredData()";
//              emit triggeredData(layerID);
        if (_actionType==ScrAction::ActionDLL)
                emit triggeredData(((ScribusMainWindow*)parent())->doc);
}

void ScrAction::toggledToToggledData(bool ison)
{
        if (isCheckable())
        {
                if (_actionType==ScrAction::DataInt)
                        emit toggledData(ison, data().toInt());
                if (_actionType==ScrAction::DataDouble)
                        emit toggledData(ison, data().toDouble());
                if (_actionType==ScrAction::DataQString)
                        emit toggledData(ison, data().toString());
                if (_actionType==ScrAction::DLL)
                        qDebug()<<"if (_actionType==ScrAction::DLL): please fix in ScrAction::toggledToToggledData(bool ison)";
//                      emit toggledData(ison, pluginID);
                if (_actionType==ScrAction::Window)
                        emit toggledData(ison, data().toInt());
                if (_actionType==ScrAction::RecentFile)
                        emit toggledData(ison, data().toString());
                if (_actionType==ScrAction::RecentPaste)
                        emit toggledData(ison, data().toString());
                if (_actionType==ScrAction::RecentScript)
                        emit toggledData(ison, text());
                if (_actionType==ScrAction::Layer)
                        emit toggledData(ison, data().toInt());
                // no toggle for UnicodeChar
        }
}

void ScrAction::addedTo ( int index, QMenu * menu )
{
        if (menuIndex==-1) // Add the first time, not for secondary popups.
        {
                menuIndex=index;
                popupMenuAddedTo=menu;
        }
}

QString ScrAction::cleanMenuText()
{
        return text().remove('&').remove("...");
}

void ScrAction::setToolTipFromTextAndShortcut()
{
        QString sct(shortcut().toString());
        if (sct.isEmpty())
                QAction::setToolTip("<qt>" + cleanMenuText() + "</qt>");
        else
                QAction::setToolTip("<qt>" + cleanMenuText() + " (" + sct + ")" + "</qt>");
}

void ScrAction::setStatusTextAndShortcut(const QString& statusText)
{
        QString sct(shortcut().toString());
        if (sct.isEmpty())
                QAction::setStatusTip(statusText);
        else
                QAction::setStatusTip(statusText + " (" + sct + ")");
        //      QAction::setStatusTip("<qt>" + statusText + "</qt>");
        //else
        //      QAction::setStatusTip("<qt>" + statusText + " (" + sct + ")" + "</qt>");
}

int ScrAction::getMenuIndex() const
{
        return menuIndex;
}

bool ScrAction::isDLLAction() const
{
        return _actionType==ScrAction::DLL;
}

int ScrAction::dllID() const
{
        if (_actionType==ScrAction::DLL)
                return data().toInt();
        return -1;
}

void ScrAction::setToggleAction(bool isToggle, bool isFakeToggle)
{
        if (_actionType!=Normal)
        {
                if (isToggle)
                        connect(this, SIGNAL(toggled(bool)), this, SLOT(toggledToToggledData(bool)));
                else
                        disconnect(this, SIGNAL(toggled(bool)), this, SLOT(toggledToToggledData(bool)));
        }
        QAction::setCheckable(isToggle);
        setChecked(isToggle); // set default state of the action's checkbox - PV
        fakeToggle=isFakeToggle;
        //if (fakeToggle)
                //connect(this, toggled(bool), this, triggered());
}

void ScrAction::saveShortcut()
{
        if(!shortcutSaved)
        {
                savedKeySequence=shortcut();
                setShortcut(QKeySequence(""));
                shortcutSaved=true;
        }
}

void ScrAction::restoreShortcut()
{
        if (shortcutSaved)
        {
                setShortcut(savedKeySequence);
                savedKeySequence=QKeySequence("");
                shortcutSaved=false;
        }
}

ScrAction::ActionType ScrAction::actionType()
{
        return _actionType;
}

int ScrAction::actionInt() const
{
        return data().toInt();
}

double ScrAction::actionDouble() const
{
        return data().toDouble();
}

const QString ScrAction::actionQString()
{
        return data().toString();
}

void ScrAction::setTexts(const QString &newText)//#9114, qt3-qt4 change of behaviour bug:, bool setTextToo)
{
        QAction::setText(newText);
//      if (setTextToo)
        QAction::setIconText(cleanMenuText());
}

void ScrAction::toggle()
{
        QAction::toggle();
        if (fakeToggle)
                emit triggered();
}

void ScrAction::setActionQString(const QString &s)
{
        setData(s);
}