/*************************************************************************** Copyright 2008 Avgoustinos Kadis ***************************************************************************/ /*************************************************************************** * * * 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 "script.h" #include #include #include Script::Script ( QString file ) { m_file = file; m_activated = false; } Script::~Script() { if (m_object) delete m_object; } bool Script::isActivated() { return m_activated; } void Script::activate() { kDebug() << "Activating Script" << fileName(); if ( isActivated() ) { kDebug() << "Script already activated"; return; } if ( !exists() ) { kDebug() << "Script file given does not exist"; m_errorMessage = i18n("The script file does not exist."); return; } // Create the script container. m_object is the parent QObject, // so that our action instance will be destroyed once the m_object // is destroyed. m_object = new QObject(); Kross::Action* action = new Kross::Action ( m_object, m_file ); // Publish our myobject instance and connect signals with // scripting functions. QMapIterator i ( m_scriptObjects ); while ( i.hasNext() ) { i.next(); kDebug() << i.key(); action->addObject ( i.value() , i.key(), Kross::ChildrenInterface::AutoConnectSignals ); } // Set the file to be execute action->setFile ( m_file ); // Execute the script. action->trigger(); m_activated = !action->isFinalized(); if (!m_activated) { kDebug() << "Script not activated"; QString msg = action->errorMessage(); QString trace = action->errorTrace(); msg.replace('<', "<").replace('\n',"
"); trace.replace('<', "<").replace('\n',"
"); m_errorMessage = "

"+i18n("Error in file %1 at line %2:", fileName(), action->errorLineNo())+"
"+msg+"
" +i18nc("debug information in error message", "Backtrace:")+ "
"+trace+"

"; } } void Script::deactivate() { if ( m_object ) delete m_object; m_activated = false; } bool Script::exists() { QFileInfo fileInfo ( m_file ); return fileInfo.exists(); } QString Script::fileName() { return m_file; } void Script::addObject ( QString name, QObject * object ) { m_scriptObjects.insert ( name,object ); } void Script::addObjects ( QMap objects ) { m_scriptObjects.unite ( objects ); } QString Script::errorMessage() { return m_errorMessage; }