@@ -4,17 +4,17 @@ use crate::gui::helpers::season_episode_str_gen;
4
4
use crate :: gui:: troxide_widget:: { GREEN_THEME , INFO_HEADER , RED_THEME } ;
5
5
6
6
use iced:: widget:: { column, text} ;
7
- use iced:: Renderer ;
8
- use iced_aw:: Grid ;
7
+ use iced:: { Element , Renderer } ;
9
8
10
9
use super :: Message ;
11
10
12
11
pub fn status_widget (
13
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
14
12
series_info : & SeriesMainInformation ,
13
+ ) -> (
14
+ Element < ' _ , Message , Renderer > ,
15
+ Element < ' _ , Message , Renderer > ,
15
16
) {
16
17
let title_text = text ( "Status" ) ;
17
- series_data_grid. insert ( title_text) ;
18
18
19
19
let status_text = match SeriesStatus :: new ( series_info) {
20
20
SeriesStatus :: Running => text ( "Running" ) . style ( GREEN_THEME ) ,
@@ -23,30 +23,34 @@ pub fn status_widget(
23
23
SeriesStatus :: InDevelopment => text ( "In Development" ) ,
24
24
SeriesStatus :: Other => text ( & series_info. status ) ,
25
25
} ;
26
- series_data_grid . insert ( status_text) ;
26
+ ( title_text . into ( ) , status_text. into ( ) )
27
27
}
28
28
29
29
pub fn average_runtime_widget (
30
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
31
30
series_info : & SeriesMainInformation ,
31
+ ) -> (
32
+ Element < ' _ , Message , Renderer > ,
33
+ Element < ' _ , Message , Renderer > ,
32
34
) {
33
35
// since the the title part of this widget is the longest, we gonna add some space
34
36
// infront of it to make the separation of column nicer
35
- series_data_grid . insert ( text ( "Average runtime " ) ) ;
37
+ let title_text = text ( "Average runtime " ) ;
36
38
let body_widget = if let Some ( average_runtime) = series_info. average_runtime {
37
39
text ( format ! ( "{} mins" , average_runtime) )
38
40
} else {
39
41
text ( "unavailable" )
40
42
} ;
41
- series_data_grid . insert ( body_widget)
43
+ ( title_text . into ( ) , body_widget. into ( ) )
42
44
}
43
45
44
46
pub fn genres_widget (
45
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
46
47
series_info : & SeriesMainInformation ,
47
- ) {
48
+ ) -> Option < (
49
+ Element < ' _ , Message , Renderer > ,
50
+ Element < ' _ , Message , Renderer > ,
51
+ ) > {
48
52
if !series_info. genres . is_empty ( ) {
49
- series_data_grid . insert ( text ( "Genres" ) ) ;
53
+ let title_text = text ( "Genres" ) ;
50
54
let mut genres = String :: new ( ) ;
51
55
52
56
let mut series_result_iter = series_info. genres . iter ( ) . peekable ( ) ;
@@ -56,54 +60,66 @@ pub fn genres_widget(
56
60
genres. push_str ( ", " ) ;
57
61
}
58
62
}
59
- series_data_grid. insert ( text ( genres) ) ;
63
+ let genres = text ( genres) ;
64
+
65
+ Some ( ( title_text. into ( ) , genres. into ( ) ) )
66
+ } else {
67
+ None
60
68
}
61
69
}
62
70
63
71
pub fn language_widget (
64
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
65
72
series_info : & SeriesMainInformation ,
73
+ ) -> (
74
+ Element < ' _ , Message , Renderer > ,
75
+ Element < ' _ , Message , Renderer > ,
66
76
) {
67
- series_data_grid . insert ( text ( "Language" ) ) ;
68
- series_data_grid . insert ( if let Some ( language) = & series_info. language {
77
+ let title_text = text ( "Language" ) ;
78
+ let language = if let Some ( language) = & series_info. language {
69
79
text ( language)
70
80
} else {
71
81
text ( "unavailable" )
72
- } ) ;
82
+ } ;
83
+
84
+ ( title_text. into ( ) , language. into ( ) )
73
85
}
74
86
75
87
pub fn premiered_widget (
76
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
77
88
series_info : & SeriesMainInformation ,
89
+ ) -> (
90
+ Element < ' _ , Message , Renderer > ,
91
+ Element < ' _ , Message , Renderer > ,
78
92
) {
79
- series_data_grid . insert ( text ( "Premiered" ) ) ;
93
+ let title_text = text ( "Premiered" ) ;
80
94
let body_text = if let Some ( premier) = & series_info. premiered {
81
95
text ( premier)
82
96
} else {
83
97
text ( "unavailable" )
84
98
} ;
85
99
86
- series_data_grid . insert ( body_text)
100
+ ( title_text . into ( ) , body_text. into ( ) )
87
101
}
88
102
89
103
pub fn ended_widget (
90
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
91
104
series_info : & SeriesMainInformation ,
92
- ) {
105
+ ) -> Option < (
106
+ Element < ' _ , Message , Renderer > ,
107
+ Element < ' _ , Message , Renderer > ,
108
+ ) > {
93
109
// Pushing the widget to the grid only when the series has ended
94
110
match SeriesStatus :: new ( series_info) {
95
111
SeriesStatus :: Ended => { }
96
- _ => return ,
112
+ _ => return None ,
97
113
}
98
114
99
- series_data_grid . insert ( text ( "Ended" ) ) ;
115
+ let title_text = text ( "Ended" ) ;
100
116
let body_text = if let Some ( ended) = & series_info. ended {
101
117
text ( ended)
102
118
} else {
103
119
text ( "unavailable" )
104
120
} ;
105
121
106
- series_data_grid . insert ( body_text)
122
+ Some ( ( title_text . into ( ) , body_text. into ( ) ) )
107
123
}
108
124
109
125
pub fn summary_widget ( series_info : & SeriesMainInformation ) -> iced:: Element < ' _ , Message , Renderer > {
@@ -118,42 +134,46 @@ pub fn summary_widget(series_info: &SeriesMainInformation) -> iced::Element<'_,
118
134
}
119
135
120
136
pub fn rating_widget (
121
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
122
137
series_info : & SeriesMainInformation ,
138
+ ) -> (
139
+ Element < ' _ , Message , Renderer > ,
140
+ Element < ' _ , Message , Renderer > ,
123
141
) {
124
- series_data_grid . insert ( text ( "Average rating" ) ) ;
125
- let body_wiget = if let Some ( average_rating) = series_info. rating . average {
142
+ let title_text = text ( "Average rating" ) ;
143
+ let body_text = if let Some ( average_rating) = series_info. rating . average {
126
144
text ( average_rating. to_string ( ) )
127
145
} else {
128
146
text ( "unavailable" )
129
147
} ;
130
148
131
- series_data_grid . insert ( body_wiget )
149
+ ( title_text . into ( ) , body_text . into ( ) )
132
150
}
133
151
134
152
pub fn network_widget (
135
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
136
153
series_info : & SeriesMainInformation ,
137
- ) {
138
- if let Some ( network) = & series_info. network {
154
+ ) -> Option < (
155
+ Element < ' _ , Message , Renderer > ,
156
+ Element < ' _ , Message , Renderer > ,
157
+ ) > {
158
+ series_info. network . as_ref ( ) . map ( |network| {
139
159
// TODO: Add a clickable link
140
- series_data_grid. insert ( text ( "Network" ) ) ;
141
- series_data_grid. insert ( text ( format ! (
142
- "{} ({})" ,
143
- & network. name, & network. country. name
144
- ) ) )
145
- }
160
+ (
161
+ text ( "Network" ) . into ( ) ,
162
+ text ( format ! ( "{} ({})" , & network. name, & network. country. name) ) . into ( ) ,
163
+ )
164
+ } )
146
165
}
147
166
148
167
pub fn webchannel_widget (
149
- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
150
168
series_info : & SeriesMainInformation ,
151
- ) {
152
- if let Some ( webchannel) = & series_info. web_channel {
169
+ ) -> Option < (
170
+ Element < ' _ , Message , Renderer > ,
171
+ Element < ' _ , Message , Renderer > ,
172
+ ) > {
173
+ series_info. web_channel . as_ref ( ) . map ( |webchannel| {
153
174
// TODO: Add a clickable link
154
- series_data_grid. insert ( text ( "Webchannel" ) ) ;
155
- series_data_grid. insert ( text ( & webchannel. name ) )
156
- }
175
+ ( text ( "Webchannel" ) . into ( ) , text ( & webchannel. name ) . into ( ) )
176
+ } )
157
177
}
158
178
159
179
pub fn next_episode_release_time_widget ( series : & Series ) -> iced:: widget:: Text < ' _ , Renderer > {
0 commit comments