Skip to main content

open_timeline_core/
timeline_view.rs

1// SPDX-License-Identifier: MIT
2
3//!
4//! The OpenTimeline timeline view type
5//!
6
7use crate::{Entity, HasIdAndName, Name, OpenTimelineId};
8use serde::Serialize;
9
10/// Holds the information needed to draw a timeline
11///
12/// See also [`crate::TimelineEdit`]
13#[derive(Serialize, Clone, Debug, PartialEq)]
14pub struct TimelineView {
15    /// The timeline's ID
16    id: OpenTimelineId,
17
18    /// The timeline's name
19    name: Name,
20
21    /// All the [`Entity`]s that are part of the timeline directly as well as
22    /// all of its subtimeline
23    entities: Option<Vec<Entity>>,
24}
25
26impl TimelineView {
27    /// Create a TimelineView
28    pub fn from(id: OpenTimelineId, name: Name, entities: Option<Vec<Entity>>) -> Self {
29        Self { id, name, entities }
30    }
31
32    /// Borrow the timeline's ID
33    pub fn id(&self) -> &OpenTimelineId {
34        &self.id
35    }
36
37    /// Borrow the timeline's name
38    pub fn name(&self) -> &Name {
39        &self.name
40    }
41
42    /// Borrow the timeline's entities
43    pub fn entities(&self) -> &Option<Vec<Entity>> {
44        &self.entities
45    }
46}
47
48impl HasIdAndName for TimelineView {
49    fn id(&self) -> Option<OpenTimelineId> {
50        Some(self.id)
51    }
52    fn set_id(&mut self, id: OpenTimelineId) {
53        self.id = id
54    }
55    fn name(&self) -> &Name {
56        &self.name
57    }
58    fn set_name(&mut self, name: Name) {
59        self.name = name
60    }
61}