#include <QEvent>
#include <QInputDialog>
#include <QLabel>
+#include <QPainter>
#include <QPixmap>
#include <QResizeEvent>
+#include <QStyleOptionMenuItem>
#include <QTimer>
#include <QVBoxLayout>
#include "metatextlabel.h"
#include "pixmapviewer.h"
+class InfoSeparator : public QWidget
+{
+public:
+ InfoSeparator(QWidget* parent);
+ virtual ~InfoSeparator();
+
+protected:
+ virtual void paintEvent(QPaintEvent* event);
+};
+
+InfoSeparator::InfoSeparator(QWidget* parent) :
+ QWidget(parent)
+{
+ setMinimumSize(0, 8);
+}
+
+InfoSeparator::~InfoSeparator()
+{
+}
+
+void InfoSeparator::paintEvent(QPaintEvent* event)
+{
+ Q_UNUSED(event);
+ QPainter painter(this);
+
+ QStyleOptionMenuItem option;
+ option.initFrom(this);
+ option.menuItemType = QStyleOptionMenuItem::Separator;
+ style()->drawControl(QStyle::CE_MenuItem, &option, &painter, this);
+}
+
InfoSidebarPage::InfoSidebarPage(QWidget* parent) :
SidebarPage(parent),
m_pendingPreview(false),
m_metaTextLabel->setMinimumWidth(spacing);
layout->addWidget(m_nameLabel);
+ layout->addWidget(new InfoSeparator(this));
layout->addWidget(m_preview);
+ layout->addWidget(new InfoSeparator(this));
if (m_metaDataWidget != 0) {
layout->addWidget(m_metaDataWidget);
+ layout->addWidget(new InfoSeparator(this));
}
layout->addWidget(m_metaTextLabel);
m_shownUrl = url();
showItemInfo();
} else {
- if (count == 1) {
- const KUrl url = selection.first().url();
- if (!url.isEmpty()) {
- m_urlCandidate = url;
- }
+ if ((count == 1) && !selection.first().url().isEmpty()) {
+ m_urlCandidate = selection.first().url();
}
m_timer->start(TimerDelay);
}
void InfoSidebarPage::requestDelayedItemInfo(const KFileItem& item)
{
- if (!selection().isEmpty()) {
- // if items are selected, no item information may get requested
- return;
- }
-
cancelRequest();
m_fileItem = KFileItem();
-
- if (!item.isNull() && (selection().size() <= 1)) {
- const KUrl url = item.url();
- if (!url.isEmpty()) {
- m_urlCandidate = url;
- m_fileItem = item;
+ if (item.isNull()) {
+ // The cursor is above the viewport. If files are selected,
+ // show information regarding the selection.
+ if (selection().size() > 0) {
m_timer->start(TimerDelay);
}
+ } else if (!item.url().isEmpty()) {
+ m_urlCandidate = item.url();
+ m_fileItem = item;
+ m_timer->start(TimerDelay);
}
}
void InfoSidebarPage::showEvent(QShowEvent* event)
{
SidebarPage::showEvent(event);
- if (event->spontaneous()) {
- return;
+ if (!event->spontaneous()) {
+ showItemInfo();
}
- showItemInfo();
}
void InfoSidebarPage::resizeEvent(QResizeEvent* event)
cancelRequest();
const KFileItemList& selectedItems = selection();
- const KUrl file = selectedItems.isEmpty() ? m_shownUrl : selectedItems[0].url();
+ const KUrl file = (!m_fileItem.isNull() || selectedItems.isEmpty()) ? m_shownUrl : selectedItems[0].url();
if (!file.isValid()) {
return;
}
- const int itemCount = selectedItems.count();
- if (itemCount > 1) {
+ const int selectionCount = selectedItems.count();
+ if (m_fileItem.isNull() && (selectionCount > 1)) {
KIconLoader iconLoader;
QPixmap icon = iconLoader.loadIcon("dialog-information",
KIconLoader::NoGroup,
KIconLoader::SizeEnormous);
m_preview->setPixmap(icon);
- m_nameLabel->setText(i18ncp("@info", "%1 item selected", "%1 items selected", selectedItems.count()));
+ m_nameLabel->setText(i18ncp("@info", "%1 item selected", "%1 items selected", selectionCount));
} else if (!applyPlace(file)) {
// try to get a preview pixmap from the item...
KUrl::List list;
connect(job, SIGNAL(failed(const KFileItem&)),
this, SLOT(showIcon(const KFileItem&)));
- m_nameLabel->setText(file.fileName());
+ m_nameLabel->setText( !m_fileItem.isNull() && selectedItems.isEmpty() ? m_fileItem.text() : ( !selectedItems.isEmpty() ? selectedItems[0].text() : file.fileName() ) );
}
showMetaInfo();
m_metaTextLabel->clear();
const KFileItemList& selectedItems = selection();
- if (selectedItems.size() <= 1) {
+ if ((selectedItems.size() <= 1) || !m_fileItem.isNull()) {
KFileItem fileItem;
if (m_fileItem.isNull()) {
// no pending request is ongoing
- fileItem = KFileItem(KFileItem::Unknown, KFileItem::Unknown, m_shownUrl);
+ const KUrl url = (selectedItems.size() == 1) ? selectedItems.first().url() : m_shownUrl;
+ fileItem = KFileItem(KFileItem::Unknown, KFileItem::Unknown, url);
fileItem.refresh();
} else {
fileItem = m_fileItem;
if (fileItem.isDir()) {
m_metaTextLabel->add(i18nc("@label", "Type:"), i18nc("@label", "Folder"));
+ m_metaTextLabel->add(i18nc("@label", "Modified:"), fileItem.timeString());
} else {
m_metaTextLabel->add(i18nc("@label", "Type:"), fileItem.mimeComment());
}
if (m_metaDataWidget != 0) {
- m_metaDataWidget->setFile(fileItem.url());
+ m_metaDataWidget->setFile(fileItem.targetUrl());
}
} else {
if (m_metaDataWidget != 0) {
KUrl::List urls;
foreach (const KFileItem& item, selectedItems) {
- urls.append(item.url());
+ urls.append(item.targetUrl());
}
m_metaDataWidget->setFiles(urls);
}