QmakeProjectManager: Some editor creation related cleanup

Use a BaseEditorFactory derived class, move some code around.

Change-Id: I051ae55d106610ca818abdd3a5f6fd9f17131af2
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
This commit is contained in:
hjk
2014-08-22 17:40:24 +02:00
parent 3430514eff
commit b84a47ffc5
6 changed files with 84 additions and 104 deletions

View File

@@ -46,6 +46,8 @@
#include <QDir> #include <QDir>
#include <QTextBlock> #include <QTextBlock>
using namespace TextEditor;
namespace QmakeProjectManager { namespace QmakeProjectManager {
namespace Internal { namespace Internal {
@@ -53,23 +55,33 @@ namespace Internal {
// ProFileEditor // ProFileEditor
// //
ProFileEditor::ProFileEditor() class ProFileEditor : public TextEditor::BaseTextEditor
{ {
addContext(Constants::C_PROFILEEDITOR); public:
setDuplicateSupported(true); ProFileEditor()
setCommentStyle(Utils::CommentDefinition::HashStyle); {
setCompletionAssistProvider(ExtensionSystem::PluginManager::getObject<ProFileCompletionAssistProvider>()); addContext(Constants::C_PROFILEEDITOR);
setEditorCreator([]() { return new ProFileEditor; }); setDuplicateSupported(true);
setDocumentCreator([]() { return new ProFileDocument; }); setCommentStyle(Utils::CommentDefinition::HashStyle);
setWidgetCreator([]() { return new ProFileEditorWidget; }); setCompletionAssistProvider(ExtensionSystem::PluginManager::getObject<ProFileCompletionAssistProvider>());
} }
};
// //
// ProFileEditorWidget // ProFileEditorWidget
// //
ProFileEditorWidget::ProFileEditorWidget() class ProFileEditorWidget : public BaseTextEditorWidget
{} {
public:
ProFileEditorWidget() {}
protected:
virtual Link findLinkAt(const QTextCursor &, bool resolveTarget = true,
bool inNextSplit = false);
BaseTextEditor *createEditor();
void contextMenuEvent(QContextMenuEvent *);
};
static bool isValidFileNameChar(const QChar &c) static bool isValidFileNameChar(const QChar &c)
{ {
@@ -159,7 +171,7 @@ ProFileEditorWidget::Link ProFileEditorWidget::findLinkAt(const QTextCursor &cur
return link; return link;
} }
TextEditor::BaseTextEditor *ProFileEditorWidget::createEditor() BaseTextEditor *ProFileEditorWidget::createEditor()
{ {
QTC_ASSERT("should not happen anymore" && false, return 0); QTC_ASSERT("should not happen anymore" && false, return 0);
} }
@@ -173,6 +185,18 @@ void ProFileEditorWidget::contextMenuEvent(QContextMenuEvent *e)
// ProFileDocument // ProFileDocument
// //
class ProFileDocument : public BaseTextDocument
{
public:
ProFileDocument();
QString defaultPath() const;
QString suggestedFileName() const;
// qmake project files doesn't support UTF8-BOM
// If the BOM would be added qmake would fail and QtCreator couldn't parse the project file
bool supportsUtf8Bom() { return false; }
};
ProFileDocument::ProFileDocument() ProFileDocument::ProFileDocument()
{ {
setId(Constants::PROFILE_EDITOR_ID); setId(Constants::PROFILE_EDITOR_ID);
@@ -192,34 +216,33 @@ QString ProFileDocument::suggestedFileName() const
return fi.fileName(); return fi.fileName();
} }
// //
// ProFileEditorFactory // ProFileEditorFactory
// //
ProFileEditorFactory::ProFileEditorFactory() ProFileEditorFactory::ProFileEditorFactory()
{ {
setId(QmakeProjectManager::Constants::PROFILE_EDITOR_ID); setId(Constants::PROFILE_EDITOR_ID);
setDisplayName(qApp->translate("OpenWith::Editors", QmakeProjectManager::Constants::PROFILE_EDITOR_DISPLAY_NAME)); setDisplayName(qApp->translate("OpenWith::Editors", Constants::PROFILE_EDITOR_DISPLAY_NAME));
addMimeType(QmakeProjectManager::Constants::PROFILE_MIMETYPE); addMimeType(Constants::PROFILE_MIMETYPE);
addMimeType(QmakeProjectManager::Constants::PROINCLUDEFILE_MIMETYPE); addMimeType(Constants::PROINCLUDEFILE_MIMETYPE);
addMimeType(QmakeProjectManager::Constants::PROFEATUREFILE_MIMETYPE); addMimeType(Constants::PROFEATUREFILE_MIMETYPE);
addMimeType(QmakeProjectManager::Constants::PROCONFIGURATIONFILE_MIMETYPE); addMimeType(Constants::PROCONFIGURATIONFILE_MIMETYPE);
addMimeType(QmakeProjectManager::Constants::PROCACHEFILE_MIMETYPE); addMimeType(Constants::PROCACHEFILE_MIMETYPE);
addMimeType(QmakeProjectManager::Constants::PROSTASHFILE_MIMETYPE); addMimeType(Constants::PROSTASHFILE_MIMETYPE);
new TextEditor::TextEditorActionHandler(this, Constants::C_PROFILEEDITOR,
TextEditor::TextEditorActionHandler::UnCommentSelection setDocumentCreator([]() { return new ProFileDocument; });
| TextEditor::TextEditorActionHandler::JumpToFileUnderCursor); setEditorWidgetCreator([]() { return new ProFileEditorWidget; });
setEditorCreator([]() { return new ProFileEditor; });
setEditorActionHandlers(Constants::C_PROFILEEDITOR,
TextEditorActionHandler::UnCommentSelection
| TextEditorActionHandler::JumpToFileUnderCursor);
Core::FileIconProvider::registerIconOverlayForSuffix(QtSupport::Constants::ICON_QT_PROJECT, "pro"); Core::FileIconProvider::registerIconOverlayForSuffix(QtSupport::Constants::ICON_QT_PROJECT, "pro");
Core::FileIconProvider::registerIconOverlayForSuffix(QtSupport::Constants::ICON_QT_PROJECT, "pri"); Core::FileIconProvider::registerIconOverlayForSuffix(QtSupport::Constants::ICON_QT_PROJECT, "pri");
Core::FileIconProvider::registerIconOverlayForSuffix(QtSupport::Constants::ICON_QT_PROJECT, "prf"); Core::FileIconProvider::registerIconOverlayForSuffix(QtSupport::Constants::ICON_QT_PROJECT, "prf");
} }
Core::IEditor *ProFileEditorFactory::createEditor()
{
return new ProFileEditor;
}
} // namespace Internal } // namespace Internal
} // namespace QmakeProjectManager } // namespace QmakeProjectManager

View File

@@ -30,57 +30,17 @@
#ifndef PROFILEEDITOR_H #ifndef PROFILEEDITOR_H
#define PROFILEEDITOR_H #define PROFILEEDITOR_H
#include <coreplugin/editormanager/ieditorfactory.h>
#include <texteditor/basetextdocument.h>
#include <texteditor/basetexteditor.h> #include <texteditor/basetexteditor.h>
namespace QmakeProjectManager { namespace QmakeProjectManager {
namespace Internal { namespace Internal {
class ProFileEditor : public TextEditor::BaseTextEditor class ProFileEditorFactory : public TextEditor::BaseTextEditorFactory
{
Q_OBJECT
public:
ProFileEditor();
};
class ProFileEditorWidget : public TextEditor::BaseTextEditorWidget
{
Q_OBJECT
public:
ProFileEditorWidget();
protected:
virtual Link findLinkAt(const QTextCursor &, bool resolveTarget = true,
bool inNextSplit = false);
TextEditor::BaseTextEditor *createEditor();
void contextMenuEvent(QContextMenuEvent *);
};
class ProFileDocument : public TextEditor::BaseTextDocument
{
Q_OBJECT
public:
ProFileDocument();
QString defaultPath() const;
QString suggestedFileName() const;
// qmake project files doesn't support UTF8-BOM
// If the BOM would be added qmake would fail and QtCreator couldn't parse the project file
bool supportsUtf8Bom() { return false; }
};
class ProFileEditorFactory : public Core::IEditorFactory
{ {
Q_OBJECT Q_OBJECT
public: public:
ProFileEditorFactory(); ProFileEditorFactory();
Core::IEditor *createEditor();
}; };
} // namespace Internal } // namespace Internal

View File

@@ -28,20 +28,23 @@
****************************************************************************/ ****************************************************************************/
#include "profilehoverhandler.h" #include "profilehoverhandler.h"
#include "profileeditor.h"
#include "profilecompletionassist.h" #include "profilecompletionassist.h"
#include "qmakeprojectmanagerconstants.h"
#include <coreplugin/helpmanager.h> #include <coreplugin/helpmanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
#include <texteditor/basetexteditor.h>
#include <utils/htmldocextractor.h> #include <utils/htmldocextractor.h>
#include <QTextBlock> #include <QTextBlock>
#include <QUrl> #include <QUrl>
using namespace QmakeProjectManager;
using namespace QmakeProjectManager::Internal;
using namespace Core; using namespace Core;
namespace QmakeProjectManager {
namespace Internal {
ProFileHoverHandler::ProFileHoverHandler(QObject *parent) ProFileHoverHandler::ProFileHoverHandler(QObject *parent)
: BaseHoverHandler(parent), : BaseHoverHandler(parent),
m_manualKind(UnknownManual) m_manualKind(UnknownManual)
@@ -56,20 +59,18 @@ ProFileHoverHandler::~ProFileHoverHandler()
bool ProFileHoverHandler::acceptEditor(IEditor *editor) bool ProFileHoverHandler::acceptEditor(IEditor *editor)
{ {
if (qobject_cast<ProFileEditor *>(editor) != 0) return editor->context().contains(Constants::C_PROFILEEDITOR);
return true;
return false;
} }
void ProFileHoverHandler::identifyMatch(TextEditor::BaseTextEditor *editor, int pos) void ProFileHoverHandler::identifyMatch(TextEditor::BaseTextEditor *editor, int pos)
{ {
m_docFragment.clear(); m_docFragment.clear();
m_manualKind = UnknownManual; m_manualKind = UnknownManual;
if (ProFileEditorWidget *proFileEditor = qobject_cast<ProFileEditorWidget *>(editor->widget())) { if (TextEditor::BaseTextEditorWidget *widget = editor->editorWidget()) {
if (!proFileEditor->extraSelectionTooltip(pos).isEmpty()) { if (!widget->extraSelectionTooltip(pos).isEmpty()) {
setToolTip(proFileEditor->extraSelectionTooltip(pos)); setToolTip(widget->extraSelectionTooltip(pos));
} else { } else {
QTextDocument *document = proFileEditor->document(); QTextDocument *document = widget->document();
QTextBlock block = document->findBlock(pos); QTextBlock block = document->findBlock(pos);
identifyQMakeKeyword(block.text(), pos - block.position()); identifyQMakeKeyword(block.text(), pos - block.position());
@@ -161,3 +162,5 @@ void ProFileHoverHandler::identifyDocFragment(ProFileHoverHandler::ManualKind ma
} }
} }
} // namespace Internal
} // namespace QmakeProjectManager

View File

@@ -45,19 +45,19 @@
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <texteditor/basetexteditor.h>
#include <QDir> #include <QDir>
#include <QFileInfo> #include <QFileInfo>
#include <QVariant> #include <QVariant>
#include <QMessageBox>
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace QmakeProjectManager; using namespace TextEditor;
using namespace QmakeProjectManager::Internal;
QmakeManager::QmakeManager(QmakeProjectManagerPlugin *plugin) namespace QmakeProjectManager {
: m_plugin(plugin),
m_contextNode(0), QmakeManager::QmakeManager()
: m_contextNode(0),
m_contextProject(0), m_contextProject(0),
m_contextFile(0) m_contextFile(0)
{ {
@@ -132,9 +132,7 @@ void QmakeManager::setContextFile(ProjectExplorer::FileNode *file)
void QmakeManager::addLibrary() void QmakeManager::addLibrary()
{ {
ProFileEditor *editor = if (auto editor = qobject_cast<BaseTextEditor *>(Core::EditorManager::currentEditor()))
qobject_cast<ProFileEditor*>(Core::EditorManager::currentEditor());
if (editor)
addLibrary(editor->document()->filePath(), editor); addLibrary(editor->document()->filePath(), editor);
} }
@@ -145,19 +143,19 @@ void QmakeManager::addLibraryContextMenu()
addLibrary(node->path()); addLibrary(node->path());
} }
void QmakeManager::addLibrary(const QString &fileName, ProFileEditor *editor) void QmakeManager::addLibrary(const QString &fileName, BaseTextEditor *editor)
{ {
AddLibraryWizard wizard(fileName, Core::ICore::dialogParent()); Internal::AddLibraryWizard wizard(fileName, Core::ICore::dialogParent());
if (wizard.exec() != QDialog::Accepted) if (wizard.exec() != QDialog::Accepted)
return; return;
if (!editor) if (!editor)
editor = qobject_cast<ProFileEditor *> (Core::EditorManager::openEditor(fileName, editor = qobject_cast<BaseTextEditor *>(Core::EditorManager::openEditor(fileName,
QmakeProjectManager::Constants::PROFILE_EDITOR_ID, Core::EditorManager::DoNotMakeVisible)); Constants::PROFILE_EDITOR_ID, Core::EditorManager::DoNotMakeVisible));
if (!editor) if (!editor)
return; return;
const int endOfDoc = editor->position(TextEditor::BaseTextEditor::EndOfDoc); const int endOfDoc = editor->position(BaseTextEditor::EndOfDoc);
editor->setCursorPosition(endOfDoc); editor->setCursorPosition(endOfDoc);
QString snippet = wizard.snippet(); QString snippet = wizard.snippet();
@@ -297,3 +295,5 @@ void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isF
bc->setSubNodeBuild(0); bc->setSubNodeBuild(0);
bc->setFileNodeBuild(0); bc->setFileNodeBuild(0);
} }
} // namespace QmakeProjectManager

View File

@@ -36,7 +36,7 @@
#include <projectexplorer/projectnodes.h> #include <projectexplorer/projectnodes.h>
namespace Core { class IEditor; } namespace Core { class IEditor; }
namespace ExtensionSystem { class PluginManager; } namespace TextEditor { class BaseTextEditor; }
namespace ProjectExplorer { namespace ProjectExplorer {
class Project; class Project;
@@ -46,11 +46,6 @@ class ToolChain;
namespace QmakeProjectManager { namespace QmakeProjectManager {
namespace Internal {
class ProFileEditor;
class QmakeProjectManagerPlugin;
} // namespace Internal
class QmakeProject; class QmakeProject;
class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public ProjectExplorer::IProjectManager class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public ProjectExplorer::IProjectManager
@@ -58,7 +53,7 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeManager : public ProjectExplorer::IProject
Q_OBJECT Q_OBJECT
public: public:
QmakeManager(Internal::QmakeProjectManagerPlugin *plugin); QmakeManager();
~QmakeManager(); ~QmakeManager();
void registerProject(QmakeProject *project); void registerProject(QmakeProject *project);
@@ -96,10 +91,9 @@ private:
ProjectExplorer::Project *contextProject, ProjectExplorer::Project *contextProject,
ProjectExplorer::Node *contextNode, ProjectExplorer::Node *contextNode,
ProjectExplorer::FileNode *contextFile); ProjectExplorer::FileNode *contextFile);
void addLibrary(const QString &fileName, Internal::ProFileEditor *editor = 0); void addLibrary(const QString &fileName, TextEditor::BaseTextEditor *editor = 0);
void runQMake(ProjectExplorer::Project *p, ProjectExplorer::Node *node); void runQMake(ProjectExplorer::Project *p, ProjectExplorer::Node *node);
Internal::QmakeProjectManagerPlugin *m_plugin;
ProjectExplorer::Node *m_contextNode; ProjectExplorer::Node *m_contextNode;
ProjectExplorer::Project *m_contextProject; ProjectExplorer::Project *m_contextProject;
ProjectExplorer::FileNode *m_contextFile; ProjectExplorer::FileNode *m_contextFile;

View File

@@ -106,7 +106,7 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString
m_projectExplorer = ProjectExplorerPlugin::instance(); m_projectExplorer = ProjectExplorerPlugin::instance();
//create and register objects //create and register objects
m_qmakeProjectManager = new QmakeManager(this); m_qmakeProjectManager = new QmakeManager;
addObject(m_qmakeProjectManager); addObject(m_qmakeProjectManager);
ProjectExplorer::KitManager::registerKitInformation(new QmakeKitInformation); ProjectExplorer::KitManager::registerKitInformation(new QmakeKitInformation);