27 #include "../../utils/CentralizedCheckBoxDelegate.h"
28 #include "../../utils/ResourceChooser.h"
29 #include "../../../../plugin/AbstractPlugin.h"
30 #include "../../../../plugin/PluginInfo.h"
31 #include "../../../../plugin/PluginManager.h"
32 #include "../../../../plugin/Utils.h"
33 #include "../../help/HelpManager.h"
34 #include "../../Exception.h"
37 #include "ui_PluginManagerDialogForm.h"
43 #include <QtCore/QDir>
44 #include <QtCore/QFileInfo>
45 #include <QtCore/QUrl>
46 #include <QMessageBox>
48 #include <QtNetwork/QNetworkAccessManager>
49 #include <QtNetwork/QNetworkReply>
50 #include <QtNetwork/QNetworkRequest>
59 catch(te::plugin::Exception&)
70 std::vector<std::string>::iterator it;
72 for(it=plgs.begin(); it!=plgs.end(); ++it)
74 std::string plgName = *it;
77 deps.push_back(plgName);
86 std::vector<std::string>::iterator it;
88 for(it=plgs.begin(); it!=plgs.end(); ++it)
90 std::string plgName = *it;
94 QString msg(
"Unable to load <b>%1</b>. Dependency missed: <ul><li><b>%2</b></li></ul>.");
95 msg = msg.arg(plg->
m_name.c_str(), plgName.c_str());
97 throw te::qt::widgets::Exception(msg.toStdString());
101 deps.push_back(plgName);
111 std::vector<std::string>::const_iterator it;
113 result = QObject::tr(
"Unloading <b>%1</b> will also unload the plugins: <ul>");
114 result = result.arg(plg.c_str());
116 for(it=dps.begin(); it!=dps.end(); ++it)
118 result += QString(
"<li><b>%1</b></li>");
119 result = result.arg((*it).c_str());
122 result += QObject::tr(
"</ul> Did you want to continue?");
134 std::vector<std::string>::const_iterator it;
136 result = QObject::tr(
"In order to be able to load <b>%1</b> plugin, the following plugins must also be enabled: <ul>");
137 result = result.arg(plg.c_str());
139 for(it=dps.begin(); it!=dps.end(); ++it)
141 result += QString(
"<li><b>%1</b></li>");
142 result = result.arg((*it).c_str());
145 result += QObject::tr(
"</ul> Allow them to be anabled?");
151 void MakeRemove(
const std::vector<te::plugin::PluginInfo*>& plgs,
const std::vector<te::qt::widgets::PluginsModel::PluginsStatus>& status, QWidget* parent)
153 std::vector<std::string> dps;
155 for(
size_t i=0; i<status.size(); i++)
163 if(QMessageBox::question(parent, QObject::tr(
"Remove plugins"), msg, QMessageBox::No, QMessageBox::Yes) == QMessageBox::No)
171 void MakeDisable(
const std::vector<te::plugin::PluginInfo*>& plgs,
const std::vector<te::qt::widgets::PluginsModel::PluginsStatus>& status, QWidget* parent)
173 std::vector<std::string> dps;
175 for(
size_t i=0; i<status.size(); i++)
183 if(QMessageBox::question(parent, QObject::tr(
"Unload plugins"), msg, QMessageBox::No, QMessageBox::Yes) == QMessageBox::No)
191 void MakeAdd(
const std::vector<te::plugin::PluginInfo*>& plgs,
const std::vector<te::qt::widgets::PluginsModel::PluginsStatus>& status)
193 for(
size_t i=0; i<status.size(); i++)
198 void MakeEnable(
const std::vector<te::plugin::PluginInfo*>& plgs,
const std::vector<te::qt::widgets::PluginsModel::PluginsStatus>& status, QWidget* parent)
200 std::vector<std::string> dps;
201 std::vector<std::string>::iterator it;
203 for(
size_t i=0; i<status.size(); i++)
215 if(QMessageBox::question(parent, QObject::tr(
"Enable plugin"), msg, QMessageBox::No, QMessageBox::Yes) == QMessageBox::No)
218 for(it=dps.begin(); it!=dps.end(); ++it)
225 catch(
const std::exception& e)
227 QMessageBox::warning(parent, QObject::tr(
"Fail to load plugin"), e.what());
248 int rows = model->
rowCount(QModelIndex());
249 int st = model->index(0,0).
data(Qt::CheckStateRole).toInt();
251 for(
int i=1; i<rows; i++)
253 int st2 = model->index(i,0).
data(Qt::CheckStateRole).toInt();
256 return Qt::PartiallyChecked;
259 return (Qt::CheckState) st;
263 : QDialog(parent, f),
264 m_ui(new Ui::PluginManagerDialogForm)
268 setWindowTitle(tr(
"Manage Application Plugins"));
271 m_ui->m_installedPluginsTableWidget->setModel(
m_model);
282 m_ui->m_addButton->setIcon(QIcon::fromTheme(
"list-add"));
283 m_ui->m_removeButton->setIcon(QIcon::fromTheme(
"list-remove"));
285 m_ui->m_installedPluginsTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
287 m_ui->m_pluginsTabWidget->setTabEnabled(1,
false);
291 m_ui->m_helpPushButton->setPageReference(
"widgets/pluginmanager/PluginManager.html");
300 std::vector<te::plugin::PluginInfo*> plgs;
301 std::vector<te::qt::widgets::PluginsModel::PluginsStatus> status;
303 m_model->getPluginsInfo(plgs, status);
312 fillInstalledPlugins();
314 m_ui->m_applyPushButton->setEnabled(
false);
414 AddPlugin(info.absoluteFilePath(), m_model);
418 throw tr(
"There's no resource selected, no plugins found.");
421 filters <<
"*.teplg" <<
"*.TEPLG";
423 QDir dir(info.canonicalFilePath());
425 QString qdir_s = dir.absolutePath();
427 QStringList plgs = dir.entryList(filters, QDir::Files);
430 throw tr(
"There's no plugins found.");
432 QStringList::iterator it;
434 for(it = plgs.begin(); it != plgs.end(); ++it)
435 AddPlugin(QDir::toNativeSeparators(dir.absoluteFilePath(*it)), m_model);
438 m_ui->m_applyPushButton->setEnabled(
true);
443 msg.setWindowTitle(tr(
"Fail to load plugin files"));
444 msg.setIcon(QMessageBox::Warning);
448 catch(te::plugin::Exception& exc)
451 msg.setWindowTitle(tr(
"Fail to load plugin files"));
452 msg.setIcon(QMessageBox::Warning);
453 msg.setText(exc.what());
460 QModelIndexList lst = m_ui->m_installedPluginsTableWidget->selectionModel()->selectedRows(0);
466 q.setIcon(QMessageBox::Warning);
467 q.setWindowTitle(tr(
"Remove installed plugins"));
468 q.setText(tr(
"There are NOT selected plugins."));
474 m_model->removePlugins(lst);
476 m_ui->m_applyPushButton->setEnabled(
true);
481 m_ui->m_applyPushButton->setEnabled(
true);
492 Qt::CheckState state = (st) ? Qt::Checked : Qt::Unchecked;
494 m_ui->m_enableAll->setCheckState(state);
496 int nrows = m_model->rowCount(QModelIndex());
498 for(
int i=0; i<nrows; i++)
500 QModelIndex idx = m_model->index(i, 0);
501 m_model->setData(idx, QVariant(state), Qt::CheckStateRole);
512 std::vector<std::string> plugins = pm.
getPlugins();
514 int nrows =
static_cast<int>(plugins.size());
516 for(
int i = 0; i < nrows; ++i)
522 m_ui->m_installedPluginsTableWidget->resizeColumnsToContents();
523 m_ui->m_installedPluginsTableWidget->sortByColumn(1, Qt::AscendingOrder);
543 te::qt::widgets::PluginsModel::PluginsStatus st;
555 m_model->addPlugin(&pinfo, st);
std::string m_name
The plugin name: an internal value used to identify the plugin in the system. Must be a unique value...
std::vector< std::string > m_requiredPlugins
The list of required plugins in order to lunch the plugin.
void CheckRequiredDependencies(te::plugin::PluginInfo *plg, std::vector< std::string > &deps)
void MakeRemove(const std::vector< te::plugin::PluginInfo * > &plgs, const std::vector< te::qt::widgets::PluginsModel::PluginsStatus > &status, QWidget *parent)
A singleton for managing plugins.
Qt::CheckState GetCheckState(te::qt::widgets::PluginsModel *model)
static PluginManager & getInstance()
It returns a reference to the singleton instance.
std::vector< std::string > getPlugins() const
It returns the list of plugins managed by PluginManager.
void CheckLoadedDependencies(te::plugin::PluginInfo *plg, std::vector< std::string > &deps)
void MakeEnable(const std::vector< te::plugin::PluginInfo * > &plgs, const std::vector< te::qt::widgets::PluginsModel::PluginsStatus > &status, QWidget *parent)
QString GetPluginDepsMessage(const std::string &plg, const std::vector< std::string > &dps)
void MakeAdd(const std::vector< te::plugin::PluginInfo * > &plgs, const std::vector< te::qt::widgets::PluginsModel::PluginsStatus > &status)
bool PluginExists(const std::string &pluginName)
const PluginInfo & getPlugin(const std::string &name) const
It returns the plugin identified by the given name.
bool isLoaded(const std::string &pname) const
It returns true if the plugin is loaded otherwise returns false.
QString GetPluginReqsMessage(const std::string &plg, const std::vector< std::string > &dps)
A Qt dialog for plugin management.
The basic information about a plugin.
void MakeDisable(const std::vector< te::plugin::PluginInfo * > &plgs, const std::vector< te::qt::widgets::PluginsModel::PluginsStatus > &status, QWidget *parent)
void AddPlugin(const QString &fileName, te::qt::widgets::PluginsModel *model)
TEPLUGINEXPORT PluginInfo * GetInstalledPlugin(const std::string &pluginFilePath)
It returns information about a given plugin provided its plugin configuration file name or dir...