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()); }
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(); }