1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include <QStandardItemModel>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QColor>
#include "colorwidget.h"
#include "hwconsts.h"
ColorWidget::ColorWidget(QStandardItemModel *colorsModel, QWidget *parent) :
QFrame(parent)
{
m_colorsModel = colorsModel;
setColor(0);
setAutoFillBackground(true);
connect(m_colorsModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(dataChanged(QModelIndex,QModelIndex)));
}
ColorWidget::~ColorWidget()
{
}
void ColorWidget::setColor(int color)
{
Q_ASSERT_X(color >= 0 && color < m_colorsModel->rowCount(), "ColorWidget::setColor", "Color index out of range");
m_color = color;
QStandardItem * item = m_colorsModel->item(m_color);
setStyleSheet(QString("* { border: 2px solid #ffcc00; border-radius: 8px; background: %1 } :disabled { border-color: #a0a0a0; } :hover { border-color: #ffff00; }").arg(item->data().value<QColor>().name()));
/*
QPalette p = palette();
p.setColor(QPalette::Window, item->data().value<QColor>());
setPalette(p);
*/
emit colorChanged(m_color);
}
int ColorWidget::getColor()
{
return m_color;
}
void ColorWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
if(m_color >= topLeft.row() && m_color <= bottomRight.row())
setColor(m_color);
}
void ColorWidget::mousePressEvent(QMouseEvent * event)
{
switch(event->button())
{
case Qt::LeftButton:
nextColor();
break;
case Qt::RightButton:
previousColor();
break;
default:;
}
}
void ColorWidget::wheelEvent(QWheelEvent *event)
{
event->accept();
if(event->delta() > 0)
previousColor();
else
nextColor();
}
void ColorWidget::nextColor()
{
setColor((m_color + 1) % m_colorsModel->rowCount());
}
void ColorWidget::previousColor()
{
setColor((m_color + m_colorsModel->rowCount() - 1) % m_colorsModel->rowCount());
}
|