26 #include <QGridLayout>
28 #include <QMouseEvent>
29 #include <QPushButton>
30 #include <QRadioButton>
41 QWidget* pageButtonsContainer =
new QWidget;
42 QHBoxLayout* buttonLayout =
new QHBoxLayout;
43 pageButtonsContainer->setLayout(buttonLayout);
45 layout.addWidget(pageButtonsContainer);
47 const int maxCols = 8;
48 const int maxRows = 8;
49 const int itemsPerPage = maxRows * maxCols;
52 int itemCount = emoticons.size();
53 int pageCount = ceil(
float(itemCount) /
float(itemsPerPage));
61 const QSize size(px, px);
64 buttonLayout->addStretch();
65 for (
int i = 0; i < pageCount; ++i) {
66 QGridLayout* pageLayout =
new QGridLayout;
67 pageLayout->addItem(
new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding),
69 pageLayout->addItem(
new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum), 0,
72 QWidget* page =
new QWidget;
73 page->setLayout(pageLayout);
74 stack.addWidget(page);
78 QRadioButton* pageButton =
new QRadioButton;
79 pageButton->setProperty(
"pageIndex", i);
80 pageButton->setCursor(Qt::PointingHandCursor);
81 pageButton->setChecked(i == 0);
82 buttonLayout->addWidget(pageButton);
87 buttonLayout->addStretch();
90 for (
const QStringList& set : emoticons) {
91 QPushButton* button =
new QPushButton;
92 std::shared_ptr<QIcon> icon = smileyPack.
getAsIcon(set[0]);
94 button->setIcon(icon->pixmap(size));
95 button->setToolTip(set.join(
" "));
96 button->setProperty(
"sequence", set[0]);
97 button->setCursor(Qt::PointingHandCursor);
98 button->setFlat(
true);
99 button->setIconSize(size);
100 button->setFixedSize(size);
104 qobject_cast<QGridLayout*>(
stack.widget(currPage)->layout())->addWidget(button, row, col);
110 if (col >= maxCols) {
116 if (currItem >= itemsPerPage) {
130 QWidget* sender = qobject_cast<QWidget*>(QObject::sender());
133 sender->property(
"sequence").toString().replace(
"<",
"<").replace(
">",
">");
140 QWidget* sender = qobject_cast<QRadioButton*>(QObject::sender());
142 int page = sender->property(
"pageIndex").toInt();
143 stack.setCurrentIndex(page);
154 if (!rect().contains(ev->pos()))
164 #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
165 const bool vertical = qAbs(e->angleDelta().y()) >= qAbs(e->angleDelta().x());
166 const int delta = vertical ? e->angleDelta().y() : e->angleDelta().x();
171 if (e->orientation() == Qt::Vertical) {
172 if (e->delta() < 0) {
174 stack.setCurrentIndex(
stack.currentIndex() + 1);
176 stack.setCurrentIndex(
stack.currentIndex() - 1);
185 foreach (QRadioButton* t_pageButton, pageButtons) {
186 if (t_pageButton->property(
"pageIndex").toInt() ==
stack.currentIndex())
187 t_pageButton->setChecked(
true);
189 t_pageButton->setChecked(
false);