Public Slots | Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes
PluginSelector Class Reference

#include <PluginSelector.h>

Inheritance diagram for PluginSelector:
QGpGuiTools::Dialog QGpGuiTools::FrameGrabber

List of all members.

Public Slots

void on_pluginList_itemChanged (QListWidgetItem *selItem)
void on_searchPaths_clicked ()

Public Member Functions

QString file () const
 PluginSelector (QWidget *parent=0, bool debug=false)
 ~PluginSelector ()

Protected Member Functions

bool setLibList (QStringList libs)

Protected Attributes

bool _debug
QStringList _pluginFileList
bool _wrongBuildKey

Static Protected Attributes

static const char * _noticeContents

Constructor & Destructor Documentation

PluginSelector::PluginSelector ( QWidget *  parent = 0,
bool  debug = false 
)

References _noticeContents, setLibList(), and TRACE.

    : Dialog(parent), _debug(debug)
{
  TRACE;
  setupUi(this);

  dinverNotice->setHtml(QApplication::translate( "PluginSelector", _noticeContents) );
  QSettings reg;
  reg.beginGroup( "Plugins" );
  reg.beginGroup(DINVER_VERSION_TYPE);
  if( !reg.contains( "pluginList" )) {
    setLibList(File::getLibList(DinverCoreObject::defaultPluginPaths()) );
  } else {
    if( !setLibList(reg.value( "pluginList" ).toStringList()) ) {
      printf("Detected wrong dinvercore interface version reset to default\n");
      setLibList(File::getLibList(DinverCoreObject::defaultPluginPaths()) );
    }
  }
  QListWidgetItem * defItem=pluginList->item(reg.value( "defaultPlugin", 0).toInt());
  if(defItem) defItem->setCheckState(Qt::Checked);
}

References _pluginFileList, and TRACE.

{
  TRACE;
  QSettings reg;
  reg.beginGroup( "Plugins" );
  reg.beginGroup(DINVER_VERSION_TYPE);
  reg.setValue( "pluginList", _pluginFileList);
}

Member Function Documentation

QString PluginSelector::file ( ) const

References _pluginFileList, and TRACE.

Referenced by DinverGui::pluginSelector().

{
  TRACE;
  int n=pluginList->count();
  for(int i=0;i < n;i++ ) {
    if(pluginList->item(i) ->checkState()==Qt::Checked) {
      QSettings reg;
      reg.beginGroup( "Plugins" );
      reg.beginGroup(DINVER_VERSION_TYPE);
      reg.setValue( "defaultPlugin", i);
      return _pluginFileList.at(i);
    }
  }
  return QString();
}
void PluginSelector::on_pluginList_itemChanged ( QListWidgetItem *  selItem) [slot]

References TRACE.

{
  TRACE;
  pluginList->blockSignals(true);
  int n=pluginList->count();
  for(int i=0;i < n;i++ ) {
    QListWidgetItem * item=pluginList->item(i);
    if(item!=selItem) item->setCheckState(Qt::Unchecked);
  }
  pluginList->blockSignals(false);
}

References PluginPaths::getPaths(), setLibList(), and TRACE.

{
  TRACE;
  PluginPaths * d=new PluginPaths(this);
  Settings::getWidget(d);
  if(d->exec()==QDialog::Accepted) {
    Settings::setWidget(d);
    QStringList paths=d->getPaths();
    delete d;
    QApplication::processEvents();
    pluginList->clear();
    setLibList(File::getLibList(paths));
  } else delete d;
}
bool PluginSelector::setLibList ( QStringList  libs) [protected]

Return false if one plugin has not the correct interface version. This is use to detect upgrades. In case of upgrade, the stored list of plugins must be redefined.

References _debug, _pluginFileList, DinverCore::DinverInterface::description(), QGpCoreTools::endl(), DinverCore::DinverInterface::isValid(), DinverCore::DinverInterface::title(), QGpCoreTools::tr(), TRACE, and DinverCore::DinverInterface::version().

Referenced by on_searchPaths_clicked(), and PluginSelector().

{
  TRACE;
  _pluginFileList.clear();
  pluginList->clear();
  int n=libs.count();
  searchProgress->setMaximum(n);

  bool correctBuildKey=true;
  for(int i=0;i < n;i++ ) {
    QString libFile=libs.at(i);
    DinverInterface * dinverInstance=DinverCoreObject::loadPlugin(libFile, _debug);
    searchProgress->setValue(i + 1);
    if(dinverInstance) {
      if(dinverInstance->isValid()) {
        QListWidgetItem * item=new QListWidgetItem(dinverInstance->title() + " - " + dinverInstance->version());
        item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
        item->setCheckState(Qt::Unchecked);
        item->setToolTip(dinverInstance->description());
        pluginList->addItem(item);
        _pluginFileList.append(libFile);
      } else {
        App::stream() << tr("%1 has not a compatible plugin interface version.").arg(libFile) << endl;
        correctBuildKey=false;
      }
      CoreApplication::instance()->deletePlugin(dinverInstance);
    }
  }
  return correctBuildKey;
}

Member Data Documentation

bool PluginSelector::_debug [protected]

Referenced by setLibList().

const char * PluginSelector::_noticeContents [static, protected]
Initial value:
  QT_TRANSLATE_NOOP(
    "PluginSelector", "<p>Dinver is a framework for inversion problems. The core engine is a "
    "Neighbourhood Algorithm originally proposed by Sambridge (1999), implemented in C++ "
    "and improved by <a href=\"http://www.geopsy.org/#References\">Wathelet(2008)</a>.</p>"
    "<p>Each specific inversion problem can be coded with a simple API and packaged in a "
    "dynamic library (plugin).</p>"
    "<p>Using, Copying and Modifying this program is granted to everyone under the terms "
    "of the GNU Public License version 2. <b>However, we would appreciate that you properly "
    "reference this work, released for free, in all your publications or reports achieved "
    "with this software.</b></p>" )

Referenced by PluginSelector().

QStringList PluginSelector::_pluginFileList [protected]

Referenced by file(), setLibList(), and ~PluginSelector().


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