diff --git a/src/album/albumgloabl.h b/src/album/albumgloabl.h index 1390ce04..aa1a0f8a 100644 --- a/src/album/albumgloabl.h +++ b/src/album/albumgloabl.h @@ -143,6 +143,32 @@ struct DBImgInfo { typedef QList DBImgInfoList; typedef QList DBImgInfoListPtr; +#define CLASS_PLANT "Plants" +#define CLASS_Scenery "Scenery" +#define CLASS_FOOD "Food" +#define CLASS_SCENE "Scene" +#define CLASS_ANIMALS "Animals" +#define CLASS_HUMANS "Humans" +#define CLASS_ITEMS "Items" +#define CLASS_OTHER "Other" + +const QStringList g_classList = { + CLASS_Scenery, + CLASS_FOOD, + CLASS_HUMANS, + CLASS_ANIMALS, + CLASS_SCENE, + CLASS_PLANT, + CLASS_ITEMS, + CLASS_OTHER}; + +struct ClassifyDBImgInfo { + QString className; + QList infos; +}; + +typedef QList ClassifyDBImgInfoList; + enum OpenImgViewType { VIEW_MAINWINDOW_ALLPIC = 0, VIEW_MAINWINDOW_TIMELINE = 1, diff --git a/src/album/albumview/albumview.cpp b/src/album/albumview/albumview.cpp index 34b80119..45e5625f 100644 --- a/src/album/albumview/albumview.cpp +++ b/src/album/albumview/albumview.cpp @@ -284,8 +284,8 @@ void AlbumView::initConnections() connect(dApp->signalM, &SignalManager::imagesTrashInserted, this, &AlbumView::onTrashInfosChanged); connect(dApp->signalM, &SignalManager::imagesTrashRemoved, this, &AlbumView::onTrashInfosChanged); connect(m_customThumbnailList, &ThumbnailListView::openImage, this, &AlbumView::onOpenImageCustom); - if (m_classThumbnailList) - connect(m_classThumbnailList, &ThumbnailListView::openImage, this, &AlbumView::onOpenImageClass); + if (m_classDetailThumbnailList) + connect(m_classDetailThumbnailList, &ThumbnailListView::openImage, this, &AlbumView::onOpenImageClass); connect(m_favoriteThumbnailList, &ThumbnailListView::openImage, this, &AlbumView::onOpenImageFav); connect(m_pLeftListView, &LeftListView::sigSlideShow, this, &AlbumView::onSlideShowCustom); connect(m_customThumbnailList, &ThumbnailListView::sigSlideShow, this, &AlbumView::onSlideShowCustom); @@ -359,6 +359,7 @@ void AlbumView::initConnections() connect(qApp, &QGuiApplication::fontChanged, this, &AlbumView::adjustTitleContent); connect(dApp->signalM, &SignalManager::sigImageClassifyDone, this, &AlbumView::updateRightClassView); + connect(dApp->signalM, &SignalManager::sigOpenClassDetail, this, &AlbumView::updateRightClassViewDetail); } void AlbumView::initLeftView() @@ -704,7 +705,7 @@ void AlbumView::initClassWidget() p_Class->setContentsMargins(8, 0, 0, 0); m_pClassWidget->setLayout(p_Class); - m_classThumbnailList = new ThumbnailListView(ThumbnailDelegate::AlbumViewClassType, -1, COMMON_STR_FAVORITES); + m_classThumbnailList = new ThumbnailListView(ThumbnailDelegate::AlbumViewClassType, -1, COMMON_STR_CLASS); //筛选显示,当先列表中内容为无结果 connect(m_classThumbnailList, &ThumbnailListView::sigNoPicOrNoVideo, this, &AlbumView::slotNoPicOrNoVideo); m_classThumbnailList->setFrameShape(DTableView::NoFrame); @@ -713,6 +714,18 @@ void AlbumView::initClassWidget() m_classThumbnailList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_classThumbnailList->setContentsMargins(0, 0, 0, 0); p_Class->addWidget(m_classThumbnailList); + + // 照片分类详情页 + m_classDetailThumbnailList = new ThumbnailListView(ThumbnailDelegate::AlbumViewClassDetailType, -1, COMMON_STR_CLASSDETAIL); + connect(m_classDetailThumbnailList, &ThumbnailListView::sigNoPicOrNoVideo, this, &AlbumView::slotNoPicOrNoVideo); + m_classDetailThumbnailList->setFrameShape(DTableView::NoFrame); + m_classDetailThumbnailList->setObjectName("RightDetailClassThumbnail"); + m_classDetailThumbnailList->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + m_classDetailThumbnailList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + m_classDetailThumbnailList->setContentsMargins(0, 0, 0, 0); + p_Class->addWidget(m_classDetailThumbnailList); + m_classDetailThumbnailList->setVisible(false); + //初始化筛选无结果窗口 m_classNoResultWidget = new NoResultWidget(this); p_Class->addWidget(m_classNoResultWidget); @@ -731,6 +744,13 @@ void AlbumView::initClassWidget() m_pClassTitle->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); m_pClassTitle->setText(tr("Image classification")); + m_pClassBackBtn = new DPushButton(m_pClassWidget); + m_pClassBackBtn->setFixedSize(QSize(36, 36)); + m_pClassBackBtn->setIcon(QIcon::fromTheme("left_arrow")); + lNumberLayout->addWidget(m_pClassBackBtn); + m_pClassBackBtn->hide(); + connect(m_pClassBackBtn, &DPushButton::clicked, this, &AlbumView::slotClassBackClicked); + m_pClassPicTotal = new DLabel(); m_pClassPicTotal->setFixedHeight(20); DFontSizeManager::instance()->bind(m_pClassPicTotal, DFontSizeManager::T6, QFont::Medium); @@ -754,7 +774,7 @@ void AlbumView::initClassWidget() m_ClassTitleWidget->setFocusPolicy(Qt::NoFocus); m_ClassTitleWidget->setLayout(lNumberLayout); - m_classBatchOperateWidget = new BatchOperateWidget(m_classThumbnailList, BatchOperateWidget::AlbumViewClassType, m_ClassTitleWidget); + m_classBatchOperateWidget = new BatchOperateWidget(m_classDetailThumbnailList, BatchOperateWidget::AlbumViewClassDetailType, m_ClassTitleWidget); lNumberLayout->addStretch(100); lNumberLayout->addWidget(m_classBatchOperateWidget, 0, Qt::AlignRight | Qt::AlignVCenter); connect(m_classBatchOperateWidget, &BatchOperateWidget::signalBatchSelectChanged, this, &AlbumView::onBatchSelectChanged, Qt::QueuedConnection); @@ -984,7 +1004,8 @@ void AlbumView::resetLabelCount(int photosCount, int videosCount, DLabel *lable) lable->setText(videosStr); } else if (photosCount > 0 && videosCount > 0) { lable->setText(photosStr + " " + videosStr); - } + } else if (photosCount == 0 && videosCount == 0) + lable->setText(""); // 记录我的收藏、自定义相册、设备视图总数的全量文本内容,以便做截断显示 if (lable == m_pClassPicTotal) @@ -1016,7 +1037,15 @@ void AlbumView::updateRightView() setAcceptDrops(false); emit sigSearchEditIsDisplay(false); } else if (COMMON_STR_CLASS == m_currentType) { + m_bHasClassified = false; updateRightClassView(); + } else if (COMMON_STR_CLASSDETAIL == m_currentType) { + if (!m_currentClassName.isEmpty()) + updateRightClassViewDetail(m_currentClassName); + else { + m_bHasClassified = false; + updateRightClassView(); + } } else if (COMMON_STR_FAVORITES == m_currentType) { updateRightMyFavoriteView(); } else if (COMMON_STR_CUSTOM == m_currentType) { @@ -1101,6 +1130,12 @@ void AlbumView::updateRightMyFavoriteView() void AlbumView::updateRightClassView() { + m_currentClassName = ""; + m_currentAlbum = m_pLeftListView->getItemCurrentName(); + m_currentType = m_pLeftListView->getItemCurrentType(); + m_currentUID = m_pLeftListView->getItemCurrentUID(); + m_currentItemType = static_cast(m_pLeftListView->getItemDataType()); + using namespace utils::image; DBImgInfoList infos; infos = DBManager::instance()->getAllInfos(ItemTypePic); @@ -1113,25 +1148,81 @@ void AlbumView::updateRightClassView() } // 来自老版本的相册没有进行图片分类,需要对这些数据进行图片分类 - if (unClassList.size() > 0) { + if (unClassList.size() > 0 && !m_bHasClassified) { ImageEngineApi::instance()->classifyOldDBInfo(infos); + m_bHasClassified = true; return; } + // 按类型对图片数据归类 + ClassifyDBImgInfoList classifys; + DBImgInfoList classDBInfos; + for (auto str : g_classList) { + ClassifyDBImgInfo clsInfo; + clsInfo.className = str; + clsInfo.infos = DBManager::instance()->getInfosForClass(str); + if (clsInfo.infos.size() > 0) { + DBImgInfo dbInfo = clsInfo.infos.first(); + dbInfo.num = QString::number(clsInfo.infos.size()); + classDBInfos.push_back(dbInfo); + } + classifys.push_back(clsInfo); + } + + m_classDetailThumbnailList->hide(); + m_classThumbnailList->show(); + m_pStatusBar->hide(); + m_classBatchOperateWidget->hide(); + m_pClassPicTotal->hide(); + m_pClassBackBtn->hide(); + m_classThumbnailList->clearAll(); //插入上方空白项 m_classThumbnailList->insertBlankOrTitleItem(ItemTypeBlank, "", "", favorite_title_height); - m_classThumbnailList->insertThumbnailByImgInfos(infos); + m_classThumbnailList->insertThumbnailByImgInfos(classDBInfos); // 添加底栏空白区域 m_classThumbnailList->insertBlankOrTitleItem(ItemTypeBlank, "", "", m_pStatusBar->height()); + m_pRightStackWidget->setCurrentIndex(RIGHT_VIEW_CLASS_LIST); + m_ClassTitleWidget->setVisible(infos.size() > 0); + + emit sigSearchEditIsDisplay(true); + setAcceptDrops(false); +} + +void AlbumView::updateRightClassViewDetail(const QString &className) +{ + m_currentAlbum = COMMON_STR_CLASSDETAIL; + m_currentType = COMMON_STR_CLASSDETAIL; + m_currentUID = -1; + m_currentItemType = static_cast(m_pLeftListView->getItemDataType()); + m_currentClassName = className; + DBImgInfoList infos = DBManager::instance()->getInfosForClass(className); + + m_classThumbnailList->hide(); + m_classDetailThumbnailList->show(); + m_pStatusBar->show(); + m_classBatchOperateWidget->show(); + m_pClassTitle->show(); + m_pClassPicTotal->show(); + m_pClassBackBtn->show(); + + m_classDetailThumbnailList->clearAll(); + //插入上方空白项 + m_classDetailThumbnailList->insertBlankOrTitleItem(ItemTypeBlank, "", "", favorite_title_height); + m_classDetailThumbnailList->insertThumbnailByImgInfos(infos); + // 添加底栏空白区域 + m_classDetailThumbnailList->insertBlankOrTitleItem(ItemTypeBlank, "", "", m_pStatusBar->height()); //重置数量显示 - resetLabelCount(m_classThumbnailList->getAppointTypeItemCount(ItemTypePic) - , m_classThumbnailList->getAppointTypeItemCount(ItemTypeVideo), m_pClassPicTotal); + resetLabelCount(m_classDetailThumbnailList->getAppointTypeItemCount(ItemTypePic) + , m_classDetailThumbnailList->getAppointTypeItemCount(ItemTypeVideo), m_pClassPicTotal); m_pRightStackWidget->setCurrentIndex(RIGHT_VIEW_CLASS_LIST); m_ClassTitleWidget->setVisible(infos.size() > 0); - m_pStatusBar->setVisible(true); + emit sigSearchEditIsDisplay(true); setAcceptDrops(false); + + updatePicNum(); + adjustTitleContent(); } // 更新外接设备右侧视图 @@ -1328,14 +1419,14 @@ void AlbumView::onOpenImageClass(int row, const QString &path, bool bFullScreen) info.album = ""; // info.lastPanel = nullptr; //todo imageviewer info.fullScreen = bFullScreen; - auto imagelist = m_classThumbnailList->getFileList(row, ItemType::ItemTypePic); + auto imagelist = m_classDetailThumbnailList->getFileList(row, ItemType::ItemTypePic); if (imagelist.size() > 0) { info.paths << imagelist; info.path = path; } else { info.paths.clear(); } - info.dBImgInfos = m_classThumbnailList->getAllFileInfo(row); + info.dBImgInfos = m_classDetailThumbnailList->getAllFileInfo(row); info.viewType = m_currentAlbum; info.viewMainWindowID = VIEW_MAINWINDOW_ALBUM; @@ -1929,8 +2020,13 @@ void AlbumView::SearchReturnUpdate() } else if (COMMON_STR_CLASS == m_currentAlbum) { m_pRightStackWidget->setCurrentIndex(RIGHT_VIEW_CLASS_LIST); int count = DBManager::instance()->getImagesCount(); - //收藏内没有图片,隐藏批量处理按钮 m_ClassTitleWidget->setVisible(count != 0); + } else if (COMMON_STR_CLASSDETAIL == m_currentAlbum) { + m_pRightStackWidget->setCurrentIndex(RIGHT_VIEW_CLASS_LIST); + DBImgInfoList infos; + if (!m_currentClassName.isEmpty()) + infos = DBManager::instance()->getInfosForClass(m_currentClassName); + m_ClassTitleWidget->setVisible(infos.size()); } else if (COMMON_STR_FAVORITES == m_currentAlbum) { m_pRightStackWidget->setCurrentIndex(RIGHT_VIEW_FAVORITE_LIST); int count = DBManager::instance()->getAlbumImgsCount(m_currentUID); @@ -2193,9 +2289,9 @@ void AlbumView::updatePicNum() if (m_currentAlbum == COMMON_STR_TRASH) { photoSelctCount = m_pRightTrashThumbnailList->getAppointTypeSelectItemCount(ItemTypePic); videoSelctCount = m_pRightTrashThumbnailList->getAppointTypeSelectItemCount(ItemTypeVideo); - } else if (m_currentAlbum == COMMON_STR_CLASS) { - photoSelctCount = m_classThumbnailList->getAppointTypeSelectItemCount(ItemTypePic); - videoSelctCount = m_classThumbnailList->getAppointTypeSelectItemCount(ItemTypeVideo); + } else if (m_currentAlbum == COMMON_STR_CLASSDETAIL) { + photoSelctCount = m_classDetailThumbnailList->getAppointTypeSelectItemCount(ItemTypePic); + videoSelctCount = m_classDetailThumbnailList->getAppointTypeSelectItemCount(ItemTypeVideo); } else if (m_currentAlbum == COMMON_STR_FAVORITES) { photoSelctCount = m_favoriteThumbnailList->getAppointTypeSelectItemCount(ItemTypePic); videoSelctCount = m_favoriteThumbnailList->getAppointTypeSelectItemCount(ItemTypeVideo); @@ -2220,10 +2316,10 @@ void AlbumView::updatePicNum() void AlbumView::updateTotalLabelNum() { - if (COMMON_STR_CLASS == m_currentType) { + if (COMMON_STR_CLASSDETAIL == m_currentType) { //重置数量显示 - resetLabelCount(m_classThumbnailList->getAppointTypeItemCount(ItemTypePic) - , m_classThumbnailList->getAppointTypeItemCount(ItemTypeVideo), m_pClassPicTotal); + resetLabelCount(m_classDetailThumbnailList->getAppointTypeItemCount(ItemTypePic) + , m_classDetailThumbnailList->getAppointTypeItemCount(ItemTypeVideo), m_pClassPicTotal); } else if (COMMON_STR_FAVORITES == m_currentType) { //重置数量显示 resetLabelCount(m_favoriteThumbnailList->getAppointTypeItemCount(ItemTypePic) @@ -2237,6 +2333,9 @@ void AlbumView::updateTotalLabelNum() void AlbumView::restorePicNum() { + if (COMMON_STR_CLASS == m_currentType) + return; + int photoCount = 0; int videoCount = 0; if (4 == m_pRightStackWidget->currentIndex()) { @@ -2249,9 +2348,9 @@ void AlbumView::restorePicNum() } else if (COMMON_STR_TRASH == m_currentAlbum) { photoCount = m_pRightTrashThumbnailList->getAppointTypeItemCount(ItemTypePic); videoCount = m_pRightTrashThumbnailList->getAppointTypeItemCount(ItemTypeVideo); - } else if (COMMON_STR_CLASS == m_currentAlbum) { - photoCount = m_classThumbnailList->getAppointTypeItemCount(ItemTypePic); - videoCount = m_classThumbnailList->getAppointTypeItemCount(ItemTypeVideo); + } else if (COMMON_STR_CLASSDETAIL == m_currentAlbum) { + photoCount = m_classDetailThumbnailList->getAppointTypeItemCount(ItemTypePic); + videoCount = m_classDetailThumbnailList->getAppointTypeItemCount(ItemTypeVideo); } else if (COMMON_STR_FAVORITES == m_currentAlbum) { photoCount = m_favoriteThumbnailList->getAppointTypeItemCount(ItemTypePic); videoCount = m_favoriteThumbnailList->getAppointTypeItemCount(ItemTypeVideo); @@ -2652,9 +2751,9 @@ void AlbumView::slotNoPicOrNoVideo(bool isNoResult) m_customThumbnailList->setVisible(!isNoResult); m_customAlbumTitleLabel->setVisible(!isNoResult); m_pRightPicTotal->setVisible(!isNoResult); - } else if (sender() == m_classThumbnailList && m_classThumbnailList) { + } else if (sender() == m_classDetailThumbnailList && m_classDetailThumbnailList) { m_classNoResultWidget->setVisible(isNoResult); - m_classThumbnailList->setVisible(!isNoResult); + m_classDetailThumbnailList->setVisible(!isNoResult); m_pClassTitle->setVisible(!isNoResult); m_pClassPicTotal->setVisible(!isNoResult); } else if (sender() == m_favoriteThumbnailList) { @@ -2704,7 +2803,10 @@ void AlbumView::restoreTitleDisplay() m_customAlbumTitleLabel->raise(); } if (m_classBatchOperateWidget && !m_classBatchOperateWidget->isVisible()) {//图片分类界面标题 - m_pClassTitle->setText(tr("Favorites")); + if (m_currentAlbum == COMMON_STR_CLASS) + m_pClassTitle->setText(tr("Image classification")); + else if (m_currentAlbum == COMMON_STR_CLASSDETAIL) + m_pClassTitle->setText(QObject::tr(m_currentClassName.toStdString().c_str())); m_pClassTitle->show(); m_pClassTitle->raise(); } @@ -2726,8 +2828,11 @@ void AlbumView::adjustTitleContent() if (topLevelWidget()->width() <= MAINWINDOW_NEEDCUT_WIDTH) m_pClassTitle->move(topLevelWidget()->width() - LISTVIEW_MINMUN_WIDTH, 0); else { - // 按默认文本内容重置我的收藏标签的宽度,保证后续文本显示位置一致 - m_pClassTitle->setText(tr("Image classification")); + // 按默认文本内容重置照片分类标签的宽度,保证后续文本显示位置一致 + if (m_currentAlbum == COMMON_STR_CLASS) + m_pClassTitle->setText(tr("Image classification")); + else if (m_currentAlbum == COMMON_STR_CLASSDETAIL) + m_pClassTitle->setText(QObject::tr(m_currentClassName.toStdString().c_str())); m_pClassTitle->adjustSize(); m_pClassTitle->move(m_ClassTitleWidget->width() / 2 - m_pClassTitle->width() / 2, 0); } @@ -3073,9 +3178,16 @@ void AlbumView::onBatchSelectChanged(bool isBatchSelect) m_customAlbumTitleLabel->setToolTip(""); } } - if (m_classBatchOperateWidget && m_classBatchOperateWidget->isVisible()) {//图片分类界面标题 + if (m_classBatchOperateWidget) {//图片分类界面标题 int size = m_classBatchOperateWidget->x() - (m_pClassTitle->x() + m_pClassTitle->width()); - QString Str = utils::base::reorganizationStr(m_pClassTitle->font(), tr("Image classification"), m_pClassTitle->width() + size); + if (m_currentAlbum == COMMON_STR_CLASS) + size = m_ClassTitleWidget->width() - (m_pClassTitle->x() + m_pClassTitle->width()); + QString titleName; + if (m_currentAlbum == COMMON_STR_CLASS) + titleName = (tr("Image classification")); + else if (m_currentAlbum == COMMON_STR_CLASSDETAIL) + titleName = QObject::tr(m_currentClassName.toStdString().c_str()); + QString Str = utils::base::reorganizationStr(m_pClassTitle->font(), titleName, m_pClassTitle->width() + size); if (Str.length() > 0) { m_pClassTitle->show(); m_pClassTitle->raise(); @@ -3084,8 +3196,8 @@ void AlbumView::onBatchSelectChanged(bool isBatchSelect) } m_pClassTitle->setText(Str); m_pClassTitle->adjustSize(); - if (Str != tr("Image classification")) { - m_pClassTitle->setToolTip(tr("Image classification")); + if (Str != titleName) { + m_pClassTitle->setToolTip(titleName); } else { m_pClassTitle->setToolTip(""); } @@ -3134,3 +3246,10 @@ void AlbumView::onFilterBtnWidthChanged(int width) { adjustTitleContent(); } + +void AlbumView::slotClassBackClicked() +{ + m_bHasClassified = false; + updateRightClassView(); + adjustTitleContent(); +} diff --git a/src/album/albumview/albumview.h b/src/album/albumview/albumview.h index 0225abdd..c2796ac7 100644 --- a/src/album/albumview/albumview.h +++ b/src/album/albumview/albumview.h @@ -112,6 +112,7 @@ class AlbumView : public QWidget, public ImageEngineImportObject, public ImageMo void updateRightImportView(); void updateRightMyFavoriteView(); void updateRightClassView(); + void updateRightClassViewDetail(const QString &className); void updateRightMountView(); //打开图片 void onOpenImageClass(int row, const QString &path, bool bFullScreen); @@ -206,11 +207,14 @@ private slots: void onMonitorDestroyed(int UID); //筛选条件按钮宽度变化响应槽 void onFilterBtnWidthChanged(int width); + + void slotClassBackClicked(); public: int m_iAlubmPicsNum; QString m_currentAlbum; int m_currentUID; QString m_currentType; + QString m_currentClassName; AblumType m_currentItemType = photosType; int m_selPicNum; bool m_itemClicked; @@ -226,7 +230,8 @@ private slots: ThumbnailListView *m_customThumbnailList = nullptr; //自定义 ThumbnailListView *m_pRightTrashThumbnailList = nullptr; //最近删除 - ThumbnailListView *m_classThumbnailList = nullptr; //图片分类 + ThumbnailListView *m_classThumbnailList = nullptr; //图片分类封面页 + ThumbnailListView *m_classDetailThumbnailList = nullptr; //图片分类详情页 ThumbnailListView *m_favoriteThumbnailList = nullptr; //我的收藏 DWidget *pImportTimeLineWidget; @@ -253,9 +258,11 @@ private slots: DWidget *m_ClassTitleWidget = nullptr; DLabel *m_pClassTitle = nullptr; DLabel *m_pClassPicTotal = nullptr; + DPushButton *m_pClassBackBtn = nullptr; BatchOperateWidget *m_classBatchOperateWidget = nullptr; NoResultWidget *m_classNoResultWidget = nullptr; QString m_ClassPicTotalFullStr; + bool m_bHasClassified = false; //我的收藏标题栏 DWidget *m_pFavoriteWidget = nullptr; DWidget *m_FavoriteTitleWidget = nullptr; diff --git a/src/album/controller/signalmanager.h b/src/album/controller/signalmanager.h index 76b3432f..ea5ec47e 100644 --- a/src/album/controller/signalmanager.h +++ b/src/album/controller/signalmanager.h @@ -74,6 +74,8 @@ class SignalManager : public QObject // 图片分类已完成信号 void sigImageClassifyDone(); + // 打开分类详情页 + void sigOpenClassDetail(const QString &className); // Handle by album void createAlbum(QStringList imgPath = QStringList()); @@ -81,7 +83,7 @@ class SignalManager : public QObject void sigCreateNewAlbumFrom(const QString &albumname, int UID); void insertedIntoAlbum(int UID, const QStringList &paths); void removedFromAlbum(int UID, const QStringList &paths); - void sigSendKeywordsIntoALLPic(QString keywords, QString album = nullptr, int UID = -1); + void sigSendKeywordsIntoALLPic(QString keywords, QString album = nullptr, int UID = -1, const QString& className = ""); void sigCreateNewAlbumFromDialog(const QString &albumname, int UID); void sigMainwindowSliderValueChg(int value); // void sigESCKeyActivated(); diff --git a/src/album/dbmanager/dbmanager.cpp b/src/album/dbmanager/dbmanager.cpp index e3320cd2..cb13c5fa 100644 --- a/src/album/dbmanager/dbmanager.cpp +++ b/src/album/dbmanager/dbmanager.cpp @@ -346,6 +346,66 @@ void DBManager::removeImgInfosNoSignal(const QStringList &paths) } } +const DBImgInfoList DBManager::getInfosForClass(const QString &className) const +{ + QMutexLocker mutex(&m_dbMutex); + DBImgInfoList infos; + m_query->setForwardOnly(true); + + //切换到UID后,纯关键字搜索应该不受影响 + QString queryStr = "SELECT FilePath, FileName, Dir, Time, ChangeTime, ImportTime, FileType, ClassName, PathHash FROM ImageTable3 " + "WHERE ClassName='" + className + "' ORDER BY Time DESC"; + + bool b = m_query->prepare(queryStr); + + if (!b || !m_query->exec()) { + } else { + using namespace utils::base; + while (m_query->next()) { + DBImgInfo info; + info.filePath = m_query->value(0).toString(); + info.time = m_query->value(3).toDateTime(); + info.changeTime = m_query->value(4).toDateTime(); + info.importTime = m_query->value(5).toDateTime(); + info.itemType = ItemType(m_query->value(6).toInt()); + info.className = m_query->value(7).toString(); + info.pathHash = m_query->value(8).toString(); + infos << info; + } + } + return infos; +} + +const DBImgInfoList DBManager::getInfosForClassAndKeyword(const QString &className, const QString &keywords) const +{ + QMutexLocker mutex(&m_dbMutex); + DBImgInfoList infos; + m_query->setForwardOnly(true); + + //切换到UID后,纯关键字搜索应该不受影响 + QString queryStr = "SELECT FilePath, FileName, Dir, Time, ChangeTime, ImportTime, FileType, ClassName, PathHash FROM ImageTable3 " + "WHERE ClassName='" + className + "' AND FileName like '%" + keywords + "%' ORDER BY Time DESC"; + + bool b = m_query->prepare(queryStr); + + if (!b || !m_query->exec()) { + } else { + using namespace utils::base; + while (m_query->next()) { + DBImgInfo info; + info.filePath = m_query->value(0).toString(); + info.time = m_query->value(3).toDateTime(); + info.changeTime = m_query->value(4).toDateTime(); + info.importTime = m_query->value(5).toDateTime(); + info.itemType = ItemType(m_query->value(6).toInt()); + info.className = m_query->value(7).toString(); + info.pathHash = m_query->value(8).toString(); + infos << info; + } + } + return infos; +} + const QList> DBManager::getAllAlbumNames(AlbumDBType atype) const { QMutexLocker mutex(&m_dbMutex); diff --git a/src/album/dbmanager/dbmanager.h b/src/album/dbmanager/dbmanager.h index 69fdb070..9d63e02b 100644 --- a/src/album/dbmanager/dbmanager.h +++ b/src/album/dbmanager/dbmanager.h @@ -83,6 +83,8 @@ class DBManager : public QObject void insertImgInfo(const DBImgInfo &info); void removeImgInfos(const QStringList &paths); void removeImgInfosNoSignal(const QStringList &paths); + const DBImgInfoList getInfosForClass(const QString &className) const; + const DBImgInfoList getInfosForClassAndKeyword(const QString &className, const QString &keywords) const; const DBImgInfoList getInfosForKeyword(const QString &keywords) const; const DBImgInfoList getTrashInfosForKeyword(const QString &keywords) const; const DBImgInfoList getInfosForKeyword(int UID, const QString &keywords) const; diff --git a/src/album/imageengine/imageenginethread.cpp b/src/album/imageengine/imageenginethread.cpp index e41fa85b..9b78defb 100644 --- a/src/album/imageengine/imageenginethread.cpp +++ b/src/album/imageengine/imageenginethread.cpp @@ -58,11 +58,11 @@ DBImgInfo getDBInfo(const QString &srcpath, bool isVideo) QString value = mds.value("DateTimeOriginal"); dbi.itemType = ItemTypePic; if (Classifyutils::GetInstance()->isDBusExist()) { - if (srcfi.exists() && utils::base::isSupportClassify(srcpath)) + if (srcfi.exists() && utils::base::isSupportClassify(srcpath) && srcfi.isReadable()) dbi.className = Classifyutils::GetInstance()->imageClassify(srcpath.toStdString().c_str()); else dbi.className = ""; - if (dbi.className.isEmpty()) + if (dbi.className.isEmpty() && srcfi.isReadable()) dbi.className = "Other"; } dbi.changeTime = QDateTime::fromString(mds.value("DateTimeDigitized"), "yyyy/MM/dd hh:mm"); @@ -718,12 +718,13 @@ void ImagesClassifyThread::runDetail() for (auto &info : m_infos) { if (info.className.isEmpty()) { QFileInfo srcfi(info.filePath); - if (srcfi.exists() && utils::base::isSupportClassify(info.filePath)) + if (srcfi.exists() && utils::base::isSupportClassify(info.filePath) && srcfi.isReadable()) info.className = Classifyutils::GetInstance()->imageClassify(info.filePath.toStdString().c_str()); else info.className = ""; - if (info.className.isEmpty()) + if (info.className.isEmpty() && srcfi.isReadable()) info.className = "Other"; + emit dApp->signalM->progressOfWaitDialog(infoCount, i++); } } diff --git a/src/album/mainwindow.cpp b/src/album/mainwindow.cpp index 8824f4c1..c7f22e22 100644 --- a/src/album/mainwindow.cpp +++ b/src/album/mainwindow.cpp @@ -1266,17 +1266,21 @@ void MainWindow::onSearchEditFinished() albumBtnClicked(); // donothing } else { + if (COMMON_STR_CLASS == m_pAlbumview->m_currentAlbum) + return; + if (COMMON_STR_RECENT_IMPORTED == m_pAlbumview->m_pLeftListView->getItemCurrentType()) { emit dApp->signalM->sigSendKeywordsIntoALLPic(keywords, COMMON_STR_RECENT_IMPORTED); - } - //LMH0514,为了解决26092 【相册】【5.6.9.14】在我的收藏相册下无法搜索到收藏的照片,加入我的收藏枚举 - else if (COMMON_STR_FAVORITES == m_pAlbumview->m_pLeftListView->getItemCurrentType()) { + } else if (COMMON_STR_CLASSDETAIL == m_pAlbumview->m_currentAlbum) { + emit dApp->signalM->sigSendKeywordsIntoALLPic(keywords, COMMON_STR_CLASSDETAIL, -1, m_pAlbumview->m_currentClassName); + } else if (COMMON_STR_FAVORITES == m_pAlbumview->m_pLeftListView->getItemCurrentType()) { + //LMH0514,为了解决26092 【相册】【5.6.9.14】在我的收藏相册下无法搜索到收藏的照片,加入我的收藏枚举 emit dApp->signalM->sigSendKeywordsIntoALLPic(keywords, COMMON_STR_FAVORITES, DBManager::SpUID::u_Favorite); } else if (COMMON_STR_CUSTOM == m_pAlbumview->m_pLeftListView->getItemCurrentType()) { emit dApp->signalM->sigSendKeywordsIntoALLPic(keywords, m_pAlbumview->m_pLeftListView->getItemCurrentName(), m_pAlbumview->m_pLeftListView->getItemCurrentUID()); } - m_pAlbumview->m_pRightStackWidget->setCurrentIndex(4); + m_pAlbumview->m_pRightStackWidget->setCurrentIndex(5); m_pAlbumview->restorePicNum(); } } diff --git a/src/album/searchview/searchview.cpp b/src/album/searchview/searchview.cpp index b3845175..e6745d53 100644 --- a/src/album/searchview/searchview.cpp +++ b/src/album/searchview/searchview.cpp @@ -165,18 +165,21 @@ void SearchView::initMainStackWidget() layout->addWidget(m_stackWidget); } -void SearchView::improtSearchResultsIntoThumbnailView(QString s, const QString &album, int UID) +void SearchView::improtSearchResultsIntoThumbnailView(QString s, const QString &album, int UID, const QString& className) { m_albumName = album; m_UID = UID; using namespace utils::image; m_keywords = s; + m_className = className; QList thumbnaiItemList; DBImgInfoList infos; if (COMMON_STR_ALLPHOTOS == m_albumName || COMMON_STR_TIMELINE == m_albumName || COMMON_STR_RECENT_IMPORTED == m_albumName) { infos = DBManager::instance()->getInfosForKeyword(s); + } else if (COMMON_STR_CLASSDETAIL == m_albumName) { + infos = DBManager::instance()->getInfosForClassAndKeyword(className, s); } else if (COMMON_STR_TRASH == m_albumName) { infos = DBManager::instance()->getTrashInfosForKeyword(s); } else { @@ -318,7 +321,7 @@ void SearchView::onSlideShow(const QString &path) void SearchView::updateSearchResultsIntoThumbnailView() { - improtSearchResultsIntoThumbnailView(m_keywords, m_albumName, m_UID); + improtSearchResultsIntoThumbnailView(m_keywords, m_albumName, m_UID, m_className); } void SearchView::changeTheme() diff --git a/src/album/searchview/searchview.h b/src/album/searchview/searchview.h index 63390b8c..f9263270 100644 --- a/src/album/searchview/searchview.h +++ b/src/album/searchview/searchview.h @@ -40,7 +40,7 @@ class SearchView : public QWidget public: SearchView(); - void improtSearchResultsIntoThumbnailView(QString s, const QString &album, int UID); + void improtSearchResultsIntoThumbnailView(QString s, const QString &album, int UID, const QString& className); public slots: void onSlideShowBtnClicked(); @@ -75,6 +75,7 @@ public slots: DLabel *pLabel1; QString m_albumName; int m_UID; + QString m_className; int m_currentFontSize; public: int m_searchPicNum; diff --git a/src/album/thumbnail/thumbnaildelegate.cpp b/src/album/thumbnail/thumbnaildelegate.cpp index d8b2817e..63e37b67 100644 --- a/src/album/thumbnail/thumbnaildelegate.cpp +++ b/src/album/thumbnail/thumbnaildelegate.cpp @@ -5,6 +5,7 @@ #include "thumbnaildelegate.h" #include "utils/imageutils.h" #include "utils/baseutils.h" +#include "statusbar.h" #include "application.h" #include @@ -164,7 +165,7 @@ void ThumbnailDelegate::drawImgAndVideo(QPainter *painter, const QStyleOptionVie } //绘制选中图标 - if (selected) { + if (selected && COMMON_STR_CLASS != m_imageTypeStr) { QRect rc = option.rect; rc.setSize({CheckIcon_Size, CheckIcon_Size}); rc.moveTopRight(QPoint(option.rect.right() - 6, option.rect.top() + 6)); @@ -215,6 +216,50 @@ void ThumbnailDelegate::drawImgAndVideo(QPainter *painter, const QStyleOptionVie str = Text.elidedText(str, Qt::ElideRight, textwidth); } painter->drawText(posx + 3, backgroundRect.y() + backgroundRect.height() - 15, str);//在框中绘制文字,起点位置离最下方15像素 + } else if (COMMON_STR_CLASS == m_imageTypeStr) { + + // 绘制蒙皮 + QBrush shadowbrush = QBrush(QColor(0, 0, 0, 120)); + + painter->fillRect(backgroundRect, shadowbrush); + + const int iconWidth = 15; + const int yOffset = 2; + int rectwidth = backgroundRect.width() - 8; //缩略图宽度:总宽度减去选中框宽度8 + + // 绘制图标 + QPainterPath bp; + bp.addRoundedRect(backgroundRect, utils::common::BORDER_RADIUS, utils::common::BORDER_RADIUS); + painter->setClipPath(bp); + + QPixmap classPixmap = utils::base::renderSVG(getClassPicPath(data.className), QSize(iconWidth, iconWidth)); + int posx = backgroundRect.x() + rectwidth / 2 - iconWidth - 2; + int posy = backgroundRect.y() + backgroundRect.height() / 2 - iconWidth - yOffset; + painter->drawPixmap(posx, posy, classPixmap); + + // 绘制分类文字 + QString str(getClassTSName(data.className)); + int posx1 = posx + iconWidth; + int posy1 = posy + iconWidth / 2 + 6; + + painter->setFont(DFontSizeManager::instance()->get(DFontSizeManager::T7, QFont::Medium)); + painter->setPen(QColor(255, 255, 255)); + painter->drawText(posx1 + 3, posy1, str); + + // 绘制总数文字 + int photosCount = data.num.toInt(); + if (photosCount == 1) { + str = StatusBar::tr("1 photo"); + } else if (photosCount > 1) { + str = StatusBar::tr("%n photos", "", photosCount); + } + int textheight2 = painter->fontMetrics().height(); + + int posx2 = posx; + int posy2 = posy1 + textheight2; + painter->setFont(DFontSizeManager::instance()->get(DFontSizeManager::T8, QFont::Medium)); + painter->setPen(QColor(255, 255, 255, 178)); + painter->drawText(posx2, posy2, str); } //绘制视频时间 if (data.itemType == ItemTypeVideo) { @@ -261,7 +306,8 @@ void ThumbnailDelegate::drawImgAndVideo(QPainter *painter, const QStyleOptionVie //绘制心形图标 //if (COMMON_STR_FAVORITES == m_imageTypeStr) { - if (DBManager::instance()->isAllImgExistInAlbum(DBManager::SpUID::u_Favorite, QStringList(data.filePath), AlbumDBType::Favourite)) { + if (DBManager::instance()->isAllImgExistInAlbum(DBManager::SpUID::u_Favorite, QStringList(data.filePath), AlbumDBType::Favourite) + && COMMON_STR_CLASS != m_imageTypeStr) { QPainterPath bp; bp.addRoundedRect(backgroundRect, utils::common::BORDER_RADIUS, utils::common::BORDER_RADIUS); painter->setClipPath(bp); @@ -309,6 +355,54 @@ DBImgInfo ThumbnailDelegate::itemData(const QModelIndex &index) const return data; } +QString ThumbnailDelegate::getClassPicPath(const QString &className) const +{ + QString picName = ""; + if (className == CLASS_Scenery) { + picName = "album_scenery.svg"; + } else if (className == CLASS_FOOD) { + picName = "album_food.svg"; + } else if (className == CLASS_HUMANS) { + picName = "album_human.svg"; + } else if (className == CLASS_ANIMALS) { + picName = "album_animal.svg"; + } else if (className == CLASS_SCENE) { + picName = "album_scene.svg"; + } else if (className == CLASS_PLANT) { + picName = "album_plant.svg"; + } else if (className == CLASS_ITEMS) { + picName = "album_items.svg"; + } else if (className == CLASS_OTHER) { + picName = "album_other.svg"; + } + + return ":/icons/deepin/builtin/texts/" + picName; +} + +QString ThumbnailDelegate::getClassTSName(const QString &className) const +{ + QString tsName = ""; + if (className == CLASS_Scenery) { + tsName = QObject::tr("Scenery"); + } else if (className == CLASS_FOOD) { + tsName = QObject::tr("Food"); + } else if (className == CLASS_HUMANS) { + tsName = QObject::tr("Humans"); + } else if (className == CLASS_ANIMALS) { + tsName = QObject::tr("Animals"); + } else if (className == CLASS_SCENE) { + tsName = QObject::tr("Scene"); + } else if (className == CLASS_PLANT) { + tsName = QObject::tr("Plants"); + } else if (className == CLASS_ITEMS) { + tsName = QObject::tr("Items"); + } else if (className == CLASS_OTHER) { + tsName = QObject::tr("Other"); + } + + return tsName; +} + bool ThumbnailDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { Q_UNUSED(model); diff --git a/src/album/thumbnail/thumbnaildelegate.h b/src/album/thumbnail/thumbnaildelegate.h index cd84cee4..f0f14754 100644 --- a/src/album/thumbnail/thumbnaildelegate.h +++ b/src/album/thumbnail/thumbnaildelegate.h @@ -30,6 +30,7 @@ class ThumbnailDelegate : public QStyledItemDelegate AlbumViewTrashType,//相册-已删除 AlbumViewFavoriteType,//相册-收藏 AlbumViewClassType,//相册-图片分类 + AlbumViewClassDetailType,//相册-图片分类详情页 AlbumViewCustomType,//相册-自定义 AlbumViewPhoneType//相册-设备 }; @@ -61,7 +62,8 @@ private slots: private: DBImgInfo itemData(const QModelIndex &index) const; - + QString getClassPicPath(const QString &className) const; + QString getClassTSName(const QString &className) const; public: QString m_imageTypeStr; diff --git a/src/album/thumbnail/thumbnaillistview.cpp b/src/album/thumbnail/thumbnaillistview.cpp index c7ab22ef..dc96254b 100644 --- a/src/album/thumbnail/thumbnaillistview.cpp +++ b/src/album/thumbnail/thumbnaillistview.cpp @@ -184,6 +184,7 @@ void ThumbnailListView::mousePressEvent(QMouseEvent *event) } else { setDragEnabled(false); } + m_pressed = event->pos(); DListView::mousePressEvent(event); } @@ -196,6 +197,10 @@ void ThumbnailListView::mouseMoveEvent(QMouseEvent *event) return; } + // 照片分类页面禁用框选 + if (m_delegatetype == ThumbnailDelegate::AlbumViewClassType) + return; + if (touchStatus == 0) { touchStatus = 1; activeClick = false; @@ -240,6 +245,16 @@ void ThumbnailListView::showEvent(QShowEvent *event) m_onePicWidth = (i_totalwidth - ITEM_SPACING * (m_rowSizeHint - 1)) / m_rowSizeHint;//一张图的宽度 } +void ThumbnailListView::hideEvent(QHideEvent *event) +{ + // 控件隐藏时,若有焦点,清空焦点,可以避免焦点自动跳转到下一控件 + QWidget* fw = QApplication::focusWidget(); + if (fw == this) + this->clearFocus(); + + DListView::hideEvent(event); +} + void ThumbnailListView::wheelEvent(QWheelEvent *event) { if (event->delta() < 0) { @@ -299,6 +314,17 @@ void ThumbnailListView::mouseReleaseEvent(QMouseEvent *event) if (QApplication::keyboardModifiers() == Qt::NoModifier) { emit sigMouseRelease(); } + } else if (COMMON_STR_CLASS == m_imageType) { + if ((event->pos() - m_pressed).manhattanLength() > 3) + return; + + QModelIndex index = this->indexAt(event->pos()); + DBImgInfo info = index.data(Qt::DisplayRole).value(); + + // 点击进入分类详情页 + if (!info.className.isEmpty()) + emit dApp->signalM->sigOpenClassDetail(info.className); + return DListView::mouseReleaseEvent(event); } else { emit sigMouseRelease(); } @@ -475,7 +501,7 @@ QStringList ThumbnailListView::getFileList(int row, ItemType type) if (m_delegatetype == ThumbnailDelegate::AllPicViewType || m_delegatetype == ThumbnailDelegate::AlbumViewCustomType || m_delegatetype == ThumbnailDelegate::AlbumViewFavoriteType - || m_delegatetype == ThumbnailDelegate::AlbumViewClassType + || m_delegatetype == ThumbnailDelegate::AlbumViewClassDetailType || m_delegatetype == ThumbnailDelegate::SearchViewType || m_delegatetype == ThumbnailDelegate::AlbumViewPhoneType) { //遍历所有数据 @@ -539,7 +565,7 @@ QList ThumbnailListView::getAllFileInfo(int row) if (m_delegatetype == ThumbnailDelegate::AllPicViewType || m_delegatetype == ThumbnailDelegate::AlbumViewCustomType || m_delegatetype == ThumbnailDelegate::AlbumViewFavoriteType - || m_delegatetype == ThumbnailDelegate::AlbumViewClassType + || m_delegatetype == ThumbnailDelegate::AlbumViewClassDetailType || m_delegatetype == ThumbnailDelegate::SearchViewType) { for (int i = 0; i < m_model->rowCount(); i++) { QModelIndex index = m_model->index(i, 0); @@ -1098,6 +1124,12 @@ void ThumbnailListView::menuItemDeal(QStringList paths, QAction *action) void ThumbnailListView::onPixMapScale(int value) { + // 图片分类视图,封面大小固定为170像素 + if (m_delegatetype == ThumbnailDelegate::AlbumViewClassType) { + m_iBaseHeight = 170; + resizeEventF(); + return; + } // if (!this->isVisible()) // return; switch (value) { @@ -1389,7 +1421,7 @@ void ThumbnailListView::updateThumbnailViewAfterDelete(const QStringList &paths) if (m_delegatetype == ThumbnailDelegate::AllPicViewType || m_delegatetype == ThumbnailDelegate::AlbumViewCustomType || m_delegatetype == ThumbnailDelegate::AlbumViewFavoriteType - || m_delegatetype == ThumbnailDelegate::AlbumViewClassType + || m_delegatetype == ThumbnailDelegate::AlbumViewClassDetailType || m_delegatetype == ThumbnailDelegate::TimeLineViewType || m_delegatetype == ThumbnailDelegate::AlbumViewImportTimeLineViewType) { for (int i = (m_model->rowCount() - 1); i >= 0; i--) { @@ -1636,10 +1668,6 @@ void ThumbnailListView::insertThumbnailByImgInfos(DBImgInfoList infoList) this->showAppointTypeItem(m_currentShowItemType); } - // 如果图片分类不为空,则按图片分类过滤显示 - if (!m_currentShowClassName.isEmpty()) - this->showAppointClassItem(m_currentShowClassName); - //启动主动update机制 m_importTimer->start(100); m_importActiveCount = 150; @@ -1862,38 +1890,6 @@ void ThumbnailListView::showAppointTypeItem(ItemType type) } } -void ThumbnailListView::showAppointClassItem(const QString &className) -{ - // 记录当前选中的图片分类类型 - m_currentShowClassName = className; - //切换显示之前清楚选中项 - this->clearSelection(); - if (className.isEmpty()) { - //恢复显示所有 - hideAllAppointType(ItemTypeNull); - emit sigNoPicOrNoVideo(false); - } else { - bool bMatched = false; - for (int i = 0; i < m_model->rowCount(); i++) { - QModelIndex index = m_model->index(i, 0); - DBImgInfo info = index.data(Qt::DisplayRole).value(); - if (info.itemType == ItemTypeBlank) - continue; - - if (info.className == className) { - setRowHidden(i, false); - bMatched = true; - } else { - setRowHidden(i, true); - } - } - - emit sigNoPicOrNoVideo(!bMatched); - - flushTopTimeLine(8); //筛完了要刷新顶部 - } -} - //显示类型数量 int ThumbnailListView::getAppointTypeItemCount(ItemType type) { diff --git a/src/album/thumbnail/thumbnaillistview.h b/src/album/thumbnail/thumbnaillistview.h index 4a093bde..cbbfab00 100644 --- a/src/album/thumbnail/thumbnaillistview.h +++ b/src/album/thumbnail/thumbnaillistview.h @@ -127,8 +127,6 @@ class ThumbnailListView : public DListView void updatetimeLimeBtnText();//1050 //过滤显示选中类型 void showAppointTypeItem(ItemType type);//zynew - //过滤显示选中图片分类 - void showAppointClassItem(const QString& className); //显示类型数量 int getAppointTypeItemCount(ItemType type);//zynew //显示指定类型选中项数量 @@ -177,6 +175,7 @@ class ThumbnailListView : public DListView void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE; void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; //重写该函数是为了获取当前视图中最大的model index,该函数和paint同步 QRect visualRect(const QModelIndex &index) const override; @@ -267,7 +266,6 @@ public slots: QTimer *m_loadTimer = nullptr; //记录当前显示类型 ItemType m_currentShowItemType = ItemType::ItemTypeNull; - QString m_currentShowClassName = ""; BatchOperateWidget *m_batchOperateWidget = nullptr; //导入时主动update timer QTimer *m_importTimer; @@ -286,6 +284,9 @@ public slots: int m_height = 0; int m_onePicWidth = 0; bool m_isSelectAllBtn = false; //平板下,是否选中所有,默认未选定 + +private: + QPoint m_pressed; }; #endif // THUMBNAILLISTVIEW_H diff --git a/src/album/utils/baseutils.h b/src/album/utils/baseutils.h index 76bd5870..ad2f26ef 100644 --- a/src/album/utils/baseutils.h +++ b/src/album/utils/baseutils.h @@ -35,7 +35,8 @@ #define COMMON_STR_RECENT_IMPORTED "已导入" #define COMMON_STR_TRASH "最近删除" #define COMMON_STR_FAVORITES "我的收藏" -#define COMMON_STR_CLASS "图片分类" +#define COMMON_STR_CLASS "照片分类" +#define COMMON_STR_CLASSDETAIL "照片分类详情页" #define COMMON_STR_SEARCH "搜索" #define ALBUM_PATHNAME_BY_PHONE "DCIM" #define ALBUM_PATHTYPE_BY_PHONE "External Devices" @@ -241,6 +242,7 @@ const QStringList m_videoFiletypes = {"avs2"/*支持avs2视频格式*/, "3g2", " , "tp", "trp", "ts", "tts", "txd", "vcd", "vdr", "vob" , "vp8", "vro", "webm", "wm", "wmv", "wtv", "xesc", "xspf" }; + //判断是否视频 bool isVideo(QString path); //字符串自适应长度,多的变省略号 diff --git a/src/album/utils/classifyutils.cpp b/src/album/utils/classifyutils.cpp index 1c1c1341..a4833cf3 100644 --- a/src/album/utils/classifyutils.cpp +++ b/src/album/utils/classifyutils.cpp @@ -3,6 +3,8 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "classifyutils.h" +#include "albumgloabl.h" + #include #include @@ -21,7 +23,12 @@ QString Classifyutils::imageClassify(const QString &path) if (!isDBusExist()) return ""; - return m_dbus->imageClassify(path); + QString className = m_dbus->imageClassify(path); + // 一些无效类型名,统一归类为其他 + if (g_classList.indexOf(className) == -1) + className = "Other"; + + return className; } bool Classifyutils::isDBusExist() diff --git a/src/album/widgets/batchoperatewidget.cpp b/src/album/widgets/batchoperatewidget.cpp index 784bdaee..b06b4997 100644 --- a/src/album/widgets/batchoperatewidget.cpp +++ b/src/album/widgets/batchoperatewidget.cpp @@ -242,18 +242,10 @@ void BatchOperateWidget::sltCurrentFilterChanged(ExpansionPanel::FilteData &data { if (data.type == ItemType::ItemTypeNull) { //显示全部 - if (m_operateType != AlbumViewClassType) - m_thumbnailListView->showAppointTypeItem(ItemType::ItemTypeNull); - else - m_thumbnailListView->showAppointClassItem(data.className); + m_thumbnailListView->showAppointTypeItem(ItemType::ItemTypeNull); } else if (data.type == ItemType::ItemTypePic) { - if (data.className.isEmpty()) { - //显示图片 - m_thumbnailListView->showAppointTypeItem(ItemType::ItemTypePic); - } else { - //显示图片分类 - m_thumbnailListView->showAppointClassItem(data.className); - } + //显示图片 + m_thumbnailListView->showAppointTypeItem(ItemType::ItemTypePic); } else if (data.type == ItemType::ItemTypeVideo) { //显示视频 m_thumbnailListView->showAppointTypeItem(ItemType::ItemTypeVideo); @@ -309,7 +301,8 @@ void BatchOperateWidget::initUI() //筛选按钮 initDropdown(); hb->addWidget(m_ToolButton); - m_ToolButton->setVisible(true); + m_ToolButton->setVisible(m_operateType != AlbumViewClassDetailType); + //收藏 m_collection = new DToolButton(this); m_collection->setToolTip(QObject::tr("Favorite")); @@ -428,85 +421,20 @@ void BatchOperateWidget::initDropdown() m_expansionMenu->setDefaultFilteData(data); m_expansionMenu->addNewButton(data); - if (m_operateType == AlbumViewClassType) { - data.icon_r_light = QIcon::fromTheme("album_scenery"); - data.icon_r_dark = QIcon::fromTheme("album_scenery"); - data.icon_r_path = "album_scenery"; - data.text = QObject::tr("Scenery"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_Scenery; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_food"); - data.icon_r_dark = QIcon::fromTheme("album_food"); - data.icon_r_path = "album_food"; - data.text = QObject::tr("Food"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_FOOD; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_human"); - data.icon_r_dark = QIcon::fromTheme("album_human"); - data.icon_r_path = "album_human"; - data.text = QObject::tr("Human"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_HUMANS; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_scene"); - data.icon_r_dark = QIcon::fromTheme("album_scene"); - data.icon_r_path = "album_scene"; - data.text = QObject::tr("Scene"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_SCENE; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_animal"); - data.icon_r_dark = QIcon::fromTheme("album_animal"); - data.icon_r_path = "album_animal"; - data.text = QObject::tr("Animal"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_ANIMALS; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_plant"); - data.icon_r_dark = QIcon::fromTheme("album_plant"); - data.icon_r_path = "album_plant"; - data.text = QObject::tr("Plants"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_PLANT; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_items"); - data.icon_r_dark = QIcon::fromTheme("album_items"); - data.icon_r_path = "album_items"; - data.text = QObject::tr("Items"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_ITEMS; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_other"); - data.icon_r_dark = QIcon::fromTheme("album_other"); - data.icon_r_path = "album_other"; - data.text = QObject::tr("Other"); - data.type = ItemType::ItemTypePic; - data.className = CLASS_OTHER; - m_expansionMenu->addNewButton(data); - } else { - data.icon_r_light = QIcon::fromTheme("album_pic"); - data.icon_r_dark = QIcon::fromTheme("album_pic_hover"); - data.icon_r_path = "album_pic"; - data.text = QObject::tr("Photos"); - data.type = ItemType::ItemTypePic; - m_expansionMenu->addNewButton(data); - - data.icon_r_light = QIcon::fromTheme("album_video"); - data.icon_r_dark = QIcon::fromTheme("album_video_hover"); - data.icon_r_path = "album_video"; - data.text = QObject::tr("Videos"); - data.type = ItemType::ItemTypeVideo; - m_expansionMenu->addNewButton(data); - } + data.icon_r_light = QIcon::fromTheme("album_pic"); + data.icon_r_dark = QIcon::fromTheme("album_pic_hover"); + data.icon_r_path = "album_pic"; + data.text = QObject::tr("Photos"); + data.type = ItemType::ItemTypePic; + m_expansionMenu->addNewButton(data); + + data.icon_r_light = QIcon::fromTheme("album_video"); + data.icon_r_dark = QIcon::fromTheme("album_video_hover"); + data.icon_r_path = "album_video"; + data.text = QObject::tr("Videos"); + data.type = ItemType::ItemTypeVideo; + m_expansionMenu->addNewButton(data); + } void BatchOperateWidget::batchSelectChanged(bool isBatchSelect, bool disConnectSignal) @@ -558,7 +486,8 @@ void BatchOperateWidget::batchSelectChanged(bool isBatchSelect, bool disConnectS } else { m_trashRecoveryBtn->setVisible(false); m_trashDeleteBtn->setVisible(false); - m_ToolButton->setVisible(true); + if (m_operateType != AlbumViewClassDetailType) + m_ToolButton->setVisible(true); //根据所有选中图片,更新收藏按钮状态 m_collection->setVisible(false); m_leftRotate->setVisible(false); diff --git a/src/album/widgets/batchoperatewidget.h b/src/album/widgets/batchoperatewidget.h index 6c1bd473..51355151 100644 --- a/src/album/widgets/batchoperatewidget.h +++ b/src/album/widgets/batchoperatewidget.h @@ -46,7 +46,7 @@ class BatchOperateWidget : public QWidget SearchViewType,//搜索 AlbumViewImportTimeLineViewType,//相册-最近导入 AlbumViewTrashType,//相册-已删除 - AlbumViewClassType,//相册-图片分类 + AlbumViewClassDetailType,//相册-图片分类 AlbumViewFavoriteType,//相册-收藏 AlbumViewCustomType,//相册-自定义 AlbumViewPhoneType//相册-设备 diff --git a/src/album/widgets/expansionpanel.h b/src/album/widgets/expansionpanel.h index 71d82814..ed2859cf 100644 --- a/src/album/widgets/expansionpanel.h +++ b/src/album/widgets/expansionpanel.h @@ -17,15 +17,6 @@ #include "albumgloabl.h" -#define CLASS_PLANT "Plants" -#define CLASS_Scenery "Scenery" -#define CLASS_FOOD "Food" -#define CLASS_SCENE "Scene" -#define CLASS_ANIMALS "Animals" -#define CLASS_HUMANS "Humans" -#define CLASS_ITEMS "Items" -#define CLASS_OTHER "Other" - class ExpansionPanel : public DBlurEffectWidget { Q_OBJECT diff --git a/src/icons/icons.qrc b/src/icons/icons.qrc index 4ce45fbb..c31c8eca 100644 --- a/src/icons/icons.qrc +++ b/src/icons/icons.qrc @@ -59,7 +59,17 @@ texts/album_scene_hover_16px.svg texts/album_other_16px.svg texts/album_other_hover_16px.svg + texts/album_animal.svg + texts/album_food.svg + texts/album_human.svg + texts/album_items.svg + texts/album_plant.svg + texts/album_other.svg + texts/album_scene.svg + texts/album_scenery.svg + texts/left_arrow_24px.svg + diff --git a/src/icons/texts/album_animal.svg b/src/icons/texts/album_animal.svg new file mode 100644 index 00000000..41451468 --- /dev/null +++ b/src/icons/texts/album_animal.svg @@ -0,0 +1,16 @@ + + + 照片分类/icon/动物@1x + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_food.svg b/src/icons/texts/album_food.svg new file mode 100644 index 00000000..b9ab8b9e --- /dev/null +++ b/src/icons/texts/album_food.svg @@ -0,0 +1,10 @@ + + + 照片分类/icon/美食 + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_human.svg b/src/icons/texts/album_human.svg new file mode 100644 index 00000000..77fc3dfa --- /dev/null +++ b/src/icons/texts/album_human.svg @@ -0,0 +1,10 @@ + + + 照片分类/icon/人物 + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_items.svg b/src/icons/texts/album_items.svg new file mode 100644 index 00000000..11016813 --- /dev/null +++ b/src/icons/texts/album_items.svg @@ -0,0 +1,12 @@ + + + 照片分类/icon/物体 + + + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_other.svg b/src/icons/texts/album_other.svg new file mode 100644 index 00000000..32cdbe84 --- /dev/null +++ b/src/icons/texts/album_other.svg @@ -0,0 +1,11 @@ + + + 照片分类/icon/其他 + + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_plant.svg b/src/icons/texts/album_plant.svg new file mode 100644 index 00000000..db99fc2f --- /dev/null +++ b/src/icons/texts/album_plant.svg @@ -0,0 +1,10 @@ + + + 照片分类/icon/植物 + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_scene.svg b/src/icons/texts/album_scene.svg new file mode 100644 index 00000000..27b0aaa4 --- /dev/null +++ b/src/icons/texts/album_scene.svg @@ -0,0 +1,10 @@ + + + 照片分类/icon/场景 + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/album_scenery.svg b/src/icons/texts/album_scenery.svg new file mode 100644 index 00000000..04701291 --- /dev/null +++ b/src/icons/texts/album_scenery.svg @@ -0,0 +1,10 @@ + + + 照片分类/icon/风景 + + + + + + + \ No newline at end of file diff --git a/src/icons/texts/left_arrow_24px.svg b/src/icons/texts/left_arrow_24px.svg new file mode 100644 index 00000000..af7a5672 --- /dev/null +++ b/src/icons/texts/left_arrow_24px.svg @@ -0,0 +1,14 @@ + + + + back_hover + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/translations/deepin-album.ts b/translations/deepin-album.ts index 6807f63d..f88f4741 100644 --- a/translations/deepin-album.ts +++ b/translations/deepin-album.ts @@ -905,7 +905,7 @@ %1 items imported, %2 items exist already - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ar.ts b/translations/deepin-album_ar.ts index e34ef9b0..834c3fd2 100644 --- a/translations/deepin-album_ar.ts +++ b/translations/deepin-album_ar.ts @@ -913,7 +913,7 @@ - Plants + %1/%2 items classifyed @@ -925,27 +925,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ast.ts b/translations/deepin-album_ast.ts index cc2437cf..8bb01b8e 100644 --- a/translations/deepin-album_ast.ts +++ b/translations/deepin-album_ast.ts @@ -891,7 +891,7 @@ - Plants + %1/%2 items classifyed @@ -903,27 +903,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_az.ts b/translations/deepin-album_az.ts index 7ad51038..288f83e1 100644 --- a/translations/deepin-album_az.ts +++ b/translations/deepin-album_az.ts @@ -905,7 +905,7 @@ %1 element idxal olundu, %2 element artıq mövcuddur - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_bo.ts b/translations/deepin-album_bo.ts index 8088d0bc..5159f3e7 100644 --- a/translations/deepin-album_bo.ts +++ b/translations/deepin-album_bo.ts @@ -899,7 +899,7 @@ རྣམ་གྲངས་%1དྲངས་ཟིན། རྣམ་གྲངས་%2འདུག - Plants + %1/%2 items classifyed @@ -911,27 +911,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_br.ts b/translations/deepin-album_br.ts index e363ab2c..07cfa715 100644 --- a/translations/deepin-album_br.ts +++ b/translations/deepin-album_br.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ca.ts b/translations/deepin-album_ca.ts index a50c2fb6..05bee5dc 100644 --- a/translations/deepin-album_ca.ts +++ b/translations/deepin-album_ca.ts @@ -905,7 +905,7 @@ %1 elements importats, %2 elements ja existeixen - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_cs.ts b/translations/deepin-album_cs.ts index e9fc51e5..da430ca2 100644 --- a/translations/deepin-album_cs.ts +++ b/translations/deepin-album_cs.ts @@ -911,7 +911,7 @@ Naimportováno %1 položek, %2 položek už existuje - Plants + %1/%2 items classifyed @@ -923,27 +923,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_da.ts b/translations/deepin-album_da.ts index 04736ad7..8a3cc67a 100644 --- a/translations/deepin-album_da.ts +++ b/translations/deepin-album_da.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_de.ts b/translations/deepin-album_de.ts index cfaf4dcd..a4a85240 100644 --- a/translations/deepin-album_de.ts +++ b/translations/deepin-album_de.ts @@ -905,7 +905,7 @@ %1 Elemente importiert, %2 Elemente existieren bereits - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_el.ts b/translations/deepin-album_el.ts index 618224e2..b433828b 100644 --- a/translations/deepin-album_el.ts +++ b/translations/deepin-album_el.ts @@ -897,7 +897,7 @@ - Plants + %1/%2 items classifyed @@ -909,27 +909,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_en_AU.ts b/translations/deepin-album_en_AU.ts index 938fb95c..86212efe 100644 --- a/translations/deepin-album_en_AU.ts +++ b/translations/deepin-album_en_AU.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_es.ts b/translations/deepin-album_es.ts index fba67e94..6243967d 100644 --- a/translations/deepin-album_es.ts +++ b/translations/deepin-album_es.ts @@ -905,7 +905,7 @@ %1 elementos importados, %2 elementos ya existian - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_et.ts b/translations/deepin-album_et.ts index 09e03b4b..f5d1dce9 100644 --- a/translations/deepin-album_et.ts +++ b/translations/deepin-album_et.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_fi.ts b/translations/deepin-album_fi.ts index b4a6faad..b340dac0 100644 --- a/translations/deepin-album_fi.ts +++ b/translations/deepin-album_fi.ts @@ -905,7 +905,7 @@ %1 kohdetta tuotu, %2 oli jo olemassa - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_fr.ts b/translations/deepin-album_fr.ts index d4297128..a481d091 100644 --- a/translations/deepin-album_fr.ts +++ b/translations/deepin-album_fr.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_gl_ES.ts b/translations/deepin-album_gl_ES.ts index 3b9c2130..8ac4547e 100644 --- a/translations/deepin-album_gl_ES.ts +++ b/translations/deepin-album_gl_ES.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_hi_IN.ts b/translations/deepin-album_hi_IN.ts index 5484cdef..40af32cc 100644 --- a/translations/deepin-album_hi_IN.ts +++ b/translations/deepin-album_hi_IN.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_hr.ts b/translations/deepin-album_hr.ts index caf22a00..0f30651a 100644 --- a/translations/deepin-album_hr.ts +++ b/translations/deepin-album_hr.ts @@ -907,7 +907,7 @@ - Plants + %1/%2 items classifyed @@ -919,27 +919,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_hu.ts b/translations/deepin-album_hu.ts index 2fac7a16..127b1412 100644 --- a/translations/deepin-album_hu.ts +++ b/translations/deepin-album_hu.ts @@ -899,7 +899,7 @@ %1 elem importálva, %2 elem már létezik - Plants + %1/%2 items classifyed @@ -911,27 +911,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_id.ts b/translations/deepin-album_id.ts index 47208f1b..c0f3fc60 100644 --- a/translations/deepin-album_id.ts +++ b/translations/deepin-album_id.ts @@ -883,7 +883,7 @@ - Plants + %1/%2 items classifyed @@ -895,27 +895,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_it.ts b/translations/deepin-album_it.ts index 99807c49..d397307f 100644 --- a/translations/deepin-album_it.ts +++ b/translations/deepin-album_it.ts @@ -906,7 +906,7 @@ Localizzazione italiana a cura di Massimo A. Carofano %1 elementi importati, %2 elementi già presenti - Plants + %1/%2 items classifyed @@ -918,27 +918,27 @@ Localizzazione italiana a cura di Massimo A. Carofano - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ka.ts b/translations/deepin-album_ka.ts index e99c291c..e9dc35ff 100644 --- a/translations/deepin-album_ka.ts +++ b/translations/deepin-album_ka.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_km_KH.ts b/translations/deepin-album_km_KH.ts index 4d500545..f528eed8 100644 --- a/translations/deepin-album_km_KH.ts +++ b/translations/deepin-album_km_KH.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ko.ts b/translations/deepin-album_ko.ts index 3ac7d589..1f9a5ad3 100644 --- a/translations/deepin-album_ko.ts +++ b/translations/deepin-album_ko.ts @@ -895,7 +895,7 @@ - Plants + %1/%2 items classifyed @@ -907,27 +907,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_lv.ts b/translations/deepin-album_lv.ts index 161fda4c..b3113808 100644 --- a/translations/deepin-album_lv.ts +++ b/translations/deepin-album_lv.ts @@ -907,7 +907,7 @@ - Plants + %1/%2 items classifyed @@ -919,27 +919,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ms.ts b/translations/deepin-album_ms.ts index 3eda0fa0..0051eb57 100644 --- a/translations/deepin-album_ms.ts +++ b/translations/deepin-album_ms.ts @@ -895,7 +895,7 @@ %1 item diimport, %2 item sudah ada - Plants + %1/%2 items classifyed @@ -907,27 +907,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ne.ts b/translations/deepin-album_ne.ts index cd0b28dc..9178a5e5 100644 --- a/translations/deepin-album_ne.ts +++ b/translations/deepin-album_ne.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_nl.ts b/translations/deepin-album_nl.ts index 5e730572..e9d334a8 100644 --- a/translations/deepin-album_nl.ts +++ b/translations/deepin-album_nl.ts @@ -905,7 +905,7 @@ %1 items geïmporteerd - %2 items reeds aanwezig - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_pl.ts b/translations/deepin-album_pl.ts index 61c1cc8c..6ffbb961 100644 --- a/translations/deepin-album_pl.ts +++ b/translations/deepin-album_pl.ts @@ -911,7 +911,7 @@ %1 przedmioty zaimportowane, przedmioty %2 już istnieją - Plants + %1/%2 items classifyed @@ -923,27 +923,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_pt.ts b/translations/deepin-album_pt.ts index a232ff13..d263a0ff 100644 --- a/translations/deepin-album_pt.ts +++ b/translations/deepin-album_pt.ts @@ -905,7 +905,7 @@ %1 itens importados, %2 itens já existem - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_pt_BR.ts b/translations/deepin-album_pt_BR.ts index 1d98acd6..a3a82d9b 100644 --- a/translations/deepin-album_pt_BR.ts +++ b/translations/deepin-album_pt_BR.ts @@ -905,7 +905,7 @@ %1 itens importados, %2 itens já existem - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ro.ts b/translations/deepin-album_ro.ts index 76a8e026..b6a12032 100644 --- a/translations/deepin-album_ro.ts +++ b/translations/deepin-album_ro.ts @@ -891,7 +891,7 @@ - Plants + %1/%2 items classifyed @@ -903,27 +903,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ru.ts b/translations/deepin-album_ru.ts index 2060254b..1cbe78f4 100644 --- a/translations/deepin-album_ru.ts +++ b/translations/deepin-album_ru.ts @@ -911,7 +911,7 @@ %1 элемент (ов) импортирован (о), %2 элемент (ов) не удалось импортировать - Plants + %1/%2 items classifyed @@ -923,27 +923,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_sl.ts b/translations/deepin-album_sl.ts index f3251670..a3e9d72d 100644 --- a/translations/deepin-album_sl.ts +++ b/translations/deepin-album_sl.ts @@ -917,7 +917,7 @@ %1 uvoženih predmetov, %2 predmetov že obstaja - Plants + %1/%2 items classifyed @@ -929,27 +929,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_sq.ts b/translations/deepin-album_sq.ts index ad84e1d5..efbe2e16 100644 --- a/translations/deepin-album_sq.ts +++ b/translations/deepin-album_sq.ts @@ -905,7 +905,7 @@ %1 objekte të importuar, ekzistojnë tashmë %2 objekte - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_sr.ts b/translations/deepin-album_sr.ts index ae4e30ed..3c02f812 100644 --- a/translations/deepin-album_sr.ts +++ b/translations/deepin-album_sr.ts @@ -911,7 +911,7 @@ %1 ставки(е) увезено, %2 већ постоји - Plants + %1/%2 items classifyed @@ -923,27 +923,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_tr.ts b/translations/deepin-album_tr.ts index f6c8bb5c..ffbfcfa1 100644 --- a/translations/deepin-album_tr.ts +++ b/translations/deepin-album_tr.ts @@ -899,7 +899,7 @@ %1 öğe içe aktarıldı, %2 öğe zaten var - Plants + %1/%2 items classifyed @@ -911,27 +911,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_ug.ts b/translations/deepin-album_ug.ts index 4741999d..7865cd5b 100644 --- a/translations/deepin-album_ug.ts +++ b/translations/deepin-album_ug.ts @@ -905,7 +905,7 @@ %1 تۈر كىرگۈزۈلدى، %2 تۈر مەۋجۇت - Plants + %1/%2 items classifyed @@ -917,27 +917,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_uk.ts b/translations/deepin-album_uk.ts index 063a76dc..69cf54a5 100644 --- a/translations/deepin-album_uk.ts +++ b/translations/deepin-album_uk.ts @@ -911,7 +911,7 @@ Імпортовано %1 записів, %2 записів вже існує - Plants + %1/%2 items classifyed @@ -923,27 +923,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_zh_CN.ts b/translations/deepin-album_zh_CN.ts index 5ed2e88b..0623391c 100644 --- a/translations/deepin-album_zh_CN.ts +++ b/translations/deepin-album_zh_CN.ts @@ -169,7 +169,7 @@ Image classification - 图片分类 + 照片分类 @@ -910,18 +910,10 @@ Food 美食 - - Human - 人物 - Scene 场景 - - Animal - 动物 - Items 物体 @@ -934,6 +926,14 @@ %1/%2 items classifyed 已分类%1/%2项 + + Humans + 人物 + + + Animals + 动物 + SearchView diff --git a/translations/deepin-album_zh_HK.ts b/translations/deepin-album_zh_HK.ts index 21aadf04..6d76bd35 100644 --- a/translations/deepin-album_zh_HK.ts +++ b/translations/deepin-album_zh_HK.ts @@ -901,7 +901,7 @@ - Plants + %1/%2 items classifyed @@ -913,27 +913,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other diff --git a/translations/deepin-album_zh_TW.ts b/translations/deepin-album_zh_TW.ts index 50ee2e13..9e092722 100644 --- a/translations/deepin-album_zh_TW.ts +++ b/translations/deepin-album_zh_TW.ts @@ -899,7 +899,7 @@ %1個項目匯入成功,%2個項目已存在 - Plants + %1/%2 items classifyed @@ -911,27 +911,27 @@ - Human + Humans - Scene + Animals - Animal + Scene - Items + Plants - Other + Items - %1/%2 items classifyed + Other