update settings activities delegate

--drop totally deprecated activities delegate
code
pull/11/head
Michail Vourlakos 5 years ago
parent d4ed1aa609
commit 44c1abcf73

@ -21,7 +21,7 @@
// local
#include "persistentmenu.h"
#include "../settingsdialog.h"
#include "../models/layoutsmodel.h"
#include "../tools/settingstools.h"
// Qt
@ -37,6 +37,7 @@
// KDE
#include <KActivities/Info>
#include <KLocalizedString>
namespace Latte {
namespace Settings {
@ -46,43 +47,42 @@ namespace Delegates {
Activities::Activities(QObject *parent)
: QItemDelegate(parent)
{
auto *settingsDialog = qobject_cast<Latte::SettingsDialog *>(parent);
}
if (settingsDialog) {
m_settingsDialog = settingsDialog;
}
QString Activities::freeActivities_text() const
{
return QString("[ " + i18n("All Free Activities...") + " ]");
}
QString Activities::freeActivities_icon() const
{
return "favorites";
}
QWidget *Activities::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
int row = index.row();
QPushButton *button = new QPushButton(parent);
PersistentMenu *menu = new PersistentMenu(button);
button->setMenu(menu);
menu->setMinimumWidth(option.rect.width());
QStringList assignedActivities = index.model()->data(index, Qt::UserRole).toStringList();
QStringList shownActivities = m_settingsDialog->activitiesList();
m_settingsDialog->loadActivitiesInBuffer(row);
bool isLayoutActive = index.data(Model::Layouts::LAYOUTISACTIVEROLE).toBool();
QStringList allActivities = index.data(Model::Layouts::ALLACTIVITIESROLE).toStringList();
QStringList assignedActivities = index.data(Qt::UserRole).toStringList();
QString freeActivitiesId = m_settingsDialog->freeActivities_id();
for (unsigned int i = 0; i < allActivities.count(); ++i) {
for (unsigned int i = 0; i < shownActivities.count(); ++i) {
if (allActivities[i] == Model::Layouts::FREEACTIVITIESID) {
bool isFreeActivitiesChecked = assignedActivities.contains(Model::Layouts::FREEACTIVITIESID);
if (shownActivities[i] == freeActivitiesId) {
bool isFreeActivitiesChecked = assignedActivities.contains(freeActivitiesId);
QAction *action = new QAction(m_settingsDialog->freeActivities_text());
action->setData(freeActivitiesId);
action->setIcon(QIcon::fromTheme(m_settingsDialog->freeActivities_icon()));
QAction *action = new QAction(freeActivities_text());
action->setData(Model::Layouts::FREEACTIVITIESID);
action->setIcon(QIcon::fromTheme(freeActivities_icon()));
action->setCheckable(true);
action->setChecked(isFreeActivitiesChecked);
bool isActive = m_settingsDialog->isActive(row);
if (isActive) {
if (isLayoutActive) {
QFont font = action->font();
font.setBold(true);
action->setFont(font);
@ -95,27 +95,24 @@ QWidget *Activities::createEditor(QWidget *parent, const QStyleOptionViewItem &o
connect(action, &QAction::toggled, this, [this, menu, button, action, i]() {
if (action->isChecked()) {
m_settingsDialog->addActivityInBuffer(action->data().toString());
menu->setMasterIndex(i);
} else {
if (menu->masterIndex() == i) {
action->setChecked(true);
}
//do nothing....
//m_settingsDialog->removeActivityFromBuffer(action->data().toString());
}
updateButton(button);
});
} else {
KActivities::Info info(shownActivities[i]);
KActivities::Info info(allActivities[i]);
if (info.state() != KActivities::Info::Invalid) {
QAction *action = new QAction(info.name());
action->setData(shownActivities[i]);
action->setData(allActivities[i]);
action->setIcon(QIcon::fromTheme(info.icon()));
action->setCheckable(true);
action->setChecked(assignedActivities.contains(shownActivities[i]));
action->setChecked(assignedActivities.contains(allActivities[i]));
if ((info.state() == KActivities::Info::Running) || (info.state() == KActivities::Info::Starting)) {
QFont font = action->font();
@ -128,9 +125,6 @@ QWidget *Activities::createEditor(QWidget *parent, const QStyleOptionViewItem &o
connect(action, &QAction::toggled, this, [this, menu, button, action, i]() {
if (action->isChecked()) {
menu->setMasterIndex(-1);
m_settingsDialog->addActivityInBuffer(action->data().toString());
} else {
m_settingsDialog->removeActivityFromBuffer(action->data().toString());
}
updateButton(button);
@ -139,7 +133,7 @@ QWidget *Activities::createEditor(QWidget *parent, const QStyleOptionViewItem &o
}
}
connect(menu, &PersistentMenu::masterIndexChanged, this, [this, menu, button, freeActivitiesId]() {
connect(menu, &PersistentMenu::masterIndexChanged, this, [this, menu, button]() {
int masterRow = menu->masterIndex();
if (masterRow>=0) {
auto actions = button->menu()->actions();
@ -152,7 +146,7 @@ QWidget *Activities::createEditor(QWidget *parent, const QStyleOptionViewItem &o
} else {
foreach (QAction *action, button->menu()->actions()) {
QString actId = action->data().toString();
if (actId == freeActivitiesId) {
if (actId == Model::Layouts::FREEACTIVITIESID) {
action->setChecked(false);
}
}
@ -161,10 +155,6 @@ QWidget *Activities::createEditor(QWidget *parent, const QStyleOptionViewItem &o
updateButton(button);
});
connect(menu, &QMenu::aboutToHide, this, [this, row]() {
m_settingsDialog->syncActivitiesFromBuffer(row);
});
return button;
}
@ -213,6 +203,7 @@ void Activities::paint(QPainter *painter, const QStyleOptionViewItem &option, co
//! Remove the focus dotted lines
myOptions.state = (myOptions.state & ~QStyle::State_HasFocus);
bool isLayoutActive = index.data(Model::Layouts::LAYOUTISACTIVEROLE).toBool();
bool isSharedCapable = index.data(Model::Layouts::LAYOUTISSHAREDROLE).toBool() && index.data(Model::Layouts::INMULTIPLELAYOUTSROLE).toBool();
if (!isSharedCapable) {
@ -221,7 +212,7 @@ void Activities::paint(QPainter *painter, const QStyleOptionViewItem &option, co
QStringList assignedActivities = index.model()->data(index, Qt::UserRole).toStringList();
if (assignedActivities.count() > 0) {
myOptions.text = joinedActivities(assignedActivities, index.row());
myOptions.text = joinedActivities(assignedActivities, isLayoutActive);
QTextDocument doc;
QString css;
@ -308,24 +299,21 @@ void Activities::paint(QPainter *painter, const QStyleOptionViewItem &option, co
}
}
QString Activities::joinedActivities(const QStringList &activities, int index) const
QString Activities::joinedActivities(const QStringList &activities, bool isActive, bool formatText) const
{
QString finalText;
int i = 0;
QString freeActivitiesId = m_settingsDialog->freeActivities_id();
for (const auto &activityId : activities) {
QString name;
bool bold{false};
bool italic{false};
if (activityId == freeActivitiesId) {
name = m_settingsDialog->freeActivities_text();
if (activityId == Model::Layouts::FREEACTIVITIESID) {
name = freeActivities_text();
if (index >= 0) {
bool isActive = m_settingsDialog->isActive(index);
if (formatText) {
bold = isActive;
italic = !isActive;
}
@ -338,7 +326,7 @@ QString Activities::joinedActivities(const QStringList &activities, int index) c
}
i++;
if ((info.state() == KActivities::Info::Running) || (info.state() == KActivities::Info::Starting)) {
if (formatText && ((info.state() == KActivities::Info::Running) || (info.state() == KActivities::Info::Starting))) {
bold = true;
}
@ -348,11 +336,11 @@ QString Activities::joinedActivities(const QStringList &activities, int index) c
QString styledText = name;
if (bold) {
if (bold && formatText) {
styledText = "<b>" + styledText + "</b>";
}
if (italic) {
if (italic && formatText) {
styledText = "<i>" + styledText + "</i>";
}
@ -376,7 +364,7 @@ void Activities::updateButton(QWidget *editor) const
}
}
button->setText(joinedActivities(assignedActivities, -1));
button->setText(joinedActivities(assignedActivities, false, false));
}
}

@ -27,10 +27,6 @@ class QModelIndex;
class QWidget;
class QVariant;
namespace Latte {
class SettingsDialog;
}
namespace Latte {
namespace Settings {
namespace Layouts {
@ -52,13 +48,10 @@ public:
private:
void updateButton(QWidget *editor) const;
QString joinedActivities(const QStringList &activities, int index = -1) const;
private:
Latte::SettingsDialog *m_settingsDialog{nullptr};
QString freeActivities_text() const;
QString freeActivities_icon() const;
int m_lastCurrentIndex{-1};
QString joinedActivities(const QStringList &activities, bool isActive = false, bool formatText = true) const;
};
}

@ -19,7 +19,11 @@
*/
#include "layoutsmodel.h"
// local
#include "../data/layoutdata.h"
#include "../../layouts/manager.h"
#include "../../layouts/synchronizer.h"
// Qt
#include <QDebug>
@ -29,15 +33,15 @@
// KDE
#include <KLocalizedString>
const QChar CheckMark{0x2714};
namespace Latte {
namespace Settings {
namespace Model {
Layouts::Layouts(QObject *parent)
: QAbstractTableModel(parent)
Layouts::Layouts(QObject *parent, Latte::Corona *corona)
: QAbstractTableModel(parent),
m_corona(corona)
{
connect(this, &Layouts::inMultipleModeChanged, this, [&]() {
@ -247,6 +251,11 @@ QVariant Layouts::data(const QModelIndex &index, int role) const
return inMultipleMode();
} else if (role == LAYOUTNAMEWASEDITEDROLE) {
return m_layoutsTable[row].nameWasEdited();
} else if (role == ALLACTIVITIESROLE) {
QStringList activities;
activities << QString(FREEACTIVITIESID);
activities << m_corona->layoutsManager()->synchronizer()->activities();
return activities;
}
switch (column) {
@ -296,6 +305,44 @@ QVariant Layouts::data(const QModelIndex &index, int role) const
return QVariant{};
}
QStringList Layouts::cleanStrings(const QStringList &original, const QStringList &occupied)
{
QStringList result;
for(int i=0; i<original.count(); ++i) {
if (!occupied.contains(original[i])) {
result << original[i];
}
}
return result;
}
void Layouts::setActivities(const int &row, const QStringList &activities)
{
if (!m_layoutsTable.rowExists(row) || m_layoutsTable[row].activities == activities) {
return;
}
QVector<int> roles;
roles << Qt::DisplayRole;
roles << Qt::UserRole;
m_layoutsTable[row].activities = activities;
emit dataChanged(index(row, ACTIVITYCOLUMN), index(row,ACTIVITYCOLUMN), roles);
for(int i=0; i<rowCount(); ++i) {
if (i != row) {
auto cleaned = cleanStrings(m_layoutsTable[i].activities, activities);
if (cleaned != m_layoutsTable[i].activities) {
m_layoutsTable[i].activities = cleaned;
emit dataChanged(index(i, ACTIVITYCOLUMN), index(i,ACTIVITYCOLUMN), roles);
}
}
}
}
bool Layouts::setData(const QModelIndex &index, const QVariant &value, int role)
{
const int row = index.row();
@ -364,8 +411,7 @@ bool Layouts::setData(const QModelIndex &index, const QVariant &value, int role)
break;
case ACTIVITYCOLUMN:
if (role == Qt::UserRole) {
m_layoutsTable[row].activities = value.toStringList();
emit dataChanged(index, index, roles);
setActivities(row, value.toStringList());
return true;
}
break;

@ -24,6 +24,7 @@
// local
#include "../data/layoutdata.h"
#include "../data/layoutstable.h"
#include "../../lattecorona.h"
// Qt
#include <QAbstractTableModel>
@ -39,6 +40,8 @@ class Layouts : public QAbstractTableModel
Q_OBJECT
public:
static constexpr const char* FREEACTIVITIESID = "{0000-0000}";
enum Columns
{
IDCOLUMN = 0,
@ -58,13 +61,13 @@ public:
LAYOUTISSHAREDROLE,
LAYOUTNAMEWASEDITEDROLE,
INMULTIPLELAYOUTSROLE,
ACTIVITIESROLE,
ALLACTIVITIESROLE,
RUNNINGACTIVITIESROLE,
SHARESROLE,
ACTIVESHARESROLE
};
explicit Layouts(QObject *parent = nullptr);
explicit Layouts(QObject *parent, Latte::Corona *corona);
bool inMultipleMode() const;
void setInMultipleMode(bool inMultiple);
@ -95,9 +98,16 @@ public:
signals:
void inMultipleModeChanged();
private:
void setActivities(const int &row, const QStringList &activities);
QStringList cleanStrings(const QStringList &original, const QStringList &occupied);
private:
bool m_inMultipleMode{false};
Data::LayoutsTable m_layoutsTable;
Latte::Corona *m_corona{nullptr};
};
}

@ -65,8 +65,6 @@
#include <KWindowSystem>
#include <KNewStuff3/KNS3/DownloadDialog>
#define FREEACTIVITIESID "{0000-0000}"
namespace Latte {
const int IDCOLUMN = 0;
@ -103,15 +101,14 @@ SettingsDialog::SettingsDialog(QWidget *parent, Latte::Corona *corona)
connect(ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked
, this, &SettingsDialog::restoreDefaults);
//m_model = new QStandardItemModel(m_corona->layoutsManager()->layouts().count(), 6, this);
m_model = new Settings::Model::Layouts(this);
m_model = new Settings::Model::Layouts(this, m_corona);
ui->layoutsView->setModel(m_model);
ui->layoutsView->horizontalHeader()->setStretchLastSection(true);
ui->layoutsView->verticalHeader()->setVisible(false);
connect(m_corona->layoutsManager(), &Layouts::Manager::currentLayoutNameChanged, this, &SettingsDialog::layoutsChanged);
connect(m_corona->layoutsManager(), &Layouts::Manager::centralLayoutsChanged, this, &SettingsDialog::layoutsChanged);
//connect(m_corona->layoutsManager(), &Layouts::Manager::currentLayoutNameChanged, this, &SettingsDialog::layoutsChanged);
//connect(m_corona->layoutsManager(), &Layouts::Manager::centralLayoutsChanged, this, &SettingsDialog::layoutsChanged);
QString iconsPath(m_corona->kPackage().path() + "../../plasmoids/org.kde.latte.containment/contents/icons/");
@ -337,30 +334,6 @@ void SettingsDialog::blockDeleteOnActivityStopped()
});
}
QString SettingsDialog::freeActivities_text() const
{
return QString("[ " + i18n("All Free Activities...") + " ]");
}
QString SettingsDialog::freeActivities_icon() const
{
return "favorites";
}
QString SettingsDialog::freeActivities_id() const
{
return FREEACTIVITIESID;
}
QStringList SettingsDialog::activitiesList()
{
QStringList result;
result << FREEACTIVITIESID;
result << m_corona->layoutsManager()->synchronizer()->activities();
return result;
}
QStringList SettingsDialog::availableSharesFor(int row)
{
QStringList availables;
@ -1141,19 +1114,6 @@ QList<int> SettingsDialog::currentSettings()
void SettingsDialog::appendLayout(Settings::Data::Layout &layout)
{
//! Add Free Activities record
if (layout.activities.isEmpty()) {
if (m_corona->layoutsManager()->memoryUsage() == Types::SingleLayout) {
if (m_corona->layoutsManager()->currentLayoutName() == layout.originalName()) {
layout.activities << FREEACTIVITIESID;
}
} else if (m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts) {
if (m_corona->layoutsManager()->synchronizer()->centralLayout(layout.originalName())) {
layout.activities << FREEACTIVITIESID;
}
}
}
m_model->appendLayout(layout);
}
@ -1162,10 +1122,6 @@ void SettingsDialog::on_switchButton_clicked()
int currentIndex = ui->layoutsView->currentIndex().row();
QStringList currentActivities = m_model->data(m_model->index(ui->layoutsView->currentIndex().row(), ACTIVITYCOLUMN), Qt::UserRole).toStringList();
if (currentActivities.isEmpty() || (currentActivities.count() == 1 && currentActivities[0] == FREEACTIVITIESID)) {
setCurrentFreeActivitiesLayout(currentIndex);
}
if (ui->buttonBox->button(QDialogButtonBox::Apply)->isEnabled()) {
//! thus there are changes in the settings
@ -1209,37 +1165,6 @@ void SettingsDialog::on_pauseButton_clicked()
}
}
void SettingsDialog::layoutsChanged()
{
for (int i = 0; i < m_model->rowCount(); ++i) {
QModelIndex nameIndex = m_model->index(i, NAMECOLUMN);
QVariant value = m_model->data(nameIndex, Qt::DisplayRole);
if (value.isValid()) {
QString name = value.toString();
// QFont font;
if (m_corona->layoutsManager()->currentLayoutName() == name) {
// font.setBold(true);
setCurrentFreeActivitiesLayout(i);
} else {
Layout::GenericLayout *layout = m_corona->layoutsManager()->synchronizer()->layout(name);
if (layout && (m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts)) {
// font.setBold(true);
if (layout->appliedActivities().isEmpty()) {
setCurrentFreeActivitiesLayout(i);
}
} else {
// font.setBold(false);
}
}
// m_model->setData(nameIndex, font, Qt::FontRole);
}
}
}
void SettingsDialog::updateApplyButtonsState()
{
@ -1540,7 +1465,7 @@ bool SettingsDialog::saveAllChanges()
//!update only activities that are valid
for (const auto &activity : lActivities) {
if (knownActivities.contains(activity) && activity != FREEACTIVITIESID) {
if (knownActivities.contains(activity) && activity != Settings::Model::Layouts::FREEACTIVITIESID) {
cleanedActivities.append(activity);
}
}
@ -1759,69 +1684,6 @@ void SettingsDialog::syncActiveShares()
m_sharesMap = currentSharesIdMap;
}
int SettingsDialog::currentFreeActiviesLayout() const
{
return m_currentFreeActivitiesLayout;
}
void SettingsDialog::setCurrentFreeActivitiesLayout(const int &row)
{
if (m_currentFreeActivitiesLayout == row) {
return;
}
m_currentFreeActivitiesLayout = row;
loadActivitiesInBuffer(row);
addActivityInBuffer(FREEACTIVITIESID);
syncActivitiesFromBuffer(row);
}
void SettingsDialog::loadActivitiesInBuffer(const int &row)
{
m_activitiesInBuffer.clear();
m_activitiesInBuffer = m_model->data(m_model->index(row, ACTIVITYCOLUMN), Qt::UserRole).toStringList();
}
void SettingsDialog::syncActivitiesFromBuffer(const int &row)
{
for (int i = 0; i < m_model->rowCount(); ++i) {
if (i == row) {
m_model->setData(m_model->index(i, ACTIVITYCOLUMN), m_activitiesInBuffer, Qt::UserRole);
continue;
}
QStringList lActivities = m_model->data(m_model->index(i, ACTIVITYCOLUMN), Qt::UserRole).toStringList();
bool updated{false} ;
for (const auto &activityId : m_activitiesInBuffer) {
if (lActivities.contains(activityId)) {
updated = true;
lActivities.removeAll(activityId);
}
}
if (updated) {
m_model->setData(m_model->index(i, ACTIVITYCOLUMN), lActivities, Qt::UserRole);
}
};
}
void SettingsDialog::addActivityInBuffer(const QString &activityId)
{
if (!m_activitiesInBuffer.contains(activityId)) {
m_activitiesInBuffer << activityId;
}
}
void SettingsDialog::removeActivityFromBuffer(const QString &activityId)
{
if (m_activitiesInBuffer.contains(activityId)) {
m_activitiesInBuffer.removeAll(activityId);
}
}
void SettingsDialog::addShareInCurrent(const QString &layoutId)
{
int currentRow = ui->layoutsView->currentIndex().row();

@ -63,11 +63,6 @@ public:
void toggleCurrentPage();
void setCurrentPage(int page);
void loadActivitiesInBuffer(const int &row);
void syncActivitiesFromBuffer(const int &row);
void addActivityInBuffer(const QString &activityId);
void removeActivityFromBuffer(const QString &activityId);
void addShareInCurrent(const QString &layoutId);
void removeShareFromCurrent(const QString &layoutId);
void updateShareAt(const int &row, const QString &fromId, const QString &toId);
@ -83,11 +78,6 @@ public:
QString nameForId(QString id) const;
QString idForRow(int row) const;
QString freeActivities_text() const;
QString freeActivities_icon() const;
QString freeActivities_id() const;
QStringList activitiesList();
QStringList availableSharesFor(int row);
void requestImagesDialog(int row);
@ -116,8 +106,6 @@ private slots:
void showScreensInformation();
void updatePerLayoutButtonsState();
void layoutsChanged();
private:
void addLayoutForFile(QString file, QString layoutName = QString(), bool newTempDirectory = true, bool showNotification = true);
//! When an activity is closed for some reason the window manager hides and reshows
@ -156,8 +144,6 @@ private:
QStringList m_tempDirectories;
QStringList m_initLayoutPaths;
QStringList m_activitiesInBuffer;
QButtonGroup *m_inMemoryButtons;
QButtonGroup *m_mouseSensitivityButtons;

Loading…
Cancel
Save