132 lines
4.5 KiB
C++
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;
|
|
};
|
|
|
|
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());
|
|
}
|