diff --git a/components/components.pro b/components/components.pro index c9568bf9b..886e5eb86 100644 --- a/components/components.pro +++ b/components/components.pro @@ -1,6 +1,7 @@ TEMPLATE = lib CONFIG += staticlib SOURCES = \ + qtmaterialdivider.cpp \ qtmaterialavatar.cpp \ lib/qtmaterialstyle.cpp \ lib/qtmaterialtheme.cpp \ @@ -40,6 +41,8 @@ SOURCES = \ qtmaterialdrawer.cpp \ qtmaterialappbar.cpp HEADERS = \ + qtmaterialdivider_p.h \ + qtmaterialdivider.h \ qtmaterialavatar_p.h \ qtmaterialavatar.h \ lib/qtmaterialstyle_p.h \ diff --git a/components/qtmaterialdivider.cpp b/components/qtmaterialdivider.cpp new file mode 100644 index 000000000..66fa69074 --- /dev/null +++ b/components/qtmaterialdivider.cpp @@ -0,0 +1,105 @@ +#include "qtmaterialdivider.h" +#include "qtmaterialdivider_p.h" +#include +#include "lib/qtmaterialstyle.h" + +/*! + * \class QtMaterialDividerPrivate + * \internal + */ + +/*! + * \internal + */ +QtMaterialDividerPrivate::QtMaterialDividerPrivate(QtMaterialDivider *q) + : q_ptr(q) +{ +} + +/*! + * \internal + */ +QtMaterialDividerPrivate::~QtMaterialDividerPrivate() +{ +} + +/*! + * \internal + */ +void QtMaterialDividerPrivate::init() +{ + Q_Q(QtMaterialDivider); + + size = 0; + + QSizePolicy policy(QSizePolicy::MinimumExpanding, + QSizePolicy::Fixed); + q->setMinimumHeight( 1 ); + q->setMaximumHeight( 1 ); +} + +/*! + * \class QtMaterialDivider + */ + +QtMaterialDivider::QtMaterialDivider(QWidget *parent) + : QWidget(parent), + d_ptr(new QtMaterialDividerPrivate(this)) +{ + d_func()->init(); +} + +QtMaterialDivider::~QtMaterialDivider() +{ +} + +/*! + * \reimp + */ + +void QtMaterialDivider::setInsetSize(int size) +{ + Q_D(QtMaterialDivider); + + d->size = size; + + update(); +} + +int QtMaterialDivider::insetSize() const +{ + Q_D(const QtMaterialDivider); + + return d->size; +} + +/*! + * \reimp + */ +void QtMaterialDivider::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + + Q_D(QtMaterialDivider); + + QPainter painter(this); + // TODO: QtMaterialText doesn't use Antialiasing. Usng it the line is more "heavy" + // painter.setRenderHint(QPainter::Antialiasing); + + QPen pen; + pen.setWidth(1); + /* + * DEBUG: to paint in blue the full widget + * + */ + // painter.fillRect( rect() ,QColor(0,0,255)); + + // TODO: is this the right color to use? + pen.setColor(QtMaterialStyle::instance().themeColor("border")); + + painter.setPen(pen); + painter.setOpacity(1); + // TODO: implementing inset, 0 will be changed to a calculated point. + // Normally, line should go from 0 to the end + painter.drawLine( d->size, height()/2, width(), height()/2); +} diff --git a/components/qtmaterialdivider.h b/components/qtmaterialdivider.h new file mode 100644 index 000000000..24024dc0e --- /dev/null +++ b/components/qtmaterialdivider.h @@ -0,0 +1,31 @@ +#ifndef QTMATERIALDIVIDER_H +#define QTMATERIALDIVIDER_H + +#include +#include +#include "lib/qtmaterialtheme.h" + +class QtMaterialDividerPrivate; + +class QtMaterialDivider : public QWidget +{ + Q_OBJECT + +public: + explicit QtMaterialDivider(QWidget *parent = 0); + ~QtMaterialDivider(); + + void setInsetSize(int size); + int insetSize() const; + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + + const QScopedPointer d_ptr; + +private: + Q_DISABLE_COPY(QtMaterialDivider) + Q_DECLARE_PRIVATE(QtMaterialDivider) +}; + +#endif // QTMATERIALDIVIDER_H diff --git a/components/qtmaterialdivider_p.h b/components/qtmaterialdivider_p.h new file mode 100644 index 000000000..cc24b0dfd --- /dev/null +++ b/components/qtmaterialdivider_p.h @@ -0,0 +1,25 @@ +#ifndef QTMATERIALDIVIDER_P_H +#define QTMATERIALDIVIDER_P_H + +#include +#include +#include "lib/qtmaterialtheme.h" + +class QtMaterialDivider; + +class QtMaterialDividerPrivate +{ + Q_DISABLE_COPY(QtMaterialDividerPrivate) + Q_DECLARE_PUBLIC(QtMaterialDivider) + +public: + QtMaterialDividerPrivate(QtMaterialDivider *q); + ~QtMaterialDividerPrivate(); + + void init(); + + QtMaterialDivider *const q_ptr; + int size; +}; + +#endif // QTMATERIALDIVIDER_P_H diff --git a/examples/dividersettingseditor.cpp b/examples/dividersettingseditor.cpp new file mode 100644 index 000000000..16bac89a1 --- /dev/null +++ b/examples/dividersettingseditor.cpp @@ -0,0 +1,61 @@ +#include "dividersettingseditor.h" +#include +#include +#include +#include + +DividerSettingsEditor::DividerSettingsEditor(QWidget *parent) + : QWidget(parent), + ui(new Ui::DividerSettingsForm), + m_divider1(new QtMaterialDivider), + m_divider2(new QtMaterialDivider), + m_textfield1(new QtMaterialTextField), + m_textfield2(new QtMaterialTextField) +{ + QVBoxLayout *layout = new QVBoxLayout; + setLayout(layout); + + QWidget *widget = new QWidget; + layout->addWidget(widget); + + QWidget *canvas = new QWidget; + canvas->setStyleSheet("QWidget { background: white; }"); + layout->addWidget(canvas); + + ui->setupUi(widget); + layout->setContentsMargins(20, 20, 20, 20); +// layout->setContentsMargins(0, 0, 0, 0); + + m_textfield1->setLabel( "First Name" ); + m_textfield1->setPlaceholderText( "Placeholder" ); + m_textfield1->setShowUnderline( false ); + + m_textfield2->setLabel( "Middle Name" ); + m_textfield2->setShowUnderline( false ); + + layout = new QVBoxLayout; + layout->setContentsMargins(0, 0, 0, 0); + canvas->setLayout(layout); + layout->addWidget(m_textfield1); + layout->addWidget(m_divider1); + layout->addWidget(m_textfield2); + layout->addWidget(m_divider2); + layout->addStretch(); + + setupForm(); + +} + +DividerSettingsEditor::~DividerSettingsEditor() +{ + delete ui; +} + +void DividerSettingsEditor::setupForm() +{ +} + +void DividerSettingsEditor::updateWidget() +{ +} + diff --git a/examples/dividersettingseditor.h b/examples/dividersettingseditor.h new file mode 100644 index 000000000..6f7dfd665 --- /dev/null +++ b/examples/dividersettingseditor.h @@ -0,0 +1,30 @@ +#ifndef DIVIDERSETTINGSEDITOR_H +#define DIVIDERSETTINGSEDITOR_H + +#include +#include "ui_dividersettingsform.h" +#include + +class QtMaterialDivider; + +class DividerSettingsEditor : public QWidget +{ + Q_OBJECT + +public: + explicit DividerSettingsEditor(QWidget *parent = 0); + ~DividerSettingsEditor(); + +protected slots: + void setupForm(); + void updateWidget(); + +private: + Ui::DividerSettingsForm *const ui; + QtMaterialDivider *const m_divider1; + QtMaterialDivider *const m_divider2; + QtMaterialTextField *const m_textfield1; + QtMaterialTextField *const m_textfield2; +}; + +#endif // DIVIDERSETTINGSEDITOR_H diff --git a/examples/dividersettingsform.ui b/examples/dividersettingsform.ui new file mode 100644 index 000000000..7f2447dba --- /dev/null +++ b/examples/dividersettingsform.ui @@ -0,0 +1,32 @@ + + + DividerSettingsForm + + + + 0 + 0 + 599 + 418 + + + + Form + + + + + 20 + 30 + 171 + 16 + + + + TODO + + + + + + diff --git a/examples/examples.pro b/examples/examples.pro index 99d8639ce..f703b6912 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -18,6 +18,7 @@ SOURCES = mainwindow.cpp \ textfieldsettingseditor.cpp \ tabssettingseditor.cpp \ snackbarsettingseditor.cpp \ + dividersettingseditor.cpp \ dialogsettingseditor.cpp \ drawersettingseditor.cpp \ scrollbarsettingseditor.cpp @@ -37,6 +38,7 @@ HEADERS = mainwindow.h \ textfieldsettingseditor.h \ tabssettingseditor.h \ snackbarsettingseditor.h \ + dividersettingseditor.h \ dialogsettingseditor.h \ drawersettingseditor.h \ scrollbarsettingseditor.h @@ -59,6 +61,7 @@ FORMS += \ circularprogresssettingsform.ui \ slidersettingsform.ui \ snackbarsettingsform.ui \ + dividersettingsform.ui \ radiobuttonsettingsform.ui \ togglesettingsform.ui \ textfieldsettingsform.ui \ diff --git a/examples/mainwindow.cpp b/examples/mainwindow.cpp index 365633fa4..7df3442c4 100644 --- a/examples/mainwindow.cpp +++ b/examples/mainwindow.cpp @@ -20,6 +20,7 @@ #include "dialogsettingseditor.h" #include "drawersettingseditor.h" #include "scrollbarsettingseditor.h" +#include "dividersettingseditor.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -57,12 +58,14 @@ MainWindow::MainWindow(QWidget *parent) DialogSettingsEditor *dialog = new DialogSettingsEditor; DrawerSettingsEditor *drawer = new DrawerSettingsEditor; ScrollBarSettingsEditor *scrollBar = new ScrollBarSettingsEditor; + DividerSettingsEditor *divider = new DividerSettingsEditor; stack->addWidget(avatar); stack->addWidget(badge); stack->addWidget(checkbox); stack->addWidget(circularProgress); stack->addWidget(dialog); + stack->addWidget(divider); stack->addWidget(drawer); stack->addWidget(fab); stack->addWidget(flatButton); @@ -82,6 +85,7 @@ MainWindow::MainWindow(QWidget *parent) list->addItem("Checkbox"); list->addItem("Circular Progress"); list->addItem("Dialog"); + list->addItem("Divider"); list->addItem("Drawer"); list->addItem("Floating Action Button"); list->addItem("Flat Button");