Skip to content

Commit 16acde9

Browse files
committed
Add TabWidet
1 parent 91362b4 commit 16acde9

21 files changed

+848
-246
lines changed

components/components.pro

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ TEMPLATE = lib
55
include(link_components.pri)
66

77
SOURCES += \
8-
plugin/qtmaterialplugins.cpp
8+
plugin/qtmaterialplugins.cpp \
9+
plugin/qtmaterialtabwidgetcontainerextension.cpp \
10+
plugin/qtmaterialtabwidgetextensionfactory.cpp \
11+
plugin/qtmaterialtabwidgetplugin.cpp
912
HEADERS += \
1013
plugin/plugintemplate.h \
11-
plugin/qtmaterialplugins.h
14+
plugin/qtmaterialplugins.h \
15+
plugin/qtmaterialtabwidgetcontainerextension.h \
16+
plugin/qtmaterialtabwidgetextensionfactory.h \
17+
plugin/qtmaterialtabwidgetplugin.h
1218

1319
TARGET = $$qtLibraryTarget(qt-material-widget)
1420
target.path = $$[QT_INSTALL_PLUGINS]/designer

components/link_components.pri

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ SOURCES += \
5050
$$COMP_PATH/qtmaterialmenu.cpp \
5151
$$COMP_PATH/qtmaterialmenu_internal.cpp \
5252
$$COMP_PATH/qtmateriallist.cpp \
53-
$$COMP_PATH/qtmateriallistitem.cpp
53+
$$COMP_PATH/qtmateriallistitem.cpp \
54+
$$PWD/qtmaterialtabwidget.cpp
5455
HEADERS += \
5556
$$COMP_PATH/qtmaterialavatar_p.h \
5657
$$COMP_PATH/qtmaterialavatar.h \
@@ -129,7 +130,8 @@ HEADERS += \
129130
$$COMP_PATH/qtmateriallist_p.h \
130131
$$COMP_PATH/qtmateriallistitem.h \
131132
$$COMP_PATH/qtmateriallistitem_p.h \
132-
$$PWD/lib/qtmaterialconst.h
133+
$$PWD/lib/qtmaterialconst.h \
134+
$$PWD/qtmaterialtabwidget.h
133135

134136
RESOURCES += \
135137
$$COMP_PATH/material_res.qrc

components/plugin/qtmaterialplugins.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "qtmaterialplugins.h"
2-
2+
#include "qtmaterialtabwidgetplugin.h"
33
QtMaterialPlugins::QtMaterialPlugins(QObject *parent) : QObject(parent)
44
{
55
m_plugins << new MaterialAppBarPlugin(this)
@@ -27,6 +27,7 @@ QtMaterialPlugins::QtMaterialPlugins(QObject *parent) : QObject(parent)
2727
<< new MaterialTabsPlugin(this)
2828
<< new MaterialTextFieldPlugin(this)
2929
<< new MaterialTogglePlugin(this)
30+
<< new QtMaterialTabWidgetPlugin(this)
3031
;
3132
}
3233

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include "qtmaterialtabwidgetcontainerextension.h"
2+
#include "qtmaterialtabwidget.h"
3+
4+
QtMaterialTabWidgetContainerExtension::QtMaterialTabWidgetContainerExtension(QtMaterialTabWidget *widget,
5+
QObject *parent)
6+
: QObject(parent)
7+
, myWidget(widget)
8+
{
9+
}
10+
11+
void QtMaterialTabWidgetContainerExtension::addWidget(QWidget *widget)
12+
{
13+
myWidget->addPage(widget);
14+
}
15+
16+
int QtMaterialTabWidgetContainerExtension::count() const
17+
{
18+
return myWidget->count();
19+
}
20+
21+
int QtMaterialTabWidgetContainerExtension::currentIndex() const
22+
{
23+
return myWidget->currentIndex();
24+
}
25+
26+
void QtMaterialTabWidgetContainerExtension::insertWidget(int index, QWidget *widget)
27+
{
28+
myWidget->insertPage(index, widget);
29+
}
30+
31+
void QtMaterialTabWidgetContainerExtension::remove(int index)
32+
{
33+
myWidget->removePage(index);
34+
}
35+
36+
void QtMaterialTabWidgetContainerExtension::setCurrentIndex(int index)
37+
{
38+
myWidget->setCurrentIndex(index);
39+
}
40+
41+
QWidget* QtMaterialTabWidgetContainerExtension::widget(int index) const
42+
{
43+
return myWidget->widget(index);
44+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#ifndef QTMATERIALTABWIDGETCONTAINEREXTENSION_H
2+
#define QTMATERIALTABWIDGETCONTAINEREXTENSION_H
3+
4+
#include <QtDesigner/QDesignerContainerExtension>
5+
6+
QT_BEGIN_NAMESPACE
7+
class QExtensionManager;
8+
QT_END_NAMESPACE
9+
class QtMaterialTabWidget;
10+
11+
class QtMaterialTabWidgetContainerExtension: public QObject,
12+
public QDesignerContainerExtension
13+
{
14+
Q_OBJECT
15+
Q_INTERFACES(QDesignerContainerExtension)
16+
17+
public:
18+
explicit QtMaterialTabWidgetContainerExtension(QtMaterialTabWidget *widget, QObject *parent);
19+
20+
void addWidget(QWidget *widget) override;
21+
int count() const override;
22+
int currentIndex() const override;
23+
void insertWidget(int index, QWidget *widget) override;
24+
void remove(int index) override;
25+
void setCurrentIndex(int index) override;
26+
QWidget *widget(int index) const override;
27+
28+
private:
29+
QtMaterialTabWidget *myWidget;
30+
};
31+
32+
#endif // QTMATERIALTABWIDGETCONTAINEREXTENSION_H
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include "qtmaterialtabwidgetextensionfactory.h"
2+
#include "qtmaterialtabwidgetcontainerextension.h"
3+
#include "qtmaterialtabwidget.h"
4+
5+
QtMaterialTabWidgetExtensionFactory::QtMaterialTabWidgetExtensionFactory(QExtensionManager *parent)
6+
: QExtensionFactory(parent)
7+
{}
8+
//! [0]
9+
10+
//! [1]
11+
QObject *QtMaterialTabWidgetExtensionFactory::createExtension(QObject *object,
12+
const QString &iid,
13+
QObject *parent) const
14+
{
15+
QtMaterialTabWidget *widget = qobject_cast<QtMaterialTabWidget*>(object);
16+
17+
if (widget && (iid == Q_TYPEID(QDesignerContainerExtension)))
18+
return new QtMaterialTabWidgetContainerExtension(widget, parent);
19+
return nullptr;
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#ifndef QTMATERIALTABWIDGETEXTENSIONFACTORY_H
2+
#define QTMATERIALTABWIDGETEXTENSIONFACTORY_H
3+
4+
#include <QtDesigner/QExtensionFactory>
5+
6+
QT_BEGIN_NAMESPACE
7+
class QExtensionManager;
8+
QT_END_NAMESPACE
9+
10+
class QtMaterialTabWidgetExtensionFactory: public QExtensionFactory
11+
{
12+
Q_OBJECT
13+
14+
public:
15+
explicit QtMaterialTabWidgetExtensionFactory(QExtensionManager *parent = nullptr);
16+
17+
protected:
18+
QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const override;
19+
};
20+
21+
#endif // QTMATERIALTABWIDGETEXTENSIONFACTORY_H
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#include <QtDesigner/QExtensionFactory>
2+
#include <QtDesigner/QExtensionManager>
3+
#include <QtDesigner/QDesignerFormEditorInterface>
4+
#include <QtDesigner/QDesignerFormWindowInterface>
5+
#include <QtDesigner/QDesignerContainerExtension>
6+
#include <QtDesigner/QDesignerPropertySheetExtension>
7+
8+
#include "qtmaterialtabwidgetplugin.h"
9+
#include "qtmaterialtabwidget.h"
10+
#include "qtmaterialtabwidgetextensionfactory.h"
11+
12+
QtMaterialTabWidgetPlugin::QtMaterialTabWidgetPlugin(QObject *parent)
13+
: QObject(parent)
14+
{
15+
}
16+
17+
QString QtMaterialTabWidgetPlugin::name() const
18+
{
19+
return QLatin1String("QtMaterialTabWidget");
20+
}
21+
22+
QString QtMaterialTabWidgetPlugin::group() const
23+
{
24+
return QLatin1String("Qt Material Widgets");
25+
}
26+
27+
QString QtMaterialTabWidgetPlugin::toolTip() const
28+
{
29+
return QString();
30+
}
31+
32+
QString QtMaterialTabWidgetPlugin::whatsThis() const
33+
{
34+
return QString();
35+
}
36+
37+
QString QtMaterialTabWidgetPlugin::includeFile() const
38+
{
39+
return QLatin1String("qtmaterialtabwidget.h");
40+
}
41+
42+
QIcon QtMaterialTabWidgetPlugin::icon() const
43+
{
44+
return QIcon();
45+
}
46+
47+
//! [0] //! [1]
48+
bool QtMaterialTabWidgetPlugin::isContainer() const
49+
{
50+
return true;
51+
}
52+
53+
//! [1] //! [2]
54+
QWidget *QtMaterialTabWidgetPlugin::createWidget(QWidget *parent)
55+
{
56+
QtMaterialTabWidget *widget = new QtMaterialTabWidget(parent);
57+
connect(widget, &QtMaterialTabWidget::currentIndexChanged,
58+
this, &QtMaterialTabWidgetPlugin::currentIndexChanged);
59+
connect(widget, &QtMaterialTabWidget::pageTitleChanged,
60+
this, &QtMaterialTabWidgetPlugin::pageTitleChanged);
61+
return widget;
62+
}
63+
64+
//! [2] //! [3]
65+
bool QtMaterialTabWidgetPlugin::isInitialized() const
66+
{
67+
return initialized;
68+
}
69+
//! [3]
70+
71+
//! [4]
72+
void QtMaterialTabWidgetPlugin::initialize(QDesignerFormEditorInterface *formEditor)
73+
{
74+
if (initialized)
75+
return;
76+
//! [4]
77+
78+
//! [5]
79+
QExtensionManager *manager = formEditor->extensionManager();
80+
//! [5] //! [6]
81+
QExtensionFactory *factory = new QtMaterialTabWidgetExtensionFactory(manager);
82+
83+
Q_ASSERT(manager != 0);
84+
manager->registerExtensions(factory, Q_TYPEID(QDesignerContainerExtension));
85+
86+
initialized = true;
87+
}
88+
//! [6]
89+
90+
//! [7]
91+
QString QtMaterialTabWidgetPlugin::domXml() const
92+
{
93+
return QLatin1String("\
94+
<ui language=\"c++\">\
95+
<widget class=\"QtMaterialTabWidget\" name=\"tabwidget\">\
96+
<widget class=\"QWidget\" name=\"page\" />\
97+
</widget>\
98+
<customwidgets>\
99+
<customwidget>\
100+
<class>QtMaterialTabWidget</class>\
101+
<extends>QWidget</extends>\
102+
<addpagemethod>addPage</addpagemethod>\
103+
</customwidget>\
104+
</customwidgets>\
105+
</ui>");
106+
}
107+
//! [7]
108+
109+
//! [8]
110+
void QtMaterialTabWidgetPlugin::currentIndexChanged(int index)
111+
{
112+
Q_UNUSED(index);
113+
QtMaterialTabWidget *widget = qobject_cast<QtMaterialTabWidget*>(sender());
114+
//! [8] //! [9]
115+
if (widget) {
116+
QDesignerFormWindowInterface *form = QDesignerFormWindowInterface::findFormWindow(widget);
117+
if (form)
118+
form->emitSelectionChanged();
119+
}
120+
}
121+
//! [9]
122+
123+
//! [10]
124+
void QtMaterialTabWidgetPlugin::pageTitleChanged(const QString &title)
125+
{
126+
Q_UNUSED(title);
127+
QtMaterialTabWidget *widget = qobject_cast<QtMaterialTabWidget*>(sender());
128+
//! [10] //! [11]
129+
if (widget) {
130+
QWidget *page = widget->widget(widget->currentIndex());
131+
QDesignerFormWindowInterface *form;
132+
form = QDesignerFormWindowInterface::findFormWindow(widget);
133+
//! [11]
134+
if (form) {
135+
//! [12]
136+
QDesignerFormEditorInterface *editor = form->core();
137+
QExtensionManager *manager = editor->extensionManager();
138+
//! [12] //! [13]
139+
QDesignerPropertySheetExtension *sheet;
140+
sheet = qt_extension<QDesignerPropertySheetExtension*>(manager, page);
141+
const int propertyIndex = sheet->indexOf(QLatin1String("windowTitle"));
142+
sheet->setChanged(propertyIndex, true);
143+
}
144+
}
145+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#ifndef QTMATERIALTABWIDGETPLUGIN_H
2+
#define QTMATERIALTABWIDGETPLUGIN_H
3+
4+
#include <QObject>
5+
#include <QtUiPlugin/QDesignerCustomWidgetInterface>
6+
7+
class QtMaterialTabWidgetPlugin: public QObject, public QDesignerCustomWidgetInterface
8+
{
9+
Q_OBJECT
10+
public:
11+
explicit QtMaterialTabWidgetPlugin(QObject *parent = nullptr);
12+
13+
QString name() const override;
14+
QString group() const override;
15+
QString toolTip() const override;
16+
QString whatsThis() const override;
17+
QString includeFile() const override;
18+
QIcon icon() const override;
19+
bool isContainer() const override;
20+
QWidget *createWidget(QWidget *parent) override;
21+
bool isInitialized() const override;
22+
void initialize(QDesignerFormEditorInterface *formEditor) override;
23+
QString domXml() const override;
24+
25+
private slots:
26+
void currentIndexChanged(int index);
27+
void pageTitleChanged(const QString &title);
28+
29+
private:
30+
bool initialized = false;
31+
};
32+
33+
#endif // QTMATERIALTABWIDGETPLUGIN_H

components/qtmaterialslider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void QtMaterialSliderPrivate::init()
2929
stateMachine = new QtMaterialSliderStateMachine(q, thumb, track);
3030
stepTo = 0;
3131
oldValue = q->value();
32-
trackWidth = 2;
32+
trackWidth = 4;
3333
hoverTrack = false;
3434
hoverThumb = false;
3535
hover = false;

0 commit comments

Comments
 (0)