X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/f11c699fa203dd2cde0e85c63a6d186e3fa6a3de..bd925ea49a7e4e7c6e652f4529dcd0c4e25fd19a:/src/infosidebarpage.cpp diff --git a/src/infosidebarpage.cpp b/src/infosidebarpage.cpp index 4716ea2d5..f9a0b4a7e 100644 --- a/src/infosidebarpage.cpp +++ b/src/infosidebarpage.cpp @@ -48,11 +48,13 @@ InfoSidebarPage::InfoSidebarPage(QWidget* parent) : SidebarPage(parent), m_pendingPreview(false), - m_timer(0), + m_shownUrl(), + m_urlCandidate(), + m_fileItem(), m_preview(0), m_nameLabel(0), m_infoLabel(0), - m_metadataWidget(0) + m_metaDataWidget(0) { const int spacing = KDialog::spacingHint(); @@ -67,7 +69,7 @@ InfoSidebarPage::InfoSidebarPage(QWidget* parent) : // preview m_preview = new PixmapViewer(this); m_preview->setMinimumWidth(KIconLoader::SizeEnormous); - m_preview->setFixedHeight(KIconLoader::SizeEnormous); + m_preview->setMinimumHeight(KIconLoader::SizeEnormous); // name m_nameLabel = new QLabel(this); @@ -80,9 +82,10 @@ InfoSidebarPage::InfoSidebarPage(QWidget* parent) : m_infoLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); m_infoLabel->setTextFormat(Qt::RichText); m_infoLabel->setWordWrap(true); + m_infoLabel->setFont(KGlobalSettings::smallestReadableFont()); if (MetaDataWidget::metaDataAvailable()) { - m_metadataWidget = new MetaDataWidget(this); + m_metaDataWidget = new MetaDataWidget(this); } layout->addItem(new QSpacerItem(spacing, spacing, QSizePolicy::Preferred, QSizePolicy::Fixed)); @@ -90,9 +93,9 @@ InfoSidebarPage::InfoSidebarPage(QWidget* parent) : layout->addWidget(m_nameLabel); layout->addWidget(new KSeparator(this)); layout->addWidget(m_infoLabel); - layout->addWidget(new KSeparator(this)); - if (m_metadataWidget) { - layout->addWidget(m_metadataWidget); + if (m_metaDataWidget != 0) { + layout->addWidget(new KSeparator(this)); + layout->addWidget(m_metaDataWidget); } // ensure that widgets in the information side bar are aligned towards the top layout->addStretch(1); @@ -135,10 +138,13 @@ void InfoSidebarPage::requestDelayedItemInfo(const KFileItem& item) { cancelRequest(); + m_fileItem = KFileItem(); + if (!item.isNull() && (selection().size() <= 1)) { const KUrl url = item.url(); if (!url.isEmpty()) { m_urlCandidate = url; + m_fileItem = item; m_timer->start(TimerDelay); } } @@ -163,6 +169,12 @@ void InfoSidebarPage::resizeEvent(QResizeEvent* event) const int maxWidth = event->size().width() - KDialog::spacingHint() * 4; m_nameLabel->setMaximumWidth(maxWidth); m_infoLabel->setMaximumWidth(maxWidth); + + // try to increase the preview as large as possible + m_preview->setSizeHint(QSize(maxWidth, maxWidth)); + m_urlCandidate = m_shownUrl; // reset the URL candidate if a resizing is done + m_timer->start(TimerDelay); + SidebarPage::resizeEvent(event); } @@ -188,9 +200,9 @@ void InfoSidebarPage::showItemInfo() const int itemCount = selectedItems.count(); if (itemCount > 1) { KIconLoader iconLoader; - QPixmap icon = iconLoader.loadIcon("exec", + QPixmap icon = iconLoader.loadIcon("system-run", KIconLoader::NoGroup, - KIconLoader::SizeEnormous); + m_preview->width()); m_preview->setPixmap(icon); m_nameLabel->setText(i18ncp("@info", "%1 item selected", "%1 items selected", selectedItems.count())); } else if (!applyPlace(file)) { @@ -203,7 +215,7 @@ void InfoSidebarPage::showItemInfo() KIO::PreviewJob* job = KIO::filePreview(list, m_preview->width(), - KIconLoader::SizeEnormous, + m_preview->height(), 0, 0, true, @@ -282,16 +294,21 @@ void InfoSidebarPage::showMetaInfo() const KFileItemList& selectedItems = selection(); if (selectedItems.size() <= 1) { - KFileItem fileItem(S_IFDIR, KFileItem::Unknown, m_shownUrl); - fileItem.refresh(); + KFileItem fileItem; + if (m_fileItem.isNull()) { + // no pending request is ongoing + fileItem = KFileItem(KFileItem::Unknown, KFileItem::Unknown, m_shownUrl); + fileItem.refresh(); + } else { + fileItem = m_fileItem; + } if (fileItem.isDir()) { addInfoLine(text, i18nc("@label", "Type:"), i18nc("@label", "Folder")); } else { addInfoLine(text, i18nc("@label", "Type:"), fileItem.mimeComment()); - QString sizeText(KIO::convertSize(fileItem.size())); - addInfoLine(text, i18nc("@label", "Size:"), sizeText); + addInfoLine(text, i18nc("@label", "Size:"), KIO::convertSize(fileItem.size())); addInfoLine(text, i18nc("@label", "Modified:"), fileItem.timeString()); // TODO: See convertMetaInfo below, find a way to display only interesting information @@ -318,23 +335,25 @@ void InfoSidebarPage::showMetaInfo() } } - if (MetaDataWidget::metaDataAvailable()) { - m_metadataWidget->setFile(fileItem.url()); + if (m_metaDataWidget != 0) { + m_metaDataWidget->setFile(fileItem.url()); } } else { - if (MetaDataWidget::metaDataAvailable()) { + if (m_metaDataWidget != 0) { KUrl::List urls; foreach (const KFileItem& item, selectedItems) { urls.append(item.url()); } - m_metadataWidget->setFiles(urls); + m_metaDataWidget->setFiles(urls); } unsigned long int totalSize = 0; foreach (const KFileItem& item, selectedItems) { - // TODO: what to do with directories (same with the one-item-selected-code)?, - // item.size() does not return the size of the content : not very instinctive for users - totalSize += item.size(); + // Only count the size of files, not dirs; to match what + // DolphinViewContainer::selectionStatusBarText does. + if (!item.isDir() && !item.isLink()) { + totalSize += item.size(); + } } addInfoLine(text, i18nc("@label", "Total size:"), KIO::convertSize(totalSize)); }