BaseInterface.hh 7.14 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  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.
15
//
Jan Möbius's avatar
 
Jan Möbius committed
16 17 18 19
//  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.
20
//
Jan Möbius's avatar
 
Jan Möbius committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision$
//   $Author$
//   $Date$
//
//=============================================================================




//
// C++ Interface: BasePlugin
//
38
// Description:
Jan Möbius's avatar
 
Jan Möbius committed
39 40 41 42 43
//
//
// Author: Jan Moebius <jan_moebius@web.de>, (C) 2007
//

44 45
#ifndef BASEINTERFACE_HH
#define BASEINTERFACE_HH
Jan Möbius's avatar
 
Jan Möbius committed
46 47 48 49

 #include <QtGui>
 #include <QMenuBar>
 #include <OpenFlipper/common/Types.hh>
50

Jan Möbius's avatar
 
Jan Möbius committed
51
 /** \brief Interface class from which all plugins have to be created.
52
  *
Jan Möbius's avatar
 
Jan Möbius committed
53
  * You have to implement at least name and description for your plugin.
54
  * All other functions and signals are optional. If you want to implement or use
Jan Möbius's avatar
 
Jan Möbius committed
55 56 57 58 59
  * them just add them to your plugin header.
 */
class BaseInterface {
   signals :
      /** \brief Update current view in Main Application
60
       *
Jan Möbius's avatar
 
Jan Möbius committed
61 62 63 64
       *  Emit this Signal if the examiner widget in the Main Application should update the current view.
       *  This should be done for example if you changed a scenegraph node or a mesh and have
       *  to redraw it.
      */
65
      virtual void updateView() {};
66

Jan Möbius's avatar
 
Jan Möbius committed
67
      /** \brief The object list has been changed by this plugin
68
       *
69 70
       *  Emit this Signal, if you updated an object (e.g. Source or Target changed).\n
       *  If you changed the element itself (geometry, topology,..) You also have to emit this signal.\n
Jan Möbius's avatar
 
Jan Möbius committed
71 72
       *  Dont emit this Signal in BaseInterface::slotObjectUpdated() as this causes an endless Loop!!
       *  Give the id of the new object as parameter or -1 if you deleted an object.
73 74
       *
       *  The parameter has to be the id of the object or -1 if refering to all objects.
Jan Möbius's avatar
 
Jan Möbius committed
75
       */
76
      virtual void updatedObject(int ) {};
77

Jan Möbius's avatar
 
Jan Möbius committed
78
      /**  \brief The active object has been switched by this plugin
79
       *
Jan Möbius's avatar
 
Jan Möbius committed
80 81 82 83
       *   This Signal is used to tell the other plugins that the active object has been changed.\n
       *   You should only do this if you are writing a plugin that manages the objects(e.g. DatacontrolPlugin).\n
      */
      virtual void activeObjectChanged() {};
84

85 86 87 88 89 90 91 92 93 94 95 96 97
      /**  \brief Set a description for a public slot
       *
       *   public slots of each plugin are automaticly available for scripting. \n
       *   Use this Signal to add a description for your slot so that everyone knows what it is used for. \n
       *
       *   @param _slotName the name of the slot
       *   @param _slotDescription a description for the slot
       *   @param _parameters list of parameters
       *   @param _descriptions list of descriptions for the parameters (_descriptions[i] corresponds to _parameters[i])
      */
      virtual void setSlotDescription(QString     /*_slotName*/,    QString     /*_slotDescription*/,
                                      QStringList /*_parameters*/, QStringList /*_descriptions*/) {};

Jan Möbius's avatar
 
Jan Möbius committed
98
   private slots :
99

Jan Möbius's avatar
 
Jan Möbius committed
100
      /**  \brief An object has been updated by an other plugin
101 102
       *
       *   This slot is called by the Main aplication if the number or status of existing objects changed or if
Jan Möbius's avatar
 
Jan Möbius committed
103 104 105
       *   an existing object has been changed. This could mean, that objects are added or deleted
       *   or that for an existing object with the given id has been modified.
       *   If you store local information about one of these Objects, you should check if its still valid!\n
106
       *   Dont emit BaseInterface::updatedObject(int) in this slot as this causes an endless Loop!!
Jan Möbius's avatar
 
Jan Möbius committed
107 108
       *  @param _identifier Identifier of the updated/new object or -1 if one is deleted
      */
Dirk Wilden's avatar
Dirk Wilden committed
109
      virtual void slotObjectUpdated( int /*_identifier*/ ) {};
110

Jan Möbius's avatar
Jan Möbius committed
111
      /**  \brief Called if the whole scene is cleared
112
       *
Jan Möbius's avatar
Jan Möbius committed
113 114
       */
      virtual void slotAllCleared( ) {};
115

Jan Möbius's avatar
 
Jan Möbius committed
116
       /**  \brief The active object has changed
117
       *
Jan Möbius's avatar
 
Jan Möbius committed
118 119 120 121
       *   This slot is called by the Main aplication if the currently active object has changed.\n
       *   This means that the selection of target objects has changed.
      */
      virtual void slotActiveObjectChanged() {};
122 123


Jan Möbius's avatar
 
Jan Möbius committed
124
       /**  \brief Initialize Plugin
125
       *
Jan Möbius's avatar
 
Jan Möbius committed
126
       *   This slot is called if the plugin is loaded and has to be initialized. All initialization stuff
Jan Möbius's avatar
Jan Möbius committed
127
       *   in this slot has to stay inside the plugin, no external signals are allowed here.
Jan Möbius's avatar
 
Jan Möbius committed
128
       *   Dont create any objects via pluginfunctions here. Use the pluginsInitialized() slot for external
Jan Möbius's avatar
Jan Möbius committed
129
       *   initialization. After execution of this slot your plugin should be fully functional.
130
       *   Only gui elements may be uninitialized and should be created in pluginsInitialized().
Jan Möbius's avatar
 
Jan Möbius committed
131 132
      */
      virtual void initializePlugin() {};
133

Jan Möbius's avatar
 
Jan Möbius committed
134
      /**  \brief Initialize Plugin step 2
135
       *
Jan Möbius's avatar
 
Jan Möbius committed
136 137 138 139
       *   This slot is called if all plugins are loaded and the core is ready. Here you can create objects,
       *   set Textures and everything which will involve signals to the core.
      */
      virtual void pluginsInitialized() {};
140

Jan Möbius's avatar
 
Jan Möbius committed
141 142 143 144
      /** This function is called when the application exits or when your plugin is about to be unloaded.
       * Here you can clean up your plugin, delete local variables...
       */
      virtual void exit(){};
145

Jan Möbius's avatar
 
Jan Möbius committed
146 147 148 149 150
      /** Using this function you can inform the core that your plugin can run without creating a widget.
       * If your plugin does not implement this function, it will not be loaded in scripting mode.
       * You dont have to do anything in this function.
       */
      virtual void noguiSupported( ) {} ;
151 152 153 154 155 156 157 158 159 160 161

  public slots:
      /** \brief Return a version string for your plugin
       *
       * This function will be used to determin the current version of your plugin.
       * Should have the form x.x.x ( you do not need to give that many subversions )
       */
      virtual QString version() { return QString("-1"); };

   public :

Jan Möbius's avatar
 
Jan Möbius committed
162 163
      /// Destructor
      virtual ~BaseInterface() {};
164 165 166

      /** \brief Return a Name for the plugin
       *
Jan Möbius's avatar
 
Jan Möbius committed
167 168 169
       * This Function has to return the name of the plugin.
      */
      virtual QString name() = 0;
170

Jan Möbius's avatar
 
Jan Möbius committed
171
      /** \brief Return a description of what the plugin is doing
172
       *
Jan Möbius's avatar
 
Jan Möbius committed
173 174 175
       * This function has to return a basic description of the plugin
       */
      virtual QString description() = 0;
176

Jan Möbius's avatar
 
Jan Möbius committed
177 178
};

179
Q_DECLARE_INTERFACE(BaseInterface,"OpenFlipper.BaseInterface/1.0")
180

Jan Möbius's avatar
 
Jan Möbius committed
181
#endif // BASEINTERFACE_HH