1use std::path::PathBuf;
2use std::str::FromStr;
3
4use rand::Rng;
5
6use crate::{
7 Buffer, BufferRow, BufferRows, EditorPane, 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() -> EditorPane {
601 EditorPane::new(
602 static_tabs_example(),
603 PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
604 vec![],
605 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(theme: &Theme) -> EditorPane {
614 EditorPane::new(
615 static_tabs_example(),
616 PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
617 vec![Symbol(vec![
618 HighlightedText {
619 text: "fn ".to_string(),
620 color: HighlightColor::Keyword.hsla(&theme),
621 },
622 HighlightedText {
623 text: "main".to_string(),
624 color: HighlightColor::Function.hsla(&theme),
625 },
626 ])],
627 hello_world_rust_buffer_example(theme),
628 )
629}
630
631pub fn hello_world_rust_buffer_example<S: 'static + Send + Sync + Clone>(
632 theme: &Theme,
633) -> Buffer<S> {
634 Buffer::new()
635 .set_title("hello_world.rs".to_string())
636 .set_path("src/hello_world.rs".to_string())
637 .set_language("rust".to_string())
638 .set_rows(Some(BufferRows {
639 show_line_numbers: true,
640 rows: hello_world_rust_buffer_rows(theme),
641 }))
642}
643
644pub fn hello_world_rust_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
645 let show_line_number = true;
646
647 vec![
648 BufferRow {
649 line_number: 1,
650 code_action: false,
651 current: true,
652 line: Some(HighlightedLine {
653 highlighted_texts: vec![
654 HighlightedText {
655 text: "fn ".to_string(),
656 color: HighlightColor::Keyword.hsla(&theme),
657 },
658 HighlightedText {
659 text: "main".to_string(),
660 color: HighlightColor::Function.hsla(&theme),
661 },
662 HighlightedText {
663 text: "() {".to_string(),
664 color: HighlightColor::Default.hsla(&theme),
665 },
666 ],
667 }),
668 cursors: None,
669 status: GitStatus::None,
670 show_line_number,
671 },
672 BufferRow {
673 line_number: 2,
674 code_action: false,
675 current: false,
676 line: Some(HighlightedLine {
677 highlighted_texts: vec![HighlightedText {
678 text: " // Statements here are executed when the compiled binary is called."
679 .to_string(),
680 color: HighlightColor::Comment.hsla(&theme),
681 }],
682 }),
683 cursors: None,
684 status: GitStatus::None,
685 show_line_number,
686 },
687 BufferRow {
688 line_number: 3,
689 code_action: false,
690 current: false,
691 line: None,
692 cursors: None,
693 status: GitStatus::None,
694 show_line_number,
695 },
696 BufferRow {
697 line_number: 4,
698 code_action: false,
699 current: false,
700 line: Some(HighlightedLine {
701 highlighted_texts: vec![HighlightedText {
702 text: " // Print text to the console.".to_string(),
703 color: HighlightColor::Comment.hsla(&theme),
704 }],
705 }),
706 cursors: None,
707 status: GitStatus::None,
708 show_line_number,
709 },
710 BufferRow {
711 line_number: 5,
712 code_action: false,
713 current: false,
714 line: Some(HighlightedLine {
715 highlighted_texts: vec![
716 HighlightedText {
717 text: " println!(".to_string(),
718 color: HighlightColor::Default.hsla(&theme),
719 },
720 HighlightedText {
721 text: "\"Hello, world!\"".to_string(),
722 color: HighlightColor::String.hsla(&theme),
723 },
724 HighlightedText {
725 text: ");".to_string(),
726 color: HighlightColor::Default.hsla(&theme),
727 },
728 ],
729 }),
730 cursors: None,
731 status: GitStatus::None,
732 show_line_number,
733 },
734 BufferRow {
735 line_number: 6,
736 code_action: false,
737 current: false,
738 line: Some(HighlightedLine {
739 highlighted_texts: vec![HighlightedText {
740 text: "}".to_string(),
741 color: HighlightColor::Default.hsla(&theme),
742 }],
743 }),
744 cursors: None,
745 status: GitStatus::None,
746 show_line_number,
747 },
748 ]
749}
750
751pub fn hello_world_rust_editor_with_status_example(theme: &Theme) -> EditorPane {
752 EditorPane::new(
753 static_tabs_example(),
754 PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
755 vec![Symbol(vec![
756 HighlightedText {
757 text: "fn ".to_string(),
758 color: HighlightColor::Keyword.hsla(&theme),
759 },
760 HighlightedText {
761 text: "main".to_string(),
762 color: HighlightColor::Function.hsla(&theme),
763 },
764 ])],
765 hello_world_rust_buffer_with_status_example(theme),
766 )
767}
768
769pub fn hello_world_rust_buffer_with_status_example<S: 'static + Send + Sync + Clone>(
770 theme: &Theme,
771) -> Buffer<S> {
772 Buffer::new()
773 .set_title("hello_world.rs".to_string())
774 .set_path("src/hello_world.rs".to_string())
775 .set_language("rust".to_string())
776 .set_rows(Some(BufferRows {
777 show_line_numbers: true,
778 rows: hello_world_rust_with_status_buffer_rows(theme),
779 }))
780}
781
782pub fn hello_world_rust_with_status_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
783 let show_line_number = true;
784
785 vec![
786 BufferRow {
787 line_number: 1,
788 code_action: false,
789 current: true,
790 line: Some(HighlightedLine {
791 highlighted_texts: vec![
792 HighlightedText {
793 text: "fn ".to_string(),
794 color: HighlightColor::Keyword.hsla(&theme),
795 },
796 HighlightedText {
797 text: "main".to_string(),
798 color: HighlightColor::Function.hsla(&theme),
799 },
800 HighlightedText {
801 text: "() {".to_string(),
802 color: HighlightColor::Default.hsla(&theme),
803 },
804 ],
805 }),
806 cursors: None,
807 status: GitStatus::None,
808 show_line_number,
809 },
810 BufferRow {
811 line_number: 2,
812 code_action: false,
813 current: false,
814 line: Some(HighlightedLine {
815 highlighted_texts: vec![HighlightedText {
816 text: "// Statements here are executed when the compiled binary is called."
817 .to_string(),
818 color: HighlightColor::Comment.hsla(&theme),
819 }],
820 }),
821 cursors: None,
822 status: GitStatus::Modified,
823 show_line_number,
824 },
825 BufferRow {
826 line_number: 3,
827 code_action: false,
828 current: false,
829 line: None,
830 cursors: None,
831 status: GitStatus::None,
832 show_line_number,
833 },
834 BufferRow {
835 line_number: 4,
836 code_action: false,
837 current: false,
838 line: Some(HighlightedLine {
839 highlighted_texts: vec![HighlightedText {
840 text: " // Print text to the console.".to_string(),
841 color: HighlightColor::Comment.hsla(&theme),
842 }],
843 }),
844 cursors: None,
845 status: GitStatus::None,
846 show_line_number,
847 },
848 BufferRow {
849 line_number: 5,
850 code_action: false,
851 current: false,
852 line: Some(HighlightedLine {
853 highlighted_texts: vec![
854 HighlightedText {
855 text: " println!(".to_string(),
856 color: HighlightColor::Default.hsla(&theme),
857 },
858 HighlightedText {
859 text: "\"Hello, world!\"".to_string(),
860 color: HighlightColor::String.hsla(&theme),
861 },
862 HighlightedText {
863 text: ");".to_string(),
864 color: HighlightColor::Default.hsla(&theme),
865 },
866 ],
867 }),
868 cursors: None,
869 status: GitStatus::None,
870 show_line_number,
871 },
872 BufferRow {
873 line_number: 6,
874 code_action: false,
875 current: false,
876 line: Some(HighlightedLine {
877 highlighted_texts: vec![HighlightedText {
878 text: "}".to_string(),
879 color: HighlightColor::Default.hsla(&theme),
880 }],
881 }),
882 cursors: None,
883 status: GitStatus::None,
884 show_line_number,
885 },
886 BufferRow {
887 line_number: 7,
888 code_action: false,
889 current: false,
890 line: Some(HighlightedLine {
891 highlighted_texts: vec![HighlightedText {
892 text: "".to_string(),
893 color: HighlightColor::Default.hsla(&theme),
894 }],
895 }),
896 cursors: None,
897 status: GitStatus::Created,
898 show_line_number,
899 },
900 BufferRow {
901 line_number: 8,
902 code_action: false,
903 current: false,
904 line: Some(HighlightedLine {
905 highlighted_texts: vec![HighlightedText {
906 text: "// Marshall and Nate were here".to_string(),
907 color: HighlightColor::Comment.hsla(&theme),
908 }],
909 }),
910 cursors: None,
911 status: GitStatus::Created,
912 show_line_number,
913 },
914 ]
915}
916
917pub fn terminal_buffer<S: 'static + Send + Sync + Clone>(theme: &Theme) -> Buffer<S> {
918 Buffer::new()
919 .set_title("zed — fish".to_string())
920 .set_rows(Some(BufferRows {
921 show_line_numbers: false,
922 rows: terminal_buffer_rows(theme),
923 }))
924}
925
926pub fn terminal_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
927 let show_line_number = false;
928
929 vec![
930 BufferRow {
931 line_number: 1,
932 code_action: false,
933 current: false,
934 line: Some(HighlightedLine {
935 highlighted_texts: vec![
936 HighlightedText {
937 text: "maxdeviant ".to_string(),
938 color: HighlightColor::Keyword.hsla(&theme),
939 },
940 HighlightedText {
941 text: "in ".to_string(),
942 color: HighlightColor::Default.hsla(&theme),
943 },
944 HighlightedText {
945 text: "profaned-capital ".to_string(),
946 color: HighlightColor::Function.hsla(&theme),
947 },
948 HighlightedText {
949 text: "in ".to_string(),
950 color: HighlightColor::Default.hsla(&theme),
951 },
952 HighlightedText {
953 text: "~/p/zed ".to_string(),
954 color: HighlightColor::Function.hsla(&theme),
955 },
956 HighlightedText {
957 text: "on ".to_string(),
958 color: HighlightColor::Default.hsla(&theme),
959 },
960 HighlightedText {
961 text: " gpui2-ui ".to_string(),
962 color: HighlightColor::Keyword.hsla(&theme),
963 },
964 ],
965 }),
966 cursors: None,
967 status: GitStatus::None,
968 show_line_number,
969 },
970 BufferRow {
971 line_number: 2,
972 code_action: false,
973 current: false,
974 line: Some(HighlightedLine {
975 highlighted_texts: vec![HighlightedText {
976 text: "λ ".to_string(),
977 color: HighlightColor::String.hsla(&theme),
978 }],
979 }),
980 cursors: None,
981 status: GitStatus::None,
982 show_line_number,
983 },
984 ]
985}