***************************************************************************/
#include "dolphinview.h"
-#include <ktoggleaction.h>
-#include <kactioncollection.h>
#include <QApplication>
#include <QClipboard>
#include <QTimer>
#include <QScrollBar>
+#include <kactioncollection.h>
#include <kcolorscheme.h>
#include <kdirlister.h>
#include <kfileitemdelegate.h>
#include <kio/previewjob.h>
#include <kjob.h>
#include <kmenu.h>
+#include <kmessagebox.h>
#include <kmimetyperesolver.h>
#include <konq_operations.h>
#include <konqmimedata.h>
+#include <ktoggleaction.h>
#include <kurl.h>
#include "dolphindropcontroller.h"
m_topLayout->setSpacing(0);
m_topLayout->setMargin(0);
- connect(m_dirLister, SIGNAL(completed()),
- this, SLOT(updateCutItems()));
-
m_controller = new DolphinController(this);
m_controller->setUrl(url);
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.
- const KUrl root = rootUrl();
- setUrl(root);
- m_controller->setUrl(root);
- }
-
deleteView();
const KUrl viewPropsUrl = viewPropertiesUrl();
// additional information manually
const KFileItemDelegate::InformationList infoList = props.additionalInfo();
m_fileItemDelegate->setShowInformation(infoList);
- emit additionalInfoChanged(infoList);
+ emit additionalInfoChanged();
// Not all view modes support categorized sorting. Adjust the sorting model
// if changing the view mode results in a change of the categorized sorting
m_iconManager->setShowPreview(show);
emit showPreviewChanged();
- loadDirectory(viewPropsUrl, true);
+ loadDirectory(viewPropsUrl);
}
bool DolphinView::showPreview() const
m_dirLister->setShowingDotFiles(show);
emit showHiddenFilesChanged();
- loadDirectory(viewPropsUrl, true);
+ loadDirectory(viewPropsUrl);
}
bool DolphinView::showHiddenFiles() const
void DolphinView::zoomIn()
{
m_controller->triggerZoomIn();
+ m_iconManager->updatePreviews();
}
void DolphinView::zoomOut()
{
m_controller->triggerZoomOut();
+ m_iconManager->updatePreviews();
}
bool DolphinView::isZoomInPossible() const
props.setAdditionalInfo(info);
m_fileItemDelegate->setShowInformation(info);
- emit additionalInfoChanged(info);
+ emit additionalInfoChanged();
if (itemView() != m_detailsView) {
// the details view requires no reloading of the directory, as it maps
// the file item delegate info to its columns internally
- loadDirectory(viewPropsUrl, true);
+ loadDirectory(viewPropsUrl);
}
}
QWidget::mouseReleaseEvent(event);
setActive(true);
}
+
+void DolphinView::wheelEvent(QWheelEvent* event)
+{
+ if (event->modifiers() & Qt::ControlModifier) {
+ const int delta = event->delta();
+ if ((delta > 0) && isZoomInPossible()) {
+ zoomIn();
+ } else if ((delta < 0) && isZoomOutPossible()) {
+ zoomOut();
+ }
+ event->accept();
+ }
+}
+
+bool DolphinView::eventFilter(QObject* watched, QEvent* event)
+{
+ if ((watched == itemView()) && (event->type() == QEvent::FocusIn)) {
+ m_controller->requestActivation();
+ }
+
+ return QWidget::eventFilter(watched, event);
+}
+
void DolphinView::activate()
{
setActive(true);
KUrl DolphinView::viewPropertiesUrl() const
{
if (isColumnViewActive()) {
- return m_dirLister->url();
+ return m_columnView->rootUrl();
}
return url();
KFileItemDelegate::InformationList info = props.additionalInfo();
if (info != m_fileItemDelegate->showInformation()) {
m_fileItemDelegate->setShowInformation(info);
- emit additionalInfoChanged(info);
+ emit additionalInfoChanged();
}
const bool showPreview = props.showPreview();
emit sortOrderChanged(order);
}
+void DolphinView::toggleSortOrder()
+{
+ const Qt::SortOrder order = (sortOrder() == Qt::AscendingOrder) ?
+ Qt::DescendingOrder :
+ Qt::AscendingOrder;
+ setSortOrder(order);
+}
+
void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& info)
{
ViewProperties props(viewPropertiesUrl());
m_fileItemDelegate->setShowInformation(info);
- emit additionalInfoChanged(info);
+ emit additionalInfoChanged();
+}
+
+void DolphinView::updateAdditionalInfoActions(KActionCollection* collection)
+{
+ const bool enable = (m_mode == DolphinView::DetailsView) ||
+ (m_mode == DolphinView::IconsView);
+
+ QAction* showSizeInfo = collection->action("show_size_info");
+ QAction* showDateInfo = collection->action("show_date_info");
+ QAction* showPermissionsInfo = collection->action("show_permissions_info");
+ QAction* showOwnerInfo = collection->action("show_owner_info");
+ QAction* showGroupInfo = collection->action("show_group_info");
+ QAction* showMimeInfo = collection->action("show_mime_info");
+
+ showSizeInfo->setChecked(false);
+ showDateInfo->setChecked(false);
+ showPermissionsInfo->setChecked(false);
+ showOwnerInfo->setChecked(false);
+ showGroupInfo->setChecked(false);
+ showMimeInfo->setChecked(false);
+
+ showSizeInfo->setEnabled(enable);
+ showDateInfo->setEnabled(enable);
+ showPermissionsInfo->setEnabled(enable);
+ showOwnerInfo->setEnabled(enable);
+ showGroupInfo->setEnabled(enable);
+ showMimeInfo->setEnabled(enable);
+
+ foreach (KFileItemDelegate::Information info, m_fileItemDelegate->showInformation()) {
+ switch (info) {
+ case KFileItemDelegate::Size:
+ showSizeInfo->setChecked(true);
+ break;
+ case KFileItemDelegate::ModificationTime:
+ showDateInfo->setChecked(true);
+ break;
+ case KFileItemDelegate::Permissions:
+ showPermissionsInfo->setChecked(true);
+ break;
+ case KFileItemDelegate::Owner:
+ showOwnerInfo->setChecked(true);
+ break;
+ case KFileItemDelegate::OwnerAndGroup:
+ showGroupInfo->setChecked(true);
+ break;
+ case KFileItemDelegate::FriendlyMimeType:
+ showMimeInfo->setChecked(true);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void DolphinView::toggleAdditionalInfo(QAction* action)
+{
+ const KFileItemDelegate::Information info =
+ static_cast<KFileItemDelegate::Information>(action->data().toInt());
+
+ KFileItemDelegate::InformationList list = additionalInfo();
+
+ const bool show = action->isChecked();
+ const int index = list.indexOf(info);
+ const bool containsInfo = (index >= 0);
+ if (show && !containsInfo) {
+ list.append(info);
+ setAdditionalInfo(list);
+ } else if (!show && containsInfo) {
+ list.removeAt(index);
+ setAdditionalInfo(list);
+ Q_ASSERT(list.indexOf(info) < 0);
+ }
}
void DolphinView::emitContentsMoved()
void DolphinView::showHoverInformation(const KFileItem& item)
{
- if (hasSelection() || !m_active) {
- return;
- }
-
emit requestItemInfo(item);
}
void DolphinView::clearHoverInformation()
{
- if (m_active) {
- emit requestItemInfo(KFileItem());
- }
+ emit requestItemInfo(KFileItem());
}
void DolphinView::createView()
}
Q_ASSERT(view != 0);
+ view->installEventFilter(this);
+
+ m_controller->setItemView(view);
m_fileItemDelegate = new KFileItemDelegate(view);
view->setItemDelegate(m_fileItemDelegate);
return false;
}
-KToggleAction* DolphinView::iconsModeAction(KActionCollection* actionCollection)
-{
- KToggleAction* iconsView = actionCollection->add<KToggleAction>("icons");
- iconsView->setText(i18nc("@action:inmenu View Mode", "Icons"));
- iconsView->setShortcut(Qt::CTRL | Qt::Key_1);
- iconsView->setIcon(KIcon("view-list-icons"));
- iconsView->setData(QVariant::fromValue(IconsView));
- return iconsView;
-}
-
-KToggleAction* DolphinView::detailsModeAction(KActionCollection* actionCollection)
-{
- KToggleAction* detailsView = actionCollection->add<KToggleAction>("details");
- detailsView->setText(i18nc("@action:inmenu View Mode", "Details"));
- detailsView->setShortcut(Qt::CTRL | Qt::Key_2);
- detailsView->setIcon(KIcon("view-list-details"));
- detailsView->setData(QVariant::fromValue(DetailsView));
- return detailsView;
-}
-
-KToggleAction* DolphinView::columnsModeAction(KActionCollection* actionCollection)
-{
- KToggleAction* columnView = actionCollection->add<KToggleAction>("columns");
- columnView->setText(i18nc("@action:inmenu View Mode", "Columns"));
- columnView->setShortcut(Qt::CTRL | Qt::Key_3);
- columnView->setIcon(KIcon("view-file-columns"));
- columnView->setData(QVariant::fromValue(ColumnView));
- return columnView;
-}
-
-QString DolphinView::currentViewModeActionName() const
-{
- switch (m_mode) {
- case DolphinView::IconsView:
- return "icons";
- case DolphinView::DetailsView:
- return "details";
- case DolphinView::ColumnView:
- return "columns";
- }
- return QString(); // can't happen
-}
-
void DolphinView::renameSelectedItems()
{
const KFileItemList items = selectedItems();
}
}
}
+ } else if (DolphinSettings::instance().generalSettings()->renameInline()) {
+ Q_ASSERT(items.count() == 1);
+
+ if (isColumnViewActive()) {
+ m_columnView->editItem(items.first());
+ } else {
+ const QModelIndex dirIndex = m_dolphinModel->indexForItem(items.first());
+ const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
+ itemView()->edit(proxyIndex);
+ }
} else {
- // Only one item has been selected for renaming. Use the custom
- // renaming mechanism from the views.
Q_ASSERT(items.count() == 1);
- // TODO: Think about using KFileItemDelegate as soon as it supports editing.
- // Currently the RenameDialog is used, but I'm not sure whether inline renaming
- // is a benefit for the user at all -> let's wait for some input first...
RenameDialog dialog(this, items);
if (dialog.exec() == QDialog::Rejected) {
return;
const QMimeData* mimeData = clipboard->mimeData();
const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData);
-
- // per default the pasting is done into the current Url of the view
- KUrl destUrl(url());
-
- // check whether the pasting should be done into a selected directory
- const KUrl::List selectedUrls = this->selectedUrls();
- if (selectedUrls.count() == 1) {
- const KFileItem fileItem(S_IFDIR,
- KFileItem::Unknown,
- selectedUrls.first(),
- true);
- if (fileItem.isDir()) {
- // only one item is selected which is a directory, hence paste
- // into this directory
- destUrl = selectedUrls.first();
- }
- }
-
if (KonqMimeData::decodeIsCutSelection(mimeData)) {
- KonqOperations::copy(this, KonqOperations::MOVE, sourceUrls, destUrl);
+ KonqOperations::copy(this, KonqOperations::MOVE, sourceUrls, url());
emit doingOperation(KonqFileUndoManager::MOVE);
clipboard->clear();
} else {
- KonqOperations::copy(this, KonqOperations::COPY, sourceUrls, destUrl);
+ KonqOperations::copy(this, KonqOperations::COPY, sourceUrls, url());
emit doingOperation(KonqFileUndoManager::COPY);
}
}
KUrl::List urls = KUrl::List::fromMimeData(mimeData);
if (!urls.isEmpty()) {
ret.first = true;
- ret.second = i18ncp("@action:inmenu", "Paste One File", "Paste %1 Files", urls.count());
+ if (urls.count() == 1) {
+ const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, urls.first(), true);
+ ret.second = item.isDir() ? i18nc("@action:inmenu", "Paste One Folder") :
+ i18nc("@action:inmenu", "Paste One File");
+
+ } else {
+ ret.second = i18ncp("@action:inmenu", "Paste One Item", "Paste %1 Items", urls.count());
+ }
} else {
ret.first = false;
ret.second = i18nc("@action:inmenu", "Paste");
}
- if (ret.first) {
- const KFileItemList items = selectedItems();
- const uint count = items.count();
- if (count > 1) {
- // pasting should not be allowed when more than one file
- // is selected
- ret.first = false;
- } else if (count == 1) {
- // Only one file is selected. Pasting is only allowed if this
- // file is a directory.
- ret.first = items.first().isDir();
- }
- }
return ret;
}
-KAction* DolphinView::createRenameAction(KActionCollection* collection)
-{
- KAction* rename = collection->addAction("rename");
- rename->setText(i18nc("@action:inmenu File", "Rename..."));
- rename->setShortcut(Qt::Key_F2);
- return rename;
-}
-
-KAction* DolphinView::createMoveToTrashAction(KActionCollection* collection)
-{
- KAction* moveToTrash = collection->addAction("move_to_trash");
- moveToTrash->setText(i18nc("@action:inmenu File", "Move to Trash"));
- moveToTrash->setIcon(KIcon("user-trash"));
- moveToTrash->setShortcut(QKeySequence::Delete);
- return moveToTrash;
-}
-
-KAction* DolphinView::createDeleteAction(KActionCollection* collection)
-{
- KAction* deleteAction = collection->addAction("delete");
- deleteAction->setIcon(KIcon("edit-delete"));
- deleteAction->setText(i18nc("@action:inmenu File", "Delete"));
- deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete);
- return deleteAction;
-}
-
#include "dolphinview.moc"