PluginCommunication.cc 15.1 KB
Newer Older
1 2 3
/*===========================================================================*\
 *                                                                           *
 *                              OpenFlipper                                  *
Jan Möbius's avatar
Jan Möbius committed
4
 *      Copyright (C) 2001-2010 by Computer Graphics Group, RWTH Aachen      *
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
 *                           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 <http://www.gnu.org/licenses/>.                                      *
 *                                                                           *
\*===========================================================================*/

/*===========================================================================*\
 *                                                                           *
 *   $Revision$                                                         *
 *   $Author$                                                      *
 *   $Date$                   *
 *                                                                           *
\*===========================================================================*/
Jan Möbius's avatar
 
Jan Möbius committed
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62




//=============================================================================
//
//  CLASS Core - IMPLEMENTATION of Comunication with plugins
//
//=============================================================================


//== INCLUDES =================================================================

#include "Core.hh"

#include <QToolBox>

#include "OpenFlipper/BasePlugin/BaseInterface.hh"
#include "OpenFlipper/BasePlugin/ToolboxInterface.hh"
#include "OpenFlipper/BasePlugin/TextureInterface.hh"

63
#include "OpenFlipper/BasePlugin/PluginFunctionsCore.hh"
64

Jan Möbius's avatar
Jan Möbius committed
65
//== IMPLEMENTATION ==========================================================
Jan Möbius's avatar
 
Jan Möbius committed
66 67 68

//========================================================================================
// ===             Object List Communication                       =======================
Jan Möbius's avatar
Jan Möbius committed
69 70
//========================================================================================

Jan Möbius's avatar
 
Jan Möbius committed
71 72 73
/** 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
 */
74
void Core::slotObjectUpdated(int _identifier, UpdateType _type) {
Jan Möbius's avatar
Jan Möbius committed
75 76 77
  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
78 79
        emit log(LOGINFO,"updatedObject( " + QString::number(_identifier) + ", " + updateTypeName(_type)
                 + tr(" ) called by ") + QString( sender()->metaObject()->className() ) );
Jan Möbius's avatar
Jan Möbius committed
80
      }
81
    } else {
82
      emit log(LOGINFO,"updatedObject( " + QString::number(_identifier) + ", " + updateTypeName(_type) + tr(" ) called by Core") );
Jan Möbius's avatar
Jan Möbius committed
83 84 85
    }
  }

86 87 88
  // Disable redraws as everything here has to update the object only once
  OpenFlipper::Options::redrawDisabled(true);

89
  // If we are called for a special object, we update it ourself so the Plugins dont need to do that.
90
  BaseObject* object = 0;
91
  if ( _identifier != -1 ) {
Jan Möbius's avatar
 
Jan Möbius committed
92
    if ( !PluginFunctions::getObject(_identifier,object) ) {
93
      emit log(LOGERR,tr("updated_objects called for non existing object with id : ") + QString::number(_identifier) );
94 95 96 97
      return;
    }
  }

98
  // just inform the plugins as we dont do anything else (Do deprecated and new updatedObjects here)
99
  emit signalObjectUpdated(_identifier);
Dirk Wilden's avatar
Dirk Wilden committed
100
  emit signalObjectUpdated(_identifier, _type);
101

102
  if ( object != 0 )
103
    object->update(_type);
104 105 106 107

  // Reenable redraws
  OpenFlipper::Options::redrawDisabled(false);

Jan Möbius's avatar
Jan Möbius committed
108

109 110
  // Reset scenegraph but keep scene center!
  resetScenegraph(false);
111

112
  updateView();
Jan Möbius's avatar
Jan Möbius committed
113 114
}

115
void Core::slotVisibilityChanged( int _id ) {
116

117 118
  // tell plugins
  emit visibilityChanged( _id );
119

120 121 122
  // Reset scenegraph but keep scene center!
  resetScenegraph(false);
  
123
  updateView();
124 125 126 127 128 129 130 131 132
}

/** 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);

133
  updateView();
134
}
Jan Möbius's avatar
 
Jan Möbius committed
135

Jan Möbius's avatar
Jan Möbius committed
136 137 138 139 140
void Core::slotObjectPropertiesChanged( int _id )
{
  emit objectPropertiesChanged(_id);
}

Jan Möbius's avatar
 
Jan Möbius committed
141 142 143 144 145
//========================================================================================
// ===             Texture Communication                       ===========================
//========================================================================================


Dirk Wilden's avatar
Dirk Wilden committed
146 147 148 149
/** 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) {
Jan Möbius's avatar
Jan Möbius committed
150 151 152 153 154 155 156 157 158 159 160
  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
        emit log(LOGINFO,"addTexture( " + _textureName + "," + _filename + ","  +  QString::number(_dimension) + ", " + QString::number(_id) +  tr(" ) called by ") +
        QString( sender()->metaObject()->className() ) );
      }
    } else {
      emit log(LOGINFO,"addTexture( " + _textureName + "," + _filename + "," +  QString::number(_dimension) + ", " + QString::number(_id) +  tr(" ) called by Core") );
    }
  }
  
Dirk Wilden's avatar
Dirk Wilden committed
161 162 163
  emit addTexture(_textureName , _filename,_dimension,_id);
}

Jan Möbius's avatar
 
Jan Möbius committed
164 165 166 167
/** 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) {
Jan Möbius's avatar
Jan Möbius committed
168 169 170 171 172 173 174 175 176 177 178 179
  
  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
        emit log(LOGINFO,"slotAddTexture( " + _textureName + "," + _filename + ","  +  QString::number(_dimension)  +  tr(" ) called by ") +
        QString( sender()->metaObject()->className() ) );
      }
    } else {
      emit log(LOGINFO,"slotAddTexture( " + _textureName + "," + _filename + "," +", " +  QString::number(_dimension) + tr(" ) called by Core") );
    }
  }
  
Jan Möbius's avatar
Jan Möbius committed
180
  emit addTexture(_textureName , _filename,_dimension);
Jan Möbius's avatar
 
Jan Möbius committed
181 182 183 184 185 186
}

/** 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){
187 188 189 190

  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
191
        emit log(LOGINFO,"slotUpdateTexture( "  + _name + " , " + QString::number(_identifier) + tr(" ) called by ") +
192 193 194 195 196
                 QString( sender()->metaObject()->className() ) );
      }
    }
  }

Jan Möbius's avatar
Jan Möbius committed
197
  emit updateTexture(_name, _identifier);
Jan Möbius's avatar
 
Jan Möbius committed
198 199
}

200 201

void Core::slotMultiTextureAdded( QString _textureGroup , QString _name , QString _filename , int _id , int& _textureId ) {
Jan Möbius's avatar
Jan Möbius committed
202 203 204 205 206 207 208 209 210 211 212 213
  
  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
        emit log(LOGINFO,"slotMultiTextureAdded( " + _textureGroup + ", " + _name + "," + _filename + ","  + QString::number(_id) + tr(" ) called by ") +
        QString( sender()->metaObject()->className() ) );
      }
    } else {
      emit log(LOGINFO,"slotMultiTextureAdded( " + _textureGroup + ", " + _name + "," + _filename + ","  + QString::number(_id) + tr(" ) called by Core") );
    }
  }
  
214 215 216
  emit addMultiTexture( _textureGroup , _name , _filename , _id , _textureId  );
}

Jan Möbius's avatar
 
Jan Möbius committed
217 218 219 220
/** 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( ){
Jan Möbius's avatar
Jan Möbius committed
221
  emit updateAllTextures();
Jan Möbius's avatar
 
Jan Möbius committed
222 223
}

Dirk Wilden's avatar
Dirk Wilden committed
224 225 226 227 228 229 230 231
/** 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 ) {
232
        emit log(LOGINFO,"slotSetTextureMode( " + _textureName + " , " + _mode + " , " + QString::number(_id) + tr(" ) called by ") +
Dirk Wilden's avatar
Dirk Wilden committed
233 234 235 236 237 238 239 240
                 QString( sender()->metaObject()->className() ) );
      }
    }
  }

  emit setTextureMode(_textureName,_mode,_id);
}

Jan Möbius's avatar
 
Jan Möbius committed
241 242 243 244
/** 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) {
245 246 247 248

  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
249
        emit log(LOGINFO,"slotSetTextureMode( " + _textureName + " , " + _mode + tr(" ) called by ") +
250 251 252 253 254
                 QString( sender()->metaObject()->className() ) );
      }
    }
  }

Jan Möbius's avatar
Jan Möbius committed
255
  emit setTextureMode(_textureName,_mode);
Jan Möbius's avatar
 
Jan Möbius committed
256 257 258 259 260 261
}

/** 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 ) {
262 263 264
  if ( OpenFlipper::Options::doSlotDebugging() ) {
    if ( sender() != 0 ) {
      if ( sender()->metaObject() != 0 ) {
265
        emit log(LOGINFO,"slotTextureUpdated( " + _textureName + " , " + QString::number(_identifier) + tr(" ) called by ") +
266 267 268 269
                 QString( sender()->metaObject()->className() ) );
      }
    }
  }
Jan Möbius's avatar
Jan Möbius committed
270
  emit updatedTextures(_textureName,_identifier);
Jan Möbius's avatar
 
Jan Möbius committed
271 272
}

Dirk Wilden's avatar
Dirk Wilden committed
273 274 275 276 277 278
/** Called by plugins if texture mode should be switched
 */
void Core::slotSwitchTexture( QString _textureName, int _id ) {
  emit switchTexture(_textureName, _id);
}

Jan Möbius's avatar
 
Jan Möbius committed
279 280 281 282 283 284
/** Called by plugins if texture mode should be switched
 */
void Core::slotSwitchTexture( QString _textureName ) {
  emit switchTexture(_textureName);
}

285 286 287 288 289 290 291 292 293 294 295 296 297

/** 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 );
}

298 299 300 301 302 303 304 305 306 307 308 309
/** Called by plugins if texture image should be fetched
 */
void Core::slotTextureGetImage( QString _textureName , QImage& _image ) {
  emit textureGetImage( _textureName ,_image );
}

/** Called by plugins if texture image should be fetched
 */
void Core::slotTextureGetImage( QString _textureName , QImage& _image , int _id )  {
  emit textureGetImage( _textureName , _image , _id );
}

310 311 312 313 314 315 316 317 318 319 320 321
/** Called by plugins if texture index should be fetched
 */
void Core::slotTextureIndex( QString _textureName, int _id, int& _index){
  emit textureIndex( _textureName, _id, _index);
}

/** Called by plugins if texture name should be fetched
 */
void Core::slotTextureName( int _id, int _textureIndex, QString& _textureName){
  emit textureName( _id, _textureIndex, _textureName);
}

322 323 324 325 326 327 328 329 330 331 332 333
/** Called by plugins if current texture name should be returned
 */
void Core::slotGetCurrentTexture( int _id, QString& _textureName ){
  emit getCurrentTexture( _id, _textureName );
}

/** Called by plugins if texture image should be fetched
 */
void Core::slotGetSubTextures( int _id, QString _multiTextureName, QStringList& _subTextures ){
  emit getSubTextures( _id, _multiTextureName, _subTextures );
}

Jan Möbius's avatar
Jan Möbius committed
334 335 336
//========================================================================================
// ===            Object Manager                              ============================
//========================================================================================
Jan Möbius's avatar
 
Jan Möbius committed
337

Jan Möbius's avatar
Jan Möbius committed
338 339
/// This slot is called by the object manager when a new object is created
void Core::newObject(int _objectId) {
340
  
341 342 343 344
   BaseObject* baseObject = 0;
   PluginFunctions::getObject(_objectId,baseObject);
   
   if ( baseObject ) {
345 346 347
    connect( baseObject, SIGNAL(visibilityChanged(int)),       this, SLOT(slotVisibilityChanged(int)),       Qt::DirectConnection) ;
    connect( baseObject, SIGNAL(objectSelectionChanged(int)),  this, SLOT(slotObjectSelectionChanged(int)),  Qt::DirectConnection );
    connect( baseObject, SIGNAL(objectPropertiesChanged(int)), this, SLOT(slotObjectPropertiesChanged(int)), Qt::DirectConnection );
348 349
   } else {
     emit log(LOGERR,tr("newObject received from objectManager with invalid id! This should not happen. The new Object will not work correctly!"));
350 351
   }
   
Jan Möbius's avatar
Jan Möbius committed
352
}
Jan Möbius's avatar
 
Jan Möbius committed
353

Jan Möbius's avatar
Jan Möbius committed
354 355 356 357
/// This slot is called by the object manager when a object is deleted
void Core::deletedObject(int _objectId) {
}

Jan Möbius's avatar
 
Jan Möbius committed
358 359


Jan Möbius's avatar
Jan Möbius committed
360 361


Jan Möbius's avatar
 
Jan Möbius committed
362
//=============================================================================