Esempio n. 1
0
void ThemesManager::newOptionValue(const QString &group,const QString &name,const QVariant &value)
{
    if(group=="Themes" && name=="Ultracopier_current_theme")
    {
        if(!PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
            return;
        if(currentPluginIndex!=-1 && value.toString()!=pluginList.at(currentPluginIndex).plugin.name)
        {
            //int tempCurrentPluginIndex=currentPluginIndex;
            emit theThemeNeedBeUnloaded();
            ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("unload the themes: %1 (%2)").arg(pluginList.at(currentPluginIndex).plugin.name).arg(currentPluginIndex));
            /* Themes remain loaded for the options
             *if(pluginList.at(tempCurrentPluginIndex).options!=NULL)
            {
                delete pluginList.at(tempCurrentPluginIndex).options;
                pluginList[tempCurrentPluginIndex].options=NULL;
            }
            if(pluginList.at(tempCurrentPluginIndex).factory!=NULL)
            {
                delete pluginList.at(tempCurrentPluginIndex).factory;
                pluginList[tempCurrentPluginIndex].factory=NULL;
            }
            if(pluginList.at(tempCurrentPluginIndex).pluginLoader!=NULL)
            {
                pluginList.at(tempCurrentPluginIndex).pluginLoader->unload();
                delete pluginList.at(tempCurrentPluginIndex).pluginLoader;
                pluginList[tempCurrentPluginIndex].pluginLoader=NULL;
            } */
        }
        allPluginIsLoaded();
        //emit theThemeIsReloaded(); -> do into allPluginIsLoaded(); now
    }
}
Esempio n. 2
0
/// \brief Create the manager and load the defaults variables
LanguagesManager::LanguagesManager()
{
	ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
	//load the overall instance
	resources=ResourcesManager::getInstance();
	options=OptionEngine::getInstance();
	plugins=PluginsManager::getInstance();
	//load the rest
	QStringList resourcesPaths=resources->getReadPath();
	int index=0;
	while(index<resourcesPaths.size())
	{
		QString composedTempPath=resourcesPaths.at(index)+"Languages"+QDir::separator();
		QDir LanguagesConfiguration(composedTempPath);
		if(LanguagesConfiguration.exists())
			languagePath<<composedTempPath;
		index++;
	}
	//load the plugins
	plugins->lockPluginListEdition();
	qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
	connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)),		this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
	connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)),		this,	SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
	connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)),	this,	SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
	connect(plugins,SIGNAL(pluginListingIsfinish()),			this,	SLOT(allPluginIsLoaded()),Qt::QueuedConnection);
	QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Languages);
	foreach(PluginsAvailable currentPlugin,list)
		emit previouslyPluginAdded(currentPlugin);
	plugins->unlockPluginListEdition();
	//load the GUI option
	QList<QPair<QString, QVariant> > KeysList;
	KeysList.append(qMakePair(QString("Language"),QVariant("en")));
	KeysList.append(qMakePair(QString("Language_autodetect"),QVariant(true)));
	options->addOptionGroup("Language",KeysList);
//	connect(this,	SIGNAL(newLanguageLoaded(QString)),			plugins,SLOT(refreshPluginList(QString)));
//	connect(this,	SIGNAL(newLanguageLoaded(QString)),			this,SLOT(retranslateTheUI()));
	connect(options,SIGNAL(newOptionValue(QString,QString,QVariant)),	this,	SLOT(newOptionValue(QString)),Qt::QueuedConnection);
	connect(this,	SIGNAL(newLanguageLoaded(QString)),			plugins,SIGNAL(newLanguageLoaded()),Qt::QueuedConnection);
}
Esempio n. 3
0
void ThemesManager::onePluginAdded(const PluginsAvailable &plugin)
{
    if(plugin.category!=PluginType_Themes)
        return;
    ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+plugin.name);
    PluginsAvailableThemes newPlugin;
    newPlugin.plugin=plugin;
    #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
    PluginInterface_ThemesFactory *factory;
    QObjectList objectList=QPluginLoader::staticInstances();
    int index=0;
    QObject *pluginObject;
    while(index<objectList.size())
    {
        pluginObject=objectList.at(index);
        factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginObject);
        if(factory!=NULL)
            break;
        index++;
    }
    if(index==objectList.size())
    {
        ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("static themes not found"));
        emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
        emit theThemeIsReloaded();
        return;
    }
    newPlugin.pluginLoader=NULL;
    #else
    QPluginLoader *pluginLoader=new QPluginLoader(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface"));
    QObject *pluginInstance = pluginLoader->instance();
    if(pluginInstance==NULL)
    {
        ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to load the plugin %1: %2").arg(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface")).arg(pluginLoader->errorString()));
        pluginLoader->unload();
        emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
        emit theThemeIsReloaded();
        return;
    }
    PluginInterface_ThemesFactory *factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginInstance);
    if(factory==NULL)
    {
        ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to cast the plugin: %1").arg(pluginLoader->errorString()));
        pluginLoader->unload();
        emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
        emit theThemeIsReloaded();
        return;
    }
    //check if found
    int indexTemp=0;
    while(indexTemp<pluginList.size())
    {
        if(pluginList.at(indexTemp).factory==factory)
        {
            ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Plugin already found, current: %1, conflit plugin: %2, name: %3")
            .arg(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface"))
            .arg(pluginList.at(indexTemp).plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface"))
            .arg(newPlugin.plugin.name)
            );
            pluginLoader->unload();
            emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
            emit theThemeIsReloaded();
            return;
        }
        indexTemp++;
    }
    newPlugin.pluginLoader=pluginLoader;
    #endif
    ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("preload: %1, at the index: %2").arg(newPlugin.plugin.name).arg(QString::number(pluginList.size())));
    #ifdef ULTRACOPIER_DEBUG
    connect(factory,&PluginInterface_ThemesFactory::debugInformation,this,&ThemesManager::debugInformation,Qt::QueuedConnection);
    #endif // ULTRACOPIER_DEBUG
    connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,factory,&PluginInterface_ThemesFactory::newLanguageLoaded);
    newPlugin.factory=factory;

    newPlugin.options=new LocalPluginOptions("Themes-"+newPlugin.plugin.name);
    newPlugin.factory->setResources(newPlugin.options,newPlugin.plugin.writablePath,newPlugin.plugin.path,&facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL);
    currentStylePath=newPlugin.plugin.path;
    pluginList << newPlugin;
    if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
        allPluginIsLoaded();
    emit newThemeOptions(newPlugin.plugin.name,newPlugin.factory->options(),true,true);
    emit theThemeIsReloaded();
    return;
}