static_data.rs

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