/*===========================================================================*\ * * * OpenFlipper * * Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen * * www.openflipper.org * * * *---------------------------------------------------------------------------* * This file is part of OpenFlipper. * * * * OpenFlipper is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation, either version 3 of * * the License, or (at your option) any later version with the * * following exceptions: * * * * If other files instantiate templates or use macros * * or inline functions from this file, or you compile this file and * * link it with other files to produce an executable, this file does * * not by itself cause the resulting executable to be covered by the * * GNU Lesser General Public License. This exception does not however * * invalidate any other reasons why the executable file might be * * covered by the GNU Lesser General Public License. * * * * OpenFlipper 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 Lesser General Public License for more details. * * * * You should have received a copy of the GNU LesserGeneral Public * * License along with OpenFlipper. If not, * * see . * * * \*===========================================================================*/ /*===========================================================================*\ * * * $Revision$ * * $Author$ * * $Date$ * * * \*===========================================================================*/ //============================================================================= // // CLASS Core - IMPLEMENTATION of Comunication with plugins // //============================================================================= //== INCLUDES ================================================================= #include "Core.hh" #include #include "OpenFlipper/BasePlugin/BaseInterface.hh" #include "OpenFlipper/BasePlugin/ToolboxInterface.hh" #include "OpenFlipper/BasePlugin/TextureInterface.hh" #include "OpenFlipper/BasePlugin/PluginFunctions.hh" //== IMPLEMENTATION ========================================================== //======================================================================================== // === Object List Communication ======================= //======================================================================================== /** This function is called by a plugin if it changed something in the object list (source,target,...). The information is passed to all plugins. * @param _identifier Id of the updated object */ void Core::slotObjectUpdated(int _identifier) { if ( OpenFlipper::Options::doSlotDebugging() ) { if ( sender() != 0 ) { if ( sender()->metaObject() != 0 ) { emit log(LOGINFO,"updatedObject( " + QString::number(_identifier) + tr(" ) called by ") + QString( sender()->metaObject()->className() ) ); } } else { emit log(LOGINFO,"updatedObject( " + QString::number(_identifier) + tr(" ) called by Core") ); } } // Disable redraws as everything here has to update the object only once OpenFlipper::Options::redrawDisabled(true); // If we are called for a special object, we update it ourself so the Plugins dont need to do that. BaseObject* object = 0; if ( _identifier != -1 ) { if ( !PluginFunctions::getObject(_identifier,object) ) { emit log(LOGERR,tr("updated_objects called for non existing object with id : ") + QString::number(_identifier) ); return; } } // just inform the plugins as we dont do anything else emit signalObjectUpdated(_identifier); if ( object != 0 ) object->update(); // Reenable redraws OpenFlipper::Options::redrawDisabled(false); // Reset scenegraph but keep scene center! resetScenegraph(false); updateView(); } void Core::slotVisibilityChanged( int _id ) { // tell plugins emit visibilityChanged( _id ); // Reset scenegraph but keep scene center! resetScenegraph(false); updateView(); } /** This function is called if the active object has changed. The information is passed to all plugins. */ void Core::slotObjectSelectionChanged( int _id ) { // just inform the plugins as we dont do anything else emit objectSelectionChanged(_id); // std::cerr << "objectSelection changed triggers updatedObjects for now" << std::endl; // emit updatedObject(_id); } void Core::slotObjectPropertiesChanged( int _id ) { emit objectPropertiesChanged(_id); } //======================================================================================== // === Texture Communication =========================== //======================================================================================== /** Called by a plugin if it created a texture. The information is passed to all plugins. If a texture control plugin is available it has to react on the signal.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotAddTexture( QString _textureName , QString _filename, uint _dimension, int _id) { emit addTexture(_textureName , _filename,_dimension,_id); } /** Called by a plugin if it created a texture. The information is passed to all plugins. If a texture control plugin is available it has to react on the signal.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotAddTexture( QString _textureName , QString _filename, uint _dimension) { emit addTexture(_textureName , _filename,_dimension); } /** Called by a plugin if a texture has to be updated. The information is passed to all plugins. The Plugin providing the given Texture should react on this event.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotUpdateTexture( QString _name , int _identifier){ if ( OpenFlipper::Options::doSlotDebugging() ) { if ( sender() != 0 ) { if ( sender()->metaObject() != 0 ) { emit log(LOGINFO,"slotUpdateTexture( " + _name + " , " + QString::number(_identifier) + tr(" ) called by ") + QString( sender()->metaObject()->className() ) ); } } } emit updateTexture(_name, _identifier); } void Core::slotMultiTextureAdded( QString _textureGroup , QString _name , QString _filename , int _id , int& _textureId ) { emit addMultiTexture( _textureGroup , _name , _filename , _id , _textureId ); } /** Called by a plugin if all textures should be updated. The information is passed to all plugins. All plugins providing textures should react on this event.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotUpdateAllTextures( ){ emit updateAllTextures(); } /** Called by a plugin if the parameters of a texture should be changed. The information is passed to all plugins. A Texturecontrol plugin should react on this event.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotSetTextureMode(QString _textureName, QString _mode, int _id) { if ( OpenFlipper::Options::doSlotDebugging() ) { if ( sender() != 0 ) { if ( sender()->metaObject() != 0 ) { emit log(LOGINFO,"slotSetTextureMode( " + _textureName + " , " + _mode + " , " + QString::number(_id) + tr(" ) called by ") + QString( sender()->metaObject()->className() ) ); } } } emit setTextureMode(_textureName,_mode,_id); } /** Called by a plugin if the parameters of a texture should be changed. The information is passed to all plugins. A Texturecontrol plugin should react on this event.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotSetTextureMode(QString _textureName ,QString _mode) { if ( OpenFlipper::Options::doSlotDebugging() ) { if ( sender() != 0 ) { if ( sender()->metaObject() != 0 ) { emit log(LOGINFO,"slotSetTextureMode( " + _textureName + " , " + _mode + tr(" ) called by ") + QString( sender()->metaObject()->className() ) ); } } } emit setTextureMode(_textureName,_mode); } /** Called by a plugin if it updated a texture. The information is passed to all plugins. If a texture control plugin is available it has to react on the signal and update the visualization of the texture.\n * See in the documentation of the texture plugin interfaces for further detail. */ void Core::slotTextureUpdated( QString _textureName , int _identifier ) { if ( OpenFlipper::Options::doSlotDebugging() ) { if ( sender() != 0 ) { if ( sender()->metaObject() != 0 ) { emit log(LOGINFO,"slotTextureUpdated( " + _textureName + " , " + QString::number(_identifier) + tr(" ) called by ") + QString( sender()->metaObject()->className() ) ); } } } emit updatedTextures(_textureName,_identifier); } /** Called by plugins if texture mode should be switched */ void Core::slotSwitchTexture( QString _textureName, int _id ) { emit switchTexture(_textureName, _id); } /** Called by plugins if texture mode should be switched */ void Core::slotSwitchTexture( QString _textureName ) { emit switchTexture(_textureName); } /** Called by plugins if texture image should be changed */ void Core::slotTextureChangeImage( QString _textureName , QImage& _image ) { emit textureChangeImage( _textureName ,_image ); } /** Called by plugins if texture image should be changed */ void Core::slotTextureChangeImage( QString _textureName , QImage& _image , int _id ) { emit textureChangeImage( _textureName , _image , _id ); } //======================================================================================== // === Backup Communication ============================ //======================================================================================== /// Called if a backup is requested by the plugins void Core::backupRequest( int _id , QString _name ) { emit createBackup( _id , _name , nextBackupId_); ++nextBackupId_; } //======================================================================================== // === Object Manager ============================ //======================================================================================== /// This slot is called by the object manager when a new object is created void Core::newObject(int _objectId) { BaseObject* baseObject = 0; PluginFunctions::getObject(_objectId,baseObject); if ( baseObject ) { connect( baseObject, SIGNAL(visibilityChanged(int)), this, SLOT(slotVisibilityChanged(int)), Qt::DirectConnection) ; connect( baseObject, SIGNAL(objectSelectionChanged(int)),this, SLOT(slotObjectSelectionChanged(int)), Qt::DirectConnection ); } else { emit log(LOGERR,tr("newObject received from objectManager with invalid id! This should not happen. The new Object will not work correctly!")); } } //=============================================================================