summaryrefslogtreecommitdiff
path: root/rust/crates/timeline/src/placement/track_factory.rs
blob: 0b86ecf27e97e6c0a271f002af8185f3ffe513e4 (plain) (blame)
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
use scene::Track;

use crate::types::TrackType;

pub const DEFAULT_VIDEO_TRACK_NAME: &str = "Video track";
pub const DEFAULT_TEXT_TRACK_NAME: &str = "Text track";
pub const DEFAULT_AUDIO_TRACK_NAME: &str = "Audio track";
pub const DEFAULT_GRAPHIC_TRACK_NAME: &str = "Graphic track";
pub const DEFAULT_EFFECT_TRACK_NAME: &str = "Effect track";

pub fn default_track_name(track_type: TrackType) -> &'static str {
    match track_type {
        TrackType::Video => DEFAULT_VIDEO_TRACK_NAME,
        TrackType::Text => DEFAULT_TEXT_TRACK_NAME,
        TrackType::Audio => DEFAULT_AUDIO_TRACK_NAME,
        TrackType::Graphic => DEFAULT_GRAPHIC_TRACK_NAME,
        TrackType::Effect => DEFAULT_EFFECT_TRACK_NAME,
    }
}

pub fn build_empty_track(
    id: impl Into<String>,
    track_type: TrackType,
    name: Option<String>,
) -> Track {
    let id = id.into();
    let name = name.unwrap_or_else(|| default_track_name(track_type).to_string());

    match track_type {
        TrackType::Video => Track::Video {
            id,
            name,
            elements: Vec::new(),
            muted: false,
            hidden: false,
        },
        TrackType::Text => Track::Text {
            id,
            name,
            elements: Vec::new(),
            hidden: false,
        },
        TrackType::Audio => Track::Audio {
            id,
            name,
            elements: Vec::new(),
            muted: false,
        },
        TrackType::Graphic => Track::Graphic {
            id,
            name,
            elements: Vec::new(),
            hidden: false,
        },
        TrackType::Effect => Track::Effect {
            id,
            name,
            elements: Vec::new(),
            hidden: false,
        },
    }
}