From 9c3ef9a709c6200f16296fedd66379aedf0c4af3 Mon Sep 17 00:00:00 2001 From: sniperbeamer Date: Sun, 5 Jul 2009 17:35:59 +0000 Subject: [PATCH] Finish column order storage git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@326 b624d157-de02-0410-bad0-e51aec6abb33 --- src/KpxConfig.h | 24 ++++++-- src/lib/EntryView.cpp | 133 +++++++++++++++++++----------------------- 2 files changed, 81 insertions(+), 76 deletions(-) diff --git a/src/KpxConfig.h b/src/KpxConfig.h index 65d6039..41c9acf 100644 --- a/src/KpxConfig.h +++ b/src/KpxConfig.h @@ -49,8 +49,16 @@ public: QColor bannerColor2(){return stringToColor(settings.value("Options/BannerColor2","0,117,175").toString());} QColor bannerTextColor(){return stringToColor(settings.value("Options/BannerTextColor","222,222,222").toString());} int clipboardTimeOut(){return settings.value("Options/ClipboardTimeOut",20).toInt();} - QByteArray entryView(){return settings.value("UI/EntryView").toByteArray();} - QByteArray entryViewSearch(){return settings.value("UI/EntryViewSearch").toByteArray();} + QBitArray columns(){return stringToBitArray(settings.value("UI/Columns","11111000000").toString(),11);} + QList columnOrder(){return stringToIntArray(settings.value("UI/ColumnOrder","100,100,100,100,100,100,100,100,100,100,100").toString(),11);} + QList columnSizes(){return stringToIntArray(settings.value("UI/ColumnSizes","15,10,10,10,10,10,10,10,10,10,10").toString(),11);} + int columnSort(){return settings.value("UI/ColumnSort",0).toInt();} + Qt::SortOrder columnSortOrder(){return static_cast(settings.value("UI/ColumnSortOrder",Qt::AscendingOrder).toInt());} + QBitArray searchColumns(){return stringToBitArray(settings.value("UI/SearchColumns","11111000000").toString(),11);} + QList searchColumnOrder(){return stringToIntArray(settings.value("UI/SearchColumnOrder","100,100,100,100,100,100,100,100,100,100,100").toString(),11);} + QList searchColumnSizes(){return stringToIntArray(settings.value("UI/SearchColumnSizes","15,10,10,10,10,10,10,10,10,10,10").toString(),11);} + int searchColumnSort(){return settings.value("UI/SearchColumnSort",0).toInt();} + Qt::SortOrder searchColumnSortOrder(){return static_cast(settings.value("UI/SearchColumnSortOrder",Qt::AscendingOrder).toInt());} QStringList fileDlgHistory(unsigned index){return settings.value(QString("FileDlgHistory/ENTRY%1").arg(index)).toStringList();} GrpTreeState groupTreeState(){return stringToGrpTreeState(settings.value("Options/GroupTreeState").toString());} bool hidePasswords(){return settings.value("UI/HidePasswords",true).toBool();} @@ -112,8 +120,16 @@ public: void setBannerColor2(const QColor& value){settings.setValue("Options/BannerColor2",colorToString(value));} void setBannerTextColor(const QColor& value){settings.setValue("Options/BannerTextColor",colorToString(value));} void setClipboardTimeOut(int value){settings.setValue("Options/ClipboardTimeOut",value);} - void setEntryView(const QByteArray& value){settings.setValue("UI/EntryView",value);} - void setEntryViewSearch(const QByteArray& value){settings.setValue("UI/EntryViewSearch",value);} + void setColumns(const QBitArray& value){settings.setValue("UI/Columns",bitArrayToString(value));} + void setColumnOrder(const QList& value){settings.setValue("UI/ColumnOrder",intArrayToString(value));} + void setColumnSizes(const QList& value){settings.setValue("UI/ColumnSizes",intArrayToString(value));} + void setColumnSort(int value){settings.setValue("UI/ColumnSort",value);} + void setColumnSortOrder(int value){settings.setValue("UI/ColumnSortOrder",value);} + void setSearchColumns(const QBitArray& value){settings.setValue("UI/SearchColumns",bitArrayToString(value));} + void setSearchColumnOrder(const QList& value){settings.setValue("UI/SearchColumnOrder",intArrayToString(value));} + void setSearchColumnSizes(const QList& value){settings.setValue("UI/SearchColumnSizes",intArrayToString(value));} + void setSearchColumnSort(int value){settings.setValue("UI/SearchColumnSort",value);} + void setSearchColumnSortOrder(int value){settings.setValue("UI/SearchColumnSortOrder",value);} void setFileDlgHistory(unsigned index,const QStringList& value){settings.setValue(QString("FileDlgHistory/ENTRY%1").arg(index), value);} void setGroupTreeState(GrpTreeState value){settings.setValue("Options/GroupTreeState",grpTreeStateToString(value));} void setHidePasswords(bool value){settings.setValue("UI/HidePasswords",value);} diff --git a/src/lib/EntryView.cpp b/src/lib/EntryView.cpp index 6d1ba21..ab22455 100644 --- a/src/lib/EntryView.cpp +++ b/src/lib/EntryView.cpp @@ -21,10 +21,13 @@ #include #include #include +#include #include "lib/AutoType.h" #include "lib/EntryView.h" #include "dialogs/EditEntryDlg.h" +#define NUM_COLUMNS 11 + // just for the lessThan funtion /*QList* 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 columnOrder; + QList columnsSizes; + int columnSort = header()->sortIndicatorSection(); + Qt::SortOrder columnSortOrder = header()->sortIndicatorOrder(); + + for (int i=0; ivisualIndex(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 columnOrder; + QList 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 sectionSize; - QList 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; ishowSection(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 order; // key=visual index; value=logical index + for (int i=0; i::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){