Skip to content

Commit

Permalink
feat: add image classification
Browse files Browse the repository at this point in the history
  add image classification

Log: add image classification
  • Loading branch information
starhcq authored and rb-union committed Nov 20, 2023
1 parent 2d0cd7d commit 05ca360
Show file tree
Hide file tree
Showing 85 changed files with 6,191 additions and 1,880 deletions.
13 changes: 11 additions & 2 deletions src/album/albumgloabl.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,14 @@ enum ItemType {
ItemTypeVideo,
ItemTypeTimeLineTitle, //时间线标题
ItemTypeImportTimeLineTitle, //已导入时间线标题
ItemTypeMountImg //设备图片
ItemTypeMountImg, //设备图片
ItemTypePlant, // 植物
ItemTypeScenery, // 风景
ItemTypeFood, // 美食
ItemTypeScene, // 场景
ItemTypeAnimal, // 动物
ItemTypeHuman, // 人物
ItemTypeItems, // 物体
};

//注意内部数据的摆放顺序,可以依靠64位程序的8字节对齐以节省空间
Expand All @@ -61,7 +68,7 @@ struct DBImgInfo {
QDateTime importTime; // 导入时间 Or 删除时间
//QString albumUID; // 图片所属相册UID,以","分隔,用于恢复,有需要再放开
QString pathHash; // 用于应付频繁的hash,但不一定每个DBImgInfo都装载了它

QString className; // 图片分类所属种类,图片类型被划分为植物、风景、美食、场景、动物、人物和物体
ItemType itemType = ItemTypePic;//类型,空白,图片,视频

//显示
Expand All @@ -83,6 +90,7 @@ struct DBImgInfo {
<< " Time:" << info.time
<< " ChangeTime:" << info.changeTime
<< " ImportTime:" << info.importTime
<< " ClassName:" << info.className
//<< " UID:" << info.albumUID
<< "]";
return dbg;
Expand Down Expand Up @@ -133,6 +141,7 @@ struct DBImgInfo {
}
};
typedef QList<DBImgInfo> DBImgInfoList;
typedef QList<DBImgInfo*> DBImgInfoListPtr;

enum OpenImgViewType {
VIEW_MAINWINDOW_ALLPIC = 0,
Expand Down
274 changes: 265 additions & 9 deletions src/album/albumview/albumview.cpp

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions src/album/albumview/albumview.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ class AlbumView : public QWidget, public ImageEngineImportObject, public ImageMo
void initTrashWidget();
//初始化自定义相册列表
void initCustomAlbumWidget();
//初始化图片分类列表
void initClassWidget();
//初始化收藏列表
void initFavoriteWidget();
//初始化设备列表
Expand All @@ -109,8 +111,11 @@ class AlbumView : public QWidget, public ImageEngineImportObject, public ImageMo
void updateRightTrashView();
void updateRightImportView();
void updateRightMyFavoriteView();
void updateRightClassView();
void updateRightMountView();
//打开图片
void onOpenImageClass(int row, const QString &path, bool bFullScreen);
//打开图片
void onOpenImageFav(int row, const QString &path, bool bFullScreen);
//打开图片
void onOpenImageCustom(int row, const QString &path, bool bFullScreen);
Expand Down Expand Up @@ -221,6 +226,7 @@ private slots:

ThumbnailListView *m_customThumbnailList = nullptr; //自定义
ThumbnailListView *m_pRightTrashThumbnailList = nullptr; //最近删除
ThumbnailListView *m_classThumbnailList = nullptr; //图片分类
ThumbnailListView *m_favoriteThumbnailList = nullptr; //我的收藏

DWidget *pImportTimeLineWidget;
Expand All @@ -242,6 +248,14 @@ private slots:
DWidget *m_pCustomAlbumWidget = nullptr; //自定义相册右侧展示界面外层窗口
NoResultWidget *m_customNoResultWidget = nullptr;
QString m_CustomRightPicTotalFullStr;
//图片分类标题栏
DWidget *m_pClassWidget = nullptr;
DWidget *m_ClassTitleWidget = nullptr;
DLabel *m_pClassTitle = nullptr;
DLabel *m_pClassPicTotal = nullptr;
BatchOperateWidget *m_classBatchOperateWidget = nullptr;
NoResultWidget *m_classNoResultWidget = nullptr;
QString m_ClassPicTotalFullStr;
//我的收藏标题栏
DWidget *m_pFavoriteWidget = nullptr;
DWidget *m_FavoriteTitleWidget = nullptr;
Expand Down
63 changes: 48 additions & 15 deletions src/album/albumview/leftlistview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "imageengine/imageengineapi.h"
#include "dialogs/albumcreatedialog.h"
#include "ac-desktop-define.h"
#include "classifyutils.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <DFontSizeManager>
Expand Down Expand Up @@ -116,7 +117,10 @@ void LeftListView::initUI()
m_pPhotoLibListView->setItemDelegate(itemDelegate0);

m_pPhotoLibListView->setFixedWidth(LEFT_VIEW_WIDTH_180);
m_pPhotoLibListView->setFixedHeight(120);
if (Classifyutils::GetInstance()->isLoaded())
m_pPhotoLibListView->setFixedHeight(160);
else
m_pPhotoLibListView->setFixedHeight(120);
m_pPhotoLibListView->setSpacing(0);
m_pPhotoLibListView->setFrameShape(DListWidget::NoFrame);
m_pPhotoLibListView->setContextMenuPolicy(Qt::CustomContextMenu);
Expand All @@ -140,13 +144,23 @@ void LeftListView::initUI()
pAlbumLeftTabItem2->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem2, pAlbumLeftTabItem2);

// 图片分类
if (Classifyutils::GetInstance()->isLoaded()) {
QListWidgetItem *pListWidgetItem3 = new QListWidgetItem(m_pPhotoLibListView);
pListWidgetItem3->setSizeHint(QSize(LEFT_VIEW_LISTITEM_WIDTH_160, LEFT_VIEW_LISTITEM_HEIGHT_40));
AlbumLeftTabItem *pAlbumLeftTabItem3 = new AlbumLeftTabItem(COMMON_STR_CLASS, -1);
pAlbumLeftTabItem3->setFixedWidth(LEFT_VIEW_LISTITEM_WIDTH_160);
pAlbumLeftTabItem3->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem3, pAlbumLeftTabItem3);
}

// 我的收藏
QListWidgetItem *pListWidgetItem3 = new QListWidgetItem(m_pPhotoLibListView);
pListWidgetItem3->setSizeHint(QSize(LEFT_VIEW_LISTITEM_WIDTH_160, LEFT_VIEW_LISTITEM_HEIGHT_40));
AlbumLeftTabItem *pAlbumLeftTabItem3 = new AlbumLeftTabItem(COMMON_STR_FAVORITES, DBManager::SpUID::u_Favorite);
pAlbumLeftTabItem3->setFixedWidth(LEFT_VIEW_LISTITEM_WIDTH_160);
pAlbumLeftTabItem3->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem3, pAlbumLeftTabItem3);
QListWidgetItem *pListWidgetItem4 = new QListWidgetItem(m_pPhotoLibListView);
pListWidgetItem4->setSizeHint(QSize(LEFT_VIEW_LISTITEM_WIDTH_160, LEFT_VIEW_LISTITEM_HEIGHT_40));
AlbumLeftTabItem *pAlbumLeftTabItem4 = new AlbumLeftTabItem(COMMON_STR_FAVORITES, DBManager::SpUID::u_Favorite);
pAlbumLeftTabItem4->setFixedWidth(LEFT_VIEW_LISTITEM_WIDTH_160);
pAlbumLeftTabItem4->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem4, pAlbumLeftTabItem4);

// 相册列表Title
DWidget *lableCustomixeWidget = new DWidget(this);
Expand Down Expand Up @@ -275,14 +289,25 @@ void LeftListView::updatePhotoListView()
pAlbumLeftTabItem2->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem2, pAlbumLeftTabItem2);

// 图片分类
if (Classifyutils::GetInstance()->isLoaded()) {
QListWidgetItem *pListWidgetItem3 = new QListWidgetItem(m_pPhotoLibListView);
pListWidgetItem3->setSizeHint(QSize(LEFT_VIEW_LISTITEM_WIDTH_160, LEFT_VIEW_LISTITEM_HEIGHT_40));

AlbumLeftTabItem *pAlbumLeftTabItem3 = new AlbumLeftTabItem(COMMON_STR_CLASS, -1);
pAlbumLeftTabItem3->setFixedWidth(LEFT_VIEW_LISTITEM_WIDTH_160);
pAlbumLeftTabItem3->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem3, pAlbumLeftTabItem3);
}

// 我的收藏
QListWidgetItem *pListWidgetItem3 = new QListWidgetItem(m_pPhotoLibListView);
pListWidgetItem3->setSizeHint(QSize(LEFT_VIEW_LISTITEM_WIDTH_160, LEFT_VIEW_LISTITEM_HEIGHT_40));
QListWidgetItem *pListWidgetItem4 = new QListWidgetItem(m_pPhotoLibListView);
pListWidgetItem4->setSizeHint(QSize(LEFT_VIEW_LISTITEM_WIDTH_160, LEFT_VIEW_LISTITEM_HEIGHT_40));

AlbumLeftTabItem *pAlbumLeftTabItem3 = new AlbumLeftTabItem(COMMON_STR_FAVORITES, DBManager::SpUID::u_Favorite);
pAlbumLeftTabItem3->setFixedWidth(LEFT_VIEW_LISTITEM_WIDTH_160);
pAlbumLeftTabItem3->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem3, pAlbumLeftTabItem3);
AlbumLeftTabItem *pAlbumLeftTabItem4 = new AlbumLeftTabItem(COMMON_STR_FAVORITES, DBManager::SpUID::u_Favorite);
pAlbumLeftTabItem4->setFixedWidth(LEFT_VIEW_LISTITEM_WIDTH_160);
pAlbumLeftTabItem4->setFixedHeight(LEFT_VIEW_LISTITEM_HEIGHT_40);
m_pPhotoLibListView->setItemWidget(pListWidgetItem4, pAlbumLeftTabItem4);

m_pPhotoLibListView->setCurrentRow(0);
QModelIndex index;
Expand Down Expand Up @@ -492,10 +517,14 @@ void LeftListView::onPhotoLibListViewPressed(const QModelIndex &index)
m_ItemCurrentName = COMMON_STR_TRASH;
m_ItemCurrentType = COMMON_STR_TRASH;
m_currentUID = -1;
} else {
} else if (COMMON_STR_FAVORITES == item->m_albumNameStr) {
m_ItemCurrentName = COMMON_STR_FAVORITES;
m_ItemCurrentType = COMMON_STR_FAVORITES;
m_currentUID = DBManager::u_Favorite;
} else if (COMMON_STR_CLASS == item->m_albumNameStr) {
m_ItemCurrentName = COMMON_STR_CLASS;
m_ItemCurrentType = COMMON_STR_CLASS;
m_currentUID = -1;
}
m_ItemCurrentDataType = pitem->type(); //default 0
}
Expand Down Expand Up @@ -586,10 +615,14 @@ void LeftListView::onPhotoLibListViewCurrentItemChanged()
m_ItemCurrentName = COMMON_STR_TRASH;
m_ItemCurrentType = COMMON_STR_TRASH;
m_currentUID = -1;
} else {
} else if (COMMON_STR_FAVORITES == item->m_albumNameStr) {
m_ItemCurrentName = COMMON_STR_FAVORITES;
m_ItemCurrentType = COMMON_STR_FAVORITES;
m_currentUID = DBManager::u_Favorite;
} else if (COMMON_STR_CLASS == item->m_albumNameStr) {
m_ItemCurrentName = COMMON_STR_CLASS;
m_ItemCurrentType = COMMON_STR_CLASS;
m_currentUID = -1;
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/album/controller/signalmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ class SignalManager : public QObject
void sigExporting(const QString &path);
void sigRestoreStatus();

// 图片分类已完成信号
void sigImageClassifyDone();

// Handle by album
void createAlbum(QStringList imgPath = QStringList());
void viewCreateAlbum(QString path, bool bmodel = true);
Expand Down
Loading

0 comments on commit 05ca360

Please sign in to comment.