diff --git a/README.md b/README.md
index d6f2499..c8d0daf 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ I finally took the time to go through and clean up this code. The build includes
- |
+ |
@@ -18,7 +18,7 @@ I finally took the time to go through and clean up this code. The build includes
|
-
+ |
|
@@ -31,7 +31,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -44,7 +44,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -57,7 +57,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -83,7 +83,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -96,7 +96,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -109,7 +109,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -122,7 +122,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -135,7 +135,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -148,7 +148,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -161,7 +161,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -174,7 +174,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -187,7 +187,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -200,7 +200,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -213,7 +213,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
@@ -226,7 +226,7 @@ I finally took the time to go through and clean up this code. The build includes
-
+ |
|
diff --git a/components/components.pro b/components/components.pro
index 3889810..886e5eb 100644
--- a/components/components.pro
+++ b/components/components.pro
@@ -38,7 +38,8 @@ SOURCES = \
qtmaterialdialog_internal.cpp \
qtmaterialdialog.cpp \
qtmaterialdrawer_internal.cpp \
- qtmaterialdrawer.cpp
+ qtmaterialdrawer.cpp \
+ qtmaterialappbar.cpp
HEADERS = \
qtmaterialdivider_p.h \
qtmaterialdivider.h \
@@ -100,6 +101,8 @@ HEADERS = \
qtmaterialdialog.h \
qtmaterialdrawer_internal.h \
qtmaterialdrawer_p.h \
- qtmaterialdrawer.h
+ qtmaterialdrawer.h \
+ qtmaterialappbar.h \
+ qtmaterialappbar_p.h
RESOURCES += \
resources.qrc
diff --git a/components/qtmaterialappbar.cpp b/components/qtmaterialappbar.cpp
new file mode 100644
index 0000000..5e5e230
--- /dev/null
+++ b/components/qtmaterialappbar.cpp
@@ -0,0 +1,139 @@
+#include "qtmaterialappbar.h"
+#include "qtmaterialappbar_p.h"
+#include
+#include
+#include
+#include "lib/qtmaterialstyle.h"
+
+/*!
+ * \class QtMaterialAppBarPrivate
+ * \internal
+ */
+
+/*!
+ * \internal
+ */
+QtMaterialAppBarPrivate::QtMaterialAppBarPrivate(QtMaterialAppBar *q)
+ : q_ptr(q)
+{
+}
+
+/*!
+ * \internal
+ */
+QtMaterialAppBarPrivate::~QtMaterialAppBarPrivate()
+{
+}
+
+/*!
+ * \internal
+ */
+void QtMaterialAppBarPrivate::init()
+{
+ Q_Q(QtMaterialAppBar);
+
+ useThemeColors = true;
+
+ QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
+ effect->setBlurRadius(11);
+ effect->setColor(QColor(0, 0, 0, 50));
+ effect->setOffset(0, 3);
+
+ q->setGraphicsEffect(effect);
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ q->setLayout(layout);
+}
+
+/*!
+ * \class QtMaterialAppBar
+ */
+
+QtMaterialAppBar::QtMaterialAppBar(QWidget *parent)
+ : QWidget(parent)
+{
+ d_func()->init();
+}
+
+QtMaterialAppBar::~QtMaterialAppBar()
+{
+}
+
+QSize QtMaterialAppBar::sizeHint() const
+{
+ return QSize(-1, 64);
+}
+
+void QtMaterialAppBar::paintEvent(QPaintEvent *event)
+{
+ Q_UNUSED(event)
+
+ QPainter painter(this);
+
+ painter.fillRect(rect(), backgroundColor());
+}
+
+void QtMaterialAppBar::setUseThemeColors(bool value)
+{
+ Q_D(QtMaterialAppBar);
+
+ if (d->useThemeColors == value) {
+ return;
+ }
+
+ d->useThemeColors = value;
+ update();
+}
+
+bool QtMaterialAppBar::useThemeColors() const
+{
+ Q_D(const QtMaterialAppBar);
+
+ return d->useThemeColors;
+}
+
+void QtMaterialAppBar::setForegroundColor(const QColor &color)
+{
+ Q_D(QtMaterialAppBar);
+
+ d->foregroundColor = color;
+
+ if (d->useThemeColors == true) {
+ d->useThemeColors = false;
+ }
+ update();
+}
+
+QColor QtMaterialAppBar::foregroundColor() const
+{
+ Q_D(const QtMaterialAppBar);
+
+ if (d->useThemeColors || !d->foregroundColor.isValid()) {
+ return QtMaterialStyle::instance().themeColor("primary1");
+ } else {
+ return d->foregroundColor;
+ }
+}
+
+void QtMaterialAppBar::setBackgroundColor(const QColor &color)
+{
+ Q_D(QtMaterialAppBar);
+
+ d->backgroundColor = color;
+
+ if (d->useThemeColors == true) {
+ d->useThemeColors = false;
+ }
+ update();
+}
+
+QColor QtMaterialAppBar::backgroundColor() const
+{
+ Q_D(const QtMaterialAppBar);
+
+ if (d->useThemeColors || !d->backgroundColor.isValid()) {
+ return QtMaterialStyle::instance().themeColor("primary1");
+ } else {
+ return d->backgroundColor;
+ }
+}
diff --git a/components/qtmaterialappbar.h b/components/qtmaterialappbar.h
new file mode 100644
index 0000000..6558ccf
--- /dev/null
+++ b/components/qtmaterialappbar.h
@@ -0,0 +1,40 @@
+#ifndef QTMATERIALAPPBAR_H
+#define QTMATERIALAPPBAR_H
+
+#include
+
+class QtMaterialAppBarPrivate;
+
+class QtMaterialAppBar : public QWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QColor foregroundColor WRITE setForegroundColor READ foregroundColor)
+ Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor)
+
+public:
+ explicit QtMaterialAppBar(QWidget *parent = 0);
+ ~QtMaterialAppBar();
+
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+
+ void setUseThemeColors(bool value);
+ bool useThemeColors() const;
+
+ void setForegroundColor(const QColor &color);
+ QColor foregroundColor() const;
+
+ void setBackgroundColor(const QColor &color);
+ QColor backgroundColor() const;
+
+protected:
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+
+ const QScopedPointer d_ptr;
+
+private:
+ Q_DISABLE_COPY(QtMaterialAppBar)
+ Q_DECLARE_PRIVATE(QtMaterialAppBar)
+};
+
+#endif // QTMATERIALAPPBAR_H
diff --git a/components/qtmaterialappbar_p.h b/components/qtmaterialappbar_p.h
new file mode 100644
index 0000000..0586556
--- /dev/null
+++ b/components/qtmaterialappbar_p.h
@@ -0,0 +1,26 @@
+#ifndef QTMATERIALAPPBAR_P_H
+#define QTMATERIALAPPBAR_P_H
+
+#include
+#include
+
+class QtMaterialAppBar;
+
+class QtMaterialAppBarPrivate
+{
+ Q_DISABLE_COPY(QtMaterialAppBarPrivate)
+ Q_DECLARE_PUBLIC(QtMaterialAppBar)
+
+public:
+ QtMaterialAppBarPrivate(QtMaterialAppBar *q);
+ ~QtMaterialAppBarPrivate();
+
+ void init();
+
+ QtMaterialAppBar *const q_ptr;
+ bool useThemeColors;
+ QColor foregroundColor;
+ QColor backgroundColor;
+};
+
+#endif // QTMATERIALAPPBAR_P_H
diff --git a/components/qtmaterialtextfield.cpp b/components/qtmaterialtextfield.cpp
index 86643d6..97480c9 100644
--- a/components/qtmaterialtextfield.cpp
+++ b/components/qtmaterialtextfield.cpp
@@ -29,6 +29,7 @@ void QtMaterialTextFieldPrivate::init()
label = 0;
labelFontSize = 9.5;
showLabel = false;
+ showUnderline = true;
useThemeColors = true;
q->setFrame(false);
@@ -231,6 +232,25 @@ QColor QtMaterialTextField::underlineColor() const
}
}
+void QtMaterialTextField::setShowUnderline(bool value)
+{
+ Q_D(QtMaterialTextField);
+
+ if (d->showUnderline == value) {
+ return;
+ }
+
+ d->showUnderline = value;
+ update();
+}
+
+bool QtMaterialTextField::hasUnderline() const
+{
+ Q_D(const QtMaterialTextField);
+
+ return d->showUnderline;
+}
+
/*!
* \reimp
*/
@@ -274,22 +294,25 @@ void QtMaterialTextField::paintEvent(QPaintEvent *event)
const int y = height()-1;
const int wd = width()-5;
- QPen pen;
- pen.setWidth(1);
- pen.setColor(underlineColor());
- painter.setPen(pen);
- painter.setOpacity(1);
- painter.drawLine(2.5, y, wd, y);
-
- QBrush brush;
- brush.setStyle(Qt::SolidPattern);
- brush.setColor(inkColor());
-
- if (progress > 0)
+ if (d->showUnderline)
{
- painter.setPen(Qt::NoPen);
- painter.setBrush(brush);
- const int w = (1-progress)*static_cast(wd/2);
- painter.drawRect(w+2.5, height()-2, wd-w*2, 2);
+ QPen pen;
+ pen.setWidth(1);
+ pen.setColor(underlineColor());
+ painter.setPen(pen);
+ painter.setOpacity(1);
+ painter.drawLine(2.5, y, wd, y);
+
+ QBrush brush;
+ brush.setStyle(Qt::SolidPattern);
+ brush.setColor(inkColor());
+
+ if (progress > 0)
+ {
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(brush);
+ const int w = (1-progress)*static_cast(wd/2);
+ painter.drawRect(w+2.5, height()-2, wd-w*2, 2);
+ }
}
}
diff --git a/components/qtmaterialtextfield.h b/components/qtmaterialtextfield.h
index 81f740b..d4a12f6 100644
--- a/components/qtmaterialtextfield.h
+++ b/components/qtmaterialtextfield.h
@@ -42,6 +42,9 @@ public:
void setUnderlineColor(const QColor &color);
QColor underlineColor() const;
+ void setShowUnderline(bool value);
+ bool hasUnderline() const;
+
protected:
bool event(QEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
diff --git a/components/qtmaterialtextfield_p.h b/components/qtmaterialtextfield_p.h
index ad4db28..51d7cc1 100644
--- a/components/qtmaterialtextfield_p.h
+++ b/components/qtmaterialtextfield_p.h
@@ -29,6 +29,7 @@ public:
QString labelString;
qreal labelFontSize;
bool showLabel;
+ bool showUnderline;
bool useThemeColors;
};
diff --git a/examples/textfieldsettingseditor.cpp b/examples/textfieldsettingseditor.cpp
index dcb7069..ce21cd1 100644
--- a/examples/textfieldsettingseditor.cpp
+++ b/examples/textfieldsettingseditor.cpp
@@ -41,6 +41,7 @@ TextFieldSettingsEditor::TextFieldSettingsEditor(QWidget *parent)
connect(ui->inkColorToolButton, SIGNAL(pressed()), this, SLOT(selectColor()));
connect(ui->underlineColorToolButton, SIGNAL(pressed()), this, SLOT(selectColor()));
connect(ui->labelColorToolButton, SIGNAL(pressed()), this, SLOT(selectColor()));
+ connect(ui->underlineCheckBox, SIGNAL(toggled(bool)), this, SLOT(setShowUnderline()));
connect(m_textField, SIGNAL(textChanged(QString)), this, SLOT(setupForm()));
}
@@ -58,6 +59,7 @@ void TextFieldSettingsEditor::setupForm()
ui->labelCheckBox->setChecked(m_textField->hasLabel());
ui->labelTextLineEdit->setText(m_textField->label());
ui->useThemeColorsCheckBox->setChecked(m_textField->useThemeColors());
+ ui->underlineCheckBox->setChecked(m_textField->hasUnderline());
}
void TextFieldSettingsEditor::updateWidget()
@@ -68,6 +70,7 @@ void TextFieldSettingsEditor::updateWidget()
m_textField->setLabel(ui->labelTextLineEdit->text());
m_textField->setShowLabel(ui->labelCheckBox->isChecked());
m_textField->setUseThemeColors(ui->useThemeColorsCheckBox->isChecked());
+ m_textField->setShowUnderline(ui->underlineCheckBox->isChecked());
}
void TextFieldSettingsEditor::selectColor()
@@ -92,3 +95,8 @@ void TextFieldSettingsEditor::selectColor()
}
setupForm();
}
+
+void TextFieldSettingsEditor::setShowUnderline()
+{
+ m_textField->setShowUnderline( ui->underlineCheckBox->isChecked() );
+}
diff --git a/examples/textfieldsettingseditor.h b/examples/textfieldsettingseditor.h
index 21c69f5..6631e27 100644
--- a/examples/textfieldsettingseditor.h
+++ b/examples/textfieldsettingseditor.h
@@ -18,6 +18,7 @@ protected slots:
void setupForm();
void updateWidget();
void selectColor();
+ void setShowUnderline();
private:
Ui::TextFieldSettingsForm *const ui;
diff --git a/examples/textfieldsettingsform.ui b/examples/textfieldsettingsform.ui
index 106c58c..12e1c87 100644
--- a/examples/textfieldsettingsform.ui
+++ b/examples/textfieldsettingsform.ui
@@ -167,6 +167,16 @@
+ -
+
+
+ Underline
+
+
+
+ -
+
+