settings use layout isConsideredActive flag

--this way we track better which layouts are going
to be used in each user selected layouts mode meaning
single or multiple layouts mode.
work/spdx
Michail Vourlakos 4 years ago
parent 6fb2762365
commit f11d6ec5f2

@ -119,6 +119,7 @@ void LayoutName::paint(QPainter *painter, const QStyleOptionViewItem &option, co
bool isLocked = index.data(Model::Layouts::ISLOCKEDROLE).toBool();
bool isActive = index.data(Model::Layouts::ISACTIVEROLE).toBool();
bool isConsideredActive = index.data(Model::Layouts::ISCONSIDEREDACTIVEROLE).toBool();
bool isNewLayout = index.data(Model::Layouts::ISNEWLAYOUTROLE).toBool();
bool hasChanges = index.data(Model::Layouts::LAYOUTHASCHANGESROLE).toBool();
@ -126,7 +127,7 @@ void LayoutName::paint(QPainter *painter, const QStyleOptionViewItem &option, co
QString name = index.data(Qt::UserRole).toString();
bool isChanged = (isNewLayout || hasChanges);
bool drawTwoIcons = isLocked && isActive;
bool drawTwoIcons = isLocked && isConsideredActive;
QStyleOptionViewItem adjustedOption = option;
@ -142,7 +143,7 @@ void LayoutName::paint(QPainter *painter, const QStyleOptionViewItem &option, co
adjustedOption.rect = optionRect;
if (isLocked || isActive) {
if (isLocked || isConsideredActive) {
QStandardItemModel *model = (QStandardItemModel *) index.model();
bool active = Latte::isActive(option);

@ -58,8 +58,15 @@ Layouts::Layouts(QObject *parent, Latte::Corona *corona)
emit dataChanged(index(0, NAMECOLUMN), index(rowCount()-1, ACTIVITYCOLUMN), roles);
});
connect(this, &Layouts::activitiesStatesChanged, this, &Layouts::onActivitiesStatesChanged);
connect(m_corona->universalSettings(), &Latte::UniversalSettings::singleModeLayoutNameChanged, this, &Layouts::updateActiveStates); //! sort properly when switching single layouts
connect(m_corona->layoutsManager()->synchronizer(), &Latte::Layouts::Synchronizer::centralLayoutsChanged, this, &Layouts::updateActiveStates);
connect(m_corona->universalSettings(), &Latte::UniversalSettings::singleModeLayoutNameChanged, this, &Layouts::updateActiveStates);
connect(this, &Layouts::activitiesStatesChanged, this, &Layouts::updateConsideredActiveStates);
connect(this, &Layouts::inMultipleModeChanged, this, &Layouts::updateConsideredActiveStates);
connect(m_corona->layoutsManager()->synchronizer(), &Latte::Layouts::Synchronizer::centralLayoutsChanged, this, &Layouts::updateConsideredActiveStates);
connect(m_corona->universalSettings(), &Latte::UniversalSettings::singleModeLayoutNameChanged, this, &Layouts::updateConsideredActiveStates);
}
Layouts::~Layouts()
@ -217,7 +224,6 @@ void Layouts::resetData()
clear();
setOriginalInMultipleMode(o_inMultipleMode);
setOriginalData(o_layoutsTable);
updateActiveStates();
}
void Layouts::removeLayout(const QString &id)
@ -518,6 +524,8 @@ QVariant Layouts::data(const QModelIndex &index, int role) const
return m_layoutsTable[row].id;
} else if (role == ISACTIVEROLE) {
return m_layoutsTable[row].isActive;
} else if (role == ISCONSIDEREDACTIVEROLE) {
return m_layoutsTable[row].isConsideredActive;
} else if (role == ISLOCKEDROLE) {
return m_layoutsTable[row].isLocked;
} else if (role == INMULTIPLELAYOUTSROLE) {
@ -574,8 +582,7 @@ QVariant Layouts::data(const QModelIndex &index, int role) const
break;
case NAMECOLUMN:
if (role == SORTINGROLE) {
if ((m_inMultipleMode && m_layoutsTable[row].isActive)
|| (!m_inMultipleMode && m_corona->universalSettings()->singleModeLayoutName() == m_layoutsTable[row].name)) {
if (m_layoutsTable[row].isConsideredActive) {
return sortingPriority(HIGHESTPRIORITY, row);
}
@ -812,13 +819,87 @@ void Layouts::updateActiveStates()
iActive = true;
}
if (m_layoutsTable[i].isActive != iActive || (!m_inMultipleMode && m_corona->universalSettings()->singleModeLayoutName() == m_layoutsTable[i].name)) {
if (m_layoutsTable[i].isActive != iActive) {
m_layoutsTable[i].isActive = iActive;
emit dataChanged(index(i, BACKGROUNDCOLUMN), index(i,ACTIVITYCOLUMN), roles);
}
}
}
void Layouts::updateConsideredActiveStates()
{
QVector<int> roles;
roles << Qt::DisplayRole;
roles << Qt::UserRole;
roles << ISCONSIDEREDACTIVEROLE;
roles << SORTINGROLE;
if ((m_inMultipleMode && (m_corona->layoutsManager()->memoryUsage() == MemoryUsage::MultipleLayouts))
|| (!m_inMultipleMode && (m_corona->layoutsManager()->memoryUsage() == MemoryUsage::SingleLayout))) {
//! current running layouts mode is the same shown in settings
for(int i=0; i<rowCount(); ++i) {
bool iConsideredActive{false};
if (m_corona->layoutsManager()->synchronizer()->layout(m_layoutsTable[i].name)) {
iConsideredActive = true;
}
if (m_layoutsTable[i].isConsideredActive != iConsideredActive) {
m_layoutsTable[i].isConsideredActive = iConsideredActive;
emit dataChanged(index(i, BACKGROUNDCOLUMN), index(i,ACTIVITYCOLUMN), roles);
}
}
return;
}
if (!m_inMultipleMode) {
//! single mode but not the running one
for(int i=0; i<rowCount(); ++i) {
bool iConsideredActive{false};
if (m_corona->universalSettings()->singleModeLayoutName() == m_layoutsTable[i].name) {
iConsideredActive = true;
}
if (m_layoutsTable[i].isConsideredActive != iConsideredActive) {
m_layoutsTable[i].isConsideredActive = iConsideredActive;
emit dataChanged(index(i, BACKGROUNDCOLUMN), index(i,ACTIVITYCOLUMN), roles);
}
}
return;
}
if (m_inMultipleMode) {
//! multiple mode but not the running one
QStringList runningActivities = m_corona->layoutsManager()->synchronizer()->runningActivities();
QStringList freeRunningActivities = m_corona->layoutsManager()->synchronizer()->freeRunningActivities();
for(int i=0; i<rowCount(); ++i) {
bool iConsideredActive{false};
if (m_layoutsTable[i].activities.contains(Latte::Data::Layout::ALLACTIVITIESID)) {
iConsideredActive = true;
} else if (freeRunningActivities.count()>0 && m_layoutsTable[i].activities.contains(Latte::Data::Layout::FREEACTIVITIESID)) {
iConsideredActive = true;
} else if (m_layoutsTable[i].activities.count()>0 && containsSpecificRunningActivity(runningActivities, m_layoutsTable[i])) {
iConsideredActive = true;
} else {
iConsideredActive = false;
}
if (m_layoutsTable[i].isConsideredActive != iConsideredActive) {
m_layoutsTable[i].isConsideredActive = iConsideredActive;
emit dataChanged(index(i, BACKGROUNDCOLUMN), index(i,ACTIVITYCOLUMN), roles);
}
}
}
}
int Layouts::rowForId(const QString &id) const
{
return m_layoutsTable.indexOf(id);
@ -875,6 +956,9 @@ void Layouts::setOriginalData(Latte::Data::LayoutsTable &data)
endInsertRows();
emit rowsInserted();
updateActiveStates();
updateConsideredActiveStates();
}
QList<Latte::Data::Layout> Layouts::alteredLayouts() const
@ -931,10 +1015,10 @@ void Layouts::initActivities()
connect(m_corona->activitiesConsumer(), &KActivities::Consumer::activityRemoved, this, &Layouts::onActivityRemoved);
connect(m_corona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, &Layouts::onRunningActivitiesChanged);
activitiesStatesChanged();
emit activitiesStatesChanged();
}
void Layouts::activitiesStatesChanged()
void Layouts::onActivitiesStatesChanged()
{
QVector<int> roles;
roles << Qt::DisplayRole;
@ -987,7 +1071,7 @@ void Layouts::onActivityRemoved(const QString &id)
info->deleteLater();
}
activitiesStatesChanged();
emit activitiesStatesChanged();
}
void Layouts::onActivityChanged(const QString &id)
@ -998,7 +1082,7 @@ void Layouts::onActivityChanged(const QString &id)
m_activitiesTable[id].state = m_activitiesInfo[id]->state();
m_activitiesTable[id].isCurrent = m_activitiesInfo[id]->isCurrent();
activitiesStatesChanged();
emit activitiesStatesChanged();
}
}
@ -1015,6 +1099,19 @@ void Layouts::onRunningActivitiesChanged(const QStringList &runningIds)
emit activitiesStatesChanged();
}
bool Layouts::containsSpecificRunningActivity(const QStringList &runningIds, const Latte::Data::Layout &layout) const
{
if (runningIds.count()>0 && layout.activities.count()>0) {
for (int i=0; i<layout.activities.count(); ++i) {
if (runningIds.contains(layout.activities[i])) {
return true;
}
}
}
return false;
}
}
}
}

@ -58,6 +58,7 @@ public:
{
IDROLE = Qt::UserRole + 1,
ISACTIVEROLE,
ISCONSIDEREDACTIVEROLE,
ISLOCKEDROLE,
INMULTIPLELAYOUTSROLE,
BACKGROUNDUSERROLE,
@ -146,14 +147,16 @@ public:
void setOriginalViewsForLayout(const Latte::Data::Layout &layout);
signals:
void activitiesStatesChanged();
void inMultipleModeChanged();
void nameDuplicated(const QString &provenId, const QString &trialId);
void rowsInserted();
private slots:
void updateActiveStates();
void updateConsideredActiveStates();
void activitiesStatesChanged();
void onActivitiesStatesChanged();
void onActivityAdded(const QString &id);
void onActivityRemoved(const QString &id);
void onActivityChanged(const QString &id);
@ -165,6 +168,8 @@ private:
void setActivities(const int &row, const QStringList &activities);
void setId(const int &row, const QString &newId);
bool containsSpecificRunningActivity(const QStringList &runningIds, const Latte::Data::Layout &layout) const;
QString sortingPriority(const SortingPriority &priority, const int &row) const;
QString sortableText(const int &priority, const int &row) const;

Loading…
Cancel
Save