X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/edabe0a7c8d047e8500fc3e8027fc3d19f346f77..11289b4fc3efbc074b668d4516cd896f8ade9761:/src/dolphiniconsview.cpp diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index a7b256d2b..0dd7dd719 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -26,6 +26,7 @@ #include "dolphin_generalsettings.h" #include "draganddrophelper.h" #include "selectionmanager.h" +#include "zoomlevelinfo.h" #include #include @@ -34,8 +35,6 @@ #include #include -#include -#include #include DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controller) : @@ -52,6 +51,7 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle m_dropRect() { Q_ASSERT(controller != 0); + setLayoutDirection(Qt::LeftToRight); setViewMode(QListView::IconMode); setResizeMode(QListView::Adjust); setSpacing(KDialog::spacingHint()); @@ -69,25 +69,25 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle if (KGlobalSettings::singleClick()) { connect(this, SIGNAL(clicked(const QModelIndex&)), controller, SLOT(triggerItem(const QModelIndex&))); - if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) { - m_selectionManager = new SelectionManager(this); - connect(m_selectionManager, SIGNAL(selectionChanged()), - this, SLOT(requestActivation())); - connect(m_controller, SIGNAL(urlChanged(const KUrl&)), - m_selectionManager, SLOT(reset())); - } } else { connect(this, SIGNAL(doubleClicked(const QModelIndex&)), controller, SLOT(triggerItem(const QModelIndex&))); } + + if (DolphinSettings::instance().generalSettings()->showSelectionToggle()) { + m_selectionManager = new SelectionManager(this); + connect(m_selectionManager, SIGNAL(selectionChanged()), + this, SLOT(requestActivation())); + connect(m_controller, SIGNAL(urlChanged(const KUrl&)), + m_selectionManager, SLOT(reset())); + } + connect(this, SIGNAL(entered(const QModelIndex&)), controller, SLOT(emitItemEntered(const QModelIndex&))); connect(this, SIGNAL(viewportEntered()), controller, SLOT(emitViewportEntered())); - connect(controller, SIGNAL(zoomIn()), - this, SLOT(zoomIn())); - connect(controller, SIGNAL(zoomOut()), - this, SLOT(zoomOut())); + connect(controller, SIGNAL(zoomLevelChanged(int)), + this, SLOT(setZoomLevel(int))); const DolphinView* view = controller->dolphinView(); connect(view, SIGNAL(showPreviewChanged()), @@ -192,6 +192,9 @@ void DolphinIconsView::mousePressEvent(QMouseEvent* event) } if (!index.isValid()) { + if (QApplication::mouseButtons() & Qt::MidButton) { + m_controller->replaceUrlByClipboard(); + } const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) { clearSelection(); @@ -206,12 +209,12 @@ void DolphinIconsView::startDrag(Qt::DropActions supportedActions) // TODO: invoking KCategorizedView::startDrag() should not be necessary, we'll // fix this in KDE 4.1 KCategorizedView::startDrag(supportedActions); - DragAndDropHelper::startDrag(this, supportedActions); + DragAndDropHelper::instance().startDrag(this, supportedActions, m_controller); } void DolphinIconsView::dragEnterEvent(QDragEnterEvent* event) { - if (event->mimeData()->hasUrls()) { + if (DragAndDropHelper::instance().isMimeDataSupported(event->mimeData())) { event->acceptProposedAction(); } } @@ -239,7 +242,7 @@ void DolphinIconsView::dragMoveEvent(QDragMoveEvent* event) m_dropRect.setSize(QSize()); // set as invalid } } - if (event->mimeData()->hasUrls()) { + if (DragAndDropHelper::instance().isMimeDataSupported(event->mimeData())) { // accept url drops, independently from the destination item event->acceptProposedAction(); } @@ -249,17 +252,9 @@ void DolphinIconsView::dragMoveEvent(QDragMoveEvent* event) void DolphinIconsView::dropEvent(QDropEvent* event) { - if (!selectionModel()->isSelected(indexAt(event->pos()))) { - const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData()); - if (!urls.isEmpty()) { - const QModelIndex index = indexAt(event->pos()); - const KFileItem item = m_controller->itemForIndex(index); - m_controller->indicateDroppedUrls(urls, - m_controller->url(), - item); - event->acceptProposedAction(); - } - } + const QModelIndex index = indexAt(event->pos()); + const KFileItem item = m_controller->itemForIndex(index); + m_controller->indicateDroppedUrls(item, m_controller->url(), event); KCategorizedView::dropEvent(event); } @@ -328,56 +323,28 @@ void DolphinIconsView::slotAdditionalInfoChanged() updateGridSize(showPreview, view->additionalInfo().count()); } -void DolphinIconsView::zoomIn() +void DolphinIconsView::setZoomLevel(int level) { - if (isZoomInPossible()) { - IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - - const int oldIconSize = settings->iconSize(); - int newIconSize = oldIconSize; - - const bool showPreview = m_controller->dolphinView()->showPreview(); - if (showPreview) { - const int previewSize = increasedIconSize(settings->previewSize()); - settings->setPreviewSize(previewSize); - } else { - newIconSize = increasedIconSize(oldIconSize); - settings->setIconSize(newIconSize); - } + IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - // increase also the grid size - const int diff = newIconSize - oldIconSize; - settings->setItemWidth(settings->itemWidth() + diff); - settings->setItemHeight(settings->itemHeight() + diff); + const int oldIconSize = settings->iconSize(); + int newIconSize = oldIconSize; - updateGridSize(showPreview, additionalInfoCount()); + const bool showPreview = m_controller->dolphinView()->showPreview(); + if (showPreview) { + const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level); + settings->setPreviewSize(previewSize); + } else { + newIconSize = ZoomLevelInfo::iconSizeForZoomLevel(level); + settings->setIconSize(newIconSize); } -} -void DolphinIconsView::zoomOut() -{ - if (isZoomOutPossible()) { - IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - - const int oldIconSize = settings->iconSize(); - int newIconSize = oldIconSize; - - const bool showPreview = m_controller->dolphinView()->showPreview(); - if (showPreview) { - const int previewSize = decreasedIconSize(settings->previewSize()); - settings->setPreviewSize(previewSize); - } else { - newIconSize = decreasedIconSize(settings->iconSize()); - settings->setIconSize(newIconSize); - } + // increase also the grid size + const int diff = newIconSize - oldIconSize; + settings->setItemWidth(settings->itemWidth() + diff); + settings->setItemHeight(settings->itemHeight() + diff); - // decrease also the grid size - const int diff = oldIconSize - newIconSize; - settings->setItemWidth(settings->itemWidth() - diff); - settings->setItemHeight(settings->itemHeight() - diff); - - updateGridSize(showPreview, additionalInfoCount()); - } + updateGridSize(showPreview, additionalInfoCount()); } void DolphinIconsView::requestActivation() @@ -395,50 +362,6 @@ void DolphinIconsView::updateFont() } } -bool DolphinIconsView::isZoomInPossible() const -{ - IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - const bool showPreview = m_controller->dolphinView()->showPreview(); - const int size = showPreview ? settings->previewSize() : settings->iconSize(); - return size < KIconLoader::SizeEnormous; -} - -bool DolphinIconsView::isZoomOutPossible() const -{ - IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); - const bool showPreview = m_controller->dolphinView()->showPreview(); - const int size = showPreview ? settings->previewSize() : settings->iconSize(); - return size > KIconLoader::SizeSmall; -} - -int DolphinIconsView::increasedIconSize(int size) const -{ - int incSize = 0; - switch (size) { - case KIconLoader::SizeSmall: incSize = KIconLoader::SizeSmallMedium; break; - case KIconLoader::SizeSmallMedium: incSize = KIconLoader::SizeMedium; break; - case KIconLoader::SizeMedium: incSize = KIconLoader::SizeLarge; break; - case KIconLoader::SizeLarge: incSize = KIconLoader::SizeHuge; break; - case KIconLoader::SizeHuge: incSize = KIconLoader::SizeEnormous; break; - default: Q_ASSERT(false); break; - } - return incSize; -} - -int DolphinIconsView::decreasedIconSize(int size) const -{ - int decSize = 0; - switch (size) { - case KIconLoader::SizeSmallMedium: decSize = KIconLoader::SizeSmall; break; - case KIconLoader::SizeMedium: decSize = KIconLoader::SizeSmallMedium; break; - case KIconLoader::SizeLarge: decSize = KIconLoader::SizeMedium; break; - case KIconLoader::SizeHuge: decSize = KIconLoader::SizeLarge; break; - case KIconLoader::SizeEnormous: decSize = KIconLoader::SizeHuge; break; - default: Q_ASSERT(false); break; - } - return decSize; -} - void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount) { const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); @@ -476,9 +399,6 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount) const int spacing = settings->gridSpacing(); setGridSize(QSize(itemWidth + spacing * 2, itemHeight + spacing)); - m_controller->setZoomInPossible(isZoomInPossible()); - m_controller->setZoomOutPossible(isZoomOutPossible()); - KFileItemDelegate* delegate = dynamic_cast(itemDelegate()); if (delegate != 0) { delegate->setMaximumSize(m_itemSize);