#include "dolphinview.h"
-#include <QApplication>
-#include <QClipboard>
-#include <QDropEvent>
-#include <QItemSelectionModel>
-#include <QMouseEvent>
-#include <QVBoxLayout>
-#include <QTimer>
-#include <QScrollBar>
+#include <QtGui/QApplication>
+#include <QtGui/QClipboard>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QItemSelection>
+#include <QtGui/QBoxLayout>
+#include <QtCore/QTimer>
+#include <QtGui/QScrollBar>
#include <kdirmodel.h>
#include <kfileitemdelegate.h>
#include <kfileplacesmodel.h>
+#include <kglobalsettings.h>
#include <klocale.h>
#include <kiconeffect.h>
#include <kio/netaccess.h>
QWidget(parent),
m_showProgress(false),
m_blockContentsMovedSignal(false),
+ m_initializeColumnView(false),
m_mode(mode),
m_iconSize(0),
m_folderCount(0),
this, SLOT(updateCutItems()));
m_urlNavigator = new KUrlNavigator(DolphinSettings::instance().placesModel(), url, this);
- m_urlNavigator->setUrlEditable(DolphinSettings::instance().generalSettings()->editableUrl());
- m_urlNavigator->setHomeUrl(DolphinSettings::instance().generalSettings()->homeUrl());
+
+ const GeneralSettings* settings = DolphinSettings::instance().generalSettings();
+ m_urlNavigator->setUrlEditable(settings->editableUrl());
+ m_urlNavigator->setHomeUrl(settings->homeUrl());
+
connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)),
this, SLOT(changeDirectory(const KUrl&)));
connect(m_urlNavigator, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&)),
this, SLOT(emitSelectionChangedSignal()));
connect(m_controller, SIGNAL(activated()),
this, SLOT(requestActivation()));
+ connect(m_controller, SIGNAL(itemEntered(const QModelIndex&)),
+ this, SLOT(showHoverInformation(const QModelIndex&)));
+ connect(m_controller, SIGNAL(viewportEntered()),
+ this, SLOT(clearHoverInformation()));
createView();
m_iconSize = K3Icon::SizeMedium;
m_filterBar = new FilterBar(this);
- m_filterBar->hide();
+ m_filterBar->setVisible(settings->filterBar());
connect(m_filterBar, SIGNAL(filterChanged(const QString&)),
this, SLOT(changeNameFilter(const QString&)));
connect(m_filterBar, SIGNAL(closeRequest()),
return m_urlNavigator->url();
}
+KUrl DolphinView::rootUrl() const
+{
+ return isColumnViewActive() ? m_dirLister->url() : url();
+}
+
bool DolphinView::isActive() const
{
return m_mainWindow->activeView() == this;
m_mode = mode;
+ if (isColumnViewActive()) {
+ // When changing the mode in the column view, it makes sense
+ // to go back to the root URL of the column view automatically.
+ // Otherwise there it would not be possible to turn off the column view
+ // without focusing the first column.
+ setUrl(m_dirLister->url());
+ }
+
ViewProperties props(m_urlNavigator->url());
props.setViewMode(m_mode);
{
ViewProperties props(m_urlNavigator->url());
props.setShowPreview(show);
- props.save();
m_controller->setShowPreview(show);
-
emit showPreviewChanged();
- reload();
+
+ startDirLister(m_urlNavigator->url(), true);
}
bool DolphinView::showPreview() const
ViewProperties props(m_urlNavigator->url());
props.setShowHiddenFiles(show);
- props.save();
m_dirLister->setShowingDotFiles(show);
emit showHiddenFilesChanged();
- reload();
+ startDirLister(m_urlNavigator->url(), true);
}
bool DolphinView::showHiddenFiles() const
return itemView()->verticalScrollBar()->value();
}
-void DolphinView::emitRequestItemInfo(const KUrl& url)
-{
- emit requestItemInfo(url);
-}
-
bool DolphinView::isFilterBarVisible() const
{
return m_filterBar->isVisible();
ViewProperties props(m_urlNavigator->url());
props.setAdditionalInfo(info);
+ m_controller->setShowAdditionalInfo(info != KFileItemDelegate::NoInformation);
m_fileItemDelegate->setAdditionalInformation(info);
emit additionalInfoChanged(info);
- reload();
+ startDirLister(m_urlNavigator->url(), true);
}
KFileItemDelegate::AdditionalInformation DolphinView::additionalInfo() const
default:
// the renaming operation has been canceled
- reload();
return;
}
} else {
} else {
m_statusBar->setMessage(i18n("Renaming of file '%1' to '%2' failed.", source.fileName(), destFileName),
DolphinStatusBar::Error);
- reload();
}
}
startDirLister(url, true);
}
+void DolphinView::refresh()
+{
+ createView();
+ reload();
+}
+
void DolphinView::mouseReleaseEvent(QMouseEvent* event)
{
QWidget::mouseReleaseEvent(event);
m_mode = mode;
createView();
emit modeChanged();
+
+ if (m_mode == ColumnView) {
+ // The mode has been changed to the Column View. When starting the dir
+ // lister with DolphinView::startDirLister() it is important to give a
+ // hint that the dir lister may not keep the current directory
+ // although this is the default for showing a hierarchy.
+ m_initializeColumnView = true;
+ }
}
const bool showHiddenFiles = props.showHiddenFiles();
KFileItemDelegate::AdditionalInformation info = props.additionalInfo();
if (info != m_fileItemDelegate->additionalInformation()) {
+ m_controller->setShowAdditionalInfo(info != KFileItemDelegate::NoInformation);
m_fileItemDelegate->setAdditionalInformation(info);
-
emit additionalInfoChanged(info);
}
void DolphinView::generatePreviews(const KFileItemList& items)
{
if (m_controller->showPreview()) {
- KIO::PreviewJob* job = KIO::filePreview(items, 128);
- connect(job, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)),
- this, SLOT(showPreview(const KFileItem*, const QPixmap&)));
+
+ // Must turn QList<KFileItem *> to QList<KFileItem>...
+ QList<KFileItem> itemsToPreview;
+ foreach( KFileItem* it, items )
+ itemsToPreview.append( *it );
+
+ KIO::PreviewJob* job = KIO::filePreview(itemsToPreview, 128);
+ connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
+ this, SLOT(showPreview(const KFileItem&, const QPixmap&)));
}
}
-void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap)
+void DolphinView::showPreview(const KFileItem& item, const QPixmap& pixmap)
{
- Q_ASSERT(item != 0);
- if (item->url().directory() != m_dirLister->url().path()) {
+ Q_ASSERT(!item.isNull());
+ if (item.url().directory() != m_dirLister->url().path()) {
// the preview job is still working on items of an older URL, hence
// the item is not part of the directory model anymore
return;
}
- const QModelIndex idx = m_dirModel->indexForItem(*item);
+ const QModelIndex idx = m_dirModel->indexForItem(item);
if (idx.isValid() && (idx.column() == 0)) {
const QMimeData* mimeData = QApplication::clipboard()->mimeData();
- if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(*item)) {
+ if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(item)) {
KIconEffect iconEffect;
const QPixmap cutPixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState);
m_dirModel->setData(idx, QIcon(cutPixmap), Qt::DecorationRole);
m_dirLister->stop();
bool openDir = true;
- bool keepOldDirs = isColumnViewActive();
+ bool keepOldDirs = isColumnViewActive() && !m_initializeColumnView;
+ m_initializeColumnView = false;
+
if (keepOldDirs) {
if (reload) {
keepOldDirs = false;
void DolphinView::updateActivationState()
{
m_urlNavigator->setActive(isActive());
+
+ QColor color = KGlobalSettings::baseColor();
if (isActive()) {
emit urlChanged(url());
emit selectionChanged(selectedItems());
+ } else {
+ // darken the background if the view is inactive
+ // TODO: does not work for a black background
+ color = color.darker(105);
}
+
+ QWidget* viewport = itemView()->viewport();
+ QPalette palette;
+ palette.setColor(viewport->backgroundRole(), color);
+ viewport->setPalette(palette);
+
+ update();
}
void DolphinView::updateCutItems()
applyCutItemEffect();
}
+void DolphinView::showHoverInformation(const QModelIndex& index)
+{
+ if (hasSelection()) {
+ return;
+ }
+
+ const KFileItem* item = fileItem(index);
+ if (item != 0) {
+ m_statusBar->setMessage(item->getStatusBarInfo(), DolphinStatusBar::Default);
+ emit requestItemInfo(item->url());
+ }
+}
+
+void DolphinView::clearHoverInformation()
+{
+ m_statusBar->clear();
+ emit requestItemInfo(KUrl());
+}
+
+
void DolphinView::createView()
{
// delete current view