bool TranslatorInspector::eventFilter(QObject *object, QEvent *event)
{
  if (event->type() == QEvent::LanguageChange) {
    QCoreApplicationPrivate *obj = static_cast<QCoreApplicationPrivate *>(
        QCoreApplicationPrivate::get(qApp));
    for (int i = 0; i < obj->translators.size(); ++i) {
      if (obj->translators.at(i)->metaObject()->className() ==
          TranslatorWrapper::staticMetaObject.className()) {
        continue; // it's already setup correctly
      } else {
        /* wrap the translator set with installTranslator in a TranslatorWrapper
         * and make sure we use the TranslatorWrapper instead of the original
         * translator
         */
        TranslatorWrapper *wrapper =
            new TranslatorWrapper(obj->translators[i], this);
        obj->translators[i] = wrapper;
        m_translatorsModel->registerTranslator(wrapper);
        connect(wrapper,
                &TranslatorWrapper::destroyed,
#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
                m_translationsModel,
#endif
                [wrapper, this](QObject *) { m_translatorsModel->unregisterTranslator(wrapper); });
      }
    }
    for (auto it = obj->translators.begin(); it != obj->translators.end(); ++it)
    {
      TranslatorWrapper *wrapper = qobject_cast<TranslatorWrapper *>(*it);
      Q_ASSERT(wrapper);
      wrapper->model()->resetAllUnchanged();
    }
  }
  return QObject::eventFilter(object, event);
}
void TranslatorInspector::selectionChanged(const QItemSelection &selection)
{
  m_translationsModel->setSourceModel(0);
  if (!selection.isEmpty()) {
    TranslatorWrapper *translator =
        m_translatorsModel->translator(selection.first().topLeft());
    if (translator) {
      m_translationsModel->setSourceModel(translator->model());
    }
  }
}
void TranslatorInspector::resetTranslations()
{
  const QItemSelection translatorsSelection = m_selectionModel->selection();
  if (translatorsSelection.isEmpty()) {
    return;
  }
  TranslatorWrapper *translator =
      m_translatorsModel->translator(translatorsSelection.first().topLeft());
  Q_ASSERT(translator);
  const QItemSelection translationsSelection =
      m_translationsSelectionModel->selection();
  if (translationsSelection.isEmpty()) {
    return;
  }
  translator->model()->resetTranslations(
      translationsSelection.first().topLeft(),
      translationsSelection.last().bottomRight());
}
Exemplo n.º 4
0
QVariant TranslatorsModel::data(const QModelIndex &index, int role) const
{
  if (role == TranslatorRole) {
    return QVariant::fromValue(m_translators.at(index.row()));
  }
  TranslatorWrapper *trans = m_translators.at(index.row());
  Q_ASSERT(trans);
  if (role == Qt::DisplayRole) {
    if (index.column() == 0) {
      return Util::shortDisplayString(trans->translator());
    } else if (index.column() == 1) {
      return QString(trans->translator()->metaObject()->className());
    } else if (index.column() == 2) {
      return trans->model()->rowCount(QModelIndex());
    }
  } else if (role == Qt::ToolTipRole) {
    return Util::tooltipForObject(trans->translator());
  }
  return QVariant();
}