File indexing completed on 2024-04-28 05:46:36
0001 /* 0002 SPDX-FileCopyrightText: 2010 Volker Lanz <vl@fidra.de> 0003 SPDX-FileCopyrightText: 2014-2017 Andrius Štikonas <andrius@stikonas.eu> 0004 0005 SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #include "gui/smartdialogwidget.h" 0009 0010 #include "util/guihelpers.h" 0011 0012 #include <KLocalizedString> 0013 0014 #include <QStyledItemDelegate> 0015 #include <QStyleOptionViewItem> 0016 #include <QPainter> 0017 #include <QPoint> 0018 #include <QTextDocument> 0019 0020 #include <config.h> 0021 0022 class SmartAttrDelegate : public QStyledItemDelegate 0023 { 0024 public: 0025 SmartAttrDelegate() : QStyledItemDelegate() {} 0026 0027 virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; 0028 }; 0029 0030 void SmartAttrDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const 0031 { 0032 QString text = index.data().toString(); 0033 0034 painter->save(); 0035 0036 QStyleOptionViewItem opt = option; 0037 initStyleOption(&opt, index); 0038 0039 QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter); 0040 0041 QTextDocument doc; 0042 doc.setHtml(text); 0043 doc.setPageSize(option.rect.size()); 0044 0045 painter->setClipRect(option.rect); 0046 qint32 offset = (option.rect.height() - doc.size().height()) / 2; 0047 if (offset < 0) 0048 offset = 0; 0049 0050 painter->translate(option.rect.x(), option.rect.y() + offset); 0051 doc.drawContents(painter); 0052 0053 painter->restore(); 0054 } 0055 0056 SmartDialogWidget::SmartDialogWidget(QWidget* parent) : 0057 QWidget(parent), 0058 m_SmartAttrDelegate(new SmartAttrDelegate()) 0059 { 0060 setupUi(this); 0061 setupConnections(); 0062 0063 loadConfig(); 0064 0065 treeSmartAttributes().setItemDelegateForColumn(1, m_SmartAttrDelegate); 0066 treeSmartAttributes().header()->setContextMenuPolicy(Qt::CustomContextMenu); 0067 } 0068 0069 SmartDialogWidget::~SmartDialogWidget() 0070 { 0071 saveConfig(); 0072 delete m_SmartAttrDelegate; 0073 } 0074 0075 void SmartDialogWidget::loadConfig() 0076 { 0077 QList<int> colWidths = Config::treeSmartAttributesColumnWidths(); 0078 QList<int> colPositions = Config::treeSmartAttributesColumnPositions(); 0079 QList<int> colVisible = Config::treeSmartAttributesColumnVisible(); 0080 QHeaderView* header = treeSmartAttributes().header(); 0081 0082 for (int i = 0; i < treeSmartAttributes().columnCount(); i++) { 0083 if (colPositions[0] != -1 && colPositions.size() > i) 0084 header->moveSection(header->visualIndex(i), colPositions[i]); 0085 0086 if (colVisible[0] != -1 && colVisible.size() > i) 0087 treeSmartAttributes().setColumnHidden(i, colVisible[i] == 0); 0088 0089 if (colWidths[0] != -1 && colWidths.size() > i) 0090 treeSmartAttributes().setColumnWidth(i, colWidths[i]); 0091 } 0092 } 0093 0094 void SmartDialogWidget::saveConfig() const 0095 { 0096 QList<int> colWidths; 0097 QList<int> colPositions; 0098 QList<int> colVisible; 0099 0100 for (int i = 0; i < treeSmartAttributes().columnCount(); i++) { 0101 colPositions.append(treeSmartAttributes().header()->visualIndex(i)); 0102 colVisible.append(treeSmartAttributes().isColumnHidden(i) ? 0 : 1); 0103 colWidths.append(treeSmartAttributes().columnWidth(i)); 0104 } 0105 0106 Config::setTreeSmartAttributesColumnPositions(colPositions); 0107 Config::setTreeSmartAttributesColumnVisible(colVisible); 0108 Config::setTreeSmartAttributesColumnWidths(colWidths); 0109 0110 Config::self()->save(); 0111 } 0112 0113 void SmartDialogWidget::setupConnections() 0114 { 0115 connect(treeSmartAttributes().header(), &QHeaderView::customContextMenuRequested, this, &SmartDialogWidget::onHeaderContextMenu); 0116 } 0117 0118 void SmartDialogWidget::onHeaderContextMenu(const QPoint& p) 0119 { 0120 showColumnsContextMenu(p, treeSmartAttributes()); 0121 }