From 29ded0a62b47aa34cd05e13e43cf3a807aff26fb Mon Sep 17 00:00:00 2001 From: sniperbeamer Date: Sat, 22 Aug 2009 10:51:38 +0000 Subject: [PATCH] Restore old column auto-resize behaviour git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@328 b624d157-de02-0410-bad0-e51aec6abb33 --- src/KpxConfig.h | 6 ++-- src/lib/EntryView.cpp | 74 ++++++++++++++++++++++++++++++++++++------- src/lib/EntryView.h | 3 ++ 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/src/KpxConfig.h b/src/KpxConfig.h index 41c9acf..d159ab1 100644 --- a/src/KpxConfig.h +++ b/src/KpxConfig.h @@ -50,12 +50,12 @@ public: QColor bannerTextColor(){return stringToColor(settings.value("Options/BannerTextColor","222,222,222").toString());} int clipboardTimeOut(){return settings.value("Options/ClipboardTimeOut",20).toInt();} 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 columnOrder(){return stringToIntArray(settings.value("UI/ColumnOrder","1,2,3,4,5,6,7,8,9,10,11").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);} + QBitArray searchColumns(){return stringToBitArray(settings.value("UI/SearchColumns","11110000001").toString(),11);} + QList searchColumnOrder(){return stringToIntArray(settings.value("UI/SearchColumnOrder","2,3,4,5,6,7,8,9,10,11,1").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());} diff --git a/src/lib/EntryView.cpp b/src/lib/EntryView.cpp index 2201ff3..b0acb34 100644 --- a/src/lib/EntryView.cpp +++ b/src/lib/EntryView.cpp @@ -32,16 +32,18 @@ /*QList* pItems; KeepassEntryView* pEntryView;*/ -KeepassEntryView::KeepassEntryView(QWidget* parent):QTreeWidget(parent){ +KeepassEntryView::KeepassEntryView(QWidget* parent) : QTreeWidget(parent) { ViewMode=Normal; + AutoResizeColumns = true; header()->setResizeMode(QHeaderView::Interactive); header()->setStretchLastSection(false); header()->setClickable(true); header()->setCascadingSectionResizes(true); - header()->setStretchLastSection(true); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); retranslateColumns(); restoreHeaderView(); - + + connect(header(), SIGNAL(sectionResized(int,int,int)), SLOT(resizeColumns())); connect(this,SIGNAL(itemSelectionChanged()), SLOT(OnItemsChanged())); connect(&ClipboardTimer, SIGNAL(timeout()), SLOT(OnClipboardTimeOut())); connect(this, SIGNAL(itemActivated(QTreeWidgetItem*,int)), SLOT(OnEntryActivated(QTreeWidgetItem*,int))); @@ -68,42 +70,46 @@ bool KeepassEntryView::columnVisible(int col) { } void KeepassEntryView::setColumnVisible(int col, bool visible) { + if (columnVisible(col) == visible) + return; // nothing to do + header()->setSectionHidden(col, !visible); + if (visible) + header()->resizeSection(col, columnSizes[col]); } void KeepassEntryView::saveHeaderView() { 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->setColumnSizes(columnSizes); config->setColumnSort(columnSort); config->setColumnSortOrder(columnSortOrder); } else { config->setSearchColumns(columns); config->setSearchColumnOrder(columnOrder); - config->setSearchColumnSizes(columnsSizes); + config->setSearchColumnSizes(columnSizes); config->setSearchColumnSort(columnSort); config->setSearchColumnSortOrder(columnSortOrder); } } void KeepassEntryView::restoreHeaderView() { + AutoResizeColumns = false; + QBitArray columns; QList columnOrder; - QList columnSizes; int columnSort; Qt::SortOrder columnSortOrder; @@ -123,19 +129,65 @@ void KeepassEntryView::restoreHeaderView() { columnSortOrder = config->searchColumnSortOrder(); } + // compatibility with KeePassX <= 0.4.0 (100 = column hidden) + int lastVisibleIndex = -1; + for (int i=0; ilastVisibleIndex) + lastVisibleIndex = columnOrder[i]; + } + QMap order; // key=visual index; value=logical index for (int i=0; iminimumSectionSize()) + columnSizes[i] = header()->minimumSectionSize(); } for (QMap::const_iterator i = order.constBegin(); i != order.constEnd(); ++i) { header()->moveSection(header()->visualIndex(i.value()), NUM_COLUMNS-1); - header()->resizeSection(i.value(), std::max(columnSizes[i.value()], header()->minimumSectionSize())); + header()->resizeSection(i.value(), columnSizes[i.value()]); setColumnVisible(i.value(), columns.testBit(i.value())); } header()->setSortIndicator(columnSort, columnSortOrder); + + AutoResizeColumns = true; + + resizeColumns(); +} + +void KeepassEntryView::resizeColumns() { + if (!AutoResizeColumns) + return; + + AutoResizeColumns = false; + + int w = viewport()->width(); + int sum = 0; + + for (int i=0; isectionSize(i); + } + + double stretch = (double)w / (double)sum; + + for (int i=0; isectionSize(i)!=0) { + int size = qRound(header()->sectionSize(i) * stretch); + header()->resizeSection(i, size); + columnSizes[i] = size; + } + else { + columnSizes[i] = qRound(columnSizes[i] * stretch); + } + } + + AutoResizeColumns = true; } void KeepassEntryView::OnGroupChanged(IGroupHandle* group){ @@ -426,8 +478,8 @@ void KeepassEntryView::contextMenuEvent(QContextMenuEvent* e){ } void KeepassEntryView::resizeEvent(QResizeEvent* e){ - // TODO resizeColumns(); - e->accept(); + resizeColumns(); + QTreeWidget::resizeEvent(e); } diff --git a/src/lib/EntryView.h b/src/lib/EntryView.h index 0793537..44ba7dc 100644 --- a/src/lib/EntryView.h +++ b/src/lib/EntryView.h @@ -53,6 +53,8 @@ class KeepassEntryView:public QTreeWidget{ IGroupHandle* CurrentGroup; enum EntryViewMode {Normal, ShowSearchResults}; EntryViewMode ViewMode; + bool AutoResizeColumns; + QList columnSizes; void updateEntry(EntryViewItem*); void editEntry(EntryViewItem*); @@ -87,6 +89,7 @@ class KeepassEntryView:public QTreeWidget{ void removeDragItems(); void OnEditOpenUrl(); void OnEditCopyUrl(); + void resizeColumns(); signals: void fileModified();