All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions
SciFigs::SciFigsPlugin Class Reference

#include <SciFigsPlugin.h>

Inheritance diagram for SciFigs::SciFigsPlugin:
GeopsyFigs

List of all members.

Public Member Functions

virtual QString description () const
virtual const char * interfaceVersion () const =0
bool isValid () const
virtual QString tag () const =0
virtual QString title () const =0
virtual ~SciFigsPlugin ()

Static Public Member Functions

static QStringList getPluginList (QStringList libs, bool &ok, bool debug=false)
static SciFigsPluginloadPlugin (QString pluginFile, bool debug=false)
static bool loadPlugins (QStringList libs, bool debug=false)

Constructor & Destructor Documentation

virtual SciFigs::SciFigsPlugin::~SciFigsPlugin ( ) [inline, virtual]
{}

Member Function Documentation

virtual QString SciFigs::SciFigsPlugin::description ( ) const [inline, virtual]
{return QString::null;}
QStringList SciFigs::SciFigsPlugin::getPluginList ( QStringList  libs,
bool &  ok,
bool  debug = false 
) [static]

References QGpCoreTools::endl(), interfaceVersion(), isValid(), loadPlugin(), QGpCoreTools::tr(), and TRACE.

Referenced by SciFigs::SciFigsGlobal::initPlugins(), and SciFigs::SciFigsPreferences::on_searchPlugin_clicked().

{
  TRACE;
  QStringList plugins;
  int n=libs.count();
  if(n<=0) return plugins;
  QProgressDialog * d=new QProgressDialog(tr("Searching SciFigs plugins ..."),
                                          QString::null, 0, n-1, QApplication::activeWindow());
  ok=true;
  for(int i=0;i<n;i++) {
    QString libFile=libs.at(i);
    if(!libFile.isEmpty()) {
          if(debug) {
            printf("Load library %s\n",libFile.toAscii().data());
      fflush(stdout);
          }
      SciFigsPlugin * pluginInstance=loadPlugin(libFile, debug);
      d->setValue(i);
      if(pluginInstance) {
        if( pluginInstance->isValid()) {
          if(debug) {
            printf("  SciFigs plugin interface\n");
            printf("  SciFigs interface version=%s\n",pluginInstance->interfaceVersion());
            fflush(stdout);
          }
          plugins << libFile;
        } else {
          App::stream() << tr("%1 is not compatible with current SciFigs version.").arg(libFile) << endl;
          ok=false;
        }
      }
      CoreApplication::instance()->deletePlugin(pluginInstance);
    }
  }
  delete d;
  return plugins;
}
const char * SciFigs::SciFigsPlugin::interfaceVersion ( ) const [pure virtual]

Returns the SciFigs version of the plugin (at compile time)

Implemented in GeopsyFigs.

Referenced by getPluginList(), isValid(), and loadPlugins().

Check if the plugin is compatible with SciFigs library

References QGpCoreTools::Version::compatible(), and interfaceVersion().

Referenced by getPluginList(), and loadPlugins().

{
  static const Version vRef(SCIFIGS_VERSION);
  Version v(interfaceVersion());
  return v.compatible(vRef);
}
SciFigsPlugin * SciFigs::SciFigsPlugin::loadPlugin ( QString  pluginFile,
bool  debug = false 
) [static]

References TRACE.

Referenced by getPluginList(), and loadPlugins().

{
  TRACE;
  QPluginLoader pluginTest;
  pluginTest.setFileName(pluginFile);
  QObject * instance=pluginTest.instance();
  if(instance) {
    if(debug) {
      printf("  Library loaded successfully\n");
      fflush(stdout);
    }
    SciFigsPlugin * pluginInstance=qobject_cast<SciFigsPlugin *>(instance);
    if(pluginInstance) {
      return pluginInstance;
    } else {
      delete instance;
    }
  } else if(debug) {
    printf("  %s\n",pluginTest.errorString().toAscii().data());
    fflush(stdout);
  }
  return 0;
}
bool SciFigs::SciFigsPlugin::loadPlugins ( QStringList  libs,
bool  debug = false 
) [static]

Returns false if at least one plugin has not been built with a compatible SciFigs version.

References QGpCoreTools::endl(), interfaceVersion(), isValid(), loadPlugin(), QGpCoreTools::tr(), and TRACE.

Referenced by SciFigs::SciFigsGlobal::initPlugins(), and SciFigs::SciFigsGlobal::SciFigsGlobal().

{
  TRACE;
  bool correctInterfaceVersion=true;
  for(QStringList::Iterator it=libs.begin();it!=libs.end();++it) {
    if( !( *it).isEmpty()) {
      if(debug) {
        printf("Load library %s\n",it->toAscii().data());
        fflush(stdout);
      }
      SciFigsPlugin * instance=loadPlugin( *it, debug);
      if(instance) {
        if(instance->isValid()) {
          if(debug) {
            printf("  SciFigs plugin interface\n");
            printf("  SciFigs interface version=%s\n",instance->interfaceVersion());
            fflush(stdout);
          }
          CoreApplication::instance()->addPlugin(instance);
        } else {
          App::stream() << tr("%1 is not compatible with current SciFigs version.").arg(*it) << endl;
          correctInterfaceVersion=false;
          CoreApplication::instance()->deletePlugin(instance);
        }
      }
    }
  }
  return correctInterfaceVersion;
}
virtual QString SciFigs::SciFigsPlugin::tag ( ) const [pure virtual]

Implemented in GeopsyFigs.

virtual QString SciFigs::SciFigsPlugin::title ( ) const [pure virtual]

Implemented in GeopsyFigs.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines