diff --git a/app/settings/controllers/layoutscontroller.cpp b/app/settings/controllers/layoutscontroller.cpp index c68d63c50..47aaa8727 100644 --- a/app/settings/controllers/layoutscontroller.cpp +++ b/app/settings/controllers/layoutscontroller.cpp @@ -62,8 +62,9 @@ Layouts::Layouts(QDialog *parent, Latte::Corona *corona, QTableView *view) m_corona(corona), m_model(new Model::Layouts(this, corona)), m_proxyModel(new QSortFilterProxyModel(this)), - m_view(view) -{ + m_view(view), + m_headerView(new Settings::Layouts::HeaderView(Qt::Horizontal, m_parentDialog)) +{ setOriginalInMultipleMode(m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts); m_proxyModel->setSourceModel(m_model); @@ -103,6 +104,7 @@ QTableView *Layouts::view() const void Layouts::initView() { m_view->setModel(m_proxyModel); + m_view->setHorizontalHeader(m_headerView); m_view->horizontalHeader()->setStretchLastSection(true); m_view->verticalHeader()->setVisible(false); m_view->setSortingEnabled(true); diff --git a/app/settings/controllers/layoutscontroller.h b/app/settings/controllers/layoutscontroller.h index de3b1ff58..be55fd476 100644 --- a/app/settings/controllers/layoutscontroller.h +++ b/app/settings/controllers/layoutscontroller.h @@ -24,6 +24,7 @@ // local #include "../data/layoutdata.h" #include "../data/layoutstable.h" +#include "../delegates/layoutsheaderview.h" #include "../models/layoutsmodel.h" #include "../../lattecorona.h" #include "../../../liblatte2/types.h" @@ -102,6 +103,7 @@ private: QDialog *m_parentDialog{nullptr}; Latte::Corona *m_corona{nullptr}; QTableView *m_view{nullptr}; + Settings::Layouts::HeaderView *m_headerView{nullptr}; //! original data bool o_originalInMultipleMode{false}; diff --git a/app/settings/delegates/CMakeLists.txt b/app/settings/delegates/CMakeLists.txt index d1f31b61c..eac901fac 100644 --- a/app/settings/delegates/CMakeLists.txt +++ b/app/settings/delegates/CMakeLists.txt @@ -5,6 +5,7 @@ set(lattedock-app_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/backgroundcmbitemdelegate.cpp ${CMAKE_CURRENT_SOURCE_DIR}/checkboxdelegate.cpp ${CMAKE_CURRENT_SOURCE_DIR}/layoutnamedelegate.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/layoutsheaderview.cpp ${CMAKE_CURRENT_SOURCE_DIR}/shareddelegate.cpp ${CMAKE_CURRENT_SOURCE_DIR}/persistentmenu.cpp PARENT_SCOPE diff --git a/app/settings/delegates/layoutsheaderview.cpp b/app/settings/delegates/layoutsheaderview.cpp new file mode 100644 index 000000000..5b085fdfc --- /dev/null +++ b/app/settings/delegates/layoutsheaderview.cpp @@ -0,0 +1,67 @@ +/* +* Copyright 2020 Michail Vourlakos +* +* This file is part of Latte-Dock +* +* Latte-Dock is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* Latte-Dock is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + +#include "layoutsheaderview.h" + +// local +#include "../models/layoutsmodel.h" + +// Qt +#include +#include + + +namespace Latte { +namespace Settings { +namespace Layouts { + +HeaderView::HeaderView(Qt::Orientation orientation, QWidget *parent) + : QHeaderView(orientation, parent) +{ + setSectionsClickable(true); + setSectionsMovable(true); + setSortIndicatorShown(true); +} + +void HeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const +{ + if (logicalIndex == Model::Layouts::BACKGROUNDCOLUMN) { + QString text = model()->headerData(Model::Layouts::BACKGROUNDCOLUMN, Qt::Horizontal, Qt::DisplayRole).toString(); + QIcon icon = model()->headerData(Model::Layouts::BACKGROUNDCOLUMN, Qt::Horizontal, Qt::DecorationRole).value(); + + if (text.isEmpty() && !icon.isNull()) { + //! draw centered icon + QHeaderView::paintSection(painter, rect, Model::Layouts::HIDDENTEXTCOLUMN); + + int margin = 4; + int thick = rect.height() - 2*margin; + int iX = rect.x() + (rect.width()/2) - (thick/2); + + painter->drawPixmap(QRect(iX, rect.y() + margin, thick, thick), icon.pixmap(thick, thick, QIcon::Normal)); + return; + } + } + + QHeaderView::paintSection(painter, rect, logicalIndex); +} + +} +} +} + diff --git a/app/settings/delegates/layoutsheaderview.h b/app/settings/delegates/layoutsheaderview.h new file mode 100644 index 000000000..e086f8c30 --- /dev/null +++ b/app/settings/delegates/layoutsheaderview.h @@ -0,0 +1,41 @@ +/* +* Copyright 2020 Michail Vourlakos +* +* This file is part of Latte-Dock +* +* Latte-Dock is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* Latte-Dock is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ + +#ifndef LAYOUTSHEADERVIEW_H +#define LAYOUTSHEADERVIEW_H + +// Qt +#include + +namespace Latte { +namespace Settings { +namespace Layouts { + +class HeaderView : public QHeaderView +{ +public: + HeaderView(Qt::Orientation orientation, QWidget *parent = nullptr); + + void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override; +}; + +} +} +} +#endif diff --git a/app/settings/models/layoutsmodel.cpp b/app/settings/models/layoutsmodel.cpp index 0f9d794f4..41f15a306 100644 --- a/app/settings/models/layoutsmodel.cpp +++ b/app/settings/models/layoutsmodel.cpp @@ -225,17 +225,15 @@ QVariant Layouts::headerData(int section, Qt::Orientation orientation, int role) break; case HIDDENTEXTCOLUMN: if (role == Qt::DisplayRole) { - return QString("#hidden_text"); + return QString(""); } break; case BACKGROUNDCOLUMN: if (role == Qt::DisplayRole) { - return QIcon::fromTheme("games-config-background");//(i18nc("column for layout background", "Background")); + return QString(""); } else if (role == Qt::DecorationRole) { - return QString("");//QIcon::fromTheme("games-config-background");//QString();//QIcon::fromTheme("games-config-background"); - }/* else if (role == Qt::TextAlignmentRole ){ - return QVariant::fromValue(Qt::AlignHCenter | Qt::AlignVCenter); - }*/ + return QIcon::fromTheme("games-config-background"); + } break; case NAMECOLUMN: if (role == Qt::DisplayRole) {