X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fc5cb366c2b96bc9fc170a5a45308dde0fc64375..f9bcd0a47cbdf0806c35a82856efdbe06279fb82:/src/views/dolphinview.cpp diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 53171966c..db546fe95 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -22,10 +22,12 @@ #include #include +#include #include +#include +#include #include #include -#include #include #include @@ -60,8 +62,10 @@ #include "dolphin_detailsmodesettings.h" #include "dolphin_generalsettings.h" #include "dolphinitemlistcontainer.h" +#include "draganddrophelper.h" #include "renamedialog.h" #include "settings/dolphinsettings.h" +#include "versioncontrol/versioncontrolobserver.h" #include "viewmodecontroller.h" #include "viewproperties.h" #include "views/tooltips/tooltipmanager.h" @@ -89,7 +93,8 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_currentItemIndex(-1), m_restoredContentsPosition(), m_createdItemUrl(), - m_selectedItems() + m_selectedItems(), + m_versionControlObserver(0) { m_topLayout = new QVBoxLayout(this); m_topLayout->setSpacing(0); @@ -146,7 +151,6 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : connect(m_dirLister, SIGNAL(redirection(KUrl,KUrl)), this, SLOT(slotRedirection(KUrl,KUrl))); connect(m_dirLister, SIGNAL(started(KUrl)), this, SLOT(slotDirListerStarted(KUrl))); - connect(m_dirLister, SIGNAL(completed()), this, SLOT(slotDirListerCompleted())); connect(m_dirLister, SIGNAL(refreshItems(QList >)), this, SLOT(slotRefreshItems())); @@ -172,6 +176,13 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : connect(controller, SIGNAL(itemExpansionToggleClicked(int)), this, SLOT(slotItemExpansionToggleClicked(int))); connect(controller, SIGNAL(itemHovered(int)), this, SLOT(slotItemHovered(int))); connect(controller, SIGNAL(itemUnhovered(int)), this, SLOT(slotItemUnhovered(int))); + connect(controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*))); + connect(controller, SIGNAL(modelChanged(KItemModelBase*,KItemModelBase*)), this, SLOT(slotModelChanged(KItemModelBase*,KItemModelBase*))); + + KFileItemModel* model = fileItemModel(); + if (model) { + connect(model, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted())); + } KItemListSelectionManager* selectionManager = controller->selectionManager(); connect(selectionManager, SIGNAL(selectionChanged(QSet,QSet)), @@ -179,6 +190,12 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_toolTipManager = new ToolTipManager(this); + m_versionControlObserver = new VersionControlObserver(this); + m_versionControlObserver->setModel(model); + connect(m_versionControlObserver, SIGNAL(infoMessage(QString)), this, SIGNAL(infoMessage(QString))); + connect(m_versionControlObserver, SIGNAL(errorMessage(QString)), this, SIGNAL(errorMessage(QString))); + connect(m_versionControlObserver, SIGNAL(operationCompletedMessage(QString)), this, SIGNAL(operationCompletedMessage(QString))); + applyViewProperties(); m_topLayout->addWidget(m_container); @@ -341,8 +358,8 @@ void DolphinView::setSorting(Sorting sorting) DolphinView::Sorting DolphinView::sorting() const { - return DolphinView::SortByName; - //return m_viewAccessor.proxyModel()->sorting(); + KItemModelBase* model = m_container->controller()->model(); + return sortingForSortRole(model->sortRole()); } void DolphinView::setSortOrder(Qt::SortOrder order) @@ -354,7 +371,8 @@ void DolphinView::setSortOrder(Qt::SortOrder order) Qt::SortOrder DolphinView::sortOrder() const { - return Qt::AscendingOrder; // m_viewAccessor.proxyModel()->sortOrder(); + KItemModelBase* model = fileItemModel(); + return model->sortOrder(); } void DolphinView::setSortFoldersFirst(bool foldersFirst) @@ -366,7 +384,8 @@ void DolphinView::setSortFoldersFirst(bool foldersFirst) bool DolphinView::sortFoldersFirst() const { - return true; // m_viewAccessor.proxyModel()->sortFoldersFirst(); + KFileItemModel* model = fileItemModel(); + return model->sortFoldersFirst(); } void DolphinView::setAdditionalInfoList(const QList& info) @@ -505,8 +524,16 @@ QString DolphinView::statusBarText() const QList DolphinView::versionControlActions(const KFileItemList& items) const { - Q_UNUSED(items); - return QList(); //m_dolphinViewController->versionControlActions(items); + QList actions; + + if (items.isEmpty()) { + const KFileItem item = fileItemModel()->rootItem(); + actions = m_versionControlObserver->actions(KFileItemList() << item); + } else { + actions = m_versionControlObserver->actions(items); + } + + return actions; } void DolphinView::setUrl(const KUrl& url) @@ -776,6 +803,32 @@ void DolphinView::slotItemUnhovered(int index) emit requestItemInfo(KFileItem()); } +void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event) +{ + const KFileItem destItem = fileItemModel()->fileItem(index); + + QDropEvent dropEvent(event->pos().toPoint(), + event->possibleActions(), + event->mimeData(), + event->buttons(), + event->modifiers()); + + DragAndDropHelper::dropUrls(destItem, url(), &dropEvent, this); +} + +void DolphinView::slotModelChanged(KItemModelBase* current, KItemModelBase* previous) +{ + if (previous != 0) { + disconnect(previous, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted())); + } + + Q_ASSERT(qobject_cast(current)); + connect(current, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted())); + + KFileItemModel* fileItemModel = static_cast(current); + m_versionControlObserver->setModel(fileItemModel); +} + void DolphinView::slotSelectionChanged(const QSet& current, const QSet& previous) { const int currentCount = current.count(); @@ -834,7 +887,8 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) ViewProperties props(url()); props.setSortOrder(order); - //m_viewAccessor.proxyModel()->setSortOrder(order); + KItemModelBase* model = fileItemModel(); + model->setSortOrder(order); emit sortOrderChanged(order); } @@ -844,7 +898,8 @@ void DolphinView::updateSortFoldersFirst(bool foldersFirst) ViewProperties props(url()); props.setSortFoldersFirst(foldersFirst); - //m_viewAccessor.proxyModel()->setSortFoldersFirst(foldersFirst); + KFileItemModel* model = fileItemModel(); + model->setSortFoldersFirst(foldersFirst); emit sortFoldersFirstChanged(foldersFirst); } @@ -878,16 +933,9 @@ void DolphinView::restoreState(QDataStream& stream) stream >> m_restoredContentsPosition; // Restore expanded folders (only relevant for the details view - will be ignored by the view in other view modes) - QSet urlsToExpand; - stream >> urlsToExpand; - /*const DolphinDetailsViewExpander* expander = m_viewAccessor.setExpandedUrls(urlsToExpand); - if (expander) { - m_expanderActive = true; - connect (expander, SIGNAL(completed()), this, SLOT(slotLoadingCompleted())); - } - else { - m_expanderActive = false; - }*/ + QSet urls; + stream >> urls; + fileItemModel()->restoreExpandedUrls(urls); } void DolphinView::saveState(QDataStream& stream) @@ -901,7 +949,7 @@ void DolphinView::saveState(QDataStream& stream) stream << QPoint(x, y); // Save expanded folders (only relevant for the details view - the set will be empty in other view modes) - //stream << m_viewAccessor.expandedUrls(); + stream << fileItemModel()->expandedUrls(); } bool DolphinView::hasSelection() const @@ -1001,7 +1049,7 @@ void DolphinView::slotDeleteFileFinished(KJob* job) void DolphinView::slotDirListerStarted(const KUrl& url) { // Disable the writestate temporary until it can be determined in a fast way - // in DolphinView::slotDirListerCompleted() + // in DolphinView::slotLoadingCompleted() if (m_isFolderWritable) { m_isFolderWritable = false; emit writeStateChanged(m_isFolderWritable); @@ -1010,7 +1058,7 @@ void DolphinView::slotDirListerStarted(const KUrl& url) emit startedPathLoading(url); } -void DolphinView::slotDirListerCompleted() +void DolphinView::slotLoadingCompleted() { // Update the view-state. This has to be done using a Qt::QueuedConnection // because the view might not be in its final state yet (the view also @@ -1099,25 +1147,25 @@ void DolphinView::applyViewProperties() }*/ const DolphinView::Sorting sorting = props.sorting(); - KItemModelBase* model = m_container->controller()->model(); + KFileItemModel* model = fileItemModel(); const QByteArray newSortRole = sortRoleForSorting(sorting); if (newSortRole != model->sortRole()) { model->setSortRole(newSortRole); emit sortingChanged(sorting); } -/* + const Qt::SortOrder sortOrder = props.sortOrder(); - if (sortOrder != m_viewAccessor.proxyModel()->sortOrder()) { - m_viewAccessor.proxyModel()->setSortOrder(sortOrder); + if (sortOrder != model->sortOrder()) { + model->setSortOrder(sortOrder); emit sortOrderChanged(sortOrder); } const bool sortFoldersFirst = props.sortFoldersFirst(); - if (sortFoldersFirst != m_viewAccessor.proxyModel()->sortFoldersFirst()) { - m_viewAccessor.proxyModel()->setSortFoldersFirst(sortFoldersFirst); + if (sortFoldersFirst != model->sortFoldersFirst()) { + model->setSortFoldersFirst(sortFoldersFirst); emit sortFoldersFirstChanged(sortFoldersFirst); } -*/ + const QList infoList = props.additionalInfoList(); if (infoList != m_additionalInfoList) { const QList previousList = m_additionalInfoList; @@ -1239,4 +1287,21 @@ QByteArray DolphinView::sortRoleForSorting(Sorting sorting) const return QByteArray(); } +DolphinView::Sorting DolphinView::sortingForSortRole(const QByteArray& sortRole) const +{ + static QHash sortHash; + if (sortHash.isEmpty()) { + sortHash.insert("name", SortByName); + sortHash.insert("size", SortBySize); + sortHash.insert("date", SortByDate); + sortHash.insert("permissions", SortByPermissions); + sortHash.insert("owner", SortByOwner); + sortHash.insert("group", SortByGroup); + sortHash.insert("type", SortByType); + sortHash.insert("destination", SortByDestination); + sortHash.insert("path", SortByPath); + } + return sortHash.value(sortRole); +} + #include "dolphinview.moc"