xref: /MusicPlayer2/MusicPlayer2/IconMgr.h (revision 52ac3cc4b8aba52ef010f9b81f6e6b7af65e4edb)
11a8d5ccbSlrisora #pragma once
21a8d5ccbSlrisora class IconMgr
31a8d5ccbSlrisora {
41a8d5ccbSlrisora public:
51a8d5ccbSlrisora     IconMgr();
6*965ce478Slrisora     ~IconMgr();
71a8d5ccbSlrisora 
81a8d5ccbSlrisora     enum IconType
9b2ba5e1dSlrisora     {   // 命名以其(点击时的)功能为准
101a8d5ccbSlrisora         IT_App,                     // 应用图标
11b2ba5e1dSlrisora         IT_App_Monochrome,          // 应用图标(单色)
121a8d5ccbSlrisora         IT_Stop,                    // 停止
131a8d5ccbSlrisora         IT_Play,                    // 播放
141a8d5ccbSlrisora         IT_Pause,                   // 暂停
151a8d5ccbSlrisora         IT_Play_Pause,              // 播放/暂停
161a8d5ccbSlrisora         IT_Previous,                // 上一曲
171a8d5ccbSlrisora         IT_Next,                    // 下一曲
181a8d5ccbSlrisora         IT_Favorite_On,             // 添加到我喜欢的音乐(空心♥)
191a8d5ccbSlrisora         IT_Favorite_Off,            // 从我喜欢的音乐移除(实心♥)
201a8d5ccbSlrisora         IT_Media_Lib,               // 媒体库
211a8d5ccbSlrisora         IT_Playlist,                // 播放列表
221a8d5ccbSlrisora 
231a8d5ccbSlrisora         IT_Menu,                    // 菜单
241a8d5ccbSlrisora         IT_Full_Screen_On,          // 进入全屏
251a8d5ccbSlrisora         IT_Full_Screen_Off,         // 退出全屏
261a8d5ccbSlrisora         IT_Minimize,                // 最小化
271a8d5ccbSlrisora         IT_Maxmize_On,              // 进入最大化
281a8d5ccbSlrisora         IT_Maxmize_Off,             // 退出最大化
291a8d5ccbSlrisora         IT_Close,                   // 关闭
301a8d5ccbSlrisora 
311a8d5ccbSlrisora         IT_Play_Order,              // 顺序播放
321a8d5ccbSlrisora         IT_Loop_Playlist,           // 列表循环
33b2ba5e1dSlrisora         IT_Loop_Track,              // 单曲循环
341a8d5ccbSlrisora         IT_Play_Shuffle,            // 无序播放
351a8d5ccbSlrisora         IT_Play_Random,             // 随机播放
361a8d5ccbSlrisora         IT_Play_Track,              // 单曲播放
371a8d5ccbSlrisora         IT_Setting,                 // 设置
381a8d5ccbSlrisora         IT_Equalizer,               // 均衡器
391a8d5ccbSlrisora         IT_Skin,                    // 切换界面(皮肤)
401a8d5ccbSlrisora         IT_Mini_On,                 // 进入迷你模式
411a8d5ccbSlrisora         IT_Mini_Off,                // 退出迷你模式
421a8d5ccbSlrisora         IT_Info,                    // 曲目信息
431a8d5ccbSlrisora         IT_Find,                    // 查找歌曲
441a8d5ccbSlrisora         IT_Dark_Mode_On,            // 进入深色模式(月亮)
451a8d5ccbSlrisora         IT_Dark_Mode_Off,           // 退出深色模式(太阳)
461a8d5ccbSlrisora         IT_Volume0,                 // 音量: 静音
471a8d5ccbSlrisora         IT_Volume1,                 // 音量: )
481a8d5ccbSlrisora         IT_Volume2,                 // 音量: ))
491a8d5ccbSlrisora         IT_Volume3,                 // 音量: )))
501a8d5ccbSlrisora         IT_Switch_Display,          // 切换显示(xml界面堆栈元素)
511a8d5ccbSlrisora 
521a8d5ccbSlrisora         IT_Folder,                  // 文件夹
53b2ba5e1dSlrisora         IT_Music,                   // 音符/打开文件
54b2ba5e1dSlrisora         IT_Link,                    // 曲别针/链接
55b2ba5e1dSlrisora         IT_Exit,                    // 退出
56b2ba5e1dSlrisora         IT_Rewind,                  // 快退
57b2ba5e1dSlrisora         IT_Fast_Forward,            // 快进
58b2ba5e1dSlrisora         IT_Speed_Up,                // 加速播放
59b2ba5e1dSlrisora         IT_Slow_Down,               // 减速播放
60b2ba5e1dSlrisora         IT_Add,                     // 添加
61b2ba5e1dSlrisora         IT_Save,                    // 保存
62b2ba5e1dSlrisora         IT_Save_As,                 // 另存为
63b2ba5e1dSlrisora         IT_Sort_Mode,               // 排序模式
64b2ba5e1dSlrisora         IT_Playlist_Display_Mode,   // 播放列表显示方式
651a8d5ccbSlrisora         IT_Locate,                  // 定位
66b2ba5e1dSlrisora         IT_Lyric,                   // 歌词
67b2ba5e1dSlrisora         IT_Copy,                    // 复制
68b2ba5e1dSlrisora         IT_Edit,                    // 编辑
69b2ba5e1dSlrisora         IT_Unlink,                  // 取消关联
70b2ba5e1dSlrisora         IT_Folder_Explore,          // 文件夹浏览/搜索
71b2ba5e1dSlrisora         IT_Internal_Lyric,          // 内嵌歌词
72b2ba5e1dSlrisora         IT_Download,                // 下载
73b2ba5e1dSlrisora         IT_Download_Batch,          // 批量下载
74b2ba5e1dSlrisora         IT_Playlist_Dock,           // 停靠播放列表/视图
75b2ba5e1dSlrisora         IT_Playlist_Float,          // 浮动播放列表
76b2ba5e1dSlrisora         IT_Pin,                     // 图钉/置顶
77b2ba5e1dSlrisora         IT_Convert,                 // 格式转换
78b2ba5e1dSlrisora         IT_Online,                  // 在线查看
79b2ba5e1dSlrisora         IT_Shortcut,                // 快捷方式
80b2ba5e1dSlrisora         IT_Album_Cover,             // 专辑封面
81b2ba5e1dSlrisora         IT_Statistics,              // 统计
82b2ba5e1dSlrisora         IT_File_Relate,             // 文件关联
83b2ba5e1dSlrisora         IT_Help,                    // 帮助
84b2ba5e1dSlrisora         IT_Fix,                     // 扳手/修复
85b2ba5e1dSlrisora         IT_Star,                    // 星星/分级
86b2ba5e1dSlrisora         IT_Artist,                  // 艺术家
87b2ba5e1dSlrisora         IT_Album,                   // 专辑
88ccb67e16Slrisora         IT_Genre,                   // 流派
89ccb67e16Slrisora         IT_Year,                    // 年份
90ccb67e16Slrisora         IT_Bitrate,                 // 比特率
91ccb67e16Slrisora         IT_History,                 // 最近播放
92ccb67e16Slrisora         IT_Key_Board,               // 快捷键
93ccb67e16Slrisora         IT_Reverb,                  // 混响
94b2ba5e1dSlrisora         IT_Double_Line,             // 双行
95b2ba5e1dSlrisora         IT_Lock,                    // 锁/桌面歌词锁定
96b2ba5e1dSlrisora         IT_Play_As_Next,            // 下一首播放
97b2ba5e1dSlrisora         IT_Rename,                  // 重命名
98b2ba5e1dSlrisora         IT_Play_In_Playlist,        // 添加到新播放列表并播放
99b2ba5e1dSlrisora         IT_Play_In_Folder,          // 在文件夹模式中播放
100a87de172Slrisora         IT_Tag,                     // 标签
101eee872ffSZhong Yang         IT_More,                    // 更多
1029a8a30ecSZhong Yang         IT_NowPlaying,              // 正在播放
10362221bbeSZhong Yang         IT_Karaoke,                 // 歌词卡拉OK效果
104ac0c3168SZhong Yang         IT_Refresh,                 // 刷新
105ac0c3168SZhong Yang         IT_NewFolder,               // 添加新文件夹
106b6e722e3Szhongyang219         IT_Background,              // 背景穿透
107b2ba5e1dSlrisora 
108b2ba5e1dSlrisora         IT_Le_Tag_Insert,           // Le 插入时间标签
109b2ba5e1dSlrisora         IT_Le_Tag_Replace,          // Le 替换时间标签
110b2ba5e1dSlrisora         IT_Le_Tag_Delete,           // Le 删除时间标签
111b2ba5e1dSlrisora         IT_Le_Save,                 // Le 保存
112b2ba5e1dSlrisora         IT_Le_Find,                 // Le 文本查找
113b2ba5e1dSlrisora         IT_Le_Replace,              // Le 文本替换
1141a8d5ccbSlrisora 
1151a8d5ccbSlrisora         IT_Triangle_Left,           // 向左三角形
1161a8d5ccbSlrisora         IT_Triangle_Up,             // 向上三角形
1171a8d5ccbSlrisora         IT_Triangle_Right,          // 向右三角形
1181a8d5ccbSlrisora         IT_Triangle_Down,           // 向下三角形
1191a8d5ccbSlrisora 
120b2ba5e1dSlrisora         IT_Ok,                      // 圆/确认
121b2ba5e1dSlrisora         IT_Cancel,                  // 叉/取消
122b2ba5e1dSlrisora 
123ec3944bcSzhongyang219         IT_TreeCollapsed,           // 折叠的树节点
124ec3944bcSzhongyang219         IT_TreeExpanded,            // 展开的树节点
125ec3944bcSzhongyang219 
126d0f66372Slrisora         IT_Default_Cover_Playing,   // 默认封面(播放中)
127d0f66372Slrisora         IT_Default_Cover_Stopped,   // 默认封面(已停止)
128d0f66372Slrisora 
1291a8d5ccbSlrisora         IT_NO_ICON,
1301a8d5ccbSlrisora     };
1311a8d5ccbSlrisora 
1321a8d5ccbSlrisora     enum IconStyle
1331a8d5ccbSlrisora     {
1341a8d5ccbSlrisora         IS_Auto,
1351a8d5ccbSlrisora         IS_OutlinedDark,            // 深色的图标(浅色模式用)
1361a8d5ccbSlrisora         IS_OutlinedLight,           // 浅色的图标(深色模式用)
1371a8d5ccbSlrisora         IS_Filled,
1381a8d5ccbSlrisora         IS_Color,
1391a8d5ccbSlrisora     };
1401a8d5ccbSlrisora 
1411a8d5ccbSlrisora     enum IconSize
1421a8d5ccbSlrisora     {
14312ba7354Slrisora         IS_DPI_16,
1441a8d5ccbSlrisora         IS_DPI_16_Full_Screen,
1451a8d5ccbSlrisora         IS_DPI_20,
1461a8d5ccbSlrisora         IS_DPI_20_Full_Screen,
1471a8d5ccbSlrisora         IS_DPI_32,
1481a8d5ccbSlrisora         IS_DPI_32_Full_Screen,
1491a8d5ccbSlrisora         IS_ORG_512,
15012ba7354Slrisora         IS_ALL,
1511a8d5ccbSlrisora     };
1521a8d5ccbSlrisora 
153b2ba5e1dSlrisora     // 获取需要的图标,不要在代码中大量直接调用
154b2ba5e1dSlrisora     // 请为同类调用提供一层包装以免之后修改困难
155bf0f421aSlrisora     HICON GetHICON(IconType type, IconStyle style, IconSize size);
1561a8d5ccbSlrisora 
GetIconSize(IconSize size)15712ba7354Slrisora     static CSize GetIconSize(IconSize size)
15812ba7354Slrisora     {
15912ba7354Slrisora         int width = GetIconWidth(size);
16012ba7354Slrisora         return CSize(width, width);
16112ba7354Slrisora     }
16212ba7354Slrisora     static int GetIconWidth(IconSize size);
1631a8d5ccbSlrisora 
1641a8d5ccbSlrisora private:
1651a8d5ccbSlrisora 
MakeKey(IconType type,IconStyle style,IconSize size)1661a8d5ccbSlrisora     int MakeKey(IconType type, IconStyle style, IconSize size)
1671a8d5ccbSlrisora     {
1681a8d5ccbSlrisora         ASSERT(style < 10 && size < 10);
1691a8d5ccbSlrisora         return type * 100 + style * 10 + size;
1701a8d5ccbSlrisora     }
1711a8d5ccbSlrisora     std::tuple<UINT, UINT, UINT, UINT> GetIconID(IconType type);
1721a8d5ccbSlrisora 
1731a8d5ccbSlrisora     std::map<int, HICON> m_icon_map;
174b2ba5e1dSlrisora     std::shared_mutex m_shared_mutex;   // 线程同步对象
1751a8d5ccbSlrisora };
1761a8d5ccbSlrisora 
177