#include "zoomlevelinfo.h"
#ifdef HAVE_NEPOMUK
- #include <Nepomuk/ResourceManager>
+ #include <Nepomuk2/ResourceManager>
#endif
namespace {
m_scrollToCurrentItem(false),
m_restoredContentsPosition(),
m_selectedUrls(),
+ m_clearSelectionBeforeSelectingNewItems(false),
m_versionControlObserver(0)
{
m_topLayout = new QVBoxLayout(this);
m_model = new KFileItemModel(this);
m_view = new DolphinItemListView();
m_view->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
- m_view->setEnlargeSmallPreviews(GeneralSettings::enlargeSmallPreviews());
m_view->setVisibleRoles(QList<QByteArray>() << "text");
applyModeToView();
const int delay = GeneralSettings::autoExpandFolders() ? 750 : -1;
controller->setAutoActivationDelay(delay);
+ // The EnlargeSmallPreviews setting can only be changed after the model
+ // has been set in the view by KItemListController.
+ m_view->setEnlargeSmallPreviews(GeneralSettings::enlargeSmallPreviews());
+
m_container = new KItemListContainer(controller, this);
m_container->installEventFilter(this);
setFocusProxy(m_container);
connect(m_model, SIGNAL(directoryLoadingStarted()), this, SLOT(slotDirectoryLoadingStarted()));
connect(m_model, SIGNAL(directoryLoadingCompleted()), this, SLOT(slotDirectoryLoadingCompleted()));
+ connect(m_model, SIGNAL(directoryLoadingCanceled()), this, SIGNAL(directoryLoadingCanceled()));
connect(m_model, SIGNAL(directoryLoadingProgress(int)), this, SIGNAL(directoryLoadingProgress(int)));
connect(m_model, SIGNAL(directorySortingProgress(int)), this, SIGNAL(directorySortingProgress(int)));
connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)),
KFileItemList DolphinView::selectedItems() const
{
const KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
- const QSet<int> selectedIndexes = selectionManager->selectedItems();
+ QList<int> selectedIndexes = selectionManager->selectedItems().toList();
+
+ qSort(selectedIndexes);
KFileItemList selectedItems;
- QSetIterator<int> it(selectedIndexes);
+ QListIterator<int> it(selectedIndexes);
while (it.hasNext()) {
const int index = it.next();
selectedItems.append(m_model->fileItem(index));
return;
}
+ clearSelection();
+
emit urlAboutToBeChanged(url);
m_url = url;
void DolphinView::clearSelection()
{
+ m_selectedUrls.clear();
m_container->controller()->selectionManager()->clearSelection();
}
void DolphinView::renameSelectedItems()
{
const KFileItemList items = selectedItems();
- if (items.isEmpty()) {
- return;
- }
-
- if (items.count() == 1 && GeneralSettings::renameInline()) {
- const int index = m_model->index(items.first());
- m_view->editRole(index, "text");
- } else {
- RenameDialog* dialog = new RenameDialog(this, items);
- dialog->setAttribute(Qt::WA_DeleteOnClose);
- dialog->show();
- dialog->raise();
- dialog->activateWindow();
- }
-
- // Assure that the current index remains visible when KFileItemModel
- // will notify the view about changed items (which might result in
- // a changed sorting).
- m_assureVisibleCurrentIndex = true;
+ if (items.isEmpty()) {
+ return;
+ }
+
+ if (items.count() == 1 && GeneralSettings::renameInline()) {
+ const int index = m_model->index(items.first());
+ m_view->editRole(index, "text");
+ } else {
+ RenameDialog* dialog = new RenameDialog(this, items);
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->show();
+ dialog->raise();
+ dialog->activateWindow();
+ }
+
+ // Assure that the current index remains visible when KFileItemModel
+ // will notify the view about changed items (which might result in
+ // a changed sorting).
+ m_assureVisibleCurrentIndex = true;
}
void DolphinView::trashSelectedItems()
{
Q_ASSERT(indexes.count() >= 2);
- KFileItemList items;
-
- QSetIterator<int> it(indexes);
- while (it.hasNext()) {
- const int index = it.next();
- items.append(m_model->fileItem(index));
- }
-
- if (items.count() > 5) {
- QString question = QString("Are you sure you want to open %1 items?").arg(items.count());
+ if (indexes.count() > 5) {
+ QString question = i18np("Are you sure you want to open 1 item?", "Are you sure you want to open %1 items?", indexes.count());
const int answer = KMessageBox::warningYesNo(this, question);
if (answer != KMessageBox::Yes) {
return;
}
}
- foreach (const KFileItem& item, items) {
- if (item.isDir()) {
+ KFileItemList items;
+ items.reserve(indexes.count());
+
+ QSetIterator<int> it(indexes);
+ while (it.hasNext()) {
+ const int index = it.next();
+ KFileItem item = m_model->fileItem(index);
+
+ if (item.isDir()) { // Open folders in new tabs
emit tabRequested(item.url());
} else {
- emit itemActivated(item);
+ items.append(item);
}
}
+
+ if (items.count() == 1) {
+ emit itemActivated(items.first());
+ } else if (items.count() > 1) {
+ emit itemsActivated(items);
+ }
}
void DolphinView::slotItemMiddleClicked(int index)
bool nepomukRunning = false;
bool indexingEnabled = false;
#ifdef HAVE_NEPOMUK
- nepomukRunning = (Nepomuk::ResourceManager::instance()->initialized());
+ nepomukRunning = (Nepomuk2::ResourceManager::instance()->initialized());
if (nepomukRunning) {
KConfig config("nepomukserverrc");
- indexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", false);
+ indexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", true);
}
#endif
void DolphinView::observeCreatedItem(const KUrl& url)
{
- markUrlAsCurrent(url);
- markUrlsAsSelected(QList<KUrl>() << url);
+ if (m_active) {
+ clearSelection();
+ markUrlAsCurrent(url);
+ markUrlsAsSelected(QList<KUrl>() << url);
+ }
}
void DolphinView::slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl)
}
if (!m_selectedUrls.isEmpty()) {
- clearSelection();
-
KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
+
+ if (m_clearSelectionBeforeSelectingNewItems) {
+ selectionManager->clearSelection();
+ m_clearSelectionBeforeSelectingNewItems = false;
+ }
+
QSet<int> selectedItems = selectionManager->selectedItems();
- foreach (const KUrl& url, m_selectedUrls) {
- const int index = m_model->index(url);
+ QList<KUrl>::iterator it = m_selectedUrls.begin();
+ while (it != m_selectedUrls.end()) {
+ const int index = m_model->index(*it);
if (index >= 0) {
selectedItems.insert(index);
+ it = m_selectedUrls.erase(it);
+ } else {
+ ++it;
}
}
selectionManager->setSelectedItems(selectedItems);
- m_selectedUrls.clear();
}
}
if (!newName.isEmpty() && newName != oldItem.text() && newName != QLatin1String(".") && newName != QLatin1String("..")) {
const KUrl oldUrl = oldItem.url();
- QHash<QByteArray, QVariant> data;
- data.insert(role, value);
- m_model->setData(index, data);
+ const KUrl newUrl(url().path(KUrl::AddTrailingSlash) + newName);
+ const bool newNameExistsAlready = (m_model->index(newUrl) >= 0);
+ if (!newNameExistsAlready) {
+ // Only change the data in the model if no item with the new name
+ // is in the model yet. If there is an item with the new name
+ // already, calling KonqOperations::rename() will open a dialog
+ // asking for a new name, and KFileItemModel will update the
+ // data when the dir lister signals that the file name has changed.
+ QHash<QByteArray, QVariant> data;
+ data.insert(role, value);
+ m_model->setData(index, data);
+ }
KonqOperations::rename(this, oldUrl, newName);
}
destUrls << destination;
}
markUrlsAsSelected(destUrls);
+ m_clearSelectionBeforeSelectingNewItems = true;
}
void DolphinView::updateWritableState()