return itemList;
}
-KUrl::List DolphinView::selectedUrls() const
-{
- KUrl::List urls;
- const KFileItemList list = selectedItems();
- foreach (const KFileItem &item, list) {
- urls.append(item.url());
- }
- return urls;
-}
-
int DolphinView::selectedItemsCount() const
{
const QAbstractItemView* view = m_viewAccessor.itemView();
// The selection model might change in the case of the column view. Disconnect
// from the current selection model and reconnect later after the URL switch.
+ const bool hadSelection = hasSelection();
QAbstractItemView* view = m_viewAccessor.itemView();
disconnect(view->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
view = m_viewAccessor.itemView();
connect(view->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
+ if (hadSelection || hasSelection()) {
+ emitSelectionChangedSignal();
+ }
}
void DolphinView::selectAll()
if (itemCount < 1) {
return;
}
-/*
- if (itemCount > 1) {
- // More than one item has been selected for renaming. Open
- // a rename dialog and rename all items afterwards.
- QPointer<RenameDialog> dialog = new RenameDialog(this, items);
- if (dialog->exec() == QDialog::Rejected) {
- delete dialog;
- return;
- }
-
- const QString newName = dialog->newName();
- if (newName.isEmpty()) {
- emit errorMessage(dialog->errorString());
- delete dialog;
- return;
- }
- delete dialog;
-
- // the selection would be invalid after renaming the items, so just clear
- // it before
- clearSelection();
-
- // TODO: check how this can be integrated into KIO::FileUndoManager/KonqOperations
- // as one operation instead of n rename operations like it is done now...
- Q_ASSERT(newName.contains('#'));
-
- // currently the items are sorted by the selection order, resort
- // them by the file name
- qSort(items.begin(), items.end(), lessThan);
-
- // iterate through all selected items and rename them...
- int index = 1;
- foreach (const KFileItem& item, items) {
- const KUrl& oldUrl = item.url();
- QString number;
- number.setNum(index++);
-
- QString name = newName;
- name.replace('#', number);
-
- if (oldUrl.fileName() != name) {
- KUrl newUrl = oldUrl;
- newUrl.setFileName(name);
- KonqOperations::rename(this, oldUrl, newUrl);
- }
- }
- } else*/
if ((itemCount == 1) && DolphinSettings::instance().generalSettings()->renameInline()) {
const QModelIndex dirIndex = m_viewAccessor.dirModel()->indexForItem(items.first());
dialog->show();
dialog->raise();
dialog->activateWindow();
-
- // XXX
- /* if (dialog->exec() == QDialog::Rejected) {
- delete dialog;
- return;
- }
-
- const QString newName = dialog->newName();
- if (newName.isEmpty()) {
- emit errorMessage(dialog->errorString());
- delete dialog;
- return;
- }
- delete dialog;
-
- const KUrl& oldUrl = items.first().url();
- KUrl newUrl = oldUrl;
- newUrl.setFileName(newName);
- KonqOperations::rename(this, oldUrl, newUrl);*/
}
-
- // assure that the current index remains visible when KDirLister
- // will notify the view about changed items
- m_assureVisibleCurrentIndex = true;
}
void DolphinView::trashSelectedItems()
emit categorizedSortingChanged();
}
-void DolphinView::toggleSortOrder()
-{
- const Qt::SortOrder order = (sortOrder() == Qt::AscendingOrder) ?
- Qt::DescendingOrder :
- Qt::AscendingOrder;
- setSortOrder(order);
-}
-
-void DolphinView::toggleSortFoldersFirst()
-{
- setSortFoldersFirst(!sortFoldersFirst());
-}
-
-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::mouseReleaseEvent(QMouseEvent* event)
{
QWidget::mouseReleaseEvent(event);
void DolphinView::emitSelectionChangedSignal()
{
- emit selectionChanged(DolphinView::selectedItems());
+ m_selectionChangedTimer->stop();
+ emit selectionChanged(selectedItems());
}
void DolphinView::openContextMenu(const QPoint& pos,
void DolphinView::createView()
{
- QAbstractItemView* view = m_viewAccessor.itemView();
- if ((view != 0) && (view->selectionModel() != 0)) {
- disconnect(view->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
- this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
- }
-
deleteView();
Q_ASSERT(m_viewAccessor.itemView() == 0);
+ Q_ASSERT(m_dolphinViewController->itemView() == 0);
m_viewAccessor.createView(this, m_dolphinViewController, m_viewModeController, m_mode);
- view = m_viewAccessor.itemView();
+ QAbstractItemView* view = m_viewAccessor.itemView();
Q_ASSERT(view != 0);
view->installEventFilter(this);
view->viewport()->installEventFilter(this);
void DolphinView::deleteView()
{
QAbstractItemView* view = m_viewAccessor.itemView();
+ Q_ASSERT((m_dolphinViewController->itemView() == 0) || (m_dolphinViewController->itemView() == view));
+ m_dolphinViewController->setItemView(0);
+
if (view != 0) {
+ if (view->selectionModel() != 0) {
+ disconnect(view->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
+ this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
+ }
+
// It's important to set the keyboard focus to the parent
// before deleting the view: Otherwise when having a split
// view the other view will get the focus and will request
setFocusProxy(0);
setFocus();
- m_topLayout->removeWidget(view);
- view->close();
-
- // disconnect all signal/slots
- disconnect(view);
m_viewModeController->disconnect(view);
- view->disconnect();
m_viewAccessor.deleteView();
}
KUrl::List DolphinView::simplifiedSelectedUrls() const
{
- KUrl::List list = selectedUrls();
- if (itemsExpandable() ) {
- list = KDirModel::simplifiedUrlList(list);
+ KUrl::List urls;
+
+ const KFileItemList items = selectedItems();
+ foreach (const KFileItem &item, items) {
+ urls.append(item.url());
}
- return list;
+
+
+ if (itemsExpandable()) {
+ urls = KDirModel::simplifiedUrlList(urls);
+ }
+
+ return urls;
}
QMimeData* DolphinView::selectionMimeData() const
void DolphinView::ViewAccessor::deleteView()
{
- QAbstractItemView* view = itemView();
- if (view != 0) {
- if (DragAndDropHelper::instance().isDragSource(view)) {
- // The view is a drag source (the feature "Open folders
- // during drag operations" is used). Deleting the view
- // during an ongoing drag operation is not allowed, so
- // this will postponed.
- if (m_dragSource != 0) {
- // the old stored view is obviously not the drag source anymore
- m_dragSource->deleteLater();
- m_dragSource = 0;
+ if (m_columnsContainer != 0) {
+ m_columnsContainer->close();
+ m_columnsContainer->disconnect();
+ m_columnsContainer->deleteLater();
+ m_columnsContainer = 0;
+ } else {
+ QAbstractItemView* view = itemView();
+ if (view != 0) {
+ view->close();
+ view->disconnect();
+
+ if (DragAndDropHelper::instance().isDragSource(view)) {
+ // The view is a drag source (the feature "Open folders
+ // during drag operations" is used). Deleting the view
+ // during an ongoing drag operation is not allowed, so
+ // this will postponed.
+ if (m_dragSource != 0) {
+ // the old stored view is obviously not the drag source anymore
+ m_dragSource->deleteLater();
+ m_dragSource = 0;
+ }
+ view->hide();
+ m_dragSource = view;
+ } else {
+ view->deleteLater();
+ view = 0;
}
- view->hide();
- m_dragSource = view;
- } else {
- view->deleteLater();
}
- }
- m_iconsView = 0;
- m_detailsView = 0;
-
- if (m_columnsContainer != 0) {
- m_columnsContainer->deleteLater();
+ m_iconsView = 0;
+ m_detailsView = 0;
}
- m_columnsContainer = 0;
}