diff --git a/assets/configs/org.deepin.dde.file-manager.desktop.organizer.json b/assets/configs/org.deepin.dde.file-manager.desktop.organizer.json index 065ad42a9d..66eb9a411a 100644 --- a/assets/configs/org.deepin.dde.file-manager.desktop.organizer.json +++ b/assets/configs/org.deepin.dde.file-manager.desktop.organizer.json @@ -25,7 +25,7 @@ "visibility": "public" }, "hideAllKeySeq" : { - "value": "Meta+O", + "value": "Alt+O", "serial": 0, "flags": [], "name": "Hide All KeySeq", diff --git a/src/external/dde-dock-plugins/disk-mount/diskmountplugin.cpp b/src/external/dde-dock-plugins/disk-mount/diskmountplugin.cpp index 023601fdb6..039602a05b 100644 --- a/src/external/dde-dock-plugins/disk-mount/diskmountplugin.cpp +++ b/src/external/dde-dock-plugins/disk-mount/diskmountplugin.cpp @@ -32,7 +32,7 @@ DiskMountPlugin::DiskMountPlugin(QObject *parent) diskPluginItem(new DiskPluginItem) { loadTranslator(); - diskPluginItem->setVisible(true); + diskPluginItem->setVisible(false); tipsLabel->setObjectName("diskmount"); tipsLabel->setVisible(false); tipsLabel->setText(tr("Disk")); diff --git a/src/plugins/desktop/ddplugin-organizer/config/configpresenter.h b/src/plugins/desktop/ddplugin-organizer/config/configpresenter.h index f9d9d9c5d3..f0506ef6f5 100644 --- a/src/plugins/desktop/ddplugin-organizer/config/configpresenter.h +++ b/src/plugins/desktop/ddplugin-organizer/config/configpresenter.h @@ -71,6 +71,7 @@ class ConfigPresenter : public QObject void changeEnableVisibilityState(bool v); void changeHideAllKeySequence(const QKeySequence &); void switchToNormalized(int); + void releaseCollection(int category); void switchToCustom(); void changeDisplaySize(int); void newCollection(const QList &); diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalized/fileclassifier.h b/src/plugins/desktop/ddplugin-organizer/mode/normalized/fileclassifier.h index 141dff881c..e5a667807a 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalized/fileclassifier.h +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalized/fileclassifier.h @@ -34,6 +34,7 @@ class FileClassifier : public CollectionDataProvider, public ModelDataHandler virtual QString classify(const QUrl &) const = 0; virtual QString className(const QString &) const = 0; virtual void reset(const QList &); + virtual void updateClassifier() = 0; public: CollectionBaseDataPtr baseData(const QString &key) const; diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalized/normalizedmode_p.h b/src/plugins/desktop/ddplugin-organizer/mode/normalized/normalizedmode_p.h index 9e7a22636c..e8464d24af 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalized/normalizedmode_p.h +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalized/normalizedmode_p.h @@ -43,7 +43,7 @@ public slots: void updateHolderSurfaceIndex(QWidget *surface); bool batchRenameFiles(); - bool moveFilesToCanvas(int viewIndex, const QMimeData *mimeData, const QPoint &viewPoint); + bool moveFilesToCanvas(int viewIndex, const QList &urls, const QPoint &viewPoint); public: void restore(const QList &cfgs, bool reorganized = false); diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.cpp b/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.cpp index 9c3286f472..e82ac2722c 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.cpp +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.cpp @@ -13,13 +13,6 @@ using namespace ddplugin_organizer; DFMBASE_USE_NAMESPACE namespace { -inline const char kTypeKeyApp[] = "Type_Apps"; -inline const char kTypeKeyDoc[] = "Type_Documents"; -inline const char kTypeKeyPic[] = "Type_Pictures"; -inline const char kTypeKeyVid[] = "Type_Videos"; -inline const char kTypeKeyMuz[] = "Type_Music"; -inline const char kTypeKeyFld[] = "Type_Folders"; -inline const char kTypeKeyOth[] = "Type_Other"; inline const char kTypeSuffixDoc[] = "pdf,txt,doc,docx,dot,dotx,ppt,pptx," "pot,potx,xls,xlsx,xlt,xltx,wps,wpt,rtf," @@ -67,18 +60,7 @@ TypeClassifier::TypeClassifier(QObject *parent) { kTypeKeyOth, tr("Other") } }; } - { - QHash *categoryPtr = const_cast *>(&d->categoryKey); - *categoryPtr = { - { kCatApplication, kTypeKeyApp }, - { kCatDocument, kTypeKeyDoc }, - { kCatPicture, kTypeKeyPic }, - { kCatVideo, kTypeKeyVid }, - { kCatMusic, kTypeKeyMuz }, - { kCatFolder, kTypeKeyFld }, - { kCatOther, kTypeKeyOth } - }; - } + // all datas shoud be accepted. handler = new GeneralModelFilter(); @@ -125,8 +107,8 @@ QStringList TypeClassifier::classes() const for (int i = kCatApplication; i <= kCatEnd; i = i << 1) { auto cat = static_cast(i); if (d->categories.testFlag(cat)) { - Q_ASSERT(d->categoryKey.contains(cat)); - auto key = d->categoryKey.value(cat); + Q_ASSERT(kCategory2Key.contains(cat)); + auto key = kCategory2Key.value(cat); if (d->keyNames.contains(key)) { Q_ASSERT(!usedKey.contains(key)); usedKey.append(key); @@ -184,6 +166,11 @@ QString TypeClassifier::className(const QString &key) const return d->keyNames.value(key); } +void TypeClassifier::updateClassifier() +{ + d->categories = CfgPresenter->enabledTypeCategories(); +} + QString TypeClassifier::replace(const QUrl &oldUrl, const QUrl &newUrl) { if (!classes().contains(classify(newUrl))) diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.h b/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.h index 4ff2197208..f1a6c46749 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.h +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier.h @@ -25,6 +25,7 @@ class TypeClassifier : public FileClassifier QStringList classes() const override; QString classify(const QUrl &) const override; QString className(const QString &key) const override; + void updateClassifier() override; public: QString replace(const QUrl &oldUrl, const QUrl &newUrl) override; diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier_p.h b/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier_p.h index b128fda98f..81dbfa2eac 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier_p.h +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalized/type/typeclassifier_p.h @@ -14,9 +14,9 @@ class TypeClassifierPrivate public: explicit TypeClassifierPrivate(TypeClassifier *qq); ~TypeClassifierPrivate(); + public: ItemCategories categories; - const QHash categoryKey; const QHash keyNames; const QSet docSuffix; const QSet picSuffix; @@ -30,4 +30,4 @@ class TypeClassifierPrivate } -#endif // TYPECLASSIFIER_P_H +#endif // TYPECLASSIFIER_P_H diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.cpp b/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.cpp index e2e79b086e..1aaf4421ba 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.cpp +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.cpp @@ -333,9 +333,8 @@ bool NormalizedModePrivate::batchRenameFiles() return true; } -bool NormalizedModePrivate::moveFilesToCanvas(int viewIndex, const QMimeData *mimeData, const QPoint &viewPoint) +bool NormalizedModePrivate::moveFilesToCanvas(int viewIndex, const QList &urls, const QPoint &viewPoint) { - auto urls = mimeData->urls(); QList collectionItems; QStringList files; for (auto url : urls) { @@ -451,6 +450,7 @@ bool NormalizedMode::initialize(CollectionModel *m) connect(model, &CollectionModel::modelReset, this, [this] { rebuild(); }, Qt::QueuedConnection); connect(CfgPresenter, &ConfigPresenter::reorganizeDesktop, this, &NormalizedMode::onReorganizeDesktop, Qt::QueuedConnection); + connect(CfgPresenter, &ConfigPresenter::releaseCollection, this, &NormalizedMode::releaseCollection, Qt::QueuedConnection); // creating if there already are files. if (!model->files().isEmpty()) @@ -633,12 +633,8 @@ void NormalizedMode::rebuild(bool reorganize) time.start(); { auto files = model->files(); - - if (reorganize) { // classifier's categories should be updated. - QSignalBlocker block(model); - reset(); // classifier will be re-new-ed, which will refresh model and cause rebuild function retriggered. so block signal - } - + if (reorganize) // classifier's categories should be updated. + d->classifier->updateClassifier(); d->classifier->reset(files); // order item as config @@ -777,6 +773,24 @@ void NormalizedMode::onReorganizeDesktop() Q_EMIT d->classifier->itemsChanged(type); // to update the collection view's vertical scroll range. } +void NormalizedMode::releaseCollection(int category) +{ + if (!d->classifier) + return; + QString key = kCategory2Key.value(ItemCategory(category), ""); + if (key.isEmpty()) + return; + + auto files = model->files(); + QList releases; + for (auto url : files) { + if (d->classifier->classify(url) == key) + releases << url; + } + if (!releases.isEmpty()) + d->moveFilesToCanvas(0, releases, { 0, 0 }); +} + void NormalizedMode::onCollectionEditStatusChanged(bool editing) { this->editing = editing; @@ -819,7 +833,7 @@ bool NormalizedMode::filterDropData(int viewIndex, const QMimeData *mimeData, co } if (act == Qt::MoveAction) - return d->moveFilesToCanvas(viewIndex, mimeData, viewPoint); + return d->moveFilesToCanvas(viewIndex, mimeData->urls(), viewPoint); return false; } diff --git a/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.h b/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.h index 15f0b28132..563a159351 100644 --- a/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.h +++ b/src/plugins/desktop/ddplugin-organizer/mode/normalizedmode.h @@ -33,6 +33,7 @@ public slots: void onFileAboutToBeRemoved(const QModelIndex &parent, int first, int last); void onFileDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles); void onReorganizeDesktop(); + void releaseCollection(int category); protected slots: bool filterDropData(int viewIndex, const QMimeData *mimeData, const QPoint &viewPoint, void *extData) override; diff --git a/src/plugins/desktop/ddplugin-organizer/options/methodgroup/typemethodgroup.cpp b/src/plugins/desktop/ddplugin-organizer/options/methodgroup/typemethodgroup.cpp index 1714ccee94..a6dd1109f8 100644 --- a/src/plugins/desktop/ddplugin-organizer/options/methodgroup/typemethodgroup.cpp +++ b/src/plugins/desktop/ddplugin-organizer/options/methodgroup/typemethodgroup.cpp @@ -104,9 +104,10 @@ void TypeMethodGroup::onChanged(bool on) flags = OrganizerUtils::buildBitwiseEnabledCategory(flags); CfgPresenter->setEnabledTypeCategories(flags); // do not re-layout items if `organizeOnTrigger` and checkbox checked. - if (!on || !CfgPresenter->organizeOnTriggered()) { - // using switch signal to reset the collection. - emit CfgPresenter->switchToNormalized(id()); + if (!CfgPresenter->organizeOnTriggered()) { + emit CfgPresenter->reorganizeDesktop(); + } else if (!on) { + emit CfgPresenter->releaseCollection(flag); } } } diff --git a/src/plugins/desktop/ddplugin-organizer/organizer_defines.h b/src/plugins/desktop/ddplugin-organizer/organizer_defines.h index 92a007b248..6e66644634 100644 --- a/src/plugins/desktop/ddplugin-organizer/organizer_defines.h +++ b/src/plugins/desktop/ddplugin-organizer/organizer_defines.h @@ -52,6 +52,23 @@ enum ItemCategory { }; Q_DECLARE_FLAGS(ItemCategories, ItemCategory) +inline const char kTypeKeyApp[] = "Type_Apps"; +inline const char kTypeKeyDoc[] = "Type_Documents"; +inline const char kTypeKeyPic[] = "Type_Pictures"; +inline const char kTypeKeyVid[] = "Type_Videos"; +inline const char kTypeKeyMuz[] = "Type_Music"; +inline const char kTypeKeyFld[] = "Type_Folders"; +inline const char kTypeKeyOth[] = "Type_Other"; +inline const QMap kCategory2Key { + { kCatApplication, kTypeKeyApp }, + { kCatDocument, kTypeKeyDoc }, + { kCatPicture, kTypeKeyPic }, + { kCatVideo, kTypeKeyVid }, + { kCatMusic, kTypeKeyMuz }, + { kCatFolder, kTypeKeyFld }, + { kCatOther, kTypeKeyOth } +}; + enum CollectionFrameSize { kMiddle = 0, kLarge, diff --git a/src/plugins/desktop/ddplugin-organizer/view/collectionview.cpp b/src/plugins/desktop/ddplugin-organizer/view/collectionview.cpp index 4f04c482c9..2f47d8a07b 100644 --- a/src/plugins/desktop/ddplugin-organizer/view/collectionview.cpp +++ b/src/plugins/desktop/ddplugin-organizer/view/collectionview.cpp @@ -1186,7 +1186,6 @@ CollectionView::CollectionView(const QString &uuid, CollectionDataProvider *data d->initUI(); d->initConnect(); - setObjectName("dd_collection_view"); } diff --git a/tests/plugins/desktop/ddplugin-organizer/mode/ut_fileclassifier.cpp b/tests/plugins/desktop/ddplugin-organizer/mode/ut_fileclassifier.cpp index 04c0bcd5d8..2e91d57968 100644 --- a/tests/plugins/desktop/ddplugin-organizer/mode/ut_fileclassifier.cpp +++ b/tests/plugins/desktop/ddplugin-organizer/mode/ut_fileclassifier.cpp @@ -19,15 +19,18 @@ namespace { class TestFileClassifier : public FileClassifier, public Test { public: - Classifier mode() const {return kName;} - ModelDataHandler *dataHandler() const {return nullptr;} - QStringList classes() const {return ids.keys();} - QString classify(const QUrl &url) const {return ids.key(url.fileName().left(3));} - QString className(const QString &key) const {return ids.value(key);} + Classifier mode() const { return kName; } + ModelDataHandler *dataHandler() const { return nullptr; } + QStringList classes() const { return ids.keys(); } + QString classify(const QUrl &url) const { return ids.key(url.fileName().left(3)); } + QString className(const QString &key) const { return ids.value(key); } + void updateClassifier() {}; + public: - void SetUp() override { + void SetUp() override + { - stub.set_lamda(&ConfigPresenter::instance, [this](){ + stub.set_lamda(&ConfigPresenter::instance, [this]() { return cfg; }); @@ -36,7 +39,8 @@ class TestFileClassifier : public FileClassifier, public Test ids.insert("2", "two"); } - void TearDown() override { + void TearDown() override + { delete cfg; } @@ -49,7 +53,7 @@ class TestFileClassifier : public FileClassifier, public Test TEST_F(TestFileClassifier, createClassifier) { - stub.set_lamda(&ConfigPresenter::enabledTypeCategories, [](){ + stub.set_lamda(&ConfigPresenter::enabledTypeCategories, []() { return kCatDefault; }); @@ -62,35 +66,35 @@ TEST_F(TestFileClassifier, createClassifier) TEST_F(TestFileClassifier, construct) { - CollectionBaseDataPtr dp(new CollectionBaseData); - collections.insert("1", dp); - QList in; - stub.set_lamda(&ConfigPresenter::saveNormalProfile, - [&in](ConfigPresenter *, const QList &baseDatas){ - - in = baseDatas; - }); - - emit this->itemsChanged("1"); - - ASSERT_EQ(in.size(), 1); - EXPECT_EQ(in.first(), dp); + CollectionBaseDataPtr dp(new CollectionBaseData); + collections.insert("1", dp); + QList in; + stub.set_lamda(&ConfigPresenter::saveNormalProfile, + [&in](ConfigPresenter *, const QList &baseDatas) { + in = baseDatas; + }); + + emit this->itemsChanged("1"); + + ASSERT_EQ(in.size(), 1); + EXPECT_EQ(in.first(), dp); } namespace { class TestFileClassifier2 : public TestFileClassifier { public: - void SetUp() override { + void SetUp() override + { TestFileClassifier::SetUp(); - stub.set_lamda(&ConfigPresenter::saveNormalProfile, [](){}); - QObject::connect(this, &FileClassifier::itemsChanged, this, [this] - (const QString &t){ + stub.set_lamda(&ConfigPresenter::saveNormalProfile, []() {}); + QObject::connect(this, &FileClassifier::itemsChanged, this, [this](const QString &t) { types.append(t); }); } - void initDP() { + void initDP() + { dp.reset(new CollectionBaseData); dp->name = "one"; dp->key = "1"; diff --git a/tests/plugins/desktop/ddplugin-organizer/view/ut_collectionview.cpp b/tests/plugins/desktop/ddplugin-organizer/view/ut_collectionview.cpp index 49f58712a8..c0915ca8db 100644 --- a/tests/plugins/desktop/ddplugin-organizer/view/ut_collectionview.cpp +++ b/tests/plugins/desktop/ddplugin-organizer/view/ut_collectionview.cpp @@ -592,6 +592,8 @@ class TestFileClassifier : public FileClassifier QStringList classes() const { return ids.keys(); } QString classify(const QUrl &url) const { return ids.key(url.fileName().left(3)); } QString className(const QString &key) const { return ids.value(key); } + void updateClassifier() {}; + QMap ids; };