Exemple #1
0
QVariant ClientToolModel::data(const QModelIndex& index, int role) const
{
  if (role == ToolModelRole::ToolFactory || role == ToolModelRole::ToolWidget || role == Qt::ToolTipRole) {
    const QString toolId = QSortFilterProxyModel::data(index, ToolModelRole::ToolId).toString();
    if (toolId.isEmpty())
      return QVariant();

    if (role == ToolModelRole::ToolFactory)
      return QVariant::fromValue(m_factories.value(toolId));
    if (role == ToolModelRole::ToolWidget) {
      const QHash<QString, QWidget*>::const_iterator it = m_widgets.constFind(toolId);
      if (it != m_widgets.constEnd())
        return QVariant::fromValue(it.value());
      ToolUiFactory *factory = m_factories.value(toolId);
      if (!factory)
        return QVariant();
      if (m_inactiveTools.contains(factory)) {
        factory->initUi();
        m_inactiveTools.remove(factory);
      }
      QWidget *widget = factory->createWidget(m_parentWidget);
      m_widgets.insert(toolId, widget);
      return QVariant::fromValue(widget);
    }
    if (role == Qt::ToolTipRole) {
      ToolUiFactory *factory = m_factories.value(toolId);
      if (factory && (!factory->remotingSupported() && Endpoint::instance()->isRemoteClient()))
        return tr("This tool does not work in out-of-process mode.");
    }
  }

  return QSortFilterProxyModel::data(index, role);
}
void ProxyToolUiFactory::initUi()
{
    loadPlugin();
    ToolUiFactory *fac = factory();
    if (!fac)
        return;
    return fac->initUi();
}
QWidget *ProxyToolUiFactory::createWidget(QWidget *parentWidget)
{
  loadPlugin();
  ToolUiFactory *fac = factory();
  if (!fac) {
    return new QLabel(tr("Plugin '%1' could not be loaded.").arg(m_pluginPath), parentWidget);
  }
  Q_ASSERT(fac);
  return fac->createWidget(parentWidget);
}
Exemple #4
0
Qt::ItemFlags ClientToolModel::flags(const QModelIndex &index) const
{
  Qt::ItemFlags ret = QSortFilterProxyModel::flags(index);
  const QString toolId = QSortFilterProxyModel::data(index, ToolModelRole::ToolId).toString();
  ToolUiFactory *factory = m_factories.value(toolId);
  if (!factory || (!factory->remotingSupported() && Endpoint::instance()->isRemoteClient())) {
    ret &= ~Qt::ItemIsEnabled;
  }
  return ret;
}
Exemple #5
0
void ClientToolModel::updateToolInitialization(const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
  for (int i = topLeft.row(); i <= bottomRight.row(); i++) {
    QModelIndex index = QSortFilterProxyModel::index(i, 0);

    if (QSortFilterProxyModel::data(index, ToolModelRole::ToolEnabled).toBool()) {
      const QString toolId = QSortFilterProxyModel::data(index, ToolModelRole::ToolId).toString();
      ToolUiFactory *factory = m_factories.value(toolId);

      if (factory && (factory->remotingSupported() || !Endpoint::instance()->isRemoteClient()) && m_inactiveTools.contains(factory)) {
        factory->initUi();
        m_inactiveTools.remove(factory);
      }
    }
  }
}