BUG: 151891
svn path=/trunk/KDE/kdebase/apps/; revision=733313
DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
QTreeView(parent),
m_controller(controller),
DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) :
QTreeView(parent),
m_controller(controller),
+ m_clearAdditionalInfo(false),
m_dragging(false),
m_showElasticBand(false),
m_elasticBandOrigin(),
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();
void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting)
{
QHeaderView* headerView = header();
const int columnIndex = activatedAction->data().toInt();
KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
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);
if (show) {
Q_ASSERT(!list.contains(info));
list.append(info);
void DolphinDetailsView::updateColumnVisibility()
{
KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
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.
// 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);
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
}
bool DolphinDetailsView::isZoomInPossible() const
return dirModel->itemForIndex(dirIndex);
}
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"
#include "dolphindetailsview.moc"
virtual void paintEvent(QPaintEvent* event);
virtual void keyPressEvent(QKeyEvent* event);
virtual void resizeEvent(QResizeEvent* event);
virtual void paintEvent(QPaintEvent* event);
virtual void keyPressEvent(QKeyEvent* event);
virtual void resizeEvent(QResizeEvent* event);
+ virtual void closeEvent(QCloseEvent* event);
KFileItem itemForIndex(const QModelIndex& index) const;
KFileItem itemForIndex(const QModelIndex& index) const;
+ KFileItemDelegate::Information infoForColumn(int columnIndex) const;
+
private:
DolphinController* m_controller;
QStyleOptionViewItem m_viewOptions;
private:
DolphinController* m_controller;
QStyleOptionViewItem m_viewOptions;
+ bool m_clearAdditionalInfo;
+
bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4
QRect m_dropRect; // TODO: remove this property when the issue #160611 is solved in Qt 4.4
bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4
QRect m_dropRect; // TODO: remove this property when the issue #160611 is solved in Qt 4.4
m_controller->setUrl(root);
}
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);
const KUrl viewPropsUrl = viewPropertiesUrl();
ViewProperties props(viewPropsUrl);
props.setViewMode(m_mode);
{
ViewProperties props(viewPropertiesUrl());
props.setAdditionalInfo(info);
{
ViewProperties props(viewPropertiesUrl());
props.setAdditionalInfo(info);
m_fileItemDelegate->setShowInformation(info);
m_fileItemDelegate->setShowInformation(info);
void DolphinView::createView()
{
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;
- }
-
Q_ASSERT(m_iconsView == 0);
Q_ASSERT(m_detailsView == 0);
Q_ASSERT(m_columnView == 0);
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);
switch (m_mode) {
case IconsView: {
m_iconsView = new DolphinIconsView(this, m_controller);
this, SLOT(emitContentsMoved()));
}
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) {
QAbstractItemView* DolphinView::itemView() const
{
if (m_detailsView != 0) {
/**
* Returns a pointer to the currently used item view, which is either
* a ListView or a TreeView.
/**
* Returns a pointer to the currently used item view, which is either
* a ListView or a TreeView.