11#include <config-libkleo.h>
13#include "treewidget.h"
15#include <KConfigGroup>
16#include <KLocalizedString>
17#include <KSharedConfig>
19#include <QContextMenuEvent>
25class TreeWidget::Private
30 QMenu *mHeaderPopup =
nullptr;
34 Private(TreeWidget *qq)
43 void saveColumnLayout();
46TreeWidget::TreeWidget(
QWidget *parent)
48 , d{new Private(this)}
53TreeWidget::~TreeWidget() =
default;
55void TreeWidget::Private::saveColumnLayout()
57 if (mStateGroupName.
isEmpty()) {
61 auto header = q->header();
63 QVariantList columnVisibility;
64 QVariantList columnOrder;
65 QVariantList columnWidths;
66 const int headerCount = header->count();
67 columnVisibility.reserve(headerCount);
68 columnWidths.reserve(headerCount);
69 columnOrder.reserve(headerCount);
70 for (
int i = 0; i < headerCount; ++i) {
71 columnVisibility <<
QVariant(!q->isColumnHidden(i));
72 columnWidths <<
QVariant(header->sectionSize(i));
73 columnOrder <<
QVariant(header->visualIndex(i));
76 config.writeEntry(
"ColumnVisibility", columnVisibility);
77 config.writeEntry(
"ColumnOrder", columnOrder);
78 config.writeEntry(
"ColumnWidths", columnWidths);
80 config.writeEntry(
"SortAscending", (
int)header->sortIndicatorOrder());
81 if (header->isSortIndicatorShown()) {
82 config.writeEntry(
"SortColumn", header->sortIndicatorSection());
84 config.writeEntry(
"SortColumn", -1);
89bool TreeWidget::restoreColumnLayout(
const QString &stateGroupName)
94 d->mStateGroupName = stateGroupName;
96 auto header = this->header();
98 QVariantList columnVisibility = config.readEntry(
"ColumnVisibility", QVariantList());
99 QVariantList columnOrder = config.readEntry(
"ColumnOrder", QVariantList());
100 QVariantList columnWidths = config.readEntry(
"ColumnWidths", QVariantList());
102 if (!columnVisibility.isEmpty() && !columnOrder.isEmpty() && !columnWidths.isEmpty()) {
103 for (
int i = 0; i < header->count(); ++i) {
104 if (i >= columnOrder.size() || i >= columnWidths.size() || i >= columnVisibility.size()) {
110 bool visible = columnVisibility[i].toBool();
111 int width = columnWidths[i].toInt();
112 int order = columnOrder[i].toInt();
114 header->resizeSection(i, width ? width : 100);
115 header->moveSection(header->visualIndex(i), order);
124 int sortColumn = config.readEntry(
"SortColumn", 0);
125 if (sortColumn >= 0) {
129 d->saveColumnLayout();
132 d->saveColumnLayout();
135 d->saveColumnLayout();
137 return !columnVisibility.isEmpty() && !columnOrder.isEmpty() && !columnWidths.isEmpty();
146 if (!d->mHeaderPopup) {
147 d->mHeaderPopup =
new QMenu(
this);
148 d->mHeaderPopup->setTitle(
i18nc(
"@title:menu",
"View Columns"));
149 for (
int i = 0; i < model()->columnCount(); ++i) {
153 d->mColumnActions << tmp;
157 const int col = action->data().toInt();
158 if (action->isChecked()) {
165 Q_EMIT columnEnabled(col);
167 Q_EMIT columnDisabled(col);
169 d->saveColumnLayout();
173 for (
QAction *action :
std::as_const(d->mColumnActions)) {
174 const int column = action->data().toInt();
175 action->setChecked(!isColumnHidden(column));
178 d->mHeaderPopup->popup(mapToGlobal(e->pos()));
192 if ((cursorAction != MoveLeft) && (cursorAction != MoveRight)) {
196 const auto savedSelectionBehavior = selectionBehavior();
197 setSelectionBehavior(SelectItems);
198 const auto savedItemsExpandable = itemsExpandable();
199 setItemsExpandable(
false);
203 setItemsExpandable(savedItemsExpandable);
204 setSelectionBehavior(savedSelectionBehavior);
209#include "moc_treewidget.cpp"
static KSharedConfig::Ptr openStateConfig(const QString &fileName=QString())
QString i18nc(const char *context, const char *text, const TYPE &arg...)
virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers)=0
bool isChecked() const const
void setData(const QVariant &data)
void installEventFilter(QObject *filterObj)
bool isEmpty() const const
typedef KeyboardModifiers