Skip to content
Snippets Groups Projects
Commit e19c940d authored by Friedemann Kleint's avatar Friedemann Kleint
Browse files

Fixes: Give a warning when goto slot fails

parent 8f50e94c
No related branches found
No related tags found
No related merge requests found
...@@ -53,14 +53,28 @@ ...@@ -53,14 +53,28 @@
#include <QtDesigner/QDesignerFormWindowInterface> #include <QtDesigner/QDesignerFormWindowInterface>
#include <QtCore/QFileInfo> #include <QtGui/QMessageBox>
#include <QtCore/QFileInfo>
#include <QtCore/QDebug> #include <QtCore/QDebug>
enum { debugSlotNavigation = 0 };
using namespace Designer::Internal; using namespace Designer::Internal;
using namespace CPlusPlus; using namespace CPlusPlus;
using namespace TextEditor; using namespace TextEditor;
static QString msgClassNotFound(const QString &uiClassName, const QList<Document::Ptr> &docList)
{
QString files;
foreach (const Document::Ptr &doc, docList) {
if (!files.isEmpty())
files += QLatin1String(", ");
files += doc->fileName();
}
return WorkbenchIntegration::tr("The class definition of '%1' could not be found in %2.").arg(uiClassName, files);
}
WorkbenchIntegration::WorkbenchIntegration(QDesignerFormEditorInterface *core, FormEditorW *parent) : WorkbenchIntegration::WorkbenchIntegration(QDesignerFormEditorInterface *core, FormEditorW *parent) :
qdesigner_internal::QDesignerIntegration(core, ::qobject_cast<QObject*>(parent)), qdesigner_internal::QDesignerIntegration(core, ::qobject_cast<QObject*>(parent)),
m_few(parent) m_few(parent)
...@@ -443,8 +457,20 @@ static QString addParameterNames(const QString &functionSignature, const QString ...@@ -443,8 +457,20 @@ static QString addParameterNames(const QString &functionSignature, const QString
return functionName; return functionName;
} }
void WorkbenchIntegration::slotNavigateToSlot(const QString &objectName, const QString &signalSignature, void WorkbenchIntegration::slotNavigateToSlot(const QString &objectName, const QString &signalSignature,
const QStringList &parameterNames) const QStringList &parameterNames)
{
QString errorMessage;
if (!navigateToSlot(objectName, signalSignature, parameterNames, &errorMessage) && !errorMessage.isEmpty()) {
QMessageBox::critical(m_few->designerEditor()->topLevel(), tr("Error finding source file"), errorMessage);
}
}
bool WorkbenchIntegration::navigateToSlot(const QString &objectName,
const QString &signalSignature,
const QStringList &parameterNames,
QString *errorMessage)
{ {
const QString currentUiFile = m_few->activeFormWindow()->file()->fileName(); const QString currentUiFile = m_few->activeFormWindow()->file()->fileName();
...@@ -457,14 +483,22 @@ void WorkbenchIntegration::slotNavigateToSlot(const QString &objectName, const Q ...@@ -457,14 +483,22 @@ void WorkbenchIntegration::slotNavigateToSlot(const QString &objectName, const Q
const QString uicedName = QLatin1String("ui_") + fi.baseName() + QLatin1String(".h"); const QString uicedName = QLatin1String("ui_") + fi.baseName() + QLatin1String(".h");
QList<Document::Ptr> docList = findDocumentsIncluding(uicedName, true); // change to false when we know the absolute path to generated ui_<>.h file QList<Document::Ptr> docList = findDocumentsIncluding(uicedName, true); // change to false when we know the absolute path to generated ui_<>.h file
if (docList.isEmpty())
return; if (debugSlotNavigation)
qDebug() << objectName << signalSignature << "Looking for " << uicedName << " returned " << docList.size();
if (docList.isEmpty()) {
*errorMessage = tr("No documents matching %1 could be found.").arg(uicedName);
return false;
}
QDesignerFormWindowInterface *fwi = m_few->activeFormWindow()->formWindow(); QDesignerFormWindowInterface *fwi = m_few->activeFormWindow()->formWindow();
const QString uiClassName = fwi->mainContainer()->objectName(); const QString uiClassName = fwi->mainContainer()->objectName();
foreach (Document::Ptr doc, docList) { if (debugSlotNavigation)
qDebug() << "Checking docs for " << uiClassName;
foreach (const Document::Ptr &doc, docList) {
QString namespaceName; // namespace of the class found QString namespaceName; // namespace of the class found
Class *cl = findClass(doc->globalNamespace(), uiClassName, &namespaceName); Class *cl = findClass(doc->globalNamespace(), uiClassName, &namespaceName);
if (cl) { if (cl) {
...@@ -493,8 +527,10 @@ void WorkbenchIntegration::slotNavigateToSlot(const QString &objectName, const Q ...@@ -493,8 +527,10 @@ void WorkbenchIntegration::slotNavigateToSlot(const QString &objectName, const Q
// jump to function definition // jump to function definition
TextEditor::BaseTextEditor::openEditorAt(sourceDoc->fileName(), line); TextEditor::BaseTextEditor::openEditorAt(sourceDoc->fileName(), line);
} }
return; return true;
} }
} }
*errorMessage = msgClassNotFound(uiClassName, docList);
return false;
} }
...@@ -57,6 +57,10 @@ public slots: ...@@ -57,6 +57,10 @@ public slots:
private slots: private slots:
void slotNavigateToSlot(const QString &objectName, const QString &signalSignature, const QStringList &parameterNames); void slotNavigateToSlot(const QString &objectName, const QString &signalSignature, const QStringList &parameterNames);
private: private:
bool navigateToSlot(const QString &objectName,
const QString &signalSignature,
const QStringList &parameterNames,
QString *errorMessage);
FormEditorW *m_few; FormEditorW *m_few;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment