QmlDesigner: adding interface to customize toolbar buttons

WidgetInfo contains now a factory for the toolbar buttons.
The ownership of the factory is taken by the SideBarItem.

Change-Id: Iffa32359cd3f0cb5b378abc5371d810aee31649c
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
This commit is contained in:
Thomas Hartmann
2013-03-21 12:51:39 +01:00
parent c9879b8f78
commit e367a39c71
9 changed files with 72 additions and 18 deletions

View File

@@ -249,7 +249,7 @@ void DebugView::rewriterEndTransaction()
WidgetInfo DebugView::widgetInfo() WidgetInfo DebugView::widgetInfo()
{ {
return createWidgetInfo(m_debugViewWidget.data(), QLatin1String("DebugView"), WidgetInfo::LeftPane, 0, tr("Debug View")); return createWidgetInfo(m_debugViewWidget.data(), 0, QLatin1String("DebugView"), WidgetInfo::LeftPane, 0, tr("Debug View"));
} }
bool DebugView::hasWidget() const bool DebugView::hasWidget() const

View File

@@ -277,7 +277,7 @@ void FormEditorView::bindingPropertiesChanged(const QList<BindingProperty>& prop
WidgetInfo FormEditorView::widgetInfo() WidgetInfo FormEditorView::widgetInfo()
{ {
return createWidgetInfo(m_formEditorWidget.data(), "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor")); return createWidgetInfo(m_formEditorWidget.data(), 0, "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor"));
} }
FormEditorWidget *FormEditorView::formEditorWidget() FormEditorWidget *FormEditorView::formEditorWidget()

View File

@@ -53,7 +53,11 @@ WidgetInfo ItemLibraryView::widgetInfo()
if (m_widget.isNull()) if (m_widget.isNull())
m_widget = new ItemLibraryWidget; m_widget = new ItemLibraryWidget;
return createWidgetInfo(m_widget.data(), QLatin1String("Library"), WidgetInfo::LeftPane, 0); return createWidgetInfo(m_widget.data(),
new WidgetInfo::ToolBarWidgetDefaultFactory<ItemLibraryWidget>(m_widget.data()),
QLatin1String("Library"),
WidgetInfo::LeftPane,
0);
} }
void ItemLibraryView::modelAttached(Model *model) void ItemLibraryView::modelAttached(Model *model)

View File

@@ -106,7 +106,11 @@ bool NavigatorView::hasWidget() const
WidgetInfo NavigatorView::widgetInfo() WidgetInfo NavigatorView::widgetInfo()
{ {
return createWidgetInfo(m_widget.data(), QLatin1String("Navigator"), WidgetInfo::LeftPane, 0); return createWidgetInfo(m_widget.data(),
new WidgetInfo::ToolBarWidgetDefaultFactory<NavigatorWidget>(m_widget.data()),
QLatin1String("Navigator"),
WidgetInfo::LeftPane,
0);
} }
void NavigatorView::modelAttached(Model *model) void NavigatorView::modelAttached(Model *model)

View File

@@ -968,7 +968,7 @@ bool PropertyEditor::hasWidget() const
WidgetInfo PropertyEditor::widgetInfo() WidgetInfo PropertyEditor::widgetInfo()
{ {
return createWidgetInfo(m_stackedWidget, QLatin1String("Properties"), WidgetInfo::RightPane, 0); return createWidgetInfo(m_stackedWidget, 0, QLatin1String("Properties"), WidgetInfo::RightPane, 0);
} }
void PropertyEditor::actualStateChanged(const ModelNode &node) void PropertyEditor::actualStateChanged(const ModelNode &node)

View File

@@ -62,7 +62,7 @@ StatesEditorView::StatesEditorView(QObject *parent) :
WidgetInfo StatesEditorView::widgetInfo() WidgetInfo StatesEditorView::widgetInfo()
{ {
return createWidgetInfo(m_statesEditorWidget.data(), "StatesEditor", WidgetInfo::TopPane, 0, tr("States Editor")); return createWidgetInfo(m_statesEditorWidget.data(), 0, "StatesEditor", WidgetInfo::TopPane, 0, tr("States Editor"));
} }
void StatesEditorView::removeState(int nodeId) void StatesEditorView::removeState(int nodeId)

View File

@@ -42,6 +42,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QStyle; class QStyle;
class QToolButton;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace QmlDesigner { namespace QmlDesigner {
@@ -58,7 +59,32 @@ class QmlModelView;
class NodeInstanceView; class NodeInstanceView;
class RewriterView; class RewriterView;
struct WidgetInfo { class WidgetInfo {
public:
class ToolBarWidgetFactoryInterface {
public:
ToolBarWidgetFactoryInterface()
{}
virtual QList<QToolButton*> createToolBarWidgets() = 0;
};
template <class T>
class ToolBarWidgetDefaultFactory : public ToolBarWidgetFactoryInterface {
public:
ToolBarWidgetDefaultFactory(T *t ) : m_t(t)
{}
QList<QToolButton*> createToolBarWidgets()
{
return m_t->createToolBarWidgets();
}
private:
T * m_t;
};
enum PlacementHint { enum PlacementHint {
NoPane, NoPane,
LeftPane, LeftPane,
@@ -68,11 +94,18 @@ struct WidgetInfo {
CentralPane // not used CentralPane // not used
}; };
WidgetInfo()
: widget(0),
toolBarWidgetFactory(0)
{
}
QString uniqueId; QString uniqueId;
QString tabName; QString tabName;
QWidget *widget; QWidget *widget;
int placementPriority; int placementPriority;
PlacementHint placementHint; PlacementHint placementHint;
ToolBarWidgetFactoryInterface *toolBarWidgetFactory;
}; };
@@ -205,6 +238,7 @@ protected:
void setModel(Model * model); void setModel(Model * model);
void removeModel(); void removeModel();
static WidgetInfo createWidgetInfo(QWidget *widget = 0, static WidgetInfo createWidgetInfo(QWidget *widget = 0,
WidgetInfo::ToolBarWidgetFactoryInterface *toolBarWidgetFactory = 0,
const QString &uniqueId = QString(), const QString &uniqueId = QString(),
WidgetInfo::PlacementHint placementHint = WidgetInfo::NoPane, WidgetInfo::PlacementHint placementHint = WidgetInfo::NoPane,
int placementPriority = 0, int placementPriority = 0,

View File

@@ -119,6 +119,7 @@ void AbstractView::removeModel()
} }
WidgetInfo AbstractView::createWidgetInfo(QWidget *widget, WidgetInfo AbstractView::createWidgetInfo(QWidget *widget,
WidgetInfo::ToolBarWidgetFactoryInterface *toolBarWidgetFactory,
const QString &uniqueId, const QString &uniqueId,
WidgetInfo::PlacementHint placementHint, WidgetInfo::PlacementHint placementHint,
int placementPriority, int placementPriority,
@@ -127,6 +128,7 @@ WidgetInfo AbstractView::createWidgetInfo(QWidget *widget,
WidgetInfo widgetInfo; WidgetInfo widgetInfo;
widgetInfo.widget = widget; widgetInfo.widget = widget;
widgetInfo.toolBarWidgetFactory = toolBarWidgetFactory;
widgetInfo.uniqueId = uniqueId; widgetInfo.uniqueId = uniqueId;
widgetInfo.placementHint = placementHint; widgetInfo.placementHint = placementHint;
widgetInfo.placementPriority = placementPriority; widgetInfo.placementPriority = placementPriority;

View File

@@ -149,25 +149,35 @@ QList<QToolButton *> ItemLibrarySideBarItem::createToolBarWidgets()
return qobject_cast<ItemLibraryWidget*>(widget())->createToolBarWidgets(); return qobject_cast<ItemLibraryWidget*>(widget())->createToolBarWidgets();
} }
class NavigatorSideBarItem : public Core::SideBarItem class DesignerSideBarItem : public Core::SideBarItem
{ {
public: public:
explicit NavigatorSideBarItem(QWidget *widget, const QString &id); explicit DesignerSideBarItem(QWidget *widget, WidgetInfo::ToolBarWidgetFactoryInterface *createToolBarWidgets, const QString &id);
virtual ~NavigatorSideBarItem(); virtual ~DesignerSideBarItem();
virtual QList<QToolButton *> createToolBarWidgets(); virtual QList<QToolButton *> createToolBarWidgets();
private:
WidgetInfo::ToolBarWidgetFactoryInterface *m_toolBarWidgetFactory;
}; };
NavigatorSideBarItem::NavigatorSideBarItem(QWidget *widget, const QString &id) : Core::SideBarItem(widget, id) {} DesignerSideBarItem::DesignerSideBarItem(QWidget *widget, WidgetInfo::ToolBarWidgetFactoryInterface *toolBarWidgetFactory, const QString &id)
: Core::SideBarItem(widget, id) , m_toolBarWidgetFactory(toolBarWidgetFactory)
NavigatorSideBarItem::~NavigatorSideBarItem()
{ {
} }
QList<QToolButton *> NavigatorSideBarItem::createToolBarWidgets() DesignerSideBarItem::~DesignerSideBarItem()
{ {
return qobject_cast<NavigatorWidget*>(widget())->createToolBarWidgets(); delete m_toolBarWidgetFactory;
}
QList<QToolButton *> DesignerSideBarItem::createToolBarWidgets()
{
if (m_toolBarWidgetFactory)
return m_toolBarWidgetFactory->createToolBarWidgets();
return QList<QToolButton *>();
} }
void DocumentWarningWidget::goToError() void DocumentWarningWidget::goToError()
@@ -357,13 +367,13 @@ void DesignModeWidget::setup()
foreach (const WidgetInfo &widgetInfo, viewManager().widgetInfos()) { foreach (const WidgetInfo &widgetInfo, viewManager().widgetInfos()) {
if (widgetInfo.placementHint == widgetInfo.LeftPane) { if (widgetInfo.placementHint == widgetInfo.LeftPane) {
Core::SideBarItem *sideBarItem = new NavigatorSideBarItem(widgetInfo.widget, widgetInfo.uniqueId); Core::SideBarItem *sideBarItem = new DesignerSideBarItem(widgetInfo.widget, widgetInfo.toolBarWidgetFactory, widgetInfo.uniqueId);
sideBarItems.append(sideBarItem); sideBarItems.append(sideBarItem);
leftSideBarItems.append(sideBarItem); leftSideBarItems.append(sideBarItem);
} }
if (widgetInfo.placementHint == widgetInfo.RightPane) { if (widgetInfo.placementHint == widgetInfo.RightPane) {
Core::SideBarItem *sideBarItem = new NavigatorSideBarItem(widgetInfo.widget, widgetInfo.uniqueId); Core::SideBarItem *sideBarItem = new DesignerSideBarItem(widgetInfo.widget, widgetInfo.toolBarWidgetFactory, widgetInfo.uniqueId);
sideBarItems.append(sideBarItem); sideBarItems.append(sideBarItem);
rightSideBarItems.append(sideBarItem); rightSideBarItems.append(sideBarItem);
} }