introduce custom headerview for layouts

pull/11/head
Michail Vourlakos 5 years ago
parent 92f37eef8c
commit 2ad1a040b4

@ -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);

@ -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};

@ -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

@ -0,0 +1,67 @@
/*
* Copyright 2020 Michail Vourlakos <mvourlakos@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "layoutsheaderview.h"
// local
#include "../models/layoutsmodel.h"
// Qt
#include <QAbstractItemModel>
#include <QPainter>
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<QIcon>();
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);
}
}
}
}

@ -0,0 +1,41 @@
/*
* Copyright 2020 Michail Vourlakos <mvourlakos@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef LAYOUTSHEADERVIEW_H
#define LAYOUTSHEADERVIEW_H
// Qt
#include <QHeaderView>
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

@ -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) {

Loading…
Cancel
Save