xref: /MusicPlayer2/MusicPlayer2/IconMgr.h (revision ccb67e1690268e6e20dcb5784a156f1b466f70db)
11a8d5ccbSlrisora #pragma once
21a8d5ccbSlrisora class IconMgr
31a8d5ccbSlrisora {
41a8d5ccbSlrisora public:
51a8d5ccbSlrisora     IconMgr();
61a8d5ccbSlrisora     virtual ~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,                   // 专辑
88*ccb67e16Slrisora         IT_Genre,                   // 流派
89*ccb67e16Slrisora         IT_Year,                    // 年份
90*ccb67e16Slrisora         IT_Bitrate,                 // 比特率
91*ccb67e16Slrisora         IT_History,                 // 最近播放
92*ccb67e16Slrisora         IT_Key_Board,               // 快捷键
93*ccb67e16Slrisora         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,                     // 标签
101b2ba5e1dSlrisora 
102b2ba5e1dSlrisora         IT_Le_Tag_Insert,           // Le 插入时间标签
103b2ba5e1dSlrisora         IT_Le_Tag_Replace,          // Le 替换时间标签
104b2ba5e1dSlrisora         IT_Le_Tag_Delete,           // Le 删除时间标签
105b2ba5e1dSlrisora         IT_Le_Save,                 // Le 保存
106b2ba5e1dSlrisora         IT_Le_Find,                 // Le 文本查找
107b2ba5e1dSlrisora         IT_Le_Replace,              // Le 文本替换
1081a8d5ccbSlrisora 
1091a8d5ccbSlrisora         IT_Triangle_Left,           // 向左三角形
1101a8d5ccbSlrisora         IT_Triangle_Up,             // 向上三角形
1111a8d5ccbSlrisora         IT_Triangle_Right,          // 向右三角形
1121a8d5ccbSlrisora         IT_Triangle_Down,           // 向下三角形
1131a8d5ccbSlrisora 
114b2ba5e1dSlrisora         IT_Ok,                      // 圆/确认
115b2ba5e1dSlrisora         IT_Cancel,                  // 叉/取消
116b2ba5e1dSlrisora 
117d0f66372Slrisora         IT_Default_Cover_Playing,   // 默认封面(播放中)
118d0f66372Slrisora         IT_Default_Cover_Stopped,   // 默认封面(已停止)
119d0f66372Slrisora 
1201a8d5ccbSlrisora         IT_NO_ICON,
1211a8d5ccbSlrisora     };
1221a8d5ccbSlrisora 
1231a8d5ccbSlrisora     enum IconStyle
1241a8d5ccbSlrisora     {
1251a8d5ccbSlrisora         IS_Auto,
1261a8d5ccbSlrisora         IS_OutlinedDark,            // 深色的图标(浅色模式用)
1271a8d5ccbSlrisora         IS_OutlinedLight,           // 浅色的图标(深色模式用)
1281a8d5ccbSlrisora         IS_Filled,
1291a8d5ccbSlrisora         IS_Color,
1301a8d5ccbSlrisora     };
1311a8d5ccbSlrisora 
1321a8d5ccbSlrisora     enum IconSize
1331a8d5ccbSlrisora     {
1341a8d5ccbSlrisora         IS_Default,                 // SM_CXICON * SM_CYICON
1351a8d5ccbSlrisora         IS_DPI_16,
1361a8d5ccbSlrisora         IS_DPI_16_Full_Screen,
1371a8d5ccbSlrisora         IS_DPI_20,
1381a8d5ccbSlrisora         IS_DPI_20_Full_Screen,
1391a8d5ccbSlrisora         IS_DPI_32,
1401a8d5ccbSlrisora         IS_DPI_32_Full_Screen,
1411a8d5ccbSlrisora         IS_ORG_512,
1421a8d5ccbSlrisora     };
1431a8d5ccbSlrisora 
144b2ba5e1dSlrisora     // 获取需要的图标,不要在代码中大量直接调用
145b2ba5e1dSlrisora     // 请为同类调用提供一层包装以免之后修改困难
1461a8d5ccbSlrisora     HICON GetHICON(IconType type, IconStyle style = IS_Auto, IconSize size = IS_DPI_16);
1471a8d5ccbSlrisora 
1481a8d5ccbSlrisora     static CSize GetIconSize(IconSize size);
1491a8d5ccbSlrisora 
1501a8d5ccbSlrisora private:
1511a8d5ccbSlrisora 
1521a8d5ccbSlrisora     int MakeKey(IconType type, IconStyle style, IconSize size)
1531a8d5ccbSlrisora     {
1541a8d5ccbSlrisora         ASSERT(style < 10 && size < 10);
1551a8d5ccbSlrisora         return type * 100 + style * 10 + size;
1561a8d5ccbSlrisora     }
1571a8d5ccbSlrisora     std::tuple<UINT, UINT, UINT, UINT> GetIconID(IconType type);
1581a8d5ccbSlrisora 
1591a8d5ccbSlrisora     std::map<int, HICON> m_icon_map;
160b2ba5e1dSlrisora     std::shared_mutex m_shared_mutex;   // 线程同步对象
1611a8d5ccbSlrisora };
1621a8d5ccbSlrisora 
163