Skip to content

Commit a34d27f

Browse files
committed
ui中最近播放列表如果有关联的曲目列表元素,则不显示“预览”按钮
1 parent f1c2c6d commit a34d27f

File tree

2 files changed

+32
-18
lines changed

2 files changed

+32
-18
lines changed

MusicPlayer2/UIElement/RecentPlayedList.cpp

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -139,25 +139,31 @@ void UiElement::RecentPlayedList::OnHoverButtonClicked(int btn_index, int row)
139139
void UiElement::RecentPlayedList::OnSelectionChanged()
140140
{
141141
//获取关联的trackList元素
142-
if (!track_list_element_id.empty())
142+
FindTrackList();
143+
if (track_list != nullptr && track_list->IsShown())
143144
{
144-
TrackList* track_list = FindRelatedElement<TrackList>(track_list_element_id);
145-
if (track_list != nullptr && track_list->IsShown())
145+
int row = GetItemSelected();
146+
if (row >= 0 && row < GetRowCount())
147+
{
148+
ListItem list_item = m_list_cache.GetItem(row);
149+
track_list->SetListItem(list_item);
150+
}
151+
else
146152
{
147-
int row = GetItemSelected();
148-
if (row >= 0 && row < GetRowCount())
149-
{
150-
ListItem list_item = m_list_cache.GetItem(row);
151-
track_list->SetListItem(list_item);
152-
}
153-
else
154-
{
155-
track_list->ClearListItem();
156-
}
153+
track_list->ClearListItem();
157154
}
158155
}
159156
}
160157

158+
void UiElement::RecentPlayedList::FindTrackList()
159+
{
160+
if (!find_track_list)
161+
{
162+
track_list = FindRelatedElement<TrackList>(track_list_element_id);
163+
find_track_list = true; //找过一次没找到就不找了
164+
}
165+
}
166+
161167
void UiElement::RecentPlayedList::FromXmlNode(tinyxml2::XMLElement* xml_node)
162168
{
163169
AbstractListElement::FromXmlNode(xml_node);

MusicPlayer2/UIElement/RecentPlayedList.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
#pragma once
1+
#pragma once
22
#include "AbstractListElement.h"
33
namespace UiElement
44
{
5-
//最近播放
5+
class TrackList;
6+
7+
//最近播放
68
class RecentPlayedList : public AbstractListElement
79
{
810
public:
@@ -13,7 +15,7 @@ namespace UiElement
1315
COL_MAX
1416
};
1517

16-
//鼠标指向一行时显示的按钮
18+
//鼠标指向一行时显示的按钮
1719
enum BtnKey
1820
{
1921
BTN_PLAY,
@@ -25,7 +27,7 @@ namespace UiElement
2527

2628
virtual void Draw() override;
2729

28-
// 通过 AbstractListElement 继承
30+
// 通过 AbstractListElement 继承
2931
std::wstring GetItemText(int row, int col) override;
3032
int GetRowCount() override;
3133
int GetColumnCount() override;
@@ -44,9 +46,15 @@ namespace UiElement
4446

4547
virtual void FromXmlNode(tinyxml2::XMLElement* xml_node);
4648

49+
private:
50+
void FindTrackList(); //查找TrackList
51+
4752
protected:
48-
static CListCache m_list_cache; // 为RecentPlayedList的绘制缓存最近播放的ListItem,Draw之前调用reload
53+
static CListCache m_list_cache; // 为RecentPlayedList的绘制缓存最近播放的ListItem,Draw之前调用reload
4954
std::string track_list_element_id;
55+
56+
TrackList* track_list;
57+
bool find_track_list{}; //如果已经查找过TrackList,则为true
5058
};
5159
}
5260

0 commit comments

Comments
 (0)