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}