Attempt to fix devices issue
This commit is contained in:
@@ -102,8 +102,8 @@ class DeviceManager : public QAbstractListModel {
|
|||||||
void SetDeviceOptions(int row, const QString &friendly_name, const QString &icon_name, MusicStorage::TranscodeMode mode, Song::FileType format);
|
void SetDeviceOptions(int row, const QString &friendly_name, const QString &icon_name, MusicStorage::TranscodeMode mode, Song::FileType format);
|
||||||
|
|
||||||
// QAbstractListModel
|
// QAbstractListModel
|
||||||
int rowCount(const QModelIndex &parent) const;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
QVariant data(const QModelIndex &index, int role) const;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void Unmount(int row);
|
void Unmount(int row);
|
||||||
|
|||||||
@@ -30,11 +30,11 @@
|
|||||||
|
|
||||||
DeviceStateFilterModel::DeviceStateFilterModel(QObject *parent, DeviceManager::State state)
|
DeviceStateFilterModel::DeviceStateFilterModel(QObject *parent, DeviceManager::State state)
|
||||||
: QSortFilterProxyModel(parent),
|
: QSortFilterProxyModel(parent),
|
||||||
state_(state)
|
state_(state) {
|
||||||
{
|
|
||||||
connect(this, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(ProxyRowCountChanged()));
|
connect(this, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(ProxyRowCountChanged(QModelIndex, int, int)));
|
||||||
connect(this, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(ProxyRowCountChanged()));
|
connect(this, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(ProxyRowCountChanged(QModelIndex, int, int)));
|
||||||
connect(this, SIGNAL(modelReset()), SLOT(ProxyRowCountChanged()));
|
connect(this, SIGNAL(modelReset()), this, SLOT(ProxyRowCountChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DeviceStateFilterModel::filterAcceptsRow(int row, const QModelIndex&) const {
|
bool DeviceStateFilterModel::filterAcceptsRow(int row, const QModelIndex&) const {
|
||||||
@@ -45,6 +45,10 @@ void DeviceStateFilterModel::ProxyRowCountChanged() {
|
|||||||
emit IsEmptyChanged(rowCount() == 0);
|
emit IsEmptyChanged(rowCount() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeviceStateFilterModel::ProxyRowCountChanged(QModelIndex index, int first, int last) {
|
||||||
|
emit IsEmptyChanged(rowCount() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
void DeviceStateFilterModel::setSourceModel(QAbstractItemModel *sourceModel) {
|
void DeviceStateFilterModel::setSourceModel(QAbstractItemModel *sourceModel) {
|
||||||
QSortFilterProxyModel::setSourceModel(sourceModel);
|
QSortFilterProxyModel::setSourceModel(sourceModel);
|
||||||
setDynamicSortFilter(true);
|
setDynamicSortFilter(true);
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ protected:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void ProxyRowCountChanged();
|
void ProxyRowCountChanged();
|
||||||
|
void ProxyRowCountChanged(QModelIndex index, int first, int last);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DeviceManager::State state_;
|
DeviceManager::State state_;
|
||||||
|
|||||||
@@ -71,23 +71,23 @@ const int DeviceItemDelegate::kIconPadding = 6;
|
|||||||
|
|
||||||
DeviceItemDelegate::DeviceItemDelegate(QObject *parent) : CollectionItemDelegate(parent) {}
|
DeviceItemDelegate::DeviceItemDelegate(QObject *parent) : CollectionItemDelegate(parent) {}
|
||||||
|
|
||||||
void DeviceItemDelegate::paint(QPainter *p, const QStyleOptionViewItem &opt, const QModelIndex &index) const {
|
void DeviceItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
|
||||||
|
|
||||||
// Is it a device or a collection item?
|
// Is it a device or a collection item?
|
||||||
if (index.data(DeviceManager::Role::Role_State).isNull()) {
|
if (index.data(DeviceManager::Role::Role_State).isNull()) {
|
||||||
CollectionItemDelegate::paint(p, opt, index);
|
CollectionItemDelegate::paint(painter, option, index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the background
|
// Draw the background
|
||||||
const QWidget *widget = opt.widget;
|
const QWidget *widget = option.widget;
|
||||||
QStyle *style = widget->style() ? widget->style() : QApplication::style();
|
QStyle *style = widget->style() ? widget->style() : QApplication::style();
|
||||||
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, p, widget);
|
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, widget);
|
||||||
|
|
||||||
p->save();
|
painter->save();
|
||||||
|
|
||||||
// Font for the status line
|
// Font for the status line
|
||||||
QFont status_font(opt.font);
|
QFont status_font(option.font);
|
||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
status_font.setPointSize(status_font.pointSize() - 1);
|
status_font.setPointSize(status_font.pointSize() - 1);
|
||||||
@@ -95,25 +95,25 @@ void DeviceItemDelegate::paint(QPainter *p, const QStyleOptionViewItem &opt, con
|
|||||||
status_font.setPointSize(status_font.pointSize() - 2);
|
status_font.setPointSize(status_font.pointSize() - 2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int text_height = QFontMetrics(opt.font).height() + QFontMetrics(status_font).height();
|
const int text_height = QFontMetrics(option.font).height() + QFontMetrics(status_font).height();
|
||||||
|
|
||||||
QRect line1(opt.rect);
|
QRect line1(option.rect);
|
||||||
QRect line2(opt.rect);
|
QRect line2(option.rect);
|
||||||
line1.setTop(line1.top() + (opt.rect.height() - text_height) / 2);
|
line1.setTop(line1.top() + (option.rect.height() - text_height) / 2);
|
||||||
line2.setTop(line1.top() + QFontMetrics(opt.font).height());
|
line2.setTop(line1.top() + QFontMetrics(option.font).height());
|
||||||
line1.setLeft(line1.left() + DeviceManager::kDeviceIconSize + kIconPadding);
|
line1.setLeft(line1.left() + DeviceManager::kDeviceIconSize + kIconPadding);
|
||||||
line2.setLeft(line2.left() + DeviceManager::kDeviceIconSize + kIconPadding);
|
line2.setLeft(line2.left() + DeviceManager::kDeviceIconSize + kIconPadding);
|
||||||
|
|
||||||
// Change the color for selected items
|
// Change the color for selected items
|
||||||
if (opt.state & QStyle::State_Selected) {
|
if (option.state & QStyle::State_Selected) {
|
||||||
p->setPen(opt.palette.color(QPalette::HighlightedText));
|
painter->setPen(option.palette.color(QPalette::HighlightedText));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the icon
|
// Draw the icon
|
||||||
p->drawPixmap(opt.rect.topLeft(), index.data(Qt::DecorationRole).value<QPixmap>());
|
painter->drawPixmap(option.rect.topLeft(), index.data(Qt::DecorationRole).value<QPixmap>());
|
||||||
|
|
||||||
// Draw the first line (device name)
|
// Draw the first line (device name)
|
||||||
p->drawText(line1, Qt::AlignLeft | Qt::AlignTop, index.data().toString());
|
painter->drawText(line1, Qt::AlignLeft | Qt::AlignTop, index.data().toString());
|
||||||
|
|
||||||
// Draw the second line (status)
|
// Draw the second line (status)
|
||||||
DeviceManager::State state = static_cast<DeviceManager::State>(index.data(DeviceManager::Role_State).toInt());
|
DeviceManager::State state = static_cast<DeviceManager::State>(index.data(DeviceManager::Role_State).toInt());
|
||||||
@@ -154,14 +154,15 @@ void DeviceItemDelegate::paint(QPainter *p, const QStyleOptionViewItem &opt, con
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.state & QStyle::State_Selected)
|
if (option.state & QStyle::State_Selected)
|
||||||
p->setPen(opt.palette.color(QPalette::HighlightedText));
|
painter->setPen(option.palette.color(QPalette::HighlightedText));
|
||||||
else
|
else
|
||||||
p->setPen(opt.palette.color(QPalette::Dark));
|
painter->setPen(option.palette.color(QPalette::Dark));
|
||||||
p->setFont(status_font);
|
|
||||||
p->drawText(line2, Qt::AlignLeft | Qt::AlignTop, status_text);
|
|
||||||
|
|
||||||
p->restore();
|
painter->setFont(status_font);
|
||||||
|
painter->drawText(line2, Qt::AlignLeft | Qt::AlignTop, status_text);
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>300</width>
|
<width>400</width>
|
||||||
<height>300</height>
|
<height>600</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
|||||||
Reference in New Issue
Block a user