This commit is contained in:
laserpants 2016-04-17 13:59:15 +03:00
commit 16129e7243
25 changed files with 630 additions and 4 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
*.pro.user
*.pro.user.*
*.svg

42
components/avatar.cpp Normal file
View File

@ -0,0 +1,42 @@
#include <QWidget>
#include <QPainter>
#include "avatar.h"
Avatar::Avatar(QWidget *parent)
: QWidget(parent)
{
}
Avatar::~Avatar()
{
}
void Avatar::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
}
void Avatar::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
}
void Avatar::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawRect(rect().adjusted(0, 0, -1, -1));
painter.setRenderHint(QPainter::Antialiasing);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
QRect r = rect();
painter.drawEllipse(r.center(), 20, 20);
QWidget::paintEvent(event);
}

20
components/avatar.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef AVATAR_H
#define AVATAR_H
#include <QWidget>
class Avatar : public QWidget
{
Q_OBJECT
public:
explicit Avatar(QWidget *parent = 0);
~Avatar();
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};
#endif // AVATAR_H

View File

@ -1 +1,31 @@
#include <QWidget>
#include <QPainter>
#include "checkbox.h"
Checkbox::Checkbox(QWidget *parent)
: QWidget(parent)
{
}
Checkbox::~Checkbox()
{
}
void Checkbox::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
}
void Checkbox::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
}
void Checkbox::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawRect(0, 0, 50, 50);
QWidget::paintEvent(event);
}

View File

@ -0,0 +1,20 @@
#ifndef CHECKBOX_H
#define CHECKBOX_H
#include <QWidget>
class Checkbox : public QWidget
{
Q_OBJECT
public:
explicit Checkbox(QWidget *parent = 0);
~Checkbox();
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};
#endif // CHECKBOX_H

View File

@ -1 +1,31 @@
#include <QWidget>
#include <QPainter>
#include "list.h"
List::List(QWidget *parent)
: QWidget(parent)
{
}
List::~List()
{
}
void List::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
}
void List::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
}
void List::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawRect(50, 250, 50, 50);
QWidget::paintEvent(event);
}

View File

@ -0,0 +1,20 @@
#ifndef LIST_H
#define LIST_H
#include <QWidget>
class List : public QWidget
{
Q_OBJECT
public:
explicit List(QWidget *parent = 0);
~List();
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};
#endif // LIST_H

View File

@ -1 +1,31 @@
#include <QWidget>
#include <QPainter>
#include "radiobutton.h"
RadioButton::RadioButton(QWidget *parent)
: QWidget(parent)
{
}
RadioButton::~RadioButton()
{
}
void RadioButton::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
}
void RadioButton::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
}
void RadioButton::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawRect(0, 50, 50, 50);
QWidget::paintEvent(event);
}

View File

@ -0,0 +1,20 @@
#ifndef RADIOBUTTON_H
#define RADIOBUTTON_H
#include <QWidget>
class RadioButton : public QWidget
{
Q_OBJECT
public:
explicit RadioButton(QWidget *parent = 0);
~RadioButton();
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};
#endif // RADIOBUTTON_H

View File

@ -75,11 +75,11 @@ void Tabs::updateInkBar()
const QRect &r = item->geometry();
const qreal s = 1-_tween;
if (QAbstractAnimation::Running != _animation->state()) {
_inkBarGeometry = QRect(r.left(), r.bottom()-3, r.width(), 4);
_inkBarGeometry = QRect(r.left(), r.bottom()-1, r.width(), 2);
} else {
const qreal left = _previousGeometry.left()*s + r.left()*_tween;
const qreal width = _previousGeometry.width()*s + r.width()*_tween;
_inkBarGeometry = QRect(left, r.bottom()-3, width, 4);
_inkBarGeometry = QRect(left, r.bottom()-1, width, 2);
}
update();
}

View File

@ -1 +1,81 @@
#include <QPropertyAnimation>
#include <QWidget>
#include <QPainter>
#include <QDebug>
#include "textfield.h"
#include "style.h"
TextField::TextField(QWidget *parent)
: QLineEdit(parent),
_animation(new QPropertyAnimation(this)),
_progress(1)
{
setStyle(&Style::instance());
_animation->setPropertyName("progress");
_animation->setTargetObject(this);
_animation->setEasingCurve(QEasingCurve::InCubic);
_animation->setDuration(350);
_animation->setStartValue(1);
_animation->setEndValue(0);
}
TextField::~TextField()
{
}
void TextField::setProgress(qreal progress)
{
if (_progress == progress)
return;
_progress = progress;
emit progressChanged(progress);
update();
}
void TextField::focusInEvent(QFocusEvent *event)
{
_animation->setDirection(QAbstractAnimation::Forward);
_animation->start();
QLineEdit::focusInEvent(event);
}
void TextField::focusOutEvent(QFocusEvent *event)
{
_animation->setDirection(QAbstractAnimation::Backward);
_animation->start();
QLineEdit::focusOutEvent(event);
}
void TextField::mousePressEvent(QMouseEvent *event)
{
QLineEdit::mousePressEvent(event);
}
void TextField::mouseReleaseEvent(QMouseEvent *event)
{
QLineEdit::mouseReleaseEvent(event);
}
void TextField::paintEvent(QPaintEvent *event)
{
QLineEdit::paintEvent(event);
QPainter painter(this);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
if (!qFuzzyCompare(1, _progress)) {
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
int w = _progress*static_cast<qreal>(width()/2);
painter.drawRect(w, height()-2, width()-w*2, 2);
}
}

View File

@ -0,0 +1,36 @@
#ifndef TEXTFIELD_H
#define TEXTFIELD_H
#include <QLineEdit>
class QPropertyAnimation;
class TextField : public QLineEdit
{
Q_OBJECT
Q_PROPERTY(qreal progress WRITE setProgress READ progress NOTIFY progressChanged)
public:
explicit TextField(QWidget *parent = 0);
~TextField();
void setProgress(qreal progress);
inline qreal progress() const { return _progress; }
signals:
void progressChanged(qreal);
protected:
void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
QPropertyAnimation *const _animation;
qreal _progress;
};
#endif // TEXTFIELD_H

View File

@ -0,0 +1,30 @@
#include <QLayout>
#include <QEvent>
#include "avatarexamples.h"
#include "components/avatar.h"
#include "exampleview.h"
#include "frame.h"
AvatarExamples::AvatarExamples(QWidget *parent)
: ExampleList(parent)
{
QLayout *layout = widget()->layout();
{
Avatar *avatar = new Avatar;
ExampleView *view = new ExampleView;
view->setWidget(avatar);
Frame *frame = new Frame;
frame->setCodeSnippet(
"hello"
);
frame->setWidget(view);
layout->addWidget(frame);
} }
AvatarExamples::~AvatarExamples()
{
}

15
examples/avatarexamples.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef AVATAREXAMPLES_H
#define AVATAREXAMPLES_H
#include "examplelist.h"
class AvatarExamples : public ExampleList
{
Q_OBJECT
public:
explicit AvatarExamples(QWidget *parent = 0);
~AvatarExamples();
};
#endif // AVATAREXAMPLES_H

View File

@ -0,0 +1,31 @@
#include <QLayout>
#include <QEvent>
#include "checkboxexamples.h"
#include "components/checkbox.h"
#include "exampleview.h"
#include "frame.h"
CheckboxExamples::CheckboxExamples(QWidget *parent)
: ExampleList(parent)
{
QLayout *layout = widget()->layout();
{
Checkbox *checkbox = new Checkbox;
ExampleView *view = new ExampleView;
view->setWidget(checkbox);
Frame *frame = new Frame;
frame->setCodeSnippet(
"hello"
);
frame->setWidget(view);
layout->addWidget(frame);
}
}
CheckboxExamples::~CheckboxExamples()
{
}

View File

@ -0,0 +1,15 @@
#ifndef CHECKBOXEXAMPLES_H
#define CHECKBOXEXAMPLES_H
#include "examplelist.h"
class CheckboxExamples : public ExampleList
{
Q_OBJECT
public:
explicit CheckboxExamples(QWidget *parent = 0);
~CheckboxExamples();
};
#endif // CHECKBOXEXAMPLES_H

31
examples/listexamples.cpp Normal file
View File

@ -0,0 +1,31 @@
#include <QLayout>
#include <QEvent>
#include "listexamples.h"
#include "components/list.h"
#include "exampleview.h"
#include "frame.h"
ListExamples::ListExamples(QWidget *parent)
: ExampleList(parent)
{
QLayout *layout = widget()->layout();
{
List *list = new List;
ExampleView *view = new ExampleView;
view->setWidget(list);
Frame *frame = new Frame;
frame->setCodeSnippet(
"hello"
);
frame->setWidget(view);
layout->addWidget(frame);
}
}
ListExamples::~ListExamples()
{
}

15
examples/listexamples.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef LISTEXAMPLES_H
#define LISTEXAMPLES_H
#include "examplelist.h"
class ListExamples : public ExampleList
{
Q_OBJECT
public:
explicit ListExamples(QWidget *parent = 0);
~ListExamples();
};
#endif // LISTEXAMPLES_H

View File

@ -0,0 +1,31 @@
#include <QLayout>
#include <QEvent>
#include "radiobuttonexamples.h"
#include "components/radiobutton.h"
#include "exampleview.h"
#include "frame.h"
RadioButtonExamples::RadioButtonExamples(QWidget *parent)
: ExampleList(parent)
{
QLayout *layout = widget()->layout();
{
RadioButton *radioButton = new RadioButton;
ExampleView *view = new ExampleView;
view->setWidget(radioButton);
Frame *frame = new Frame;
frame->setCodeSnippet(
"hello"
);
frame->setWidget(view);
layout->addWidget(frame);
}
}
RadioButtonExamples::~RadioButtonExamples()
{
}

View File

@ -0,0 +1,15 @@
#ifndef RADIOBUTTONEXAMPLES_H
#define RADIOBUTTONEXAMPLES_H
#include "examplelist.h"
class RadioButtonExamples : public ExampleList
{
Q_OBJECT
public:
explicit RadioButtonExamples(QWidget *parent = 0);
~RadioButtonExamples();
};
#endif // RADIOBUTTONEXAMPLES_H

View File

@ -0,0 +1,46 @@
#include <QLayout>
#include <QEvent>
#include <QLineEdit>
#include "textfieldexamples.h"
#include "components/textfield.h"
#include "exampleview.h"
#include "frame.h"
TextFieldExamples::TextFieldExamples(QWidget *parent)
: ExampleList(parent)
{
QLayout *layout = widget()->layout();
{
TextField *textField = new TextField;
ExampleView *view = new ExampleView;
view->setWidget(textField);
Frame *frame = new Frame;
frame->setCodeSnippet(
"hello"
);
frame->setWidget(view);
layout->addWidget(frame);
}
{
QLineEdit *edit = new QLineEdit;
ExampleView *view = new ExampleView;
view->setWidget(edit);
Frame *frame = new Frame;
frame->setCodeSnippet(
"hello"
);
frame->setWidget(view);
layout->addWidget(frame);
}
}
TextFieldExamples::~TextFieldExamples()
{
}

View File

@ -0,0 +1,15 @@
#ifndef TEXTFIELDEXAMPLES_H
#define TEXTFIELDEXAMPLES_H
#include "examplelist.h"
class TextFieldExamples : public ExampleList
{
Q_OBJECT
public:
explicit TextFieldExamples(QWidget *parent = 0);
~TextFieldExamples();
};
#endif // TEXTFIELDEXAMPLES_H

View File

@ -1,3 +1,4 @@
#include <QApplication>
#include <QMenu>
#include <QMenuBar>
#include <QStackedLayout>
@ -12,6 +13,11 @@
#include "examples/tableexamples.h"
#include "examples/sliderexamples.h"
#include "examples/toggleexamples.h"
#include "examples/radiobuttonexamples.h"
#include "examples/checkboxexamples.h"
#include "examples/textfieldexamples.h"
#include "examples/listexamples.h"
#include "examples/avatarexamples.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
@ -24,6 +30,11 @@ MainWindow::MainWindow(QWidget *parent)
_tableExamples(new TableExamples),
_sliderExamples(new SliderExamples),
_toggleExamples(new ToggleExamples),
_radioButtonExamples(new RadioButtonExamples),
_checkboxExamples(new CheckboxExamples),
_textFieldExamples(new TextFieldExamples),
_listExamples(new ListExamples),
_avatarExamples(new AvatarExamples),
_about(new About)
{
_initWidget();
@ -53,6 +64,16 @@ void MainWindow::showWidget(QAction *action)
_layout->setCurrentWidget(_sliderExamples);
} else if ("Toggle" == text) {
_layout->setCurrentWidget(_toggleExamples);
} else if ("Radio Button" == text) {
_layout->setCurrentWidget(_radioButtonExamples);
} else if ("Checkbox" == text) {
_layout->setCurrentWidget(_checkboxExamples);
} else if ("Text Field" == text) {
_layout->setCurrentWidget(_textFieldExamples);
} else if ("List" == text) {
_layout->setCurrentWidget(_listExamples);
} else if ("Avatar" == text) {
_layout->setCurrentWidget(_avatarExamples);
} else {
_layout->setCurrentWidget(_about);
}
@ -72,6 +93,11 @@ void MainWindow::_initWidget()
_layout->addWidget(_tableExamples);
_layout->addWidget(_sliderExamples);
_layout->addWidget(_toggleExamples);
_layout->addWidget(_radioButtonExamples);
_layout->addWidget(_checkboxExamples);
_layout->addWidget(_textFieldExamples);
_layout->addWidget(_listExamples);
_layout->addWidget(_avatarExamples);
setCentralWidget(widget);
}
@ -79,12 +105,16 @@ void MainWindow::_initWidget()
void MainWindow::_initMenu() const
{
QMenu *file = new QMenu("&File");
QAction *exitAction = file->addAction("E&xit");
QMenu *components = new QMenu("&Components");
QMenu *settings = new QMenu("&Settings");
QMenu *examples = new QMenu("&Examples");
QMenu *help = new QMenu("&Help");
components->addAction("App Bar");
components->addAction("Avatar");
QMenu *buttons = new QMenu("Buttons");
components->addMenu(buttons);
@ -116,4 +146,5 @@ void MainWindow::_initMenu() const
menuBar()->addMenu(help);
connect(components, SIGNAL(triggered(QAction *)), this, SLOT(showWidget(QAction *)));
connect(exitAction, SIGNAL(triggered(bool)), qApp, SLOT(quit()));
}

View File

@ -12,6 +12,11 @@ class TabsExamples;
class TableExamples;
class SliderExamples;
class ToggleExamples;
class RadioButtonExamples;
class CheckboxExamples;
class TextFieldExamples;
class ListExamples;
class AvatarExamples;
class QStackedLayout;
class MainWindow : public QMainWindow
@ -38,6 +43,11 @@ private:
TableExamples *const _tableExamples;
SliderExamples *const _sliderExamples;
ToggleExamples *const _toggleExamples;
RadioButtonExamples *const _radioButtonExamples;
CheckboxExamples *const _checkboxExamples;
TextFieldExamples *const _textFieldExamples;
ListExamples *const _listExamples;
AvatarExamples *const _avatarExamples;
About *const _about;
};

View File

@ -39,7 +39,13 @@ SOURCES += main.cpp\
examples/raisedbuttonexamples.cpp \
examples/sliderexamples.cpp \
components/toggle.cpp \
examples/toggleexamples.cpp
examples/toggleexamples.cpp \
examples/radiobuttonexamples.cpp \
examples/checkboxexamples.cpp \
examples/textfieldexamples.cpp \
examples/listexamples.cpp \
components/avatar.cpp \
examples/avatarexamples.cpp
HEADERS += mainwindow.h \
style.h \
@ -72,4 +78,10 @@ HEADERS += mainwindow.h \
examples/raisedbuttonexamples.h \
examples/sliderexamples.h \
components/toggle.h \
examples/toggleexamples.h
examples/toggleexamples.h \
examples/radiobuttonexamples.h \
examples/checkboxexamples.h \
examples/textfieldexamples.h \
examples/listexamples.h \
components/avatar.h \
examples/avatarexamples.h