File indexing completed on 2024-05-26 04:41:09

0001 /*
0002     SPDX-FileCopyrightText: 2008 David Nolden <david.nolden.kdevelop@art-master.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #include "usesnavigationcontext.h"
0008 
0009 #include "useswidget.h"
0010 #include <KLocalizedString>
0011 #include <language/duchain/declaration.h>
0012 #include <language/duchain/duchain.h>
0013 #include <language/duchain/duchainlock.h>
0014 
0015 using namespace KDevelop;
0016 
0017 UsesNavigationContext::UsesNavigationContext(IndexedDeclaration declaration, AbstractNavigationContext* previousContext)
0018     : AbstractNavigationContext(TopDUContextPointer(), previousContext)
0019     , m_declaration(declaration)
0020 {
0021     m_widget = new UsesWidget(m_declaration);
0022 }
0023 
0024 UsesNavigationContext::~UsesNavigationContext()
0025 {
0026     delete m_widget;
0027 }
0028 
0029 QString UsesNavigationContext::name() const
0030 {
0031     return QStringLiteral("Uses");
0032 }
0033 
0034 QString UsesNavigationContext::html(bool shorten)
0035 {
0036     Q_UNUSED(shorten);
0037     clear();
0038     modifyHtml()  += QStringLiteral("<html><body><p>");
0039 
0040     if (auto context = previousContext()) {
0041         modifyHtml() += navigationHighlight(i18n("Uses of "));
0042         makeLink(context->name(), context->name(), NavigationAction(context));
0043     } else {
0044         KDevelop::DUChainReadLocker lock(DUChain::lock());
0045         if (Declaration* decl = m_declaration.data()) {
0046             makeLink(i18n("Uses of %1", decl->toString()), DeclarationPointer(
0047                          decl), NavigationAction::NavigateDeclaration);
0048         }
0049     }
0050 
0051     modifyHtml() += QStringLiteral("</p></body></html>");
0052 
0053     return currentHtml();
0054 }
0055 
0056 QWidget* UsesNavigationContext::widget() const
0057 {
0058     return m_widget;
0059 }
0060 
0061 #include "moc_usesnavigationcontext.cpp"