forked from HemulGM/Strato
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStrato.Frame.AudioItem.pas
More file actions
161 lines (141 loc) · 4.2 KB
/
Strato.Frame.AudioItem.pas
File metadata and controls
161 lines (141 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
unit Strato.Frame.AudioItem;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
System.Messaging, System.Skia, FMX.Controls.Presentation, FMX.Skia,
FMX.Layouts, FMX.Objects, FMX.BufferedLayout;
type
TFrameAudioItem = class(TFrame)
RectangleBG: TRectangle;
LayoutAlbum: TLayout;
LayoutControls: TLayout;
LayoutState: TLayout;
LayoutImage: TLayout;
LayoutTitle: TLayout;
ButtonOptions: TButton;
ButtonLike: TButton;
RectangleCover: TRectangle;
AnimatedImagePlaying: TSkAnimatedImage;
LabelNumber: TLabel;
LabelAlbum: TLabel;
LabelTitle: TLabel;
LabelArtist: TLabel;
LabelDuration: TLabel;
procedure FrameClick(Sender: TObject);
private
FPlayChangeEventId: Int64;
FFileName: string;
FTitle: string;
FArtist: string;
FDuration: Int64;
FAlbum: string;
FNumber: Integer;
procedure SetFileName(const Value: string);
procedure SetTitle(const Value: string);
procedure SetArtist(const Value: string);
procedure SetDuration(const Value: Int64);
procedure SetAlbum(const Value: string);
procedure SetNumber(const Value: Integer);
function GetCover: TBitmap;
procedure DoPlay;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property FileName: string read FFileName write SetFileName;
property Title: string read FTitle write SetTitle;
property Artist: string read FArtist write SetArtist;
property Album: string read FAlbum write SetAlbum;
property Number: Integer read FNumber write SetNumber;
property Duration: Int64 read FDuration write SetDuration;
property Cover: TBitmap read GetCover;
end;
implementation
uses
Strato.Events, Strato.Utils;
{$R *.fmx}
{ TFrameAudioItem }
constructor TFrameAudioItem.Create(AOwner: TComponent);
begin
inherited;
Name := '';
AnimatedImagePlaying.Visible := False;
FPlayChangeEventId := TMessageManager.DefaultManager.SubscribeToMessage(TMessagePlayChange,
procedure(const Sender: TObject; const M: TMessage)
begin
var Msg := TMessagePlayChange(M);
if FFileName = Msg.Value.FileName then
begin
RectangleBG.Visible := True;
AnimatedImagePlaying.Visible := True;
LabelNumber.Visible := False;
end
else
begin
RectangleBG.Visible := False;
AnimatedImagePlaying.Visible := False;
LabelNumber.Visible := True;
end;
end);
ButtonOptions.DisableDisappear := True;
ButtonLike.DisableDisappear := True;
LabelNumber.DisableDisappear := True;
LabelAlbum.DisableDisappear := True;
LabelTitle.DisableDisappear := True;
LabelArtist.DisableDisappear := True;
LabelDuration.DisableDisappear := True;
end;
destructor TFrameAudioItem.Destroy;
begin
TMessageManager.DefaultManager.Unsubscribe(TMessagePlayChange, FPlayChangeEventId);
inherited;
end;
procedure TFrameAudioItem.DoPlay;
begin
var DoPlayData: TDoPlay;
DoPlayData.FileName := FFileName;
DoPlayData.Title := FTitle;
DoPlayData.Artist := FArtist;
DoPlayData.Duration := FDuration;
DoPlayData.Album := FAlbum;
DoPlayData.Cover := GetCover;
TMessageManager.DefaultManager.SendMessage(Self, TMessageDoPlay.Create(DoPlayData));
end;
procedure TFrameAudioItem.FrameClick(Sender: TObject);
begin
DoPlay;
end;
function TFrameAudioItem.GetCover: TBitmap;
begin
Result := RectangleCover.Fill.Bitmap.Bitmap;
end;
procedure TFrameAudioItem.SetAlbum(const Value: string);
begin
FAlbum := Value;
LabelAlbum.Text := FAlbum;
end;
procedure TFrameAudioItem.SetArtist(const Value: string);
begin
FArtist := Value;
LabelArtist.Text := FArtist;
end;
procedure TFrameAudioItem.SetDuration(const Value: Int64);
begin
FDuration := Value;
LabelDuration.Text := SecondsToStr(FDuration);
end;
procedure TFrameAudioItem.SetFileName(const Value: string);
begin
FFileName := Value;
end;
procedure TFrameAudioItem.SetNumber(const Value: Integer);
begin
FNumber := Value;
LabelNumber.Text := '#' + FNumber.ToString;
end;
procedure TFrameAudioItem.SetTitle(const Value: string);
begin
FTitle := Value;
LabelTitle.Text := FTitle;
end;
end.