Finish column order storage

git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@326 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
sniperbeamer
2009-07-05 17:35:59 +00:00
parent 21fe83bb82
commit 9c3ef9a709
2 changed files with 81 additions and 76 deletions

View File

@@ -21,10 +21,13 @@
#include <QHeaderView>
#include <QClipboard>
#include <QProcess>
#include <algorithm>
#include "lib/AutoType.h"
#include "lib/EntryView.h"
#include "dialogs/EditEntryDlg.h"
#define NUM_COLUMNS 11
// just for the lessThan funtion
/*QList<EntryViewItem*>* pItems;
KeepassEntryView* pEntryView;*/
@@ -34,7 +37,8 @@ KeepassEntryView::KeepassEntryView(QWidget* parent):QTreeWidget(parent){
header()->setResizeMode(QHeaderView::Interactive);
header()->setStretchLastSection(false);
header()->setClickable(true);
//header()->setCascadingSectionResizes(true);
header()->setCascadingSectionResizes(true);
header()->setStretchLastSection(true);
retranslateColumns();
restoreHeaderView();
@@ -68,84 +72,69 @@ void KeepassEntryView::setColumnVisible(int col, bool visible) {
}
void KeepassEntryView::saveHeaderView() {
if (ViewMode == Normal)
config->setEntryView( header()->saveState() );
else
config->setEntryViewSearch( header()->saveState() );
QBitArray columns(NUM_COLUMNS);
QList<int> columnOrder;
QList<int> columnsSizes;
int columnSort = header()->sortIndicatorSection();
Qt::SortOrder columnSortOrder = header()->sortIndicatorOrder();
for (int i=0; i<NUM_COLUMNS; ++i) {
columns.setBit(i, columnVisible(i));
columnOrder << header()->visualIndex(i);
columnsSizes << header()->sectionSize(i);
}
if (ViewMode == Normal) {
config->setColumns(columns);
config->setColumnOrder(columnOrder);
config->setColumnSizes(columnsSizes);
config->setColumnSort(columnSort);
config->setColumnSortOrder(columnSortOrder);
}
else {
config->setSearchColumns(columns);
config->setSearchColumnOrder(columnOrder);
config->setSearchColumnSizes(columnsSizes);
config->setSearchColumnSort(columnSort);
config->setSearchColumnSortOrder(columnSortOrder);
}
}
void KeepassEntryView::restoreHeaderView() {
QBitArray columns;
QList<int> columnOrder;
QList<int> columnSizes;
int columnSort;
Qt::SortOrder columnSortOrder;
if (ViewMode == Normal) {
QByteArray state = config->entryView();
if (state.isEmpty()) {
for (int i=10; i>=0; --i) {
if (i <= 3) {
setColumnVisible(i, true);
header()->moveSection(header()->visualIndex(i), 0);
}
else {
setColumnVisible(i, false);
}
}
header()->setSortIndicator(0, Qt::AscendingOrder);
header()->setSortIndicatorShown(true);
header()->resizeSection(0, (int) (header()->sectionSize(0) * 1.5));
}
else {
header()->restoreState(state);
setColumnVisible(10, false); // just to be sure
QApplication::processEvents();
//QHash<int, int> sectionSize;
QList<int> visibleSections;
for (int i=0; i<=10; ++i) {
if (columnVisible(i)) {
qDebug("%d",i);
visibleSections.append(i);
header()->hideSection(i);
}
}
QApplication::processEvents();
for (int i=0; i<visibleSections.size(); ++i) {
qDebug("%d",visibleSections[i]);
header()->showSection(visibleSections[i]);
}
/*for (int i=0; i<=10; ++i) {
if (columnVisible(i)) {
int size = header()->sectionSize(i);
header()->resizeSection(i, 1);
header()->resizeSection(i, size);
}
}*/
}
columns = config->columns();
columnOrder = config->columnOrder();
columnSizes = config->columnSizes();
columnSort = config->columnSort();
columnSortOrder = config->columnSortOrder();
columns[10] = 0; // just to be sure
}
else {
QByteArray state = config->entryViewSearch();
if (state.isEmpty()) {
for (int i=10; i>=0; --i) {
if (i <= 3 || i == 10) {
setColumnVisible(i, true);
header()->moveSection(header()->visualIndex(i), 0);
}
else {
setColumnVisible(i, false);
}
}
header()->moveSection(header()->visualIndex(10), 0);
header()->setSortIndicator(10, Qt::AscendingOrder);
header()->setSortIndicatorShown(true);
}
else {
header()->restoreState(state);
}
columns = config->searchColumns();
columnOrder = config->searchColumnOrder();
columnSizes = config->searchColumnSizes();
columnSort = config->searchColumnSort();
columnSortOrder = config->searchColumnSortOrder();
}
QMap<int,int> order; // key=visual index; value=logical index
for (int i=0; i<NUM_COLUMNS; ++i) {
order.insert(columnOrder[i], i);
}
for (QMap<int,int>::const_iterator i = order.constBegin(); i != order.constEnd(); ++i) {
setColumnVisible(i.value(), columns.testBit(i.value()));
header()->moveSection(header()->visualIndex(i.value()), NUM_COLUMNS-1);
header()->resizeSection(i.value(), std::max(columnSizes[i.value()], header()->minimumSectionSize()));
}
header()->setSortIndicator(columnSort, columnSortOrder);
}
void KeepassEntryView::OnGroupChanged(IGroupHandle* group){