forked from qt-creator/qt-creator
QmlDesigner: Allow deleting materials using the delete action
Fixes: QDS-7012 Change-Id: I5eb03971d33a997fc1463ec4ee70eb33a730a897 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -129,11 +129,13 @@ void DesignerActionManager::polishActions() const
|
||||
Core::Context qmlDesignerFormEditorContext(Constants::C_QMLFORMEDITOR);
|
||||
Core::Context qmlDesignerEditor3DContext(Constants::C_QMLEDITOR3D);
|
||||
Core::Context qmlDesignerNavigatorContext(Constants::C_QMLNAVIGATOR);
|
||||
Core::Context qmlDesignerMaterialBrowserContext(Constants::C_QMLMATERIALBROWSER);
|
||||
|
||||
Core::Context qmlDesignerUIContext;
|
||||
qmlDesignerUIContext.add(qmlDesignerFormEditorContext);
|
||||
qmlDesignerUIContext.add(qmlDesignerEditor3DContext);
|
||||
qmlDesignerUIContext.add(qmlDesignerNavigatorContext);
|
||||
qmlDesignerUIContext.add(qmlDesignerMaterialBrowserContext);
|
||||
|
||||
for (auto *action : actions) {
|
||||
if (!action->menuId().isEmpty()) {
|
||||
|
@@ -201,6 +201,12 @@ void MaterialBrowserModel::removeMaterial(const ModelNode &material)
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialBrowserModel::deleteSelectedMaterial()
|
||||
{
|
||||
if (isValidIndex(m_selectedIndex))
|
||||
m_materialList[m_selectedIndex].destroy();
|
||||
}
|
||||
|
||||
void MaterialBrowserModel::updateSelectedMaterial()
|
||||
{
|
||||
selectMaterial(m_selectedIndex, true);
|
||||
|
@@ -61,6 +61,7 @@ public:
|
||||
QList<ModelNode> materials() const;
|
||||
void setMaterials(const QList<ModelNode> &materials, bool hasQuick3DImport);
|
||||
void removeMaterial(const ModelNode &material);
|
||||
void deleteSelectedMaterial();
|
||||
void updateMaterialName(const ModelNode &material);
|
||||
void updateSelectedMaterial();
|
||||
int materialIndex(const ModelNode &material) const;
|
||||
|
@@ -32,6 +32,7 @@
|
||||
#include <coreplugin/icore.h>
|
||||
#include <nodeinstanceview.h>
|
||||
#include <qmldesignerconstants.h>
|
||||
#include <designmodecontext.h>
|
||||
|
||||
#include <QQuickItem>
|
||||
|
||||
@@ -53,7 +54,11 @@ bool MaterialBrowserView::hasWidget() const
|
||||
WidgetInfo MaterialBrowserView::widgetInfo()
|
||||
{
|
||||
if (m_widget.isNull()) {
|
||||
m_widget = new MaterialBrowserWidget;
|
||||
m_widget = new MaterialBrowserWidget(this);
|
||||
|
||||
auto matEditorContext = new Internal::MaterialBrowserContext(m_widget.data());
|
||||
Core::ICore::addContextObject(matEditorContext);
|
||||
|
||||
MaterialBrowserModel *matBrowserModel = m_widget->materialBrowserModel().data();
|
||||
|
||||
// custom notifications below are sent to the MaterialEditor
|
||||
@@ -288,6 +293,8 @@ void MaterialBrowserView::customNotification(const AbstractView *view, const QSt
|
||||
QTimer::singleShot(0, this, [this]() {
|
||||
refreshModel(true);
|
||||
});
|
||||
} else if (identifier == "delete_selected_material") {
|
||||
m_widget->materialBrowserModel()->deleteSelectedMaterial();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -25,6 +25,7 @@
|
||||
|
||||
#include "materialbrowserwidget.h"
|
||||
#include "materialbrowsermodel.h"
|
||||
#include "materialbrowserview.h"
|
||||
|
||||
#include <theme.h>
|
||||
|
||||
@@ -130,14 +131,20 @@ bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event)
|
||||
return QObject::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
MaterialBrowserWidget::MaterialBrowserWidget()
|
||||
: m_materialBrowserModel(new MaterialBrowserModel(this))
|
||||
MaterialBrowserWidget::MaterialBrowserWidget(MaterialBrowserView *view)
|
||||
: m_materialBrowserView(view)
|
||||
, m_materialBrowserModel(new MaterialBrowserModel(this))
|
||||
, m_quickWidget(new QQuickWidget(this))
|
||||
, m_previewImageProvider(new PreviewImageProvider())
|
||||
{
|
||||
setWindowTitle(tr("Material Browser", "Title of material browser widget"));
|
||||
setMinimumWidth(120);
|
||||
|
||||
Core::Context context(Constants::C_QMLMATERIALBROWSER);
|
||||
m_context = new Core::IContext(this);
|
||||
m_context->setContext(context);
|
||||
m_context->setWidget(this);
|
||||
|
||||
m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
||||
m_quickWidget->engine()->addImportPath(propertyEditorResourcesPath() + "/imports");
|
||||
m_quickWidget->setClearColor(Theme::getColor(Theme::Color::DSpanelBackground));
|
||||
@@ -182,6 +189,14 @@ QList<QToolButton *> MaterialBrowserWidget::createToolBarWidgets()
|
||||
return {};
|
||||
}
|
||||
|
||||
void MaterialBrowserWidget::contextHelp(const Core::IContext::HelpCallback &callback) const
|
||||
{
|
||||
if (m_materialBrowserView)
|
||||
m_materialBrowserView->contextHelp(callback);
|
||||
else
|
||||
callback({});
|
||||
}
|
||||
|
||||
void MaterialBrowserWidget::handleSearchfilterChanged(const QString &filterText)
|
||||
{
|
||||
if (filterText != m_filterText) {
|
||||
|
@@ -25,20 +25,19 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "itemlibraryinfo.h"
|
||||
#include "import.h"
|
||||
#include "modelnode.h"
|
||||
|
||||
#include <utils/fancylineedit.h>
|
||||
#include <coreplugin/icontext.h>
|
||||
#include <utils/dropsupport.h>
|
||||
#include <utils/fancylineedit.h>
|
||||
|
||||
#include <QFrame>
|
||||
#include <QToolButton>
|
||||
#include <QFileIconProvider>
|
||||
#include <QQuickWidget>
|
||||
#include <QQmlPropertyMap>
|
||||
#include <QTimer>
|
||||
#include <QFrame>
|
||||
#include <QPointF>
|
||||
#include <QQmlPropertyMap>
|
||||
#include <QQuickWidget>
|
||||
#include <QTimer>
|
||||
#include <QToolButton>
|
||||
|
||||
#include <memory>
|
||||
|
||||
@@ -49,6 +48,7 @@ QT_END_NAMESPACE
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class MaterialBrowserView;
|
||||
class MaterialBrowserModel;
|
||||
class PreviewImageProvider;
|
||||
|
||||
@@ -57,10 +57,11 @@ class MaterialBrowserWidget : public QFrame
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MaterialBrowserWidget();
|
||||
MaterialBrowserWidget(MaterialBrowserView *view);
|
||||
~MaterialBrowserWidget() = default;
|
||||
|
||||
QList<QToolButton *> createToolBarWidgets();
|
||||
void contextHelp(const Core::IContext::HelpCallback &callback) const;
|
||||
|
||||
static QString qmlSourcesPath();
|
||||
void clearSearchFilter();
|
||||
@@ -80,11 +81,13 @@ private:
|
||||
void reloadQmlSource();
|
||||
void updateSearch();
|
||||
|
||||
QPointer<MaterialBrowserView> m_materialBrowserView;
|
||||
QPointer<MaterialBrowserModel> m_materialBrowserModel;
|
||||
QScopedPointer<QQuickWidget> m_quickWidget;
|
||||
|
||||
QShortcut *m_qmlSourceUpdateShortcut = nullptr;
|
||||
PreviewImageProvider *m_previewImageProvider = nullptr;
|
||||
Core::IContext *m_context = nullptr;
|
||||
|
||||
QString m_filterText;
|
||||
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include "designmodewidget.h"
|
||||
#include "formeditorwidget.h"
|
||||
#include "edit3dwidget.h"
|
||||
#include "materialbrowserwidget.h"
|
||||
#include "navigatorwidget.h"
|
||||
#include "texteditorwidget.h"
|
||||
|
||||
@@ -70,6 +71,18 @@ void Editor3DContext::contextHelp(const HelpCallback &callback) const
|
||||
qobject_cast<Edit3DWidget *>(m_widget)->contextHelp(callback);
|
||||
}
|
||||
|
||||
MaterialBrowserContext::MaterialBrowserContext(QWidget *widget)
|
||||
: IContext(widget)
|
||||
{
|
||||
setWidget(widget);
|
||||
setContext(Core::Context(Constants::C_QMLMATERIALBROWSER, Constants::C_QT_QUICK_TOOLS_MENU));
|
||||
}
|
||||
|
||||
void MaterialBrowserContext::contextHelp(const HelpCallback &callback) const
|
||||
{
|
||||
qobject_cast<MaterialBrowserWidget *>(m_widget)->contextHelp(callback);
|
||||
}
|
||||
|
||||
NavigatorContext::NavigatorContext(QWidget *widget)
|
||||
: IContext(widget)
|
||||
{
|
||||
|
@@ -60,6 +60,15 @@ public:
|
||||
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
|
||||
};
|
||||
|
||||
class MaterialBrowserContext : public Core::IContext
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MaterialBrowserContext(QWidget *widget);
|
||||
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
|
||||
};
|
||||
|
||||
class NavigatorContext : public Core::IContext
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@@ -37,6 +37,7 @@ const char C_QMLFORMEDITOR[] = "QmlDesigner::FormEditor";
|
||||
const char C_QMLEDITOR3D[] = "QmlDesigner::Editor3D";
|
||||
const char C_QMLNAVIGATOR[] = "QmlDesigner::Navigator";
|
||||
const char C_QMLTEXTEDITOR[] = "QmlDesigner::TextEditor";
|
||||
const char C_QMLMATERIALBROWSER[] = "QmlDesigner::MaterialBrowser";
|
||||
|
||||
// Special context for preview menu, shared b/w designer and text editor
|
||||
const char C_QT_QUICK_TOOLS_MENU[] = "QmlDesigner::ToolsMenu";
|
||||
|
@@ -399,15 +399,18 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget)
|
||||
Core::Context qmlDesignerFormEditorContext(Constants::C_QMLFORMEDITOR);
|
||||
Core::Context qmlDesignerEditor3dContext(Constants::C_QMLEDITOR3D);
|
||||
Core::Context qmlDesignerNavigatorContext(Constants::C_QMLNAVIGATOR);
|
||||
Core::Context qmlDesignerMaterialBrowserContext(Constants::C_QMLMATERIALBROWSER);
|
||||
|
||||
context->context().add(qmlDesignerMainContext);
|
||||
context->context().add(qmlDesignerFormEditorContext);
|
||||
context->context().add(qmlDesignerEditor3dContext);
|
||||
context->context().add(qmlDesignerNavigatorContext);
|
||||
context->context().add(qmlDesignerMaterialBrowserContext);
|
||||
context->context().add(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID);
|
||||
|
||||
d->shortCutManager.registerActions(qmlDesignerMainContext, qmlDesignerFormEditorContext,
|
||||
qmlDesignerEditor3dContext, qmlDesignerNavigatorContext);
|
||||
qmlDesignerEditor3dContext, qmlDesignerNavigatorContext,
|
||||
qmlDesignerMaterialBrowserContext);
|
||||
|
||||
const QStringList mimeTypes = { QmlJSTools::Constants::QML_MIMETYPE,
|
||||
QmlJSTools::Constants::QMLUI_MIMETYPE };
|
||||
|
@@ -77,8 +77,11 @@ ShortCutManager::ShortCutManager()
|
||||
void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContext,
|
||||
const Core::Context &qmlDesignerFormEditorContext,
|
||||
const Core::Context &qmlDesignerEditor3DContext,
|
||||
const Core::Context &qmlDesignerNavigatorContext)
|
||||
const Core::Context &qmlDesignerNavigatorContext,
|
||||
const Core::Context &qmlDesignerMaterialBrowserContext)
|
||||
{
|
||||
Q_UNUSED(qmlDesignerMaterialBrowserContext)
|
||||
|
||||
Core::ActionContainer *editMenu = Core::ActionManager::actionContainer(Core::Constants::M_EDIT);
|
||||
Core::ActionContainer *fileMenu = Core::ActionManager::actionContainer(Core::Constants::M_FILE);
|
||||
|
||||
@@ -195,9 +198,12 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex
|
||||
m_pasteAction.setEnabled(true);
|
||||
});
|
||||
|
||||
connect(Core::ICore::instance(), &Core::ICore::contextChanged, this, [&designerActionManager, this](const Core::Context &context){
|
||||
if (!context.contains(Constants::C_QMLFORMEDITOR) && !context.contains(Constants::C_QMLEDITOR3D) && !context.contains(Constants::C_QMLNAVIGATOR)) {
|
||||
m_deleteAction.setEnabled(false);
|
||||
connect(Core::ICore::instance(), &Core::ICore::contextChanged, this, [&](const Core::Context &context) {
|
||||
isMatBrowserActive = context.contains(Constants::C_QMLMATERIALBROWSER);
|
||||
|
||||
if (!context.contains(Constants::C_QMLFORMEDITOR) && !context.contains(Constants::C_QMLEDITOR3D)
|
||||
&& !context.contains(Constants::C_QMLNAVIGATOR)) {
|
||||
m_deleteAction.setEnabled(isMatBrowserActive);
|
||||
m_cutAction.setEnabled(false);
|
||||
m_copyAction.setEnabled(false);
|
||||
m_pasteAction.setEnabled(false);
|
||||
@@ -249,9 +255,13 @@ void ShortCutManager::redo()
|
||||
|
||||
void ShortCutManager::deleteSelected()
|
||||
{
|
||||
if (currentDesignDocument())
|
||||
if (isMatBrowserActive) {
|
||||
DesignerActionManager &designerActionManager = QmlDesignerPlugin::instance()->viewManager().designerActionManager();
|
||||
designerActionManager.view()->emitCustomNotification("delete_selected_material");
|
||||
} else if (currentDesignDocument()) {
|
||||
currentDesignDocument()->deleteSelected();
|
||||
}
|
||||
}
|
||||
|
||||
void ShortCutManager::cutSelected()
|
||||
{
|
||||
|
@@ -47,7 +47,8 @@ public:
|
||||
void registerActions(const Core::Context &qmlDesignerMainContext,
|
||||
const Core::Context &qmlDesignerFormEditorContext,
|
||||
const Core::Context &qmlDesignerEditor3DContext,
|
||||
const Core::Context &qmlDesignerNavigatorContext);
|
||||
const Core::Context &qmlDesignerNavigatorContext,
|
||||
const Core::Context &qmlDesignerMaterialBrowserContext);
|
||||
|
||||
void connectUndoActions(DesignDocument *designDocument);
|
||||
void disconnectUndoActions(DesignDocument *designDocument);
|
||||
@@ -84,6 +85,8 @@ private:
|
||||
QAction m_pasteAction;
|
||||
QAction m_selectAllAction;
|
||||
QAction m_escapeAction;
|
||||
|
||||
bool isMatBrowserActive = false;
|
||||
};
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
Reference in New Issue
Block a user