update layouts checkdelegates for new model

pull/11/head
Michail Vourlakos 5 years ago
parent 401a56a8a4
commit b55447764a

@ -145,6 +145,17 @@ int LayoutsTable::rowCount() const
return m_layouts.count();
}
QString LayoutsTable::idForName(const QString &name) const
{
for(int i=0; i<m_layouts.count(); ++i) {
if (m_layouts[i].name == name) {
return m_layouts[i].id;
}
}
return QString();
}
void LayoutsTable::clear()
{
m_layouts.clear();

@ -52,6 +52,8 @@ public:
int indexOf(const QString &id) const;
int rowCount() const;
QString idForName(const QString &name) const;
void clear();
void remove(const int &row);
void removeLayout(const QString &id);

@ -21,6 +21,7 @@
// local
#include "../settingsdialog.h"
#include "../models/layoutsmodel.h"
#include "../tools/settingstools.h"
// Qt
@ -32,7 +33,9 @@
#include <QPainter>
#include <QStandardItemModel>
const int HIDDENTEXTCOLUMN = 1;
namespace Latte {
namespace Settings {
namespace View {
CheckBoxDelegate::CheckBoxDelegate(QObject *parent)
: QStyledItemDelegate(parent)
@ -49,10 +52,11 @@ void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
QStyleOptionViewItem adjustedOption = option;
//! Remove the focus dotted lines
adjustedOption.state = (adjustedOption.state & ~QStyle::State_HasFocus);
adjustedOption.displayAlignment = Qt::AlignHCenter;
if (adjustedOption.state & QStyle::State_Enabled) {
QStandardItemModel *model = (QStandardItemModel *) index.model();
QStyledItemDelegate::paint(painter, adjustedOption, model->index(index.row(), HIDDENTEXTCOLUMN));
QStyledItemDelegate::paint(painter, adjustedOption, model->index(index.row(), Model::Layouts::HIDDENTEXTCOLUMN));
QStyledItemDelegate::paint(painter, adjustedOption, index);
} else {
@ -137,3 +141,7 @@ bool CheckBoxDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, con
const QChar CheckMark{0x2714};
return model->setData(index, value == CheckMark ? QString("") : CheckMark, Qt::DisplayRole);
}
}
}
}

@ -27,16 +27,24 @@ namespace Latte {
class SettingsDialog;
}
namespace Latte {
namespace Settings {
namespace View {
class CheckBoxDelegate : public QStyledItemDelegate
{
public:
CheckBoxDelegate(QObject *parent = 0);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override;
private:
Latte::SettingsDialog *m_settingsDialog{nullptr};
};
}
}
}
#endif

@ -18,7 +18,7 @@
*/
#include "layoutnamedelegate.h"
#include "../models/layoutsmodel.h"
// local
#include "../settingsdialog.h"
#include "../tools/settingstools.h"
@ -33,7 +33,9 @@
#include <QPainter>
#include <QStandardItemModel>
const int HIDDENTEXTCOLUMN = 1;
namespace Latte {
namespace Settings {
namespace View {
LayoutNameDelegate::LayoutNameDelegate(QObject *parent)
: QStyledItemDelegate(parent)
@ -47,14 +49,16 @@ LayoutNameDelegate::LayoutNameDelegate(QObject *parent)
void LayoutNameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
bool isLocked = index.data(Qt::UserRole).toBool();
bool isShared = m_settingsDialog->isShared(index.row()) && m_settingsDialog->inMultipleLayoutsLook();
bool isLocked = index.data(Model::Layouts::LAYOUTISLOCKEDROLE).toBool();
bool isShared = index.data(Model::Layouts::LAYOUTISSHAREDROLE).toBool() && index.data(Model::Layouts::INMULTIPLELAYOUTSMODE).toBool();
bool isActive = index.data(Model::Layouts::LAYOUTISACTIVEROLE).toBool();
bool showTwoIcons = isLocked && isShared;
QStyleOptionViewItem adjustedOption = option;
//! Remove the focus dotted lines
adjustedOption.state = (adjustedOption.state & ~QStyle::State_HasFocus);
adjustedOption.displayAlignment = Qt::AlignHCenter;
if (isLocked || isShared) {
QStandardItemModel *model = (QStandardItemModel *) index.model();
@ -76,6 +80,9 @@ void LayoutNameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
QStyleOptionViewItem myOptionS = adjustedOption;
QStyleOptionViewItem myOptionE = adjustedOption;
QStyleOptionViewItem myOptionMain = adjustedOption;
myOptionMain.font.setBold(isActive);
myOptionS.rect = destinationS;
myOptionE.rect = destinationE;
myOptionMain.rect.setX(option.rect.x() + startWidth);
@ -84,9 +91,9 @@ void LayoutNameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
QStyledItemDelegate::paint(painter, myOptionMain, index);
//! draw background at edges
QStyledItemDelegate::paint(painter, myOptionS, model->index(index.row(), HIDDENTEXTCOLUMN));
QStyledItemDelegate::paint(painter, myOptionS, model->index(index.row(), Model::Layouts::HIDDENTEXTCOLUMN));
QStyledItemDelegate::paint(painter, myOptionE, model->index(index.row(), HIDDENTEXTCOLUMN));
QStyledItemDelegate::paint(painter, myOptionE, model->index(index.row(), Model::Layouts::HIDDENTEXTCOLUMN));
//! Lock Icon
QIcon firstIcon = isLocked && !showTwoIcons ? QIcon::fromTheme("object-locked") : QIcon::fromTheme("document-share");
@ -111,6 +118,10 @@ void LayoutNameDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
return;
}
adjustedOption.font.setBold(isActive);
QStyledItemDelegate::paint(painter, adjustedOption, index);
}
}
}
}

@ -27,15 +27,22 @@ namespace Latte {
class SettingsDialog;
}
namespace Latte {
namespace Settings {
namespace View {
class LayoutNameDelegate : public QStyledItemDelegate
{
public:
LayoutNameDelegate(QObject *parent = 0);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
private:
Latte::SettingsDialog *m_settingsDialog{nullptr};
};
}
}
}
#endif

@ -39,6 +39,25 @@ Layouts::Layouts(QObject *parent)
{
}
bool Layouts::inMultipleMode() const
{
return m_inMultipleMode;
}
void Layouts::setInMultipleMode(bool inMultiple)
{
if (m_inMultipleMode == inMultiple) {
return;
}
m_inMultipleMode = inMultiple;
}
QString Layouts::idForName(const QString &name)
{
return m_layoutsTable.idForName(name);
}
int Layouts::rowCount() const
{
return m_layoutsTable.rowCount();
@ -134,6 +153,16 @@ QVariant Layouts::data(const QModelIndex &index, int role) const
return QVariant{};
}
if (role == LAYOUTISACTIVEROLE) {
return m_layoutsTable[row].isActive;
} else if (role == LAYOUTISLOCKEDROLE) {
return m_layoutsTable[row].isLocked;
} else if (role == LAYOUTISSHAREDROLE) {
return m_layoutsTable[row].isShared();
} else if (role == INMULTIPLELAYOUTSMODE) {
return inMultipleMode();
}
switch (column) {
case IDCOLUMN:
if (role == Qt::DisplayRole) {
@ -143,7 +172,7 @@ QVariant Layouts::data(const QModelIndex &index, int role) const
case HIDDENTEXTCOLUMN:
return QVariant{};
case COLORCOLUMN:
return m_layoutsTable[row].background;
return m_layoutsTable[row].background.isEmpty() ? m_layoutsTable[row].color : m_layoutsTable[row].background;
break;
case NAMECOLUMN:
if (role == Qt::DisplayRole) {
@ -186,6 +215,14 @@ const Data::LayoutsTable &Layouts::currentData()
return m_layoutsTable;
}
void Layouts::setCurrentData(Data::LayoutsTable &data)
{
clear();
beginInsertRows(QModelIndex(), 0, data.rowCount() - 1);
m_layoutsTable = data;
endInsertRows();
}
}
}

@ -49,8 +49,26 @@ public:
SHAREDCOLUMN
};
enum LayoutUserRoles
{
LAYOUTISACTIVEROLE = Qt::UserRole + 1,
LAYOUTISLOCKEDROLE,
LAYOUTISSHAREDROLE,
LAYOUTNAMECHANGED,
INMULTIPLELAYOUTSMODE,
ACTIVITIESROLE,
RUNNINGACTIVITIESROLE,
SHARESROLE,
ACTIVESHARESROLE
};
explicit Layouts(QObject *parent = nullptr);
bool inMultipleMode() const;
void setInMultipleMode(bool inMultiple);
QString idForName(const QString &name);
int rowCount() const;
int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex &parent) const override;
@ -65,8 +83,10 @@ public:
void remove(const int &row);
const Data::LayoutsTable &currentData();
void setCurrentData(Data::LayoutsTable &data);
private:
bool m_inMultipleMode{false};
Data::LayoutsTable m_layoutsTable;
};

@ -128,10 +128,10 @@ SettingsDialog::SettingsDialog(QWidget *parent, Latte::Corona *corona)
colors.append(color);
}
ui->layoutsView->setItemDelegateForColumn(NAMECOLUMN, new LayoutNameDelegate(this));
ui->layoutsView->setItemDelegateForColumn(NAMECOLUMN, new Settings::View::LayoutNameDelegate(this));
ui->layoutsView->setItemDelegateForColumn(COLORCOLUMN, new ColorCmbBoxDelegate(this, iconsPath, colors));
ui->layoutsView->setItemDelegateForColumn(MENUCOLUMN, new CheckBoxDelegate(this));
ui->layoutsView->setItemDelegateForColumn(BORDERSCOLUMN, new CheckBoxDelegate(this));
ui->layoutsView->setItemDelegateForColumn(MENUCOLUMN, new Settings::View::CheckBoxDelegate(this));
ui->layoutsView->setItemDelegateForColumn(BORDERSCOLUMN, new Settings::View::CheckBoxDelegate(this));
ui->layoutsView->setItemDelegateForColumn(ACTIVITYCOLUMN, new ActivitiesDelegate(this));
ui->layoutsView->setItemDelegateForColumn(SHAREDCOLUMN, new SharedDelegate(this));
@ -979,6 +979,8 @@ void SettingsDialog::loadSettings()
m_corona->layoutsManager()->synchronizer()->syncActiveLayoutsToOriginalFiles();
}
Settings::Data::LayoutsTable layoutsBuffer;
for (const auto layout : m_corona->layoutsManager()->layouts()) {
Settings::Data::Layout original;
original.id = QDir::homePath() + "/.config/latte/" + layout + ".layout.latte";
@ -989,6 +991,7 @@ void SettingsDialog::loadSettings()
original.background = central->background();
original.color = central->color();
original.textColor = central->textColor();
original.isActive = (m_corona->layoutsManager()->synchronizer()->layout(original.name) != nullptr);
original.isLocked = !central->isWritable();
original.isShownInMenu = central->showInMenu();
original.hasDisabledBorders = central->disableBordersForMaximizedWindows();
@ -1008,16 +1011,12 @@ void SettingsDialog::loadSettings()
m_sharesMap[shared].append(original.id);
}
m_model->appendLayout(original);
layoutsBuffer << original;
qDebug() << "counter:" << i << " total:" << m_model->rowCount();
i++;
/*if (central->name() == m_corona->layoutsManager()->currentLayoutName()) {
ui->layoutsView->selectRow(i - 1);
}*/
Layout::GenericLayout *generic = m_corona->layoutsManager()->synchronizer()->layout(central->name());
if ((generic && generic->layoutIsBroken()) || (!generic && central->layoutIsBroken())) {
@ -1026,34 +1025,36 @@ void SettingsDialog::loadSettings()
}
//! update SHARES map keys in order to use the #settingsid(s)
QStringList forremoval;
QStringList tempSharedNames;
//! remove these records after updating
for (QHash<const QString, QStringList>::iterator i=m_sharesMap.begin(); i!=m_sharesMap.end(); ++i) {
forremoval << i.key();
tempSharedNames << i.key();
}
//! update keys
for (QHash<const QString, QStringList>::iterator i=m_sharesMap.begin(); i!=m_sharesMap.end(); ++i) {
QString shareid = idForRow(rowForName(i.key()));
m_sharesMap[shareid] = i.value();
QString shareid = layoutsBuffer.idForName(i.key());
if (!shareid.isEmpty()) {
m_sharesMap[shareid] = i.value();
}
}
//! remove deprecated keys
for (const auto &key : forremoval) {
for (const auto &key : tempSharedNames) {
m_sharesMap.remove(key);
}
qDebug() << "SHARES MAP ::: " << m_sharesMap;
for (QHash<const QString, QStringList>::iterator i=m_sharesMap.begin(); i!=m_sharesMap.end(); ++i) {
int sharedPos = rowForId(i.key());
if (sharedPos >= 0) {
m_model->setData(m_model->index(sharedPos, SHAREDCOLUMN), i.value(), Qt::UserRole);
}
layoutsBuffer[i.key()].shares = i.value();
}
//! Send original loaded data to model
m_model->setCurrentData(layoutsBuffer);
ui->layoutsView->selectRow(rowForName(m_corona->layoutsManager()->currentLayoutName()));
//! this line should be commented for debugging layouts window functionality
ui->layoutsView->setColumnHidden(IDCOLUMN, true);
@ -1075,12 +1076,16 @@ void SettingsDialog::loadSettings()
}
}
if (m_corona->layoutsManager()->memoryUsage() == Types::SingleLayout) {
ui->singleToolBtn->setChecked(true);
} else if (m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts) {
bool inMultiple{m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts};
if (inMultiple) {
ui->multipleToolBtn->setChecked(true);
} else {
ui->singleToolBtn->setChecked(true);
}
m_model->setInMultipleMode(inMultiple);
updatePerLayoutButtonsState();
updateSharedLayoutsStates();

Loading…
Cancel
Save