DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
QTreeView(parent),
m_controller(controller),
+ m_clearAdditionalInfo(false),
m_dragging(false),
m_showElasticBand(false),
m_elasticBandOrigin(),
}
}
+void DolphinDetailsView::closeEvent(QCloseEvent* event)
+{
+ if (m_clearAdditionalInfo) {
+ disconnect(m_controller->dolphinView(), SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)),
+ this, SLOT(updateColumnVisibility()));
+
+ KFileItemDelegate::InformationList info;
+ info.append(KFileItemDelegate::NoInformation);
+ m_controller->indicateAdditionalInfoChange(info);
+ m_clearAdditionalInfo = true;
+ }
+ QTreeView::closeEvent(event);
+}
+
void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting)
{
QHeaderView* headerView = header();
const int columnIndex = activatedAction->data().toInt();
KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
- KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;
- switch (columnIndex) {
- case DolphinModel::Size: info = KFileItemDelegate::Size; break;
- case DolphinModel::ModifiedTime: info = KFileItemDelegate::ModificationTime; break;
- case DolphinModel::Permissions: info = KFileItemDelegate::Permissions; break;
- case DolphinModel::Owner: info = KFileItemDelegate::Owner; break;
- case DolphinModel::Group: info = KFileItemDelegate::OwnerAndGroup; break;
- case DolphinModel::Type: info = KFileItemDelegate::FriendlyMimeType; break;
- default: break;
- }
-
+ const KFileItemDelegate::Information info = infoForColumn(columnIndex);
if (show) {
Q_ASSERT(!list.contains(info));
list.append(info);
void DolphinDetailsView::updateColumnVisibility()
{
KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
- if (list.isEmpty() || list.contains(KFileItemDelegate::NoInformation)) {
+ const bool useDefaultColumns = !isVisible() &&
+ (list.isEmpty() ||
+ list.contains(KFileItemDelegate::NoInformation));
+ if (useDefaultColumns) {
// Using the details view without any additional information (-> additional column)
// makes no sense and leads to a usability problem as no viewport area is available
// anymore. Hence as fallback provide at least a size and date column.
list.append(KFileItemDelegate::Size);
list.append(KFileItemDelegate::ModificationTime);
m_controller->indicateAdditionalInfoChange(list);
+ m_clearAdditionalInfo = true;
}
- setColumnHidden(DolphinModel::Size, !list.contains(KFileItemDelegate::Size));
- setColumnHidden(DolphinModel::ModifiedTime, !list.contains(KFileItemDelegate::ModificationTime));
- setColumnHidden(DolphinModel::Permissions, !list.contains(KFileItemDelegate::Permissions));
- setColumnHidden(DolphinModel::Owner, !list.contains(KFileItemDelegate::Owner));
- setColumnHidden(DolphinModel::Group, !list.contains(KFileItemDelegate::OwnerAndGroup));
- setColumnHidden(DolphinModel::Type, !list.contains(KFileItemDelegate::FriendlyMimeType));
+ for (int i = DolphinModel::Size; i <= DolphinModel::Type; ++i) {
+ const KFileItemDelegate::Information info = infoForColumn(i);
+ const bool hide = !list.contains(info);
+ if (isColumnHidden(i) != hide) {
+ setColumnHidden(i, hide);
+ m_clearAdditionalInfo = false;
+ }
+ }
}
bool DolphinDetailsView::isZoomInPossible() const
return dirModel->itemForIndex(dirIndex);
}
+KFileItemDelegate::Information DolphinDetailsView::infoForColumn(int columnIndex) const
+{
+ KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;
+
+ switch (columnIndex) {
+ case DolphinModel::Size: info = KFileItemDelegate::Size; break;
+ case DolphinModel::ModifiedTime: info = KFileItemDelegate::ModificationTime; break;
+ case DolphinModel::Permissions: info = KFileItemDelegate::Permissions; break;
+ case DolphinModel::Owner: info = KFileItemDelegate::Owner; break;
+ case DolphinModel::Group: info = KFileItemDelegate::OwnerAndGroup; break;
+ case DolphinModel::Type: info = KFileItemDelegate::FriendlyMimeType; break;
+ default: break;
+ }
+
+ return info;
+}
+
#include "dolphindetailsview.moc"
m_controller->setUrl(root);
}
+ deleteView();
+
+ // It is important to read the view properties _after_ deleting the view,
+ // as e. g. the detail view might adjust the additional information properties
+ // after getting closed:
const KUrl viewPropsUrl = viewPropertiesUrl();
ViewProperties props(viewPropsUrl);
props.setViewMode(m_mode);
{
ViewProperties props(viewPropertiesUrl());
props.setAdditionalInfo(info);
+ props.save();
m_fileItemDelegate->setShowInformation(info);
void DolphinView::createView()
{
- // delete current view
- QAbstractItemView* view = itemView();
- if (view != 0) {
- m_topLayout->removeWidget(view);
- view->close();
- view->deleteLater();
- view = 0;
- m_iconsView = 0;
- m_detailsView = 0;
- m_columnView = 0;
- m_fileItemDelegate = 0;
- }
-
+ deleteView();
Q_ASSERT(m_iconsView == 0);
Q_ASSERT(m_detailsView == 0);
Q_ASSERT(m_columnView == 0);
- // ... and recreate it representing the current mode
+ QAbstractItemView* view = 0;
switch (m_mode) {
case IconsView: {
m_iconsView = new DolphinIconsView(this, m_controller);
this, SLOT(emitContentsMoved()));
}
+void DolphinView::deleteView()
+{
+ QAbstractItemView* view = itemView();
+ if (view != 0) {
+ m_topLayout->removeWidget(view);
+ view->close();
+ view->deleteLater();
+ view = 0;
+ m_iconsView = 0;
+ m_detailsView = 0;
+ m_columnView = 0;
+ m_fileItemDelegate = 0;
+ }
+}
+
QAbstractItemView* DolphinView::itemView() const
{
if (m_detailsView != 0) {