summaryrefslogtreecommitdiff
path: root/libopie2/opiecore/opluginloader.cpp
Side-by-side diff
Diffstat (limited to 'libopie2/opiecore/opluginloader.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/opluginloader.cpp4
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;
}
}
}
}
}