| 28 | // exist or doesn't expose a dialog. Captures the catalog by reference — |
| 29 | // callers must keep the catalog alive for the duration of the dialog. |
| 30 | QueryParserDialogFn makeParserDialogProvider(const ExtensionCatalogService& catalog) { |
| 31 | return [&catalog](const std::string& encoding) -> const PJ_dialog_vtable_t* { |
| 32 | const auto* parser = catalog.findParserByEncoding(QString::fromStdString(encoding)); |
| 33 | if (parser == nullptr) { |
| 34 | return nullptr; |
| 35 | } |
| 36 | auto vtable = parser->library.resolveDialogVtable(); |
| 37 | return vtable ? *vtable : nullptr; |
| 38 | }; |
| 39 | } |
| 40 | |
| 41 | DataSourceResult contractViolation(const std::string& plugin_name, const std::string& reason) { |
| 42 | qCWarning(lcDialogPresenter).noquote() << "Plugin" << QString::fromStdString(plugin_name) |
no test coverage detected