partitionmanager/src/gui/smartdialogwidget.cpp

132 lines
4.5 KiB
C++

/*************************************************************************
* Copyright (C) 2010 by Volker Lanz <vl@fidra.de> *
* *
* This program 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 3 of *
* the License, or (at your option) any later version. *
* *
* This program 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 "gui/smartdialogwidget.h"
#include "util/guihelpers.h"
#include <KLocalizedString>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
#include <QPainter>
#include <QPoint>
#include <QTextDocument>
#include <config.h>
class SmartAttrDelegate : public QStyledItemDelegate
{
public:
SmartAttrDelegate() : QStyledItemDelegate() {}
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
};
void SmartAttrDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QString text = index.data().toString();
painter->save();
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter);
QTextDocument doc;
doc.setHtml(text);
doc.setPageSize(option.rect.size());
painter->setClipRect(option.rect);
qint32 offset = (option.rect.height() - doc.size().height()) / 2;
if (offset < 0)
offset = 0;
painter->translate(option.rect.x(), option.rect.y() + offset);
doc.drawContents(painter);
painter->restore();
}
SmartDialogWidget::SmartDialogWidget(QWidget* parent) :
QWidget(parent),
m_SmartAttrDelegate(new SmartAttrDelegate())
{
setupUi(this);
setupConnections();
loadConfig();
treeSmartAttributes().setItemDelegateForColumn(1, m_SmartAttrDelegate);
treeSmartAttributes().header()->setContextMenuPolicy(Qt::CustomContextMenu);
}
SmartDialogWidget::~SmartDialogWidget()
{
saveConfig();
delete m_SmartAttrDelegate;
}
void SmartDialogWidget::loadConfig()
{
QList<int> colWidths = Config::treeSmartAttributesColumnWidths();
QList<int> colPositions = Config::treeSmartAttributesColumnPositions();
QList<int> colVisible = Config::treeSmartAttributesColumnVisible();
QHeaderView* header = treeSmartAttributes().header();
for (int i = 0; i < treeSmartAttributes().columnCount(); i++) {
if (colPositions[0] != -1 && colPositions.size() > i)
header->moveSection(header->visualIndex(i), colPositions[i]);
if (colVisible[0] != -1 && colVisible.size() > i)
treeSmartAttributes().setColumnHidden(i, colVisible[i] == 0);
if (colWidths[0] != -1 && colWidths.size() > i)
treeSmartAttributes().setColumnWidth(i, colWidths[i]);
}
}
void SmartDialogWidget::saveConfig() const
{
QList<int> colWidths;
QList<int> colPositions;
QList<int> colVisible;
for (int i = 0; i < treeSmartAttributes().columnCount(); i++) {
colPositions.append(treeSmartAttributes().header()->visualIndex(i));
colVisible.append(treeSmartAttributes().isColumnHidden(i) ? 0 : 1);
colWidths.append(treeSmartAttributes().columnWidth(i));
}
Config::setTreeSmartAttributesColumnPositions(colPositions);
Config::setTreeSmartAttributesColumnVisible(colVisible);
Config::setTreeSmartAttributesColumnWidths(colWidths);
Config::self()->save();
}
void SmartDialogWidget::setupConnections()
{
connect(treeSmartAttributes().header(), &QHeaderView::customContextMenuRequested, this, &SmartDialogWidget::onHeaderContextMenu);
}
void SmartDialogWidget::onHeaderContextMenu(const QPoint& p)
{
showColumnsContextMenu(p, treeSmartAttributes());
}