PluginTreeBuilder::VertexInfo::VertexInfo (QObject *obj) : IsFulfilled_ (false) , Object_ (obj) { IInfo *info = qobject_cast<IInfo*> (obj); if (!info) { qWarning () << Q_FUNC_INFO << obj << "doesn't implement IInfo"; throw std::runtime_error ("VertexInfo creation failed."); } AllFeatureDeps_ = QSet<QString>::fromList (info->Uses ()); UnfulfilledFeatureDeps_ = AllFeatureDeps_; FeatureProvides_ = QSet<QString>::fromList (info->Provides ()); IPluginReady *ipr = qobject_cast<IPluginReady*> (obj); if (ipr) P2PProvides_ = ipr->GetExpectedPluginClasses (); IPlugin2 *ip2 = qobject_cast<IPlugin2*> (obj); if (ip2) { AllP2PDeps_ = ip2->GetPluginClasses (); UnfulfilledP2PDeps_ = AllP2PDeps_; } }
Q_FOREACH (QObject *obj, ordered) { IInfo *ii = qobject_cast<IInfo*> (obj); try { qDebug () << "Initializing" << ii->GetName (); emit loadProgress (tr ("Initializing %1: stage one...").arg (ii->GetName ())); ii->Init (ICoreProxy_ptr (new CoreProxy ())); } catch (const std::exception& e) { qWarning () << Q_FUNC_INFO << "while initializing" << obj << "got" << e.what (); return obj; } catch (...) { qWarning () << Q_FUNC_INFO << "while initializing" << obj << "caught unknown exception"; return obj; } }
bool PluginManager::setData (const QModelIndex& index, const QVariant& data, int role) { if (index.column () != 0 || role != Qt::CheckStateRole) return false; QPluginLoader_ptr loader = AvailablePlugins_.at (index.row ()); if (!data.toBool () && PluginContainers_.contains (loader)) { PluginTreeBuilder builder; builder.AddObjects (Plugins_); builder.Calculate (); QSet<QObject*> oldSet = QSet<QObject*>::fromList (builder.GetResult ()); builder.RemoveObject (loader->instance ()); builder.Calculate (); const QSet<QObject*>& newSet = QSet<QObject*>::fromList (builder.GetResult ()); oldSet.subtract (newSet); oldSet.remove (loader->instance ()); if (!oldSet.isEmpty ()) { QStringList pluginNames; Q_FOREACH (QObject *obj, oldSet) { IInfo *ii = qobject_cast<IInfo*> (obj); pluginNames << (ii->GetName () + " (" + ii->GetInfo () + ")"); }
QByteArray Plugin::GetCurrentSession () const { QByteArray result; QDataStream str (&result, QIODevice::WriteOnly); Q_FOREACH (auto tab, Tabs_) { ITabWidget *tw = qobject_cast<ITabWidget*> (tab); if (!tw) continue; IInfo *plugin = qobject_cast<IInfo*> (tw->ParentMultiTabs ()); if (!plugin) continue; auto rec = qobject_cast<IRecoverableTab*> (tab); const auto& data = rec->GetTabRecoverData (); if (data.isEmpty ()) continue; QIcon forRecover = QIcon (rec->GetTabRecoverIcon ().pixmap (32, 32)); str << plugin->GetUniqueID () << data << rec->GetTabRecoverName () << forRecover << GetSessionProps (tab); }
void ShortcutManager::AddObject (QObject *object) { IInfo *ii = qobject_cast<IInfo*> (object); if (!ii) { qWarning () << Q_FUNC_INFO << object << "couldn't be casted to IInfo"; return; } AddObject (object, ii->GetName (), ii->GetInfo (), ii->GetIcon ()); }
void NewTabMenuManager::ToggleHide (QObject *obj, const QByteArray& tabClass, bool hide) { if (!hide) return; IInfo *ii = qobject_cast<IInfo*> (obj); if (!ii) { qWarning () << Q_FUNC_INFO << obj << "doesn't implement IInfo"; return; } const auto& id = ii->GetUniqueID () + '|' + tabClass; XmlSettingsManager::Instance ()->setProperty ("Hide" + id, hide); }
void NewTabMenuManager::AddObject (QObject *obj) { IHaveTabs *imt = qobject_cast<IHaveTabs*> (obj); if (!imt || RegisteredMultiTabs_.contains (obj)) return; IInfo *ii = qobject_cast<IInfo*> (obj); for (const auto& info : imt->GetTabClasses ()) { if (!(info.Features_ & TFOpenableByRequest)) continue; QAction *newAct = new QAction (info.Icon_, AccelerateName (info.VisibleName_), this); connect (newAct, SIGNAL (triggered ()), this, SLOT (handleNewTabRequested ())); newAct->setProperty ("PluginObj", QVariant::fromValue<QObject*> (obj)); newAct->setProperty ("TabClass", info.TabClass_); newAct->setProperty ("Single", static_cast<bool> (info.Features_ & TFSingle)); newAct->setStatusTip (info.Description_); newAct->setToolTip (info.Description_); InsertAction (newAct); if (info.Features_ & TFByDefault) { const QByteArray& id = ii->GetUniqueID () + '|' + info.TabClass_; const bool hide = XmlSettingsManager::Instance ()->Property ("Hide" + id, false).toBool (); if (!hide) { OpenTab (newAct); XmlSettingsManager::Instance ()->setProperty ("Hide" + id, true); } } } }
void CoreInstanceObject::BuildNewTabModel () { QStandardItemModel *newTabsModel = new QStandardItemModel (this); QStandardItem *defaultItem = new QStandardItem (tr ("Context-dependent")); defaultItem->setData ("contextdependent", Qt::UserRole); newTabsModel->appendRow (defaultItem); QObjectList multitabs = Core::Instance () .GetPluginManager ()->GetAllCastableRoots<IHaveTabs*> (); Q_FOREACH (QObject *object, multitabs) { IInfo *ii = qobject_cast<IInfo*> (object); IHaveTabs *iht = qobject_cast<IHaveTabs*> (object); Q_FOREACH (const TabClassInfo& info, iht->GetTabClasses ()) { QStandardItem *item = new QStandardItem (ii->GetName () + ": " + info.VisibleName_); item->setToolTip (info.Description_); item->setIcon (info.Icon_); item->setData (ii->GetUniqueID () + '|' + info.TabClass_, Qt::UserRole); newTabsModel->appendRow (item); } }