-rw-r--r-- | libopie2/opiecore/opluginloader.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libopie2/opiecore/opluginloader.cpp b/libopie2/opiecore/opluginloader.cpp index c2dc239..3d286e5 100644 --- a/libopie2/opiecore/opluginloader.cpp +++ b/libopie2/opiecore/opluginloader.cpp @@ -129,193 +129,193 @@ OPluginItem::OPluginItem( const QString& name, const QString& path, bool b, int {} /** * \brief simple d'tor */ OPluginItem::~OPluginItem() { } /** * \brief Test if this Item is Empty and does not represent a loadable plugin * Test if a OPluginItem is empty. A OPluginItem is empty if name and path are empty * ,pos equals -1 and the item is disabled * * @see QString::isEmpty() * */ bool OPluginItem::isEmpty()const { if ( m_pos != -1 ) return false; if ( m_enabled ) return false; if ( !m_name.isEmpty() ) return false; if ( !m_path.isEmpty() ) return false; return true; } /** * \brief test equality * operator to test equalness of two OPluginItem */ bool OPluginItem::operator==( const OPluginItem& r )const{ if ( m_pos != r.m_pos ) return false; if ( m_enabled != r.m_enabled) return false; if ( m_name != r.m_name ) return false; if ( m_path != r.m_path ) return false; return true; } /** * \brief test non equality * operator to test non-equalness of two OPluginItem */ bool OPluginItem::operator!=( const OPluginItem& r )const{ return !( *this == r ); } /** * \brief returns the name of the plugin * return the name of this Plugin */ QString OPluginItem::name()const { return m_name; } /** * \brief return the path of the plugin */ QString OPluginItem::path()const { return m_path; } /** * \brief Return if this item is enabled. */ bool OPluginItem::isEnabled()const { return m_enabled; } /** * \brief return the position of a plugin. * return the position of the item * -1 is the default value and means normally that the whole items are unsorted. * Higher numbers belong to an upper position. With plugins with the postions 20,19,5,3 * the item with pos 20 would be the first in the list returned by the OGenericPluginLoader * * @see OGenericPluginLoader::allAvailable * @see OGenericPluginLoader::filtered */ int OPluginItem::position()const{ return m_pos; } /** * \brief set the name of a plugin * Set the name of the Plugin Item * @param name */ void OPluginItem::setName( const QString& name ) { m_name = name; } /** * \brief set the path of a plugin * Set the path of Plugin Item. The path must be absolute. * @param name The path of the plugin */ void OPluginItem::setPath( const QString& name ) { - m_name = name; + m_path = name; } /** * \brief enable or disable the to load attribute * Set the Enabled attribute. Such changes won't be saved. If you want to save it * use a OPluginManager to configure your plugins manually or Opie::Ui::OPluginConfig * for a graphical frontend. * * @param enabled Enable or Disable the Enabled Attribute */ void OPluginItem::setEnabled( bool enabled ) { m_enabled = enabled; } /** * \brief Set the position. * Set the position * @param pos The position * * @see position() */ void OPluginItem::setPosition( int pos ) { m_pos = pos; } /** * \brief create a PluginLoader * * Create a PluginLoader autoDelete is set to false * * \code * Opie::Core::OGenericPluginLoader loader("myapp-plugin"); * Opie::Core::OPluginItem::List lst = loader.filtered(); * for(Opie::Core::OPluginItem::List::Iterator it = lst.begin(); it!=lst.end();++it){ * MyIface* iface = static_cast<MyIface*>(loader.load(*it,IID_MyIface)); * } * \endcode * * \code * Opie::Core::OGenericPluginLoader loader("myapp-plugin"); * Opie::Core::OPluginItem::List lst = loader.filtered(); * for(Opie::Core::OPluginItem::List::Iterator it = lst.begin(); it!=lst.end();++it){ * MyIface* iface = static_cast<MyIface*>(loader.load(*it,IID_MyIface)); * } * ... * loader.clear(); * * \endcode * * @param name The name of the plugin directory. * @param isSorted Tell the PluginLoader if your Plugins are sorted */ OGenericPluginLoader::OGenericPluginLoader( const QString& name, bool isSorted) : m_dir( name ), m_autoDelete( false ), m_isSafeMode( false ), m_isSorted( isSorted ) { setPluginDir( QPEApplication::qpeDir() + "/plugins/"+name ); readConfig(); } /** * \brief simple d'tor that cleans up depending on autoDelete * * calls clear if autoDelete is true. This will release all interfaces * and remove the library from this process if the refcount falls to zero */ OGenericPluginLoader::~OGenericPluginLoader() { if ( m_autoDelete ) clear(); } /** * \brief Enable or disable autoDelete on destruction * * enable autoDelete. This will call clear on the d'tor * * @see ~OGenericPluginLoader * @see clear() */ void OGenericPluginLoader::setAutoDelete( bool t ) { m_autoDelete = t; } /** * \brief See if autoDelete is enabled. */ bool OGenericPluginLoader::autoDelete()const{ return m_autoDelete; } /** * \brief unload all loaded Plugins * @@ -730,161 +730,161 @@ OPluginItem::List OPluginManager::managedPlugins()const { * You still need to call save() to make your changes effective. After saving * a call to OGenericPluginLoader::filtered() returns the newly configured order and items * * @param item The OPluginItem to be replaced internall * */ void OPluginManager::setPosition( const OPluginItem& item) { replace( item ); } /** * \brief Enable the item specified as argument * * This will make sure that OPluginItem::setEnabled is called and then will replace * the item with one that matches name and path internally. * @see setPosition * * @param the Item to enable */ void OPluginManager::enable( const OPluginItem& item ) { setEnabled( item, true ); } /** * \brief disable the Item. * * Disable the OPluginItem. Same applies as in * @see setPosition and @see enable * * @param item Item to disable */ void OPluginManager::disable( const OPluginItem& item) { setEnabled( item, false ); } /** * \brief Enable or disable the OPluginItem. * Depending on the value of the parameter this will either disable * or enable the pluginitem. * Beside that same as in @see disable, @see enable, @see setPosition * applies. * * @param _item The OPluginItem to enable or to disable. * @param b Enable or disable the plugin. * */ void OPluginManager::setEnabled( const OPluginItem& _item, bool b ) { OPluginItem item = _item; item.setEnabled( b ); replace( item ); } /** * \brief Load necessary information after constructing the object * If you speified a OGenericPluginLoader you need to call this method * so that this manager knows what to manage and have a right value for \sa crashedPlugin * For the name and the list of plugins this does only try to find out the crashed plugin */ void OPluginManager::load() { OConfig cfg( configName() ); cfg.setGroup( "General" ); QString crashedPath = cfg.readEntry( "CrashedPlugin" ); /* if we've a loader this applies if we were called from the first part */ if ( m_loader ) m_plugins = m_loader->allAvailable( m_loader->isSorted() ); /* fast and normal route if we did not crash... */ if ( crashedPath.isEmpty() ) return; /* lets try to find the plugin path and this way the associated item */ for ( OPluginItem::List::Iterator it = m_plugins.begin(); it != m_plugins.end(); ++it ) if ( (*it).path() == crashedPath ) { m_crashed = *it; break; } } /** * \brief Save the values and this way make it available. * * Save the current set of data. A call to @see OGenericPluginLoader::filtered * now would return your saved changes. */ void OPluginManager::save() { QMap<QString, QStringList> excluded; // map for path to excluded name QMap<QString, QStringList> positions; // if positions matter contains splitted up by dirs bool sorted = m_loader ? m_loader->isSorted() : m_isSorted; /* * We will create some maps for the groups to include positions a */ for ( OPluginItem::List::Iterator it = m_plugins.begin(); it != m_plugins.end(); ++it ) { OPluginItem item = *it; - QString path = QFileInfo( item.path() ).filePath(); + QString path = QFileInfo( item.path() ).dirPath(true); if ( sorted ) { positions[path].append( item.name() ); positions[path].append( QString::number( item.position() ) ); } if ( !item.isEnabled() ) excluded[path].append( item.name() ); } /* * The code below wouldn't work because we can't delete groups/keys from the config * ### for ODP make Config right! */ // if ( excluded.isEmpty() && positions.isEmpty() ) return; /* * Now safe for each path */ OConfig cfg( configName() ); /* safe excluded items */ for ( QMap<QString, QStringList>::Iterator it = excluded.begin(); it != excluded.end(); ++it ) { OConfigGroupSaver saver( &cfg, it.key() ); cfg.writeEntry("Excluded", it.data(), ',' ); } /* safe positions we could also see if positions.contains(path) and remove/write in the above loop * ### Write a Test Suite that can profile these runs... */ for ( QMap<QString, QStringList>::Iterator it = positions.begin(); it != positions.end(); ++it ) { OConfigGroupSaver saver( &cfg, it.key() ); cfg.writeEntry("Positions", it.data(), '.' ); } } /** * @internal */ QString OPluginManager::configName()const { QString str = m_loader ? m_loader->name() : m_cfgName; return str + "-odpplugins"; } /** * @internal.. replace in m_plugins by path... this is linear search O(n/2) */ void OPluginManager::replace( const OPluginItem& item ) { OPluginItem _item; /* for all plugins */ for ( OPluginItem::List::Iterator it=m_plugins.begin();it != m_plugins.end(); ++it ) { _item = *it; /* if path and name are the same we will remove, readd and return */ if ( _item.path() == item.path() && _item.name() == item.name() ) { it = m_plugins.remove( it ); m_plugins.append( item ); return; } } } } } |