coptionsplugins.cpp coptionsplugins.h ui_coptionsplugins.h QCheckBox QSettings #include"coptionsplugins.h" #include"ui_coptionsplugins.h" #include<QCheckBox> #include<QSettings> cOptionsPlugins::cOptionsPlugins(QWidget*parent): QWidget(parent), ui(newUi::cOptionsPlugins) { init(); } cOptionsPlugins::~cOptionsPlugins() { deleteui; } voidcOptionsPlugins::init() { ui->setupUi(this); m_lpPluginsListModel=newQStandardItemModel(0,4); ui->m_lpPluginsList->setModel(m_lpPluginsListModel); QStringListheaderLabels=QStringList()<<tr("")<<tr("Name")<<tr("Version")<<tr("Capability")<<tr("File"); m_lpPluginsListModel->setHorizontalHeaderLabels(headerLabels); connect(ui->m_lpPluginsList->selectionModel(),SIGNAL(selectionChanged(QItemSelection,QItemSelection)),SLOT(onOptionsPluginTreeSelectionChanged(QItemSelection,QItemSelection))); connect(ui->m_lpPluginsList,SIGNAL(doubleClicked(QModelIndex)),SLOT(onOptionsPluginTreeDoubleClicked(QModelIndex))); } voidcOptionsPlugins::setPlugins(QList<cPlugin*>&plugins) { QSettingssettings; for(intz=0;z<plugins.count();z++) { QStandardItem*lpItemNew=newQStandardItem; m_lpPluginsListModel->appendRow(lpItemNew); QModelIndexindex=m_lpPluginsListModel->indexFromItem(lpItemNew); m_lpPluginsListModel->setData(index,QVariant::fromValue(plugins.at(z)),Qt::UserRole); QCheckBox*lpCheckBox=newQCheckBox(this); lpCheckBox->setChecked(settings.value(QString("plugins/%1/enabled").arg(plugins.at(z)->pluginName()),QVariant(false)).toBool()); ui->m_lpPluginsList->setIndexWidget(m_lpPluginsListModel->index(index.row(),0),lpCheckBox); connect(lpCheckBox,SIGNAL(toggled(bool)),this,SLOT(onOptionsPluginTreePluginToggled(bool))); QStandardItem*lpItemText=newQStandardItem(plugins.at(z)->pluginName()); m_lpPluginsListModel->setItem(index.row(),1,lpItemText); QStandardItem*lpItemVersion=newQStandardItem(QString("%1").arg(plugins.at(z)->pluginVersion())); lpItemVersion->setTextAlignment(Qt::AlignRight); m_lpPluginsListModel->setItem(index.row(),2,lpItemVersion); QStringszPluginType; switch(plugins.at(z)->capability()) { casecPlugin::PluginCapNone: szPluginType="none"; break; casecPlugin::PluginCapExport: szPluginType="export"; break; casecPlugin::PluginCapImport: szPluginType="import"; break; casecPlugin::PluginCapDB: szPluginType="database"; break; default: szPluginType="unknown"; break; } QStandardItem*lpItemType=newQStandardItem(szPluginType); m_lpPluginsListModel->setItem(index.row(),3,lpItemType); QStandardItem*lpItemFile=newQStandardItem(plugins.at(z)->pluginFile()); m_lpPluginsListModel->setItem(index.row(),4,lpItemFile); } ui->m_lpPluginsList->resizeColumnToContents(0); ui->m_lpPluginsList->resizeColumnToContents(1); ui->m_lpPluginsList->resizeColumnToContents(2); ui->m_lpPluginsList->resizeColumnToContents(3); ui->m_lpPluginsList->resizeColumnToContents(4); } voidcOptionsPlugins::onOptionsPluginTreeSelectionChanged(constQItemSelection&/*selected*/,constQItemSelection&/*deselected*/) { ui->m_lpButtonConfigure->setEnabled(true); } voidcOptionsPlugins::onOptionsPluginTreePluginToggled(bool/*b*/) { QObject*lpSender=QObject::sender(); QCheckBox*lpCheckBox=0; QModelIndexindex=m_lpPluginsListModel->index(0,0); for(;index.isValid();index=m_lpPluginsListModel->index(index.row()+1,0)) { lpCheckBox=(QCheckBox*)ui->m_lpPluginsList->indexWidget(index); if(lpCheckBox==lpSender) break; } if(index.isValid()) { cPlugin*lpPlugin=m_lpPluginsListModel->data(index,Qt::UserRole).value<cPlugin*>(); if(lpPlugin) { QSettingssettings; settings.setValue(QString("plugins/%1/enabled").arg(lpPlugin->pluginName()),QVariant(lpCheckBox->isChecked())); } } } voidcOptionsPlugins::onOptionsPluginTreeDoubleClicked(constQModelIndex&index) { QModelIndexselected=m_lpPluginsListModel->index(m_lpPluginsListModel->itemFromIndex(index)->row(),0); showConfigDlg(selected); } voidcOptionsPlugins::on_m_lpButtonConfigure_clicked() { QModelIndexselected=m_lpPluginsListModel->index(m_lpPluginsListModel->itemFromIndex(ui->m_lpPluginsList->currentIndex())->row(),0); if(!selected.isValid()) return; showConfigDlg(selected); } voidcOptionsPlugins::showConfigDlg(constQModelIndex&index) { if(!index.isValid()) return; cPlugin*lpPlugin=m_lpPluginsListModel->data(index,Qt::UserRole).value<cPlugin*>(); if(!lpPlugin) return; switch(lpPlugin->capability()) { casecPlugin::PluginCapDB: { cDBInterface*lpDBInterface=lpPlugin->dbInterface(); if(lpDBInterface) lpDBInterface->config(); break; } casecPlugin::PluginCapImport: { cImportInterface*lpImportInterface=lpPlugin->importInterface(); if(lpImportInterface) lpImportInterface->config(); break; } casecPlugin::PluginCapExport: { break; } default: break; } }