Subversion Repositories Scribus

Rev

Rev 12322 | Rev 12340 | 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.
 */

/***************************************************************************
*                                                                         *
*   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 "style.h"

#include "prefsmanager.h"
#include "desaxe/digester.h"
#include "desaxe/simple_actions.h"
#include "desaxe/saxiohelper.h"

#include <QDebug>
#include <QUuid>

const QString Style::INHERIT_PARENT = "\n";

Style::Style()
        : m_isDefaultStyle(false), m_uuid( QUuid::createUuid().toString() ), m_context(NULL), m_contextversion(-1), m_parent(QUuid().toString()), m_shortcut()
{
        m_name = m_uuid;
        StylesLibrary::add(m_name,this);
}


Style::Style( QString n, QString lang  )
        : m_isDefaultStyle(false), m_uuid( QUuid::createUuid().toString() ), m_name(n), m_parent(QUuid().toString()), m_shortcut()
{
        StylesLibrary::add(m_name,this);
}

Style::Style(const Style& o)
        : SaxIO(),
        m_isDefaultStyle(o.m_isDefaultStyle),
        m_uuid( QUuid::createUuid().toString() ),
        m_name(o.m_name),
//      m_namesDB(o.m_namesDB),
        m_userName(o.m_userName),
        m_context(o.m_context),
        m_contextversion(o.m_contextversion),
        m_parent(o.m_parent),
        m_shortcut(o.m_shortcut)
{
        StylesLibrary::add(m_uuid,this);
}

Style& Style::operator=(const Style& o)
{ //assert(typeinfo() == o.typeinfo());
        m_isDefaultStyle = o.m_isDefaultStyle;
        m_name = o.m_name;
        m_uuid = o.m_uuid;
        m_parent = o.m_parent;
        m_shortcut = o.m_shortcut;
        return *this;
}


Style::~ Style()
{
        StylesLibrary::remove(m_name);
}


QString Style::displayName(/*const QString& lang*/) const
{
//      if ( !hasParent() || !m_context)
//      {
//              if(!lang.isEmpty())
//              {
//                      if(m_namesDB.contains(lang))
//                              return m_namesDB.value(lang);
//                      else
//                      {
//                              return lang + "-" + m_name;
//                      }
//              }
//              else
//              {
//                      QString la(PrefsManager::instance()->guiLanguage());
//                      if(m_namesDB.contains(la))
//                              return m_namesDB.value(la);
//                      else
//                      {
//                              return la+ "-" + m_name;
//                      }
//              }
                return m_userName;
//      }
//      else
//      {
//              return parentStyle()->displayName(/*lang*/) + "+";
//      }
       
}

QString Style::uuid() const
{
//      qDebug()<<"NAME"<<m_name<<m_userName<<m_parent;
        return m_name;
}

void Style::setName(const QString& n/* , const QString& lang*/)
{
//      if(!lang.isEmpty())
//      {
//              if(!n.isEmpty())
//                      m_namesDB[lang] = n;
//              else
//                      m_namesDB[lang] = lang+"-"+m_name;
//      }
//      else
//      {
//              QString la(PrefsManager::instance()->guiLanguage());
//              if(!n.isEmpty())
//                      m_namesDB[la] = n;
//              else
//                      m_namesDB[la] = la+"-"+m_name;
//      }
        m_userName = n;
        qDebug()<<"SET_NAME"<<m_name<<m_userName<<m_parent;

}

bool Style::hasName(/*const QString& lang*/) const
{
//      if( lang.isEmpty() )
//      {
//              return m_namesDB.contains(PrefsManager::instance()->guiLanguage());
//      }
//      
//      return m_namesDB.contains(lang);
        qDebug()<<"HAS_NAME"<<m_name<<m_userName<<m_parent;
        return m_name != m_userName; // here we can’t have anon style
}

QString Style::parent() const
{
        return m_parent;
}

void Style::setParent(const QString& p)
{
        if (m_parent != p)
                m_contextversion = -1;
       
//      if(QUuid(p).isNull())
//               m_parent = QUuid().toString();
//      else
//              m_parent = p;
        m_parent = QUuid(p).toString();
        qDebug()<<"SET_PARENT("<<p<<")"<< m_userName << m_parent ;
}              

bool Style::hasParent() const
{
        return !QUuid(m_parent).isNull() ;
}






void Style::setContext(const StyleContext* context)
{
        if (m_context != context) {
                m_context = context;
                m_contextversion = -1;
                assert( !m_context || m_context->checkConsistency() );
        }
        //qDebug(QString("setContext of %2 context %1").arg(reinterpret_cast<uint>(m_context),16).arg(reinterpret_cast<uint>(this),16));
}


void Style::update(const StyleContext* b)
{
        if (b)
                m_context = b;
        if (m_context)
                m_contextversion = m_context->version();
}

void Style::validate() const
{
        if (m_context && m_contextversion != m_context->version()) {
                const_cast<Style*>(this)->update(m_context);
                assert( m_context->checkConsistency() );
        }
}


const Style* Style::parentStyle() const
{
//      qDebug()<<"parentStyle()"<< m_userName << m_parent;
       
        const Style * par = m_context ? m_context->resolve(m_parent) : NULL;
        if (par == this)
        {
                return NULL;
        }
        else
        {
                if( !par && hasParent() )
                {
                        qDebug()<<"PARENT_STYLE_FAILED"<<m_context<< m_userName << m_parent;
                       
                }
                return par;
        }
}

void Style::saxxAttributes(Xml_attr& attr) const
{
        if (!uuid().isEmpty())
                attr["uuid"] = uuid();
        if(!parent().isEmpty())
                attr["parent"] = parent();
        if (!shortcut().isEmpty())
                attr["shortcut"] = shortcut();
}

void Style::applyStyle(const Style* other)
{
        if (other->hasParent())
                setParent( other->parent() == INHERIT_PARENT? QUuid().toString() :other->parent());
        m_contextversion = -1;
}

void Style::eraseStyle(const Style* other)
{
        if (other->parent() == parent())
                setParent(QUuid().toString());
        m_contextversion = -1;
}