layouts editor:fix shared layout icon badges

--when the shared layout has user assigned icon
then that icon is always preferred
--choose which icons are drawn for shared layout
based completely on what icons are already chosen
for the assigned shares (central layouts)
pull/19/head
Michail Vourlakos 5 years ago
parent 28bcc973c0
commit 676e648ca3

@ -121,7 +121,7 @@ void BackgroundCmbBox::paint(QPainter *painter, const QStyleOptionViewItem &opti
QList<Data::LayoutIcon> icons = index.data(Qt::UserRole).value<QList<Data::LayoutIcon>>();
if (icons.count() > 0) {
int localMargin = icons[0].isBackgroundFile && icons.count() == 1 ? qMin(option.rect.height()/4,MARGIN+5) : MARGIN-1;
int localMargin = MARGIN-1;// icons[0].isBackgroundFile && icons.count() == 1 ? qMin(option.rect.height()/4,MARGIN+5) : MARGIN-1;
int aY = option.rect.y() + localMargin;
int thick = option.rect.height() - localMargin*2;
@ -153,8 +153,11 @@ void BackgroundCmbBox::drawIcon(QPainter *painter, const QStyleOptionViewItem &o
painter->setRenderHint(QPainter::Antialiasing, true);
if (icon.isBackgroundFile) {
int backImageMargin = qMin(option.rect.height()/4, MARGIN+2);
QRect backTarget(target.x() + backImageMargin, target.y() + backImageMargin, target.width() - 2*backImageMargin, target.height() - 2*backImageMargin);
QPixmap backImage(icon.name);
backImage = backImage.copy(QRect(MARGIN, MARGIN, target.width(),target.height()));
backImage = backImage.copy(backTarget);
QPalette::ColorRole textColorRole = selected ? QPalette::HighlightedText : QPalette::Text;
@ -165,7 +168,7 @@ void BackgroundCmbBox::drawIcon(QPainter *painter, const QStyleOptionViewItem &o
painter->setBrush(imageBrush);
painter->setPen(pen);
painter->drawEllipse(target);
painter->drawEllipse(backTarget);
} else {
QIcon::Mode mode = ((active && (selected || focused)) ? QIcon::Selected : QIcon::Normal);

@ -373,12 +373,11 @@ void Layouts::setIconsPath(QString iconsPath)
m_iconsPath = iconsPath;
}
QList<Data::LayoutIcon> Layouts::icons(const int &row) const
QList<Data::LayoutIcon> Layouts::iconsForCentralLayout(const int &row) const
{
QList<Data::LayoutIcon> icons;
QStringList activitiesIds = m_layoutsTable[row].isShared() ?
assignedActivitiesFromShared(row) : m_layoutsTable[row].activities;
QStringList activitiesIds = m_layoutsTable[row].activities;
int freeActivitiesPos = -1;
@ -403,7 +402,9 @@ QList<Data::LayoutIcon> Layouts::icons(const int &row) const
if (freeActivitiesPos >= 0) {
Data::LayoutIcon freeActsData = icons.takeAt(freeActivitiesPos);
icons.prepend(freeActsData);
icons.clear();
icons << freeActsData;
return icons;
}
if (!m_layoutsTable[row].icon.isEmpty() && freeActivitiesPos<0) {
@ -440,6 +441,58 @@ QList<Data::LayoutIcon> Layouts::icons(const int &row) const
return icons;
}
QList<Data::LayoutIcon> Layouts::iconsForSharedLayout(const int &row) const
{
//! SHARED layout case
QList<Data::LayoutIcon> icons;
if (!m_layoutsTable[row].icon.isEmpty()) {
//! if there is specific icon set from the user for this layout
//! we draw only that icon
Data::LayoutIcon icon;
icon.name = m_layoutsTable[row].icon;
icon.isFreeActivities = false;
icon.isBackgroundFile = false;
icons << icon;
return icons;
}
for (int i=0; i<m_layoutsTable[row].shares.count(); ++i) {
QString shareId = m_layoutsTable[row].shares[i];
int shareRow = rowForId(shareId);
if (shareRow>=0) {
icons << iconsForCentralLayout(shareRow);
}
}
int freeActivitiesPos = -1;
for (int i=0; i<icons.count(); ++i) {
if (icons[i].isFreeActivities) {
freeActivitiesPos = i;
break;
}
}
if (freeActivitiesPos >= 0) {
//! Put FreeActivities icon on top of the rest icons
Data::LayoutIcon freeActsData = icons.takeAt(freeActivitiesPos);
icons << freeActsData;
}
return icons;
}
QList<Data::LayoutIcon> Layouts::icons(const int &row) const
{
if (!m_layoutsTable[row].isShared()) {
return iconsForCentralLayout(row);
} else {
return iconsForSharedLayout(row);
}
}
QString Layouts::sortableText(const int &priority, const int &row) const
{
QString numberPart;

@ -169,6 +169,8 @@ private:
QStringList assignedActivitiesFromShared(const int &row) const;
QList<Data::LayoutIcon> icons(const int &row) const;
QList<Data::LayoutIcon> iconsForCentralLayout(const int &row) const;
QList<Data::LayoutIcon> iconsForSharedLayout(const int &row) const;
private:
//! break MVC only when a SharedTo editor is created

Loading…
Cancel
Save