static_data.rs

  1use std::path::PathBuf;
  2use std::str::FromStr;
  3
  4use rand::Rng;
  5
  6use crate::{
  7    Buffer, BufferRow, BufferRows, Editor, FileSystemStatus, GitStatus, HighlightColor,
  8    HighlightedLine, HighlightedText, Icon, Keybinding, Label, LabelColor, ListEntry,
  9    ListEntrySize, ListItem, Livestream, MicStatus, ModifierKeys, PaletteItem, Player,
 10    PlayerCallStatus, PlayerWithCallStatus, ScreenShareStatus, Symbol, Tab, Theme, ToggleState,
 11    VideoStatus,
 12};
 13
 14pub fn static_tabs_example<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
 15    vec![
 16        Tab::new()
 17            .title("wip.rs".to_string())
 18            .icon(Icon::FileRust)
 19            .current(false)
 20            .fs_status(FileSystemStatus::Deleted),
 21        Tab::new()
 22            .title("Cargo.toml".to_string())
 23            .icon(Icon::FileToml)
 24            .current(false)
 25            .git_status(GitStatus::Modified),
 26        Tab::new()
 27            .title("Channels Panel".to_string())
 28            .icon(Icon::Hash)
 29            .current(false),
 30        Tab::new()
 31            .title("channels_panel.rs".to_string())
 32            .icon(Icon::FileRust)
 33            .current(true)
 34            .git_status(GitStatus::Modified),
 35        Tab::new()
 36            .title("workspace.rs".to_string())
 37            .current(false)
 38            .icon(Icon::FileRust)
 39            .git_status(GitStatus::Modified),
 40        Tab::new()
 41            .title("icon_button.rs".to_string())
 42            .icon(Icon::FileRust)
 43            .current(false),
 44        Tab::new()
 45            .title("storybook.rs".to_string())
 46            .icon(Icon::FileRust)
 47            .current(false)
 48            .git_status(GitStatus::Created),
 49        Tab::new()
 50            .title("theme.rs".to_string())
 51            .icon(Icon::FileRust)
 52            .current(false),
 53        Tab::new()
 54            .title("theme_registry.rs".to_string())
 55            .icon(Icon::FileRust)
 56            .current(false),
 57        Tab::new()
 58            .title("styleable_helpers.rs".to_string())
 59            .icon(Icon::FileRust)
 60            .current(false),
 61    ]
 62}
 63
 64pub fn static_tabs_1<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
 65    vec![
 66        Tab::new()
 67            .title("project_panel.rs".to_string())
 68            .icon(Icon::FileRust)
 69            .current(false)
 70            .fs_status(FileSystemStatus::Deleted),
 71        Tab::new()
 72            .title("tab_bar.rs".to_string())
 73            .icon(Icon::FileRust)
 74            .current(false)
 75            .git_status(GitStatus::Modified),
 76        Tab::new()
 77            .title("workspace.rs".to_string())
 78            .icon(Icon::FileRust)
 79            .current(false),
 80        Tab::new()
 81            .title("tab.rs".to_string())
 82            .icon(Icon::FileRust)
 83            .current(true)
 84            .git_status(GitStatus::Modified),
 85    ]
 86}
 87
 88pub fn static_tabs_2<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
 89    vec![
 90        Tab::new()
 91            .title("tab_bar.rs".to_string())
 92            .icon(Icon::FileRust)
 93            .current(false)
 94            .fs_status(FileSystemStatus::Deleted),
 95        Tab::new()
 96            .title("static_data.rs".to_string())
 97            .icon(Icon::FileRust)
 98            .current(true)
 99            .git_status(GitStatus::Modified),
100    ]
101}
102
103pub fn static_tabs_3<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
104    vec![Tab::new().git_status(GitStatus::Created).current(true)]
105}
106
107pub fn static_players() -> Vec<Player> {
108    vec![
109        Player::new(
110            0,
111            "https://avatars.githubusercontent.com/u/1714999?v=4".into(),
112            "nathansobo".into(),
113        ),
114        Player::new(
115            1,
116            "https://avatars.githubusercontent.com/u/326587?v=4".into(),
117            "maxbrunsfeld".into(),
118        ),
119        Player::new(
120            2,
121            "https://avatars.githubusercontent.com/u/482957?v=4".into(),
122            "as-cii".into(),
123        ),
124        Player::new(
125            3,
126            "https://avatars.githubusercontent.com/u/1714999?v=4".into(),
127            "iamnbutler".into(),
128        ),
129        Player::new(
130            4,
131            "https://avatars.githubusercontent.com/u/1486634?v=4".into(),
132            "maxdeviant".into(),
133        ),
134    ]
135}
136
137#[derive(Debug)]
138pub struct PlayerData {
139    pub url: String,
140    pub name: String,
141}
142
143pub fn static_player_data() -> Vec<PlayerData> {
144    vec![
145        PlayerData {
146            url: "https://avatars.githubusercontent.com/u/1714999?v=4".into(),
147            name: "iamnbutler".into(),
148        },
149        PlayerData {
150            url: "https://avatars.githubusercontent.com/u/326587?v=4".into(),
151            name: "maxbrunsfeld".into(),
152        },
153        PlayerData {
154            url: "https://avatars.githubusercontent.com/u/482957?v=4".into(),
155            name: "as-cii".into(),
156        },
157        PlayerData {
158            url: "https://avatars.githubusercontent.com/u/1789?v=4".into(),
159            name: "nathansobo".into(),
160        },
161        PlayerData {
162            url: "https://avatars.githubusercontent.com/u/1486634?v=4".into(),
163            name: "ForLoveOfCats".into(),
164        },
165        PlayerData {
166            url: "https://avatars.githubusercontent.com/u/2690773?v=4".into(),
167            name: "SomeoneToIgnore".into(),
168        },
169        PlayerData {
170            url: "https://avatars.githubusercontent.com/u/19867440?v=4".into(),
171            name: "JosephTLyons".into(),
172        },
173        PlayerData {
174            url: "https://avatars.githubusercontent.com/u/24362066?v=4".into(),
175            name: "osiewicz".into(),
176        },
177        PlayerData {
178            url: "https://avatars.githubusercontent.com/u/22121886?v=4".into(),
179            name: "KCaverly".into(),
180        },
181        PlayerData {
182            url: "https://avatars.githubusercontent.com/u/1486634?v=4".into(),
183            name: "maxdeviant".into(),
184        },
185    ]
186}
187
188pub fn create_static_players(player_data: Vec<PlayerData>) -> Vec<Player> {
189    let mut players = Vec::new();
190    for data in player_data {
191        players.push(Player::new(players.len(), data.url, data.name));
192    }
193    players
194}
195
196pub fn static_player_1(data: &Vec<PlayerData>) -> Player {
197    Player::new(1, data[0].url.clone(), data[0].name.clone())
198}
199
200pub fn static_player_2(data: &Vec<PlayerData>) -> Player {
201    Player::new(2, data[1].url.clone(), data[1].name.clone())
202}
203
204pub fn static_player_3(data: &Vec<PlayerData>) -> Player {
205    Player::new(3, data[2].url.clone(), data[2].name.clone())
206}
207
208pub fn static_player_4(data: &Vec<PlayerData>) -> Player {
209    Player::new(4, data[3].url.clone(), data[3].name.clone())
210}
211
212pub fn static_player_5(data: &Vec<PlayerData>) -> Player {
213    Player::new(5, data[4].url.clone(), data[4].name.clone())
214}
215
216pub fn static_player_6(data: &Vec<PlayerData>) -> Player {
217    Player::new(6, data[5].url.clone(), data[5].name.clone())
218}
219
220pub fn static_player_7(data: &Vec<PlayerData>) -> Player {
221    Player::new(7, data[6].url.clone(), data[6].name.clone())
222}
223
224pub fn static_player_8(data: &Vec<PlayerData>) -> Player {
225    Player::new(8, data[7].url.clone(), data[7].name.clone())
226}
227
228pub fn static_player_9(data: &Vec<PlayerData>) -> Player {
229    Player::new(9, data[8].url.clone(), data[8].name.clone())
230}
231
232pub fn static_player_10(data: &Vec<PlayerData>) -> Player {
233    Player::new(10, data[9].url.clone(), data[9].name.clone())
234}
235
236pub fn static_livestream() -> Livestream {
237    Livestream {
238        players: random_players_with_call_status(7),
239        channel: Some("gpui2-ui".to_string()),
240    }
241}
242
243pub fn populate_player_call_status(
244    player: Player,
245    followers: Option<Vec<Player>>,
246) -> PlayerCallStatus {
247    let mut rng = rand::thread_rng();
248    let in_current_project: bool = rng.gen();
249    let disconnected: bool = rng.gen();
250    let voice_activity: f32 = rng.gen();
251    let mic_status = if rng.gen_bool(0.5) {
252        MicStatus::Muted
253    } else {
254        MicStatus::Unmuted
255    };
256    let video_status = if rng.gen_bool(0.5) {
257        VideoStatus::On
258    } else {
259        VideoStatus::Off
260    };
261    let screen_share_status = if rng.gen_bool(0.5) {
262        ScreenShareStatus::Shared
263    } else {
264        ScreenShareStatus::NotShared
265    };
266    PlayerCallStatus {
267        mic_status,
268        voice_activity,
269        video_status,
270        screen_share_status,
271        in_current_project,
272        disconnected,
273        following: None,
274        followers,
275    }
276}
277
278pub fn random_players_with_call_status(number_of_players: usize) -> Vec<PlayerWithCallStatus> {
279    let players = create_static_players(static_player_data());
280    let mut player_status = vec![];
281    for i in 0..number_of_players {
282        let followers = if i == 0 {
283            Some(vec![
284                players[1].clone(),
285                players[3].clone(),
286                players[5].clone(),
287                players[6].clone(),
288            ])
289        } else if i == 1 {
290            Some(vec![players[2].clone(), players[6].clone()])
291        } else {
292            None
293        };
294        let call_status = populate_player_call_status(players[i].clone(), followers);
295        player_status.push(PlayerWithCallStatus::new(players[i].clone(), call_status));
296    }
297    player_status
298}
299
300pub fn static_players_with_call_status() -> Vec<PlayerWithCallStatus> {
301    let players = static_players();
302    let mut player_0_status = PlayerCallStatus::new();
303    let player_1_status = PlayerCallStatus::new();
304    let player_2_status = PlayerCallStatus::new();
305    let mut player_3_status = PlayerCallStatus::new();
306    let mut player_4_status = PlayerCallStatus::new();
307
308    player_0_status.screen_share_status = ScreenShareStatus::Shared;
309    player_0_status.followers = Some(vec![players[1].clone(), players[3].clone()]);
310
311    player_3_status.voice_activity = 0.5;
312    player_4_status.mic_status = MicStatus::Muted;
313    player_4_status.in_current_project = false;
314
315    vec![
316        PlayerWithCallStatus::new(players[0].clone(), player_0_status),
317        PlayerWithCallStatus::new(players[1].clone(), player_1_status),
318        PlayerWithCallStatus::new(players[2].clone(), player_2_status),
319        PlayerWithCallStatus::new(players[3].clone(), player_3_status),
320        PlayerWithCallStatus::new(players[4].clone(), player_4_status),
321    ]
322}
323
324pub fn static_project_panel_project_items<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
325    vec![
326        ListEntry::new(Label::new("zed"))
327            .set_left_icon(Icon::FolderOpen.into())
328            .set_indent_level(0)
329            .set_toggle(ToggleState::Toggled),
330        ListEntry::new(Label::new(".cargo"))
331            .set_left_icon(Icon::Folder.into())
332            .set_indent_level(1),
333        ListEntry::new(Label::new(".config"))
334            .set_left_icon(Icon::Folder.into())
335            .set_indent_level(1),
336        ListEntry::new(Label::new(".git").color(LabelColor::Hidden))
337            .set_left_icon(Icon::Folder.into())
338            .set_indent_level(1),
339        ListEntry::new(Label::new(".cargo"))
340            .set_left_icon(Icon::Folder.into())
341            .set_indent_level(1),
342        ListEntry::new(Label::new(".idea").color(LabelColor::Hidden))
343            .set_left_icon(Icon::Folder.into())
344            .set_indent_level(1),
345        ListEntry::new(Label::new("assets"))
346            .set_left_icon(Icon::Folder.into())
347            .set_indent_level(1)
348            .set_toggle(ToggleState::Toggled),
349        ListEntry::new(Label::new("cargo-target").color(LabelColor::Hidden))
350            .set_left_icon(Icon::Folder.into())
351            .set_indent_level(1),
352        ListEntry::new(Label::new("crates"))
353            .set_left_icon(Icon::FolderOpen.into())
354            .set_indent_level(1)
355            .set_toggle(ToggleState::Toggled),
356        ListEntry::new(Label::new("activity_indicator"))
357            .set_left_icon(Icon::Folder.into())
358            .set_indent_level(2),
359        ListEntry::new(Label::new("ai"))
360            .set_left_icon(Icon::Folder.into())
361            .set_indent_level(2),
362        ListEntry::new(Label::new("audio"))
363            .set_left_icon(Icon::Folder.into())
364            .set_indent_level(2),
365        ListEntry::new(Label::new("auto_update"))
366            .set_left_icon(Icon::Folder.into())
367            .set_indent_level(2),
368        ListEntry::new(Label::new("breadcrumbs"))
369            .set_left_icon(Icon::Folder.into())
370            .set_indent_level(2),
371        ListEntry::new(Label::new("call"))
372            .set_left_icon(Icon::Folder.into())
373            .set_indent_level(2),
374        ListEntry::new(Label::new("sqlez").color(LabelColor::Modified))
375            .set_left_icon(Icon::Folder.into())
376            .set_indent_level(2)
377            .set_toggle(ToggleState::NotToggled),
378        ListEntry::new(Label::new("gpui2"))
379            .set_left_icon(Icon::FolderOpen.into())
380            .set_indent_level(2)
381            .set_toggle(ToggleState::Toggled),
382        ListEntry::new(Label::new("src"))
383            .set_left_icon(Icon::FolderOpen.into())
384            .set_indent_level(3)
385            .set_toggle(ToggleState::Toggled),
386        ListEntry::new(Label::new("derive_element.rs"))
387            .set_left_icon(Icon::FileRust.into())
388            .set_indent_level(4),
389        ListEntry::new(Label::new("storybook").color(LabelColor::Modified))
390            .set_left_icon(Icon::FolderOpen.into())
391            .set_indent_level(1)
392            .set_toggle(ToggleState::Toggled),
393        ListEntry::new(Label::new("docs").color(LabelColor::Default))
394            .set_left_icon(Icon::Folder.into())
395            .set_indent_level(2)
396            .set_toggle(ToggleState::Toggled),
397        ListEntry::new(Label::new("src").color(LabelColor::Modified))
398            .set_left_icon(Icon::FolderOpen.into())
399            .set_indent_level(3)
400            .set_toggle(ToggleState::Toggled),
401        ListEntry::new(Label::new("ui").color(LabelColor::Modified))
402            .set_left_icon(Icon::FolderOpen.into())
403            .set_indent_level(4)
404            .set_toggle(ToggleState::Toggled),
405        ListEntry::new(Label::new("component").color(LabelColor::Created))
406            .set_left_icon(Icon::FolderOpen.into())
407            .set_indent_level(5)
408            .set_toggle(ToggleState::Toggled),
409        ListEntry::new(Label::new("facepile.rs").color(LabelColor::Default))
410            .set_left_icon(Icon::FileRust.into())
411            .set_indent_level(6),
412        ListEntry::new(Label::new("follow_group.rs").color(LabelColor::Default))
413            .set_left_icon(Icon::FileRust.into())
414            .set_indent_level(6),
415        ListEntry::new(Label::new("list_item.rs").color(LabelColor::Created))
416            .set_left_icon(Icon::FileRust.into())
417            .set_indent_level(6),
418        ListEntry::new(Label::new("tab.rs").color(LabelColor::Default))
419            .set_left_icon(Icon::FileRust.into())
420            .set_indent_level(6),
421        ListEntry::new(Label::new("target").color(LabelColor::Hidden))
422            .set_left_icon(Icon::Folder.into())
423            .set_indent_level(1),
424        ListEntry::new(Label::new(".dockerignore"))
425            .set_left_icon(Icon::FileGeneric.into())
426            .set_indent_level(1),
427        ListEntry::new(Label::new(".DS_Store").color(LabelColor::Hidden))
428            .set_left_icon(Icon::FileGeneric.into())
429            .set_indent_level(1),
430        ListEntry::new(Label::new("Cargo.lock"))
431            .set_left_icon(Icon::FileLock.into())
432            .set_indent_level(1),
433        ListEntry::new(Label::new("Cargo.toml"))
434            .set_left_icon(Icon::FileToml.into())
435            .set_indent_level(1),
436        ListEntry::new(Label::new("Dockerfile"))
437            .set_left_icon(Icon::FileGeneric.into())
438            .set_indent_level(1),
439        ListEntry::new(Label::new("Procfile"))
440            .set_left_icon(Icon::FileGeneric.into())
441            .set_indent_level(1),
442        ListEntry::new(Label::new("README.md"))
443            .set_left_icon(Icon::FileDoc.into())
444            .set_indent_level(1),
445    ]
446    .into_iter()
447    .map(From::from)
448    .collect()
449}
450
451pub fn static_project_panel_single_items<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
452    vec![
453        ListEntry::new(Label::new("todo.md"))
454            .set_left_icon(Icon::FileDoc.into())
455            .set_indent_level(0),
456        ListEntry::new(Label::new("README.md"))
457            .set_left_icon(Icon::FileDoc.into())
458            .set_indent_level(0),
459        ListEntry::new(Label::new("config.json"))
460            .set_left_icon(Icon::FileGeneric.into())
461            .set_indent_level(0),
462    ]
463    .into_iter()
464    .map(From::from)
465    .collect()
466}
467
468pub fn static_collab_panel_current_call<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
469    vec![
470        ListEntry::new(Label::new("as-cii")).set_left_avatar("http://github.com/as-cii.png?s=50"),
471        ListEntry::new(Label::new("nathansobo"))
472            .set_left_avatar("http://github.com/nathansobo.png?s=50"),
473        ListEntry::new(Label::new("maxbrunsfeld"))
474            .set_left_avatar("http://github.com/maxbrunsfeld.png?s=50"),
475    ]
476    .into_iter()
477    .map(From::from)
478    .collect()
479}
480
481pub fn static_collab_panel_channels<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
482    vec![
483        ListEntry::new(Label::new("zed"))
484            .set_left_icon(Icon::Hash.into())
485            .set_size(ListEntrySize::Medium)
486            .set_indent_level(0),
487        ListEntry::new(Label::new("community"))
488            .set_left_icon(Icon::Hash.into())
489            .set_size(ListEntrySize::Medium)
490            .set_indent_level(1),
491        ListEntry::new(Label::new("dashboards"))
492            .set_left_icon(Icon::Hash.into())
493            .set_size(ListEntrySize::Medium)
494            .set_indent_level(2),
495        ListEntry::new(Label::new("feedback"))
496            .set_left_icon(Icon::Hash.into())
497            .set_size(ListEntrySize::Medium)
498            .set_indent_level(2),
499        ListEntry::new(Label::new("teams-in-channels-alpha"))
500            .set_left_icon(Icon::Hash.into())
501            .set_size(ListEntrySize::Medium)
502            .set_indent_level(2),
503        ListEntry::new(Label::new("current-projects"))
504            .set_left_icon(Icon::Hash.into())
505            .set_size(ListEntrySize::Medium)
506            .set_indent_level(1),
507        ListEntry::new(Label::new("codegen"))
508            .set_left_icon(Icon::Hash.into())
509            .set_size(ListEntrySize::Medium)
510            .set_indent_level(2),
511        ListEntry::new(Label::new("gpui2"))
512            .set_left_icon(Icon::Hash.into())
513            .set_size(ListEntrySize::Medium)
514            .set_indent_level(2),
515        ListEntry::new(Label::new("livestreaming"))
516            .set_left_icon(Icon::Hash.into())
517            .set_size(ListEntrySize::Medium)
518            .set_indent_level(2),
519        ListEntry::new(Label::new("open-source"))
520            .set_left_icon(Icon::Hash.into())
521            .set_size(ListEntrySize::Medium)
522            .set_indent_level(2),
523        ListEntry::new(Label::new("replace"))
524            .set_left_icon(Icon::Hash.into())
525            .set_size(ListEntrySize::Medium)
526            .set_indent_level(2),
527        ListEntry::new(Label::new("semantic-index"))
528            .set_left_icon(Icon::Hash.into())
529            .set_size(ListEntrySize::Medium)
530            .set_indent_level(2),
531        ListEntry::new(Label::new("vim"))
532            .set_left_icon(Icon::Hash.into())
533            .set_size(ListEntrySize::Medium)
534            .set_indent_level(2),
535        ListEntry::new(Label::new("web-tech"))
536            .set_left_icon(Icon::Hash.into())
537            .set_size(ListEntrySize::Medium)
538            .set_indent_level(2),
539    ]
540    .into_iter()
541    .map(From::from)
542    .collect()
543}
544
545pub fn example_editor_actions<S: 'static + Send + Sync + Clone>() -> Vec<PaletteItem<S>> {
546    vec![
547        PaletteItem::new("New File").keybinding(Keybinding::new(
548            "N".to_string(),
549            ModifierKeys::new().command(true),
550        )),
551        PaletteItem::new("Open File").keybinding(Keybinding::new(
552            "O".to_string(),
553            ModifierKeys::new().command(true),
554        )),
555        PaletteItem::new("Save File").keybinding(Keybinding::new(
556            "S".to_string(),
557            ModifierKeys::new().command(true),
558        )),
559        PaletteItem::new("Cut").keybinding(Keybinding::new(
560            "X".to_string(),
561            ModifierKeys::new().command(true),
562        )),
563        PaletteItem::new("Copy").keybinding(Keybinding::new(
564            "C".to_string(),
565            ModifierKeys::new().command(true),
566        )),
567        PaletteItem::new("Paste").keybinding(Keybinding::new(
568            "V".to_string(),
569            ModifierKeys::new().command(true),
570        )),
571        PaletteItem::new("Undo").keybinding(Keybinding::new(
572            "Z".to_string(),
573            ModifierKeys::new().command(true),
574        )),
575        PaletteItem::new("Redo").keybinding(Keybinding::new(
576            "Z".to_string(),
577            ModifierKeys::new().command(true).shift(true),
578        )),
579        PaletteItem::new("Find").keybinding(Keybinding::new(
580            "F".to_string(),
581            ModifierKeys::new().command(true),
582        )),
583        PaletteItem::new("Replace").keybinding(Keybinding::new(
584            "R".to_string(),
585            ModifierKeys::new().command(true),
586        )),
587        PaletteItem::new("Jump to Line"),
588        PaletteItem::new("Select All"),
589        PaletteItem::new("Deselect All"),
590        PaletteItem::new("Switch Document"),
591        PaletteItem::new("Insert Line Below"),
592        PaletteItem::new("Insert Line Above"),
593        PaletteItem::new("Move Line Up"),
594        PaletteItem::new("Move Line Down"),
595        PaletteItem::new("Toggle Comment"),
596        PaletteItem::new("Delete Line"),
597    ]
598}
599
600pub fn empty_editor_example<S: 'static + Send + Sync + Clone>() -> Editor<S> {
601    Editor {
602        tabs: static_tabs_example(),
603        path: PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
604        symbols: vec![],
605        buffer: empty_buffer_example(),
606    }
607}
608
609pub fn empty_buffer_example<S: 'static + Send + Sync + Clone>() -> Buffer<S> {
610    Buffer::new().set_rows(Some(BufferRows::default()))
611}
612
613pub fn hello_world_rust_editor_example<S: 'static + Send + Sync + Clone>(
614    theme: &Theme,
615) -> Editor<S> {
616    Editor {
617        tabs: static_tabs_example(),
618        path: PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
619        symbols: vec![Symbol(vec![
620            HighlightedText {
621                text: "fn ".to_string(),
622                color: HighlightColor::Keyword.hsla(&theme),
623            },
624            HighlightedText {
625                text: "main".to_string(),
626                color: HighlightColor::Function.hsla(&theme),
627            },
628        ])],
629        buffer: hello_world_rust_buffer_example(theme),
630    }
631}
632
633pub fn hello_world_rust_buffer_example<S: 'static + Send + Sync + Clone>(
634    theme: &Theme,
635) -> Buffer<S> {
636    Buffer::new()
637        .set_title("hello_world.rs".to_string())
638        .set_path("src/hello_world.rs".to_string())
639        .set_language("rust".to_string())
640        .set_rows(Some(BufferRows {
641            show_line_numbers: true,
642            rows: hello_world_rust_buffer_rows(theme),
643        }))
644}
645
646pub fn hello_world_rust_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
647    let show_line_number = true;
648
649    vec![
650        BufferRow {
651            line_number: 1,
652            code_action: false,
653            current: true,
654            line: Some(HighlightedLine {
655                highlighted_texts: vec![
656                    HighlightedText {
657                        text: "fn ".to_string(),
658                        color: HighlightColor::Keyword.hsla(&theme),
659                    },
660                    HighlightedText {
661                        text: "main".to_string(),
662                        color: HighlightColor::Function.hsla(&theme),
663                    },
664                    HighlightedText {
665                        text: "() {".to_string(),
666                        color: HighlightColor::Default.hsla(&theme),
667                    },
668                ],
669            }),
670            cursors: None,
671            status: GitStatus::None,
672            show_line_number,
673        },
674        BufferRow {
675            line_number: 2,
676            code_action: false,
677            current: false,
678            line: Some(HighlightedLine {
679                highlighted_texts: vec![HighlightedText {
680                    text: "    // Statements here are executed when the compiled binary is called."
681                        .to_string(),
682                    color: HighlightColor::Comment.hsla(&theme),
683                }],
684            }),
685            cursors: None,
686            status: GitStatus::None,
687            show_line_number,
688        },
689        BufferRow {
690            line_number: 3,
691            code_action: false,
692            current: false,
693            line: None,
694            cursors: None,
695            status: GitStatus::None,
696            show_line_number,
697        },
698        BufferRow {
699            line_number: 4,
700            code_action: false,
701            current: false,
702            line: Some(HighlightedLine {
703                highlighted_texts: vec![HighlightedText {
704                    text: "    // Print text to the console.".to_string(),
705                    color: HighlightColor::Comment.hsla(&theme),
706                }],
707            }),
708            cursors: None,
709            status: GitStatus::None,
710            show_line_number,
711        },
712        BufferRow {
713            line_number: 5,
714            code_action: false,
715            current: false,
716            line: Some(HighlightedLine {
717                highlighted_texts: vec![
718                    HighlightedText {
719                        text: "    println!(".to_string(),
720                        color: HighlightColor::Default.hsla(&theme),
721                    },
722                    HighlightedText {
723                        text: "\"Hello, world!\"".to_string(),
724                        color: HighlightColor::String.hsla(&theme),
725                    },
726                    HighlightedText {
727                        text: ");".to_string(),
728                        color: HighlightColor::Default.hsla(&theme),
729                    },
730                ],
731            }),
732            cursors: None,
733            status: GitStatus::None,
734            show_line_number,
735        },
736        BufferRow {
737            line_number: 6,
738            code_action: false,
739            current: false,
740            line: Some(HighlightedLine {
741                highlighted_texts: vec![HighlightedText {
742                    text: "}".to_string(),
743                    color: HighlightColor::Default.hsla(&theme),
744                }],
745            }),
746            cursors: None,
747            status: GitStatus::None,
748            show_line_number,
749        },
750    ]
751}
752
753pub fn hello_world_rust_editor_with_status_example<S: 'static + Send + Sync + Clone>(
754    theme: &Theme,
755) -> Editor<S> {
756    Editor {
757        tabs: static_tabs_example(),
758        path: PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
759        symbols: vec![Symbol(vec![
760            HighlightedText {
761                text: "fn ".to_string(),
762                color: HighlightColor::Keyword.hsla(&theme),
763            },
764            HighlightedText {
765                text: "main".to_string(),
766                color: HighlightColor::Function.hsla(&theme),
767            },
768        ])],
769        buffer: hello_world_rust_buffer_with_status_example(theme),
770    }
771}
772
773pub fn hello_world_rust_buffer_with_status_example<S: 'static + Send + Sync + Clone>(
774    theme: &Theme,
775) -> Buffer<S> {
776    Buffer::new()
777        .set_title("hello_world.rs".to_string())
778        .set_path("src/hello_world.rs".to_string())
779        .set_language("rust".to_string())
780        .set_rows(Some(BufferRows {
781            show_line_numbers: true,
782            rows: hello_world_rust_with_status_buffer_rows(theme),
783        }))
784}
785
786pub fn hello_world_rust_with_status_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
787    let show_line_number = true;
788
789    vec![
790        BufferRow {
791            line_number: 1,
792            code_action: false,
793            current: true,
794            line: Some(HighlightedLine {
795                highlighted_texts: vec![
796                    HighlightedText {
797                        text: "fn ".to_string(),
798                        color: HighlightColor::Keyword.hsla(&theme),
799                    },
800                    HighlightedText {
801                        text: "main".to_string(),
802                        color: HighlightColor::Function.hsla(&theme),
803                    },
804                    HighlightedText {
805                        text: "() {".to_string(),
806                        color: HighlightColor::Default.hsla(&theme),
807                    },
808                ],
809            }),
810            cursors: None,
811            status: GitStatus::None,
812            show_line_number,
813        },
814        BufferRow {
815            line_number: 2,
816            code_action: false,
817            current: false,
818            line: Some(HighlightedLine {
819                highlighted_texts: vec![HighlightedText {
820                    text: "// Statements here are executed when the compiled binary is called."
821                        .to_string(),
822                    color: HighlightColor::Comment.hsla(&theme),
823                }],
824            }),
825            cursors: None,
826            status: GitStatus::Modified,
827            show_line_number,
828        },
829        BufferRow {
830            line_number: 3,
831            code_action: false,
832            current: false,
833            line: None,
834            cursors: None,
835            status: GitStatus::None,
836            show_line_number,
837        },
838        BufferRow {
839            line_number: 4,
840            code_action: false,
841            current: false,
842            line: Some(HighlightedLine {
843                highlighted_texts: vec![HighlightedText {
844                    text: "    // Print text to the console.".to_string(),
845                    color: HighlightColor::Comment.hsla(&theme),
846                }],
847            }),
848            cursors: None,
849            status: GitStatus::None,
850            show_line_number,
851        },
852        BufferRow {
853            line_number: 5,
854            code_action: false,
855            current: false,
856            line: Some(HighlightedLine {
857                highlighted_texts: vec![
858                    HighlightedText {
859                        text: "    println!(".to_string(),
860                        color: HighlightColor::Default.hsla(&theme),
861                    },
862                    HighlightedText {
863                        text: "\"Hello, world!\"".to_string(),
864                        color: HighlightColor::String.hsla(&theme),
865                    },
866                    HighlightedText {
867                        text: ");".to_string(),
868                        color: HighlightColor::Default.hsla(&theme),
869                    },
870                ],
871            }),
872            cursors: None,
873            status: GitStatus::None,
874            show_line_number,
875        },
876        BufferRow {
877            line_number: 6,
878            code_action: false,
879            current: false,
880            line: Some(HighlightedLine {
881                highlighted_texts: vec![HighlightedText {
882                    text: "}".to_string(),
883                    color: HighlightColor::Default.hsla(&theme),
884                }],
885            }),
886            cursors: None,
887            status: GitStatus::None,
888            show_line_number,
889        },
890        BufferRow {
891            line_number: 7,
892            code_action: false,
893            current: false,
894            line: Some(HighlightedLine {
895                highlighted_texts: vec![HighlightedText {
896                    text: "".to_string(),
897                    color: HighlightColor::Default.hsla(&theme),
898                }],
899            }),
900            cursors: None,
901            status: GitStatus::Created,
902            show_line_number,
903        },
904        BufferRow {
905            line_number: 8,
906            code_action: false,
907            current: false,
908            line: Some(HighlightedLine {
909                highlighted_texts: vec![HighlightedText {
910                    text: "// Marshall and Nate were here".to_string(),
911                    color: HighlightColor::Comment.hsla(&theme),
912                }],
913            }),
914            cursors: None,
915            status: GitStatus::Created,
916            show_line_number,
917        },
918    ]
919}
920
921pub fn terminal_buffer<S: 'static + Send + Sync + Clone>(theme: &Theme) -> Buffer<S> {
922    Buffer::new()
923        .set_title("zed — fish".to_string())
924        .set_rows(Some(BufferRows {
925            show_line_numbers: false,
926            rows: terminal_buffer_rows(theme),
927        }))
928}
929
930pub fn terminal_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
931    let show_line_number = false;
932
933    vec![
934        BufferRow {
935            line_number: 1,
936            code_action: false,
937            current: false,
938            line: Some(HighlightedLine {
939                highlighted_texts: vec![
940                    HighlightedText {
941                        text: "maxdeviant ".to_string(),
942                        color: HighlightColor::Keyword.hsla(&theme),
943                    },
944                    HighlightedText {
945                        text: "in ".to_string(),
946                        color: HighlightColor::Default.hsla(&theme),
947                    },
948                    HighlightedText {
949                        text: "profaned-capital ".to_string(),
950                        color: HighlightColor::Function.hsla(&theme),
951                    },
952                    HighlightedText {
953                        text: "in ".to_string(),
954                        color: HighlightColor::Default.hsla(&theme),
955                    },
956                    HighlightedText {
957                        text: "~/p/zed ".to_string(),
958                        color: HighlightColor::Function.hsla(&theme),
959                    },
960                    HighlightedText {
961                        text: "on ".to_string(),
962                        color: HighlightColor::Default.hsla(&theme),
963                    },
964                    HighlightedText {
965                        text: " gpui2-ui ".to_string(),
966                        color: HighlightColor::Keyword.hsla(&theme),
967                    },
968                ],
969            }),
970            cursors: None,
971            status: GitStatus::None,
972            show_line_number,
973        },
974        BufferRow {
975            line_number: 2,
976            code_action: false,
977            current: false,
978            line: Some(HighlightedLine {
979                highlighted_texts: vec![HighlightedText {
980                    text: "λ ".to_string(),
981                    color: HighlightColor::String.hsla(&theme),
982                }],
983            }),
984            cursors: None,
985            status: GitStatus::None,
986            show_line_number,
987        },
988    ]
989}