forked from qt-creator/qt-creator
Qnx: Fixing Bar Descriptor XML file editor to provide editor actions
BarDescriptorEditorWidget is using TextEditorActionHandler class to provide editor actions e.g. Undo, Redo, Cut, Copy, Paste accessible from main menu and using shortcuts. TextEditorActionHandler.resolveTextEditorWidget() virtual function is added to all resolving TextEditorWidget for an Editor. This allows to have IEditor->widget() to have non-BaseTextEditorWidget instances too. Task-number: QTCREATORBUG-10040 Change-Id: I6f433fc307c13ef2b2a20c48e6473826f2619544 Reviewed-by: David Kaspar <dkaspar@blackberry.com> Reviewed-by: David Schulz <david.schulz@digia.com> Reviewed-by: Tobias Nätterlund <tobias.naetterlund@kdab.com> Reviewed-by: Eike Ziller <eike.ziller@digia.com> Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
This commit is contained in:
@@ -39,6 +39,8 @@
|
||||
#include <projectexplorer/task.h>
|
||||
#include <projectexplorer/taskhub.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <texteditor/texteditorconstants.h>
|
||||
#include <texteditor/basetexteditor.h>
|
||||
|
||||
#include <QAction>
|
||||
#include <QToolBar>
|
||||
@@ -80,6 +82,9 @@ BarDescriptorEditor::BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget
|
||||
m_actionGroup->addAction(sourceAction);
|
||||
|
||||
generalAction->setChecked(true);
|
||||
|
||||
setContext(Core::Context(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT,
|
||||
TextEditor::Constants::C_TEXTEDITOR));
|
||||
}
|
||||
|
||||
bool BarDescriptorEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
|
||||
|
||||
@@ -36,20 +36,42 @@
|
||||
|
||||
#include <coreplugin/editormanager/editormanager.h>
|
||||
#include <coreplugin/editormanager/ieditor.h>
|
||||
#include <texteditor/texteditoractionhandler.h>
|
||||
|
||||
using namespace Qnx;
|
||||
using namespace Qnx::Internal;
|
||||
|
||||
class BarDescriptorActionHandler : public TextEditor::TextEditorActionHandler
|
||||
{
|
||||
public:
|
||||
BarDescriptorActionHandler()
|
||||
: TextEditor::TextEditorActionHandler(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT)
|
||||
{
|
||||
}
|
||||
protected:
|
||||
TextEditor::BaseTextEditorWidget *resolveTextEditorWidget(Core::IEditor *editor) const
|
||||
{
|
||||
BarDescriptorEditorWidget *w = qobject_cast<BarDescriptorEditorWidget *>(editor->widget());
|
||||
return w ? w->sourceWidget() : 0;
|
||||
}
|
||||
};
|
||||
|
||||
BarDescriptorEditorFactory::BarDescriptorEditorFactory(QObject *parent)
|
||||
: Core::IEditorFactory(parent)
|
||||
, m_actionHandler(new BarDescriptorActionHandler)
|
||||
{
|
||||
setId(Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID);
|
||||
setDisplayName(tr("Bar descriptor editor"));
|
||||
addMimeType(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE);
|
||||
}
|
||||
|
||||
BarDescriptorEditorFactory::~BarDescriptorEditorFactory()
|
||||
{
|
||||
delete m_actionHandler;
|
||||
}
|
||||
|
||||
Core::IEditor *BarDescriptorEditorFactory::createEditor(QWidget *parent)
|
||||
{
|
||||
BarDescriptorEditorWidget *editorWidget = new BarDescriptorEditorWidget(parent);
|
||||
BarDescriptorEditorWidget *editorWidget = new BarDescriptorEditorWidget(parent, m_actionHandler);
|
||||
return editorWidget->editor();
|
||||
}
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
|
||||
#include <coreplugin/editormanager/ieditorfactory.h>
|
||||
|
||||
namespace TextEditor {
|
||||
class TextEditorActionHandler;
|
||||
}
|
||||
|
||||
namespace Qnx {
|
||||
namespace Internal {
|
||||
|
||||
@@ -43,8 +47,12 @@ class BarDescriptorEditorFactory : public Core::IEditorFactory
|
||||
|
||||
public:
|
||||
explicit BarDescriptorEditorFactory(QObject *parent = 0);
|
||||
~BarDescriptorEditorFactory();
|
||||
|
||||
Core::IEditor *createEditor(QWidget *parent);
|
||||
|
||||
private:
|
||||
TextEditor::TextEditorActionHandler *m_actionHandler;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -41,18 +41,29 @@
|
||||
#include "bardescriptoreditorpackageinformationwidget.h"
|
||||
#include "bardescriptoreditorpermissionswidget.h"
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <projectexplorer/iprojectproperties.h>
|
||||
#include <projectexplorer/projectwindow.h>
|
||||
#include <texteditor/plaintexteditor.h>
|
||||
#include <texteditor/texteditoractionhandler.h>
|
||||
#include <texteditor/texteditorsettings.h>
|
||||
#include <texteditor/texteditorconstants.h>
|
||||
|
||||
using namespace Qnx;
|
||||
using namespace Qnx::Internal;
|
||||
|
||||
BarDescriptorEditorWidget::BarDescriptorEditorWidget(QWidget *parent)
|
||||
BarDescriptorEditorWidget::BarDescriptorEditorWidget(
|
||||
QWidget *parent, TextEditor::TextEditorActionHandler *handler)
|
||||
: QStackedWidget(parent)
|
||||
, m_editor(0)
|
||||
, m_handler(handler)
|
||||
, m_dirty(false)
|
||||
{
|
||||
Core::IContext *myContext = new Core::IContext(this);
|
||||
myContext->setWidget(this);
|
||||
myContext->setContext(Core::Context(Constants::QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT, TextEditor::Constants::C_TEXTEDITOR));
|
||||
Core::ICore::addContextObject(myContext);
|
||||
|
||||
initGeneralPage();
|
||||
initApplicationPage();
|
||||
initAssetsPage();
|
||||
@@ -149,6 +160,8 @@ void BarDescriptorEditorWidget::initSourcePage()
|
||||
m_xmlSourceWidget = new TextEditor::PlainTextEditorWidget(this);
|
||||
addWidget(m_xmlSourceWidget);
|
||||
|
||||
TextEditor::TextEditorSettings::initializeEditor(m_xmlSourceWidget);
|
||||
m_handler->setupActions(m_xmlSourceWidget);
|
||||
m_xmlSourceWidget->configure(QLatin1String(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE));
|
||||
connect(m_xmlSourceWidget, SIGNAL(textChanged()), this, SLOT(setDirty()));
|
||||
}
|
||||
@@ -204,6 +217,11 @@ BarDescriptorEditorAssetsWidget *BarDescriptorEditorWidget::assetsWidget() const
|
||||
return m_assetsWidget;
|
||||
}
|
||||
|
||||
TextEditor::BaseTextEditorWidget *BarDescriptorEditorWidget::sourceWidget() const
|
||||
{
|
||||
return m_xmlSourceWidget;
|
||||
}
|
||||
|
||||
void BarDescriptorEditorWidget::setFilePath(const QString &filePath)
|
||||
{
|
||||
Core::IDocument *doc = m_xmlSourceWidget->editorDocument();
|
||||
|
||||
@@ -46,6 +46,8 @@ class PanelsWidget;
|
||||
|
||||
namespace TextEditor {
|
||||
class PlainTextEditorWidget;
|
||||
class TextEditorActionHandler;
|
||||
class BaseTextEditorWidget;
|
||||
}
|
||||
|
||||
namespace Qnx {
|
||||
@@ -65,7 +67,7 @@ class BarDescriptorEditorWidget : public QStackedWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit BarDescriptorEditorWidget(QWidget *parent = 0);
|
||||
explicit BarDescriptorEditorWidget(QWidget *parent, TextEditor::TextEditorActionHandler *handler);
|
||||
|
||||
Core::IEditor *editor() const;
|
||||
|
||||
@@ -79,6 +81,8 @@ public:
|
||||
|
||||
BarDescriptorEditorAssetsWidget *assetsWidget() const;
|
||||
|
||||
TextEditor::BaseTextEditorWidget *sourceWidget() const;
|
||||
|
||||
void setFilePath(const QString &filePath);
|
||||
QString xmlSource() const;
|
||||
void setXmlSource(const QString &xmlSource);
|
||||
@@ -103,6 +107,7 @@ private:
|
||||
|
||||
mutable Core::IEditor *m_editor;
|
||||
|
||||
TextEditor::TextEditorActionHandler *m_handler;
|
||||
bool m_dirty;
|
||||
|
||||
// New UI
|
||||
|
||||
@@ -99,6 +99,7 @@ const char QNX_BB_SIGNING_ID[] = "ZZ.BlackBerry Signing Infrastructure Configura
|
||||
|
||||
const char QNX_BAR_DESCRIPTOR_MIME_TYPE[] = "application/vnd.rim.qnx.bar_descriptor";
|
||||
const char QNX_BAR_DESCRIPTOR_EDITOR_ID[] = "Qnx.BarDescriptorEditor";
|
||||
const char QNX_BAR_DESCRIPTOR_EDITOR_CONTEXT[] = "Qnx.BarDescriptorEditor";
|
||||
|
||||
const char QNX_TASK_CATEGORY_BARDESCRIPTOR[] = "Task.Category.BarDescriptor";
|
||||
|
||||
|
||||
@@ -560,6 +560,11 @@ FUNCTION(gotoNextWordCamelCase)
|
||||
FUNCTION(gotoNextWordCamelCaseWithSelection)
|
||||
|
||||
|
||||
BaseTextEditorWidget *TextEditorActionHandler::resolveTextEditorWidget(Core::IEditor *editor) const
|
||||
{
|
||||
return qobject_cast<BaseTextEditorWidget *>(editor->widget());
|
||||
}
|
||||
|
||||
void TextEditorActionHandler::updateCurrentEditor(Core::IEditor *editor)
|
||||
{
|
||||
m_currentEditor = 0;
|
||||
@@ -567,7 +572,7 @@ void TextEditorActionHandler::updateCurrentEditor(Core::IEditor *editor)
|
||||
if (!editor)
|
||||
return;
|
||||
|
||||
BaseTextEditorWidget *baseEditor = qobject_cast<BaseTextEditorWidget *>(editor->widget());
|
||||
BaseTextEditorWidget *baseEditor = resolveTextEditorWidget(editor);
|
||||
|
||||
if (baseEditor && baseEditor->actionHack() == this) {
|
||||
m_currentEditor = baseEditor;
|
||||
|
||||
@@ -79,6 +79,7 @@ public slots:
|
||||
void updateCopyAction();
|
||||
|
||||
protected:
|
||||
virtual BaseTextEditorWidget *resolveTextEditorWidget(Core::IEditor *editor) const;
|
||||
const QPointer<BaseTextEditorWidget> ¤tEditor() const;
|
||||
|
||||
QAction *registerAction(const Core::Id &id,
|
||||
|
||||
Reference in New Issue
Block a user