@@ -18,9 +18,10 @@ import {
1818 PopupActionSetting ,
1919 ElevatedBtn ,
2020 MovingDivider ,
21+ Brand ,
2122} from "../../../../../base/widgets.slint" ;
2223import { FilterVideoDetail } from "video.slint" ;
23- import { SegmentFilterListItem } from "../../filter.slint" ;
24+ import { SegmentFilterListItem , VEFilter } from "../../filter.slint" ;
2425
2526component FilterDetailTab inherits Rectangle {
2627 in-out property <int > checked-index : 0 ;
@@ -111,10 +112,6 @@ component SegmentFilterList inherits Rectangle {
111112
112113 callback clicked (filter : SegmentFilterListItem );
113114
114- init => {
115- debug (self .preferred-height);
116- }
117-
118115 lv := ListView {
119116 for filter [index ] in segment.filters: Rectangle {
120117 border-radius : Theme.border-radius;
@@ -191,22 +188,26 @@ component SegmentFilterList inherits Rectangle {
191188}
192189
193190component FilterAudioDetail inherits Rectangle {
191+ in-out property <int > index : -1 ;
194192 in-out property <SegmentFilterListItem > selected-filter ;
195193 background : green;
196194}
197195
198196component FilterOverlayDetail inherits Rectangle {
197+ in-out property <int > index : -1 ;
199198 in-out property <SegmentFilterListItem > selected-filter ;
200199 background : blue;
201200}
202201
203202component FilterSubtitleDetail inherits Rectangle {
203+ in-out property <int > index : -1 ;
204204 in-out property <SegmentFilterListItem > selected-filter ;
205205 background : pink;
206206}
207207
208208component SegmentFilter inherits Rectangle {
209209 callback open-filters-selector (ty : VideoEditorTrackType );
210+
210211 private property <VideoEditorTrackSegment > segment : Logic.video-editor-selected-segment ();
211212 private property <SegmentFilterListItem> selected-filter;
212213
@@ -243,14 +244,6 @@ component SegmentFilter inherits Rectangle {
243244 height : root .height - td.height - tab.height - rec.height;
244245 segment : root .segment;
245246
246- // TODO:
247- // init => {
248- // self.selected-index = 0;
249- // selected-filter = {
250- // name: "brightness",
251- // };
252- // }
253-
254247 clicked (filter) => {
255248 selected-filter = filter;
256249 }
@@ -275,29 +268,142 @@ component SegmentFilter inherits Rectangle {
275268 if tab.checked-index == 0 : FilterVideoDetail {
276269 y : 0 ;
277270 selected-filter : selected-filter;
271+ index : sl.selected-index;
278272 }
279273
280274 if tab.checked-index == 1 : FilterAudioDetail {
281275 y : 0 ;
282276 selected-filter : selected-filter;
277+ index : sl.selected-index;
283278 }
284279
285280 if tab.checked-index == 2 : FilterOverlayDetail {
286281 y : 0 ;
287282 selected-filter : selected-filter;
283+ index : sl.selected-index;
288284 }
289285
290286 if tab.checked-index == 3 : FilterSubtitleDetail {
291287 y : 0 ;
292288 selected-filter : selected-filter;
289+ index : sl.selected-index;
290+ }
291+ }
292+ }
293+
294+ component FilterSelector inherits VerticalLayout {
295+ in-out property <[string ]> filter-names ;
296+
297+ callback clicked (name : string );
298+ callback back <=> back-icon.clicked;
299+
300+ spacing : Theme.spacing;
301+
302+ Rectangle {
303+ background : Theme.secondary-background;
304+
305+ HorizontalLayout {
306+ alignment : start;
307+ padding : Theme.padding * 2 ;
308+
309+ back-icon := IconBtn {
310+ icon : Icons.back-light;
311+ icon-size : Theme.icon-size * 0.9 ;
312+ }
313+ }
314+ }
315+
316+ ListView {
317+ for name [index ] in filter-names: Rectangle {
318+ border-radius : Theme.border-radius;
319+ background : ta.has-hover ? Theme.thirdly-background : mod(index, 2 ) == 0 ? Theme.table-item-first : Theme.table-item-second;
320+
321+ ta := TouchArea {
322+ mouse-cursor : MouseCursor.pointer;
323+
324+ clicked => {
325+ root .clicked (name);
326+ }
327+ }
328+
329+ hbox := HorizontalLayout {
330+ spacing : Theme.spacing * 4 ;
331+ padding : Theme.padding * 2 ;
332+ alignment : start;
333+
334+ Label {
335+ text : index + 1 ;
336+ }
337+
338+ Label {
339+ text : name;
340+ overflow : elide;
341+ }
342+ }
293343 }
294344 }
295345}
296346
297347export component Filter inherits Rectangle {
348+ private property <VideoEditorTrackType > track-type ;
349+ private property <bool > is-show-selector ;
350+
298351 SegmentFilter {
299352 open-filters-selector (ty) => {
300- // TODO:
353+ is-show-selector = true ;
354+ track-type = ty;
355+ }
356+ }
357+
358+ if is-show-selector: Rectangle {
359+ background : Theme.base-background;
360+ if track-type == VideoEditorTrackType.Video: FilterSelector {
361+ filter-names : VEFilter.video-filters;
362+
363+ clicked (name) => {
364+ Logic.video-editor-segment-add-filter (track-type, name);
365+ is-show-selector = false ;
366+ }
367+
368+ back => {
369+ is-show-selector = false ;
370+ }
371+ }
372+ if track-type == VideoEditorTrackType.Audio: FilterSelector {
373+ filter-names : VEFilter.audio-filters;
374+
375+ clicked (name) => {
376+ Logic.video-editor-segment-add-filter (track-type, name);
377+ is-show-selector = false ;
378+ }
379+
380+ back => {
381+ is-show-selector = false ;
382+ }
383+ }
384+ if track-type == VideoEditorTrackType.Overlay: FilterSelector {
385+ filter-names : VEFilter.overlay-filters;
386+
387+ clicked (name) => {
388+ Logic.video-editor-segment-add-filter (track-type, name);
389+ is-show-selector = false ;
390+ }
391+
392+ back => {
393+ is-show-selector = false ;
394+ }
395+ }
396+ if track-type == VideoEditorTrackType.Subtitle: FilterSelector {
397+ filter-names : VEFilter.subtitle-filters;
398+
399+ clicked (name) => {
400+ Logic.video-editor-segment-add-filter (track-type, name);
401+ is-show-selector = false ;
402+ }
403+
404+ back => {
405+ is-show-selector = false ;
406+ }
301407 }
302408 }
303409}
0 commit comments