Changeset View
Changeset View
Standalone View
Standalone View
documentation/documentationview.cpp
Show First 20 Lines • Show All 250 Lines • ▼ Show 20 Line(s) | 249 | { | |||
---|---|---|---|---|---|
251 | connect(ICore::self()->pluginController(), &IPluginController::pluginLoaded, this, &ProvidersModel::loaded); | 251 | connect(ICore::self()->pluginController(), &IPluginController::pluginLoaded, this, &ProvidersModel::loaded); | ||
252 | connect(ICore::self()->documentationController(), &IDocumentationController::providersChanged, this, &ProvidersModel::reloadProviders); | 252 | connect(ICore::self()->documentationController(), &IDocumentationController::providersChanged, this, &ProvidersModel::reloadProviders); | ||
253 | } | 253 | } | ||
254 | 254 | | |||
255 | void ProvidersModel::reloadProviders() | 255 | void ProvidersModel::reloadProviders() | ||
256 | { | 256 | { | ||
257 | beginResetModel(); | 257 | beginResetModel(); | ||
258 | mProviders = ICore::self()->documentationController()->documentationProviders(); | 258 | mProviders = ICore::self()->documentationController()->documentationProviders(); | ||
259 | | ||||
260 | std::sort(mProviders.begin(), mProviders.end(), | ||||
261 | [](const KDevelop::IDocumentationProvider* a, const KDevelop::IDocumentationProvider* b) { | ||||
262 | return a->name() < b->name(); | ||||
263 | }); | ||||
264 | | ||||
259 | endResetModel(); | 265 | endResetModel(); | ||
260 | emit providersChanged(); | 266 | emit providersChanged(); | ||
261 | } | 267 | } | ||
262 | 268 | | |||
263 | QVariant ProvidersModel::data(const QModelIndex& index, int role) const | 269 | QVariant ProvidersModel::data(const QModelIndex& index, int role) const | ||
264 | { | 270 | { | ||
265 | if (index.row() >= mProviders.count() || index.row() < 0) | 271 | if (index.row() >= mProviders.count() || index.row() < 0) | ||
266 | return QVariant(); | 272 | return QVariant(); | ||
267 | 273 | | |||
268 | QVariant ret; | 274 | QVariant ret; | ||
269 | switch (role) | 275 | switch (role) | ||
270 | { | 276 | { | ||
271 | case Qt::DisplayRole: | 277 | case Qt::DisplayRole: | ||
272 | ret = provider(index.row())->name(); | 278 | ret = provider(index.row())->name(); | ||
273 | break; | 279 | break; | ||
274 | case Qt::DecorationRole: | 280 | case Qt::DecorationRole: | ||
275 | ret = provider(index.row())->icon(); | 281 | ret = provider(index.row())->icon(); | ||
276 | break; | 282 | break; | ||
277 | } | 283 | } | ||
278 | return ret; | 284 | return ret; | ||
279 | } | 285 | } | ||
280 | 286 | | |||
281 | void ProvidersModel::removeProviders(const QList<IDocumentationProvider* >&prov) | 287 | void ProvidersModel::addProvider(IDocumentationProvider* provider) | ||
282 | { | 288 | { | ||
283 | if (prov.isEmpty()) | 289 | if (!provider || mProviders.contains(provider)) | ||
284 | return; | 290 | return; | ||
285 | 291 | | |||
286 | int idx = mProviders.indexOf(prov.first()); | 292 | int pos = 0; | ||
293 | while (pos < mProviders.size() && mProviders[pos]->name() < provider->name()) | ||||
294 | ++pos; | ||||
295 | | ||||
296 | beginInsertRows(QModelIndex(), pos, pos); | ||||
297 | mProviders.insert(pos, provider); | ||||
298 | endInsertRows(); | ||||
287 | 299 | | |||
288 | if (idx >= 0) { | | |||
289 | beginRemoveRows(QModelIndex(), idx, idx + prov.count() - 1); | | |||
290 | for(int i = 0, c = prov.count(); i < c; ++i) | | |||
291 | mProviders.removeAt(idx); | | |||
292 | endRemoveRows(); | | |||
293 | emit providersChanged(); | 300 | emit providersChanged(); | ||
294 | } | 301 | } | ||
302 | | ||||
303 | void ProvidersModel::removeProvider(IDocumentationProvider* provider) | ||||
304 | { | ||||
305 | int pos; | ||||
306 | if (!provider || (pos = mProviders.indexOf(provider)) < 0) | ||||
307 | return; | ||||
308 | | ||||
309 | beginRemoveRows(QModelIndex(), pos, pos); | ||||
310 | mProviders.removeAt(pos); | ||||
311 | endRemoveRows(); | ||||
312 | | ||||
313 | emit providersChanged(); | ||||
295 | } | 314 | } | ||
296 | 315 | | |||
297 | void ProvidersModel::unloaded(IPlugin* plugin) | 316 | void ProvidersModel::unloaded(IPlugin* plugin) | ||
298 | { | 317 | { | ||
299 | IDocumentationProvider* provider = plugin->extension<IDocumentationProvider>(); | 318 | removeProvider(plugin->extension<IDocumentationProvider>()); | ||
300 | if (provider) | | |||
301 | removeProviders({provider}); | | |||
302 | 319 | | |||
303 | IDocumentationProviderProvider* providerProvider = plugin->extension<IDocumentationProviderProvider>(); | 320 | IDocumentationProviderProvider* providerProvider = plugin->extension<IDocumentationProviderProvider>(); | ||
304 | if (providerProvider) { | 321 | if (providerProvider) { | ||
305 | removeProviders(providerProvider->providers()); | 322 | foreach(IDocumentationProvider* provider, providerProvider->providers()) | ||
323 | removeProvider(provider); | ||||
306 | } | 324 | } | ||
307 | } | 325 | } | ||
308 | 326 | | |||
309 | void ProvidersModel::loaded(IPlugin* plugin) | 327 | void ProvidersModel::loaded(IPlugin* plugin) | ||
310 | { | 328 | { | ||
311 | IDocumentationProvider* provider = plugin->extension<IDocumentationProvider>(); | 329 | addProvider(plugin->extension<IDocumentationProvider>()); | ||
312 | if (provider && !mProviders.contains(provider)) { | | |||
313 | beginInsertRows(QModelIndex(), 0, 0); | | |||
314 | mProviders.append(provider); | | |||
315 | endInsertRows(); | | |||
316 | emit providersChanged(); | | |||
317 | } | | |||
318 | 330 | | |||
319 | IDocumentationProviderProvider* providerProvider = plugin->extension<IDocumentationProviderProvider>(); | 331 | IDocumentationProviderProvider* providerProvider = plugin->extension<IDocumentationProviderProvider>(); | ||
320 | if (providerProvider) { | 332 | if (providerProvider) { | ||
321 | beginInsertRows(QModelIndex(), 0, providerProvider->providers().count()-1); | 333 | foreach(IDocumentationProvider* provider, providerProvider->providers()) | ||
322 | mProviders.append(providerProvider->providers()); | 334 | addProvider(provider); | ||
323 | endInsertRows(); | | |||
324 | emit providersChanged(); | | |||
325 | } | 335 | } | ||
326 | } | 336 | } | ||
327 | 337 | | |||
328 | int ProvidersModel::rowCount(const QModelIndex& parent) const | 338 | int ProvidersModel::rowCount(const QModelIndex& parent) const | ||
329 | { | 339 | { | ||
330 | return parent.isValid() ? 0 : mProviders.count(); | 340 | return parent.isValid() ? 0 : mProviders.count(); | ||
331 | } | 341 | } | ||
332 | 342 | | |||
Show All 14 Lines |