allow to change the order of columns in the details view

BUG: 164696

svn path=/trunk/KDE/kdebase/apps/; revision=1015987
This commit is contained in:
Peter Penz 2009-08-26 18:23:31 +00:00
parent a5d47c369f
commit dcf397ae51
3 changed files with 46 additions and 10 deletions

View file

@ -168,10 +168,7 @@ DolphinDetailsView::~DolphinDetailsView()
bool DolphinDetailsView::event(QEvent* event)
{
if (event->type() == QEvent::Polish) {
QHeaderView* headerView = header();
headerView->setResizeMode(QHeaderView::Interactive);
headerView->setMovable(false);
header()->setResizeMode(QHeaderView::Interactive);
updateColumnVisibility();
}
@ -563,13 +560,15 @@ void DolphinDetailsView::configureSettings(const QPoint& pos)
// add checkbox items for each column
QHeaderView* headerView = header();
for (int i = DolphinModel::Size; i <= DolphinModel::Version; ++i) {
const int columns = model()->columnCount();
for (int i = 0; i < columns; ++i) {
const int logicalIndex = headerView->logicalIndex(i);
const QString text = model()->headerData(i, Qt::Horizontal).toString();
const QString text = model()->headerData(logicalIndex, Qt::Horizontal).toString();
QAction* action = popup.addAction(text);
action->setCheckable(true);
action->setChecked(!headerView->isSectionHidden(logicalIndex));
action->setData(i);
action->setData(logicalIndex);
action->setEnabled(logicalIndex != DolphinModel::Name);
}
popup.addSeparator();
@ -597,16 +596,41 @@ void DolphinDetailsView::configureSettings(const QPoint& pos)
void DolphinDetailsView::updateColumnVisibility()
{
QHeaderView* headerView = header();
disconnect(headerView, SIGNAL(sectionMoved(int, int, int)),
this, SLOT(saveColumnPositions()));
const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
const QList<int> columnPositions = settings->columnPositions();
const KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
for (int i = DolphinModel::Size; i <= DolphinModel::Version; ++i) {
for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
const KFileItemDelegate::Information info = infoForColumn(i);
const bool hide = !list.contains(info);
const bool hide = !list.contains(info) && (i != DolphinModel::Name);
if (isColumnHidden(i) != hide) {
setColumnHidden(i, hide);
}
const int from = headerView->visualIndex(i);
headerView->moveSection(from, columnPositions[i]);
}
resizeColumns();
connect(headerView, SIGNAL(sectionMoved(int, int, int)),
this, SLOT(saveColumnPositions()));
}
void DolphinDetailsView::saveColumnPositions()
{
QList<int> columnPositions;
for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
columnPositions.append(header()->visualIndex(i));
}
resizeColumns();
DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
settings->setColumnPositions(columnPositions);
}
void DolphinDetailsView::slotHeaderSectionResized(int logicalIndex, int oldSize, int newSize)

View file

@ -122,8 +122,16 @@ private slots:
*/
void configureSettings(const QPoint& pos);
/**
* Updates the visibilty state of columns and their order.
*/
void updateColumnVisibility();
/**
* Saves order of the columns as global setting.
*/
void saveColumnPositions();
/**
* Disables the automatical resizing of columns, if the user has resized the columns
* with the mouse.

View file

@ -37,5 +37,9 @@
<label>Expandable folders</label>
<default>false</default>
</entry>
<entry name="ColumnPositions" type="IntList">
<label>Position of columns</label>
<default>0,1,2,3,4,5,6,7</default>
</entry>
</group>
</kcfg>