Skip to content

Commit a245f3a

Browse files
committed
[*] refactor
1 parent c2612db commit a245f3a

File tree

4 files changed

+85
-8
lines changed

4 files changed

+85
-8
lines changed

todo.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
## 问题
2-
- 预设滤镜列表中条目后面添加也给移除按钮,点击移除按钮,移除列表中的预设滤镜
32

43
## 待验证
54
- 视频轨道分离字幕

wayshot/src/logic/video_editor/filters/filter.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ pub fn init(ui: &AppWindow) {
133133
ve_filter_cb!(add_filter, ui, filter_name);
134134
ve_filter_cb!(create_preset_filter, ui, name);
135135
ve_filter_cb!(add_preset_filter, ui, filter);
136+
ve_filter_cb!(remove_preset_filter, ui, index, filter_type);
136137
ve_filter_cb!(add_cache_preset_filter, ui, filter);
137138
ve_filter_cb!(remove_cache_preset_filter, ui, filter);
138139
ve_filter_cb!(toggle_mark_filter, ui, filter);
@@ -689,6 +690,38 @@ fn remove_cache_preset_filter(ui: &AppWindow, filter: UISegmentFilter) {
689690
ve_filter_cache_preset_filters!(ui).set_vec(new_cache);
690691
}
691692

693+
pub fn remove_preset_filter(ui: &AppWindow, index: i32, filter_type: UIFilterType) {
694+
let idx = index as usize;
695+
696+
match filter_type {
697+
UIFilterType::Video => {
698+
if idx < ve_filter_preset_filters!(ui, video).row_count() {
699+
ve_filter_preset_filters!(ui, video).remove(idx);
700+
}
701+
}
702+
UIFilterType::Audio => {
703+
if idx < ve_filter_preset_filters!(ui, audio).row_count() {
704+
ve_filter_preset_filters!(ui, audio).remove(idx);
705+
}
706+
}
707+
UIFilterType::Subtitle => {
708+
if idx < ve_filter_preset_filters!(ui, subtitle).row_count() {
709+
ve_filter_preset_filters!(ui, subtitle).remove(idx);
710+
}
711+
}
712+
UIFilterType::Image => {
713+
if idx < ve_filter_preset_filters!(ui, image).row_count() {
714+
ve_filter_preset_filters!(ui, image).remove(idx);
715+
}
716+
}
717+
}
718+
719+
let config = collect_preset_filters_from_ui(ui);
720+
save_preset_filters_to_db(ui.as_weak(), config);
721+
722+
crate::toast_success!(ui, "Preset filter removed");
723+
}
724+
692725
fn toggle_mark_filter(ui: &AppWindow, filter: UIFilterEntry) {
693726
let filter_name = filter.name.to_string();
694727
let filter_type: UIFilterType = filter.ty;

wayshot/ui/panel/desktop/video-editor/filter.slint

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ export global VEFilter {
296296

297297
callback create-preset-filter(name: string);
298298
callback add-preset-filter(filter: PresetFilter);
299+
callback remove-preset-filter(index: int, filter-type: FilterType);
299300
callback add-cache-preset-filter(filter: SegmentFilter);
300301
callback remove-cache-preset-filter(filter: SegmentFilter);
301302

wayshot/ui/panel/desktop/video-editor/right-panel/filter/filter.slint

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ component SegmentFilterList inherits Rectangle {
153153
private property <bool> preset-mode;
154154

155155
callback clicked(filter: SegmentFilter);
156+
callback filter-selected(ty: FilterType);
156157

157158
changed selected-index => {
158159
if (selected-index == -1) {
@@ -254,6 +255,7 @@ component SegmentFilterList inherits Rectangle {
254255
VEFilter.selected-filter = filter;
255256
VEFilter.is-in-edit-mode = VEFilter.is-edit-mode-filter(filter.name);
256257
Store.video-editor-segment-filter-flag = !Store.video-editor-segment-filter-flag;
258+
root.filter-selected(filter.ty);
257259
}
258260
}
259261
}
@@ -374,6 +376,7 @@ component SegmentFilter inherits Rectangle {
374376

375377
private property <VideoEditorTrackSegment> segment: Logic.video-editor-selected-segment(Store.video-editor-segment-selected-flag, Store.video-editor-segment-filter-flag);
376378
private property <SegmentFilter> selected-filter <=> VEFilter.selected-filter;
379+
private property <bool> auto-switching-tab: false;
377380

378381
// 例如通过界面调整了filter状态,但是selected-filter没有及时更新。导致状态不一致
379382
// 通过segment变化及时更新当前filter状态
@@ -390,7 +393,10 @@ component SegmentFilter inherits Rectangle {
390393
y: 0;
391394

392395
changed checked-index => {
393-
sl.selected-index = -1;
396+
if (!auto-switching-tab) {
397+
sl.selected-index = -1;
398+
}
399+
auto-switching-tab = false;
394400
}
395401

396402
open-filters-selector(checked-index) => {
@@ -408,6 +414,17 @@ component SegmentFilter inherits Rectangle {
408414
y: tab.y + tab.height + Theme.spacing * 2;
409415
height: root.height - td.height - tab.height - rec.height;
410416
segment: root.segment;
417+
418+
filter-selected(ty) => {
419+
auto-switching-tab = true;
420+
if (ty == FilterType.Video) {
421+
tab.checked-index = 0;
422+
} else if (ty == FilterType.Audio) {
423+
tab.checked-index = 1;
424+
} else if (ty == FilterType.Image) {
425+
tab.checked-index = 2;
426+
}
427+
}
411428
}
412429

413430
td := MovingDivider {
@@ -462,6 +479,7 @@ component FilterSelector inherits VerticalLayout {
462479

463480
callback clicked(entry: FilterEntry);
464481
callback preset-clicked(preset: PresetFilter);
482+
callback remove-preset-clicked(index: int);
465483
callback back <=> back-icon.clicked;
466484

467485
spacing: Theme.spacing;
@@ -569,15 +587,29 @@ component FilterSelector inherits VerticalLayout {
569587
hbox2 := HorizontalLayout {
570588
spacing: Theme.spacing * 4;
571589
padding: Theme.padding * 2;
572-
alignment: start;
590+
alignment: space-between;
591+
592+
HorizontalLayout {
593+
spacing: Theme.spacing * 4;
594+
alignment: start;
595+
596+
Label {
597+
text: index + 1;
598+
}
573599

574-
Label {
575-
text: index + 1;
600+
Label {
601+
text: preset.name;
602+
overflow: elide;
603+
}
576604
}
577605

578-
Label {
579-
text: preset.name;
580-
overflow: elide;
606+
IconBtn {
607+
icon: Icons.delete-light;
608+
show-icon-hover-background: false;
609+
610+
clicked => {
611+
root.remove-preset-clicked(index);
612+
}
581613
}
582614
}
583615
}
@@ -622,6 +654,10 @@ export component Filter inherits Rectangle {
622654
is-show-selector = false;
623655
}
624656

657+
remove-preset-clicked(index) => {
658+
VEFilter.remove-preset-filter(index, FilterType.Video);
659+
}
660+
625661
back => {
626662
is-show-selector = false;
627663
}
@@ -640,6 +676,10 @@ export component Filter inherits Rectangle {
640676
is-show-selector = false;
641677
}
642678

679+
remove-preset-clicked(index) => {
680+
VEFilter.remove-preset-filter(index, FilterType.Audio);
681+
}
682+
643683
back => {
644684
is-show-selector = false;
645685
}
@@ -658,6 +698,10 @@ export component Filter inherits Rectangle {
658698
is-show-selector = false;
659699
}
660700

701+
remove-preset-clicked(index) => {
702+
VEFilter.remove-preset-filter(index, FilterType.Image);
703+
}
704+
661705
back => {
662706
is-show-selector = false;
663707
}

0 commit comments

Comments
 (0)