Commit 6cf307c6d304c0bcda490d317be9b584168bfddc

Pages

Commit diff

examples/simple/main.cpp

 
1919 ***************************************************************************/
2020
2121#include <QApplication>
22#include <QLabel>
23#include <QIcon>
2224
2325#include "sif/mainwindow.h"
2426
2929 QApplication app(argc, argv);
3030
3131 SIF::MainWindow mw;
32
33 mw.addPage("Page 1", new QLabel("La pagina 1"));
34 mw.addPage("Page 2", new QLabel("La pagina 2"));
35 mw.addPage(QIcon("/usr/share/icons/gnome/48x48/apps/openofficeorg23-base.png"), "Page 2", new QLabel("La pagina 3"));
36 mw.addPage(QIcon("/usr/share/icons/crystalsvg/128x128/apps/tux.png"), QString(), new QLabel("La pagina 4"));
37
3238 mw.show();
3339
3440 return app.exec();
toggle raw diff

src/sif/aerobutton.cpp

 
44
55#include <QPainter>
66#include <QApplication>
7#include <QStyleOptionButton>
78
89namespace SIF {
910
1011
1112struct AeroButton::Private {
1213 bool hovered;
13 bool pressed;
1414
1515 QColor color;
1616 QColor highlight;
2020
2121 int roundness;
2222
23 Private();
23 Private(AeroButton *q);
2424 ~Private();
2525
2626 QRect calculateIconPosition(const QRect &button_rect, const QSize &icon_size);
2727};
2828
29AeroButton::Private::Private() : hovered(false),
30 pressed(false),
29AeroButton::Private::Private(AeroButton *q) : hovered(false),
3130 color(Qt::gray),
3231 highlight(Qt::lightGray),
3332 shadow(Qt::black),
3433 opacity(1.0),
3534 roundness(0)
3635{
36 QPalette pal = q->palette();
37 pal.setBrush(QPalette::WindowText, Qt::white);
38 pal.setBrush(QPalette::Text, Qt::white);
39 pal.setBrush(QPalette::ButtonText, Qt::white);
40 q->setPalette(pal);
41
42 q->setCheckable(1);
3743}
3844
3945QRect AeroButton::Private::calculateIconPosition(const QRect &button_rect, const QSize &icon_size)
4949 int width = icon_size.width();
5050 int height = icon_size.height();
5151
52 QRect icon_position;
53 icon_position.setX(x);
54 icon_position.setY(y);
55 icon_position.setWidth(width);
56 icon_position.setHeight(height);
52 QRect icon_position(x, y, width, height);
5753
5854 return icon_position;
5955}
6060
6161
6262AeroButton::AeroButton(QWidget * parent)
63 : QPushButton(parent), d(new Private)
63 : QPushButton(parent), d(new Private(this))
6464{
65 QPalette pal = palette();
66 pal.setBrush(QPalette::WindowText, Qt::white);
67 pal.setBrush(QPalette::Text, Qt::white);
68 pal.setBrush(QPalette::ButtonText, Qt::white);
69 setPalette(pal);
7065}
7166
7267AeroButton::AeroButton(const QString & text, QWidget * parent)
73 : QPushButton(text, parent), d(new Private)
68 : QPushButton(text, parent), d(new Private(this))
7469{
75 QPalette pal = palette();
76 pal.setBrush(QPalette::WindowText, Qt::white);
77 pal.setBrush(QPalette::Text, Qt::white);
78 pal.setBrush(QPalette::ButtonText, Qt::white);
79 setPalette(pal);
8070}
8171
8272AeroButton::AeroButton(const QIcon & icon, const QString & text, QWidget * parent)
83 : QPushButton(icon, text, parent), d(new Private)
73 : QPushButton(icon, text, parent), d(new Private(this))
8474{
85 QPalette pal = palette();
86 pal.setBrush(QPalette::WindowText, Qt::white);
87 pal.setBrush(QPalette::Text, Qt::white);
88 pal.setBrush(QPalette::ButtonText, Qt::white);
89 setPalette(pal);
9075}
9176
9277AeroButton::~AeroButton()
114114void AeroButton::paintEvent(QPaintEvent * pe)
115115{
116116 Q_UNUSED(pe);
117
118 QRect rect = this->rect();
119 QStyleOptionButton option;
120 initStyleOption(&option);
117121
118122 QPainter painter(this);
119123 painter.setRenderHint(QPainter::Antialiasing);
120124
121125 painter.save();
122126
123 painter.fillRect(rect(), Qt::transparent);
127 painter.fillRect(rect, Qt::transparent);
124128
125129 //test for state changes
126130 QColor button_color;
132132 {
133133 d->hovered ? button_color = d->highlight : button_color = d->color;
134134
135 if(d->pressed)
135 if(option.state & QStyle::State_Sunken )
136136 {
137137 button_color = d->highlight.darker(250);
138138 }
179179
180180 painter.restore();
181181
182 //button text
182 QIcon icon = this->icon();
183183 QString text = this->text();
184 QRect icon_position;
185
186 //icon
187 if(!icon.isNull())
188 {
189 QSize icon_size = this->iconSize();
190 icon_position = d->calculateIconPosition(button_rect, icon_size);
191
192
193 if( !text.isEmpty() )
194 {
195 icon_position.setX(20);
196 icon_position.setWidth(icon_size.width());
197 }
198
199 painter.setOpacity(1.0);
200 painter.drawPixmap(icon_position, QPixmap(icon.pixmap(icon_size)));
201 }
202
203 //button text
204
184205 if(!text.isNull())
185206 {
186207 QFont font = this->font();
187208 font.setBold(true);
188209 painter.setFont(font);
189210
190// painter.setPen(Qt::white);
191
192211 painter.setOpacity(1.0);
193 painter.drawText(0, 0, button_rect.width(), button_rect.height(), Qt::AlignCenter, text);
212 painter.drawText(icon_position.width(), 0, button_rect.width() - icon_position.width(), button_rect.height(), Qt::AlignCenter, text);
194213 }
195
196 //icon
197 QIcon icon = this->icon();
198 if(!icon.isNull())
214
215 if(option.state & QStyle::State_On)
199216 {
200 QSize icon_size = this->iconSize();
201 QRect icon_position = d->calculateIconPosition(button_rect, icon_size);
202 painter.setOpacity(1.0);
203 painter.drawPixmap(icon_position, QPixmap(icon.pixmap(icon_size)));
217 QPen old = painter.pen();
218
219 QColor h = d->highlight;
220 h.setAlpha(150);
221 QPen pen(h, 2);
222 painter.setPen(pen);
223
224 painter.drawLine(rect.bottomLeft()-QPoint(-6, 3), rect.bottomRight()-QPoint(6, 3));
225
226 painter.setPen(old);
204227 }
205228}
206229
247247{
248248 Q_UNUSED(e);
249249
250 d->pressed = true;
251250 this->update();
252251
253252 QPushButton::mousePressEvent(e);
256256{
257257 Q_UNUSED(e);
258258
259 d->pressed = false;
260259 this->update();
261260
262261 QPushButton::mouseReleaseEvent(e);
toggle raw diff

src/sif/mainwindow.cpp

 
4242 delete d;
4343}
4444
45void MainWindow::addPage(const QString &title, QWidget *w)
46{
47 d->central->addPage(title, w);
48}
49
50void MainWindow::addPage(const QIcon &icon, const QString &title, QWidget *w)
51{
52 d->central->addPage(icon, title, w);
53}
4554
4655}
toggle raw diff

src/sif/mainwindow.h

 
3434 public:
3535 MainWindow(QWidget *parent = 0);
3636 ~MainWindow();
37
38 void addPage(const QString &title, QWidget *w);
39 void addPage(const QIcon &icon, const QString &title, QWidget *w);
3740
3841 private:
3942 struct Private;
toggle raw diff

src/sif/private/buttonarea.cpp

 
2727namespace SIFPrivate {
2828
2929ButtonArea::ButtonArea(QWidget *parent)
30 : QWidget(parent)
30 : QWidget(parent), m_buttons(this)
3131{
32 QHBoxLayout *layout = new QHBoxLayout(this);
33
34 SIF::AeroButton *b1 = new SIF::AeroButton("Button 1");
35 b1->setRoundness(10);
36
37 SIF::AeroButton *b2 = new SIF::AeroButton("Button 2");
38 b2->setRoundness(10);
39
40 SIF::AeroButton *b3 = new SIF::AeroButton("Button 3");
41 b3->setRoundness(10);
42
43 layout->addWidget(b1);
44 layout->addWidget(b2);
45 layout->addWidget(b3);
32 m_layout = new QHBoxLayout(this);
33 setExclusive(true);
4634}
4735
4836
3838{
3939}
4040
41void ButtonArea::setExclusive(bool e)
42{
43 m_buttons.setExclusive(e);
44}
45
46bool ButtonArea::exclusive() const
47{
48 return m_buttons.exclusive();
49}
50
51
52SIF::AeroButton *ButtonArea::addButton(const QString &title, const QIcon &icon)
53{
54 SIF::AeroButton *button = new SIF::AeroButton(icon, title);
55 button->setIconSize(QSize(48, 48));
56
57 m_layout->addWidget(button);
58
59 m_buttons.addButton(button);
60
61 return button;
62}
4163
4264}
toggle raw diff

src/sif/private/buttonarea.h

 
2121#define SIFPRIVATEBUTTONAREA_H
2222
2323#include <QWidget>
24#include <QIcon>
25#include <QButtonGroup>
26
27class QHBoxLayout;
28
29namespace SIF {
30class AeroButton;
31}
2432
2533namespace SIFPrivate {
2634
4242 ButtonArea(QWidget *parent = 0);
4343 ~ButtonArea();
4444
45 private:
45 void setExclusive(bool e);
46 bool exclusive() const;
47
48 SIF::AeroButton *addButton(const QString &title, const QIcon &icon = QIcon());
4649
50 private:
51 QHBoxLayout *m_layout;
52 QButtonGroup m_buttons;
4753};
4854
4955}
toggle raw diff

src/sif/private/centralwidget.cpp

 
2222
2323#include "headerwidget.h"
2424#include "stackedwidget.h"
25#include "aerobutton.h"
2526
2627#include <QVBoxLayout>
2728
4848{
4949}
5050
51void CentralWidget::addPage(const QString &title, QWidget *w)
52{
53 SIF::AeroButton *button = m_header->addButton(title);
54 m_stack->addWidget(w);
55
56 m_pages[button] = w;
57
58 connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
59}
5160
61void CentralWidget::addPage(const QIcon &icon, const QString &title, QWidget *w)
62{
63 SIF::AeroButton *button = m_header->addButton(title, icon);
64 m_stack->addWidget(w);
65
66 m_pages[button] = w;
67
68 connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
5269}
70
71void CentralWidget::onButtonClicked()
72{
73 QAbstractButton *button = qobject_cast<QAbstractButton *>(sender());
74
75 if(button)
76 {
77 if(m_pages.contains(button))
78 {
79 m_stack->setCurrentWidget(m_pages[button]);
80 }
81 }
82}
83
84}
85
86
toggle raw diff

src/sif/private/centralwidget.h

 
2121#define SIFPRIVATECENTRALWIDGET_H
2222
2323#include <QWidget>
24#include <QHash>
25
26class QAbstractButton;
2427
2528namespace SIFPrivate {
2629
4040 CentralWidget(QWidget *parent = 0);
4141 ~CentralWidget();
4242
43 void addPage(const QString &title, QWidget *w);
44 void addPage(const QIcon &icon, const QString &title, QWidget *w);
45
46 private slots:
47 void onButtonClicked();
48
4349 private:
4450 HeaderWidget *m_header;
4551 StackedWidget *m_stack;
52
53 QHash<QAbstractButton *, QWidget *> m_pages;
4654};
4755
4856}
toggle raw diff

src/sif/private/headerwidget.cpp

 
2222#include "buttonarea.h"
2323#include "clickablelabel.h"
2424
25#include "aerobutton.h"
26
2527#include <QLinearGradient>
2628#include <QHBoxLayout>
2729
8181 m_title->setPalette(palette);
8282}
8383
84SIF::AeroButton *HeaderWidget::addButton(const QString &title, const QIcon &icon)
85{
86 SIF::AeroButton *button = m_buttonArea->addButton(title, icon);
87
88
89 return button;
90}
91
8492void HeaderWidget::resizeEvent(QResizeEvent *e)
8593{
8694 QWidget::resizeEvent(e);
toggle raw diff

src/sif/private/headerwidget.h

 
2121#define SIFPRIVATEHEADERWIDGET_H
2222
2323#include <QWidget>
24#include <QIcon>
25
26namespace SIF {
27 class AeroButton;
28}
2429
2530namespace SIFPrivate {
2631
4949
5050 void setFontColor(const QColor &color);
5151
52 SIF::AeroButton *addButton(const QString &title, const QIcon &icon = QIcon());
53
5254 signals:
5355 void titleClicked();
5456
toggle raw diff