⭐
Log in to mark this repository.
Add toggles for displaying contacts, dates, traits, tiers, and relations
d539991 · gmorell · 2025-01-16 04:17
Message
{commit_body(@commit)}
Files changed
modified
src/do_tui.rs
+244
−142
@@ -44,6 +44,11 @@ struct Tui {
| 44 | 44 | ppl_input_b: Input, |
| 45 | 45 | ppl_input_c: Input, |
| 46 | 46 | ppl_detail_state: ListState, |
| 47 | + ppl_show_contacts: bool, | |
| 48 | + ppl_show_dates: bool, | |
| 49 | + ppl_show_traits: bool, | |
| 50 | + ppl_show_tiers: bool, | |
| 51 | + ppl_show_relations: bool, | |
| 47 | 52 | def_tier_list: Vec<tier_defaults::Model>, |
| 48 | 53 | def_tier_state: ListState, |
| 49 | 54 | def_trait_list: Vec<trait_defaults::Model>, |
@@ -129,6 +134,11 @@ impl Default for Tui {
| 129 | 134 | ppl_input_b: Input::default(), |
| 130 | 135 | ppl_input_c: Input::default(), |
| 131 | 136 | ppl_detail_state: ListState::default(), |
| 137 | + ppl_show_contacts: true, | |
| 138 | + ppl_show_dates: true, | |
| 139 | + ppl_show_traits: true, | |
| 140 | + ppl_show_tiers: true, | |
| 141 | + ppl_show_relations: true, | |
| 132 | 142 | def_tier_list: vec![], |
| 133 | 143 | def_tier_state: ListState::default(), |
| 134 | 144 | def_trait_list: vec![], |
@@ -218,6 +228,36 @@ pub async fn run_tui(
| 218 | 228 | KeyCode::Char('f') => { |
| 219 | 229 | default_editing_handler(&mut app, &key_event); |
| 220 | 230 | } |
| 231 | + KeyCode::Char('c') => { | |
| 232 | + match app.current_tab { | |
| 233 | + Tabs::Ppl => { app.ppl_show_contacts = !app.ppl_show_contacts } | |
| 234 | + _ => {} | |
| 235 | + } | |
| 236 | + } | |
| 237 | + KeyCode::Char('d') => { | |
| 238 | + match app.current_tab { | |
| 239 | + Tabs::Ppl => { app.ppl_show_dates = !app.ppl_show_dates } | |
| 240 | + _ => {} | |
| 241 | + } | |
| 242 | + } | |
| 243 | + KeyCode::Char('r') => { | |
| 244 | + match app.current_tab { | |
| 245 | + Tabs::Ppl => { app.ppl_show_traits = !app.ppl_show_traits } | |
| 246 | + _ => {} | |
| 247 | + } | |
| 248 | + } | |
| 249 | + KeyCode::Char('i') => { | |
| 250 | + match app.current_tab { | |
| 251 | + Tabs::Ppl => { app.ppl_show_tiers = !app.ppl_show_tiers } | |
| 252 | + _ => {} | |
| 253 | + } | |
| 254 | + } | |
| 255 | + KeyCode::Char('l') => { | |
| 256 | + match app.current_tab { | |
| 257 | + Tabs::Ppl => { app.ppl_show_relations = !app.ppl_show_relations } | |
| 258 | + _ => {} | |
| 259 | + } | |
| 260 | + } | |
| 221 | 261 | KeyCode::Enter => { |
| 222 | 262 | if app.current_tab == Tabs::Ppl { |
| 223 | 263 | if app.ppl_editing && app.ppl_detail_state.selected().is_some() { |
@@ -350,7 +390,7 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 350 | 390 | Constraint::Percentage(100), |
| 351 | 391 | Constraint::Length(1), |
| 352 | 392 | ] |
| 353 | − .as_ref(), | |
| 393 | + .as_ref(), | |
| 354 | 394 | ) |
| 355 | 395 | .split(f.area()); |
| 356 | 396 |
@@ -387,12 +427,12 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 387 | 427 | f.render_widget(welcome, chunks[2]); |
| 388 | 428 | } |
| 389 | 429 | false => { |
| 390 | − let msgw = vec![ | |
| 430 | + let mut msgw = vec![ | |
| 391 | 431 | Span::styled( |
| 392 | 432 | "Tab", |
| 393 | 433 | Style::default().add_modifier(Modifier::BOLD).fg(WHITE), |
| 394 | 434 | ), |
| 395 | − Span::raw(" to switch views"), | |
| 435 | + Span::raw(" to switch views. "), | |
| 396 | 436 | Span::styled( |
| 397 | 437 | "Enter", |
| 398 | 438 | Style::default().add_modifier(Modifier::BOLD).fg(WHITE), |
@@ -401,6 +441,43 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 401 | 441 | Span::styled("E", Style::default().add_modifier(Modifier::BOLD).fg(WHITE)), |
| 402 | 442 | Span::raw(" to edit the selected ppl. "), |
| 403 | 443 | ]; |
| 444 | + if app.ppl_show_contacts { | |
| 445 | + msgw.push(Span::styled("C", Style::default().add_modifier(Modifier::BOLD).fg(WHITE))); | |
| 446 | + } else { | |
| 447 | + msgw.push(Span::styled("C", Style::default().add_modifier(Modifier::BOLD).fg(SLATE.c500))); | |
| 448 | + } | |
| 449 | + msgw.push(Span::raw("/")); | |
| 450 | + | |
| 451 | + if app.ppl_show_dates { | |
| 452 | + msgw.push(Span::styled("D", Style::default().add_modifier(Modifier::BOLD).fg(WHITE))); | |
| 453 | + } else { | |
| 454 | + msgw.push(Span::styled("D", Style::default().add_modifier(Modifier::BOLD).fg(SLATE.c500))); | |
| 455 | + } | |
| 456 | + msgw.push(Span::raw("/")); | |
| 457 | + | |
| 458 | + if app.ppl_show_traits { | |
| 459 | + msgw.push(Span::styled("R", Style::default().add_modifier(Modifier::BOLD).fg(WHITE))); | |
| 460 | + } else { | |
| 461 | + msgw.push(Span::styled("R", Style::default().add_modifier(Modifier::BOLD).fg(SLATE.c500))); | |
| 462 | + } | |
| 463 | + msgw.push(Span::raw("/")); | |
| 464 | + | |
| 465 | + if app.ppl_show_tiers { | |
| 466 | + msgw.push(Span::styled("I", Style::default().add_modifier(Modifier::BOLD).fg(WHITE))); | |
| 467 | + } else { | |
| 468 | + msgw.push(Span::styled("I", Style::default().add_modifier(Modifier::BOLD).fg(SLATE.c500))); | |
| 469 | + } | |
| 470 | + msgw.push(Span::raw("/")); | |
| 471 | + | |
| 472 | + if app.ppl_show_relations { | |
| 473 | + msgw.push(Span::styled("L", Style::default().add_modifier(Modifier::BOLD).fg(WHITE))); | |
| 474 | + } else { | |
| 475 | + msgw.push(Span::styled("L", Style::default().add_modifier(Modifier::BOLD).fg(SLATE.c500))); | |
| 476 | + } | |
| 477 | + | |
| 478 | + | |
| 479 | + msgw.push(Span::raw(" to toggle Contacts/Dates/tRaits/tIers/reLations")); | |
| 480 | + | |
| 404 | 481 | let textw = Text::from(Line::from(msgw)).style(Style::default()); |
| 405 | 482 | let welcome = Paragraph::new(textw); |
| 406 | 483 | f.render_widget(welcome, chunks[2]); |
@@ -475,29 +552,31 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 475 | 552 | .iter() |
| 476 | 553 | .filter(|t| !t.is_date && !t.is_contact) |
| 477 | 554 | .collect::<Vec<&trait_defaults::Model>>(); |
| 478 | − for t in &curr_traits { | |
| 479 | − editables.push(Editable { | |
| 480 | − tgt: Editablez::Trait, | |
| 481 | − id: t.id, | |
| 482 | − first: t.key.clone(), | |
| 483 | − second: Option::from(t.value.clone()), | |
| 484 | − third: t.hidden.clone().to_string().into(), | |
| 485 | − }); | |
| 486 | − match trait_defaults.iter().find(|f| f.key == t.key) { | |
| 487 | − None => msgs.push(Line::from(vec![ | |
| 488 | − Span::styled( | |
| 489 | − format!("ℹ️ {}: ", t.key.clone()), | |
| 490 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 491 | − ), | |
| 492 | − Span::raw(t.value.clone()), | |
| 493 | − ])), | |
| 494 | − Some(td) => msgs.push(Line::from(vec![ | |
| 495 | − Span::styled( | |
| 496 | − format!("{} {}: ", td.symbol, t.key.clone()), | |
| 497 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 498 | − ), | |
| 499 | − Span::raw(t.value.clone()), | |
| 500 | − ])), | |
| 555 | + if app.ppl_show_traits { | |
| 556 | + for t in &curr_traits { | |
| 557 | + editables.push(Editable { | |
| 558 | + tgt: Editablez::Trait, | |
| 559 | + id: t.id, | |
| 560 | + first: t.key.clone(), | |
| 561 | + second: Option::from(t.value.clone()), | |
| 562 | + third: t.hidden.clone().to_string().into(), | |
| 563 | + }); | |
| 564 | + match trait_defaults.iter().find(|f| f.key == t.key) { | |
| 565 | + None => msgs.push(Line::from(vec![ | |
| 566 | + Span::styled( | |
| 567 | + format!("ℹ️ {}: ", t.key.clone()), | |
| 568 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 569 | + ), | |
| 570 | + Span::raw(t.value.clone()), | |
| 571 | + ])), | |
| 572 | + Some(td) => msgs.push(Line::from(vec![ | |
| 573 | + Span::styled( | |
| 574 | + format!("{} {}: ", td.symbol, t.key.clone()), | |
| 575 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 576 | + ), | |
| 577 | + Span::raw(t.value.clone()), | |
| 578 | + ])), | |
| 579 | + } | |
| 501 | 580 | } |
| 502 | 581 | } |
| 503 | 582 |
@@ -508,49 +587,51 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 508 | 587 | .map(|t| t.to_owned()) |
| 509 | 588 | .collect::<Vec<tier::Model>>(); |
| 510 | 589 | |
| 511 | − for t in &curr_tiers { | |
| 512 | − let othersym = app.def_tier_list.iter().find(|dt| dt.key == t.name); | |
| 513 | − editables.push(Editable { | |
| 514 | − id: t.id, | |
| 515 | − tgt: Editablez::Tier, | |
| 516 | − first: t.name.clone(), | |
| 517 | − second: t.color.clone(), | |
| 518 | − third: t.symbol.clone(), | |
| 519 | − }); | |
| 520 | − match (&t.symbol, othersym) { | |
| 521 | − (None, Some(other)) => msgs.push(Line::from(vec![ | |
| 522 | − Span::styled( | |
| 523 | − format!( | |
| 524 | − "{} {}: ", | |
| 525 | − &other.symbol.clone().unwrap(), | |
| 526 | − t.name.clone() | |
| 590 | + if app.ppl_show_tiers { | |
| 591 | + for t in &curr_tiers { | |
| 592 | + let othersym = app.def_tier_list.iter().find(|dt| dt.key == t.name); | |
| 593 | + editables.push(Editable { | |
| 594 | + id: t.id, | |
| 595 | + tgt: Editablez::Tier, | |
| 596 | + first: t.name.clone(), | |
| 597 | + second: t.color.clone(), | |
| 598 | + third: t.symbol.clone(), | |
| 599 | + }); | |
| 600 | + match (&t.symbol, othersym) { | |
| 601 | + (None, Some(other)) => msgs.push(Line::from(vec![ | |
| 602 | + Span::styled( | |
| 603 | + format!( | |
| 604 | + "{} {}: ", | |
| 605 | + &other.symbol.clone().unwrap(), | |
| 606 | + t.name.clone() | |
| 607 | + ), | |
| 608 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 527 | 609 | ), |
| 528 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 529 | − ), | |
| 530 | − Span::raw(t.name.clone()), | |
| 531 | − ])), | |
| 532 | − (Some(main), None) => msgs.push(Line::from(vec![ | |
| 533 | − Span::styled( | |
| 534 | − format!("{} {}: ", main, t.name.clone()), | |
| 535 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 536 | − ), | |
| 537 | − Span::raw(t.name.clone()), | |
| 538 | − ])), | |
| 539 | − (None, None) => msgs.push(Line::from(vec![ | |
| 540 | − Span::styled( | |
| 541 | − format!("ℹ️ {}: ", t.name.clone()), | |
| 542 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 543 | − ), | |
| 544 | − Span::raw(t.name.clone()), | |
| 545 | − ])), | |
| 546 | − // _ => {} | |
| 547 | − (Some(main), Some(_other)) => msgs.push(Line::from(vec![ | |
| 548 | − Span::styled( | |
| 549 | − format!("{} {}: ", main, t.name.clone()), | |
| 550 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 551 | − ), | |
| 552 | − Span::raw(t.name.clone()), | |
| 553 | − ])), | |
| 610 | + Span::raw(t.name.clone()), | |
| 611 | + ])), | |
| 612 | + (Some(main), None) => msgs.push(Line::from(vec![ | |
| 613 | + Span::styled( | |
| 614 | + format!("{} {}: ", main, t.name.clone()), | |
| 615 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 616 | + ), | |
| 617 | + Span::raw(t.name.clone()), | |
| 618 | + ])), | |
| 619 | + (None, None) => msgs.push(Line::from(vec![ | |
| 620 | + Span::styled( | |
| 621 | + format!("ℹ️ {}: ", t.name.clone()), | |
| 622 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 623 | + ), | |
| 624 | + Span::raw(t.name.clone()), | |
| 625 | + ])), | |
| 626 | + // _ => {} | |
| 627 | + (Some(main), Some(_other)) => msgs.push(Line::from(vec![ | |
| 628 | + Span::styled( | |
| 629 | + format!("{} {}: ", main, t.name.clone()), | |
| 630 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 631 | + ), | |
| 632 | + Span::raw(t.name.clone()), | |
| 633 | + ])), | |
| 634 | + } | |
| 554 | 635 | } |
| 555 | 636 | } |
| 556 | 637 |
@@ -560,24 +641,26 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 560 | 641 | .filter(|t| t.ppl_id_b == curr.id) |
| 561 | 642 | .map(|t| t.to_owned()) |
| 562 | 643 | .collect::<Vec<relation::Model>>(); |
| 563 | − for t in &curr_rels { | |
| 564 | − let i2 = t.date_entered.map(|d| d.to_string()); | |
| 565 | − let i3 = t.date_ended.map(|d| d.to_string()); | |
| 566 | − editables.push(Editable { | |
| 567 | − id: t.id, | |
| 568 | − tgt: Editablez::Relation, | |
| 569 | − first: t.r#type.clone(), | |
| 570 | − second: i2, | |
| 571 | − third: i3, | |
| 572 | − }); | |
| 573 | − | |
| 574 | − msgs.push(Line::from(vec![ | |
| 575 | − Span::styled( | |
| 576 | − format!("🫂 {}: ", t.r#type.clone()), | |
| 577 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 578 | − ), | |
| 579 | − Span::raw(format!("{:?} - {:?}", t.date_entered, t.date_ended)), | |
| 580 | − ])) | |
| 644 | + if app.ppl_show_relations { | |
| 645 | + for t in &curr_rels { | |
| 646 | + let i2 = t.date_entered.map(|d| d.to_string()); | |
| 647 | + let i3 = t.date_ended.map(|d| d.to_string()); | |
| 648 | + editables.push(Editable { | |
| 649 | + id: t.id, | |
| 650 | + tgt: Editablez::Relation, | |
| 651 | + first: t.r#type.clone(), | |
| 652 | + second: i2, | |
| 653 | + third: i3, | |
| 654 | + }); | |
| 655 | + | |
| 656 | + msgs.push(Line::from(vec![ | |
| 657 | + Span::styled( | |
| 658 | + format!("🫂 {}: ", t.r#type.clone()), | |
| 659 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 660 | + ), | |
| 661 | + Span::raw(format!("{:?} - {:?}", t.date_entered, t.date_ended)), | |
| 662 | + ])) | |
| 663 | + } | |
| 581 | 664 | } |
| 582 | 665 | |
| 583 | 666 | let curr_dates = app |
@@ -591,36 +674,38 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 591 | 674 | .iter() |
| 592 | 675 | .filter(|t| t.is_date && t.enabled) |
| 593 | 676 | .collect::<Vec<&trait_defaults::Model>>(); |
| 594 | − for t in &curr_dates { | |
| 595 | − editables.push(Editable { | |
| 596 | − id: t.id, | |
| 597 | − tgt: Editablez::SigDate, | |
| 598 | − first: t.event.clone(), | |
| 599 | − second: Option::from(t.date.to_string()), | |
| 600 | − third: Option::from(t.do_remind.to_string()), | |
| 601 | − }); | |
| 602 | − match (date_traits.iter().find(|f| f.key == t.event), t.do_remind) { | |
| 603 | − (Some(dt), _) => msgs.push(Line::from(vec![ | |
| 604 | − Span::styled( | |
| 605 | − format!("{} {}: ", dt.symbol, t.event.clone()), | |
| 606 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 607 | − ), | |
| 608 | − Span::raw(t.date.clone().to_string()), | |
| 609 | − ])), | |
| 610 | − (None, true) => msgs.push(Line::from(vec![ | |
| 611 | − Span::styled( | |
| 612 | − format!("⏰ {}: ", t.event.clone()), | |
| 613 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 614 | − ), | |
| 615 | − Span::raw(t.date.clone().to_string()), | |
| 616 | − ])), | |
| 617 | − (None, false) => msgs.push(Line::from(vec![ | |
| 618 | − Span::styled( | |
| 619 | − format!("📅 {}: ", t.event.clone()), | |
| 620 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 621 | − ), | |
| 622 | − Span::raw(t.date.clone().to_string()), | |
| 623 | − ])), | |
| 677 | + if app.ppl_show_dates { | |
| 678 | + for t in &curr_dates { | |
| 679 | + editables.push(Editable { | |
| 680 | + id: t.id, | |
| 681 | + tgt: Editablez::SigDate, | |
| 682 | + first: t.event.clone(), | |
| 683 | + second: Option::from(t.date.to_string()), | |
| 684 | + third: Option::from(t.do_remind.to_string()), | |
| 685 | + }); | |
| 686 | + match (date_traits.iter().find(|f| f.key == t.event), t.do_remind) { | |
| 687 | + (Some(dt), _) => msgs.push(Line::from(vec![ | |
| 688 | + Span::styled( | |
| 689 | + format!("{} {}: ", dt.symbol, t.event.clone()), | |
| 690 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 691 | + ), | |
| 692 | + Span::raw(t.date.clone().to_string()), | |
| 693 | + ])), | |
| 694 | + (None, true) => msgs.push(Line::from(vec![ | |
| 695 | + Span::styled( | |
| 696 | + format!("⏰ {}: ", t.event.clone()), | |
| 697 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 698 | + ), | |
| 699 | + Span::raw(t.date.clone().to_string()), | |
| 700 | + ])), | |
| 701 | + (None, false) => msgs.push(Line::from(vec![ | |
| 702 | + Span::styled( | |
| 703 | + format!("📅 {}: ", t.event.clone()), | |
| 704 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 705 | + ), | |
| 706 | + Span::raw(t.date.clone().to_string()), | |
| 707 | + ])), | |
| 708 | + } | |
| 624 | 709 | } |
| 625 | 710 | } |
| 626 | 711 |
@@ -635,30 +720,32 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 635 | 720 | .iter() |
| 636 | 721 | .filter(|t| t.is_contact && t.enabled) |
| 637 | 722 | .collect::<Vec<&trait_defaults::Model>>(); |
| 638 | − for t in &contacts { | |
| 639 | − editables.push(Editable { | |
| 640 | − id: t.id, | |
| 641 | − tgt: Editablez::Contact, | |
| 642 | − first: t.r#type.clone(), | |
| 643 | − second: Option::from(t.designator.clone().unwrap_or("".to_string())), | |
| 644 | − third: Option::from(t.value.clone()), | |
| 645 | − }); | |
| 646 | − | |
| 647 | − match contact_traits.iter().find(|f| f.key == t.r#type) { | |
| 648 | − Some(dt) => msgs.push(Line::from(vec![ | |
| 649 | − Span::styled( | |
| 650 | − format!("{} {}: ", dt.symbol, t.r#type.clone()), | |
| 651 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 652 | − ), | |
| 653 | − Span::raw(t.value.clone().to_string()), | |
| 654 | − ])), | |
| 655 | − None => msgs.push(Line::from(vec![ | |
| 656 | − Span::styled( | |
| 657 | − format!("📇 {}: ", t.r#type.clone()), | |
| 658 | − Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 659 | − ), | |
| 660 | − Span::raw(t.value.clone().to_string()), | |
| 661 | − ])), | |
| 723 | + if app.ppl_show_contacts { | |
| 724 | + for t in &contacts { | |
| 725 | + editables.push(Editable { | |
| 726 | + id: t.id, | |
| 727 | + tgt: Editablez::Contact, | |
| 728 | + first: t.r#type.clone(), | |
| 729 | + second: Option::from(t.designator.clone().unwrap_or("".to_string())), | |
| 730 | + third: Option::from(t.value.clone()), | |
| 731 | + }); | |
| 732 | + | |
| 733 | + match contact_traits.iter().find(|f| f.key == t.r#type) { | |
| 734 | + Some(dt) => msgs.push(Line::from(vec![ | |
| 735 | + Span::styled( | |
| 736 | + format!("{} {}: ", dt.symbol, t.r#type.clone()), | |
| 737 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 738 | + ), | |
| 739 | + Span::raw(t.value.clone().to_string()), | |
| 740 | + ])), | |
| 741 | + None => msgs.push(Line::from(vec![ | |
| 742 | + Span::styled( | |
| 743 | + format!("📇 {}: ", t.r#type.clone()), | |
| 744 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 745 | + ), | |
| 746 | + Span::raw(t.value.clone().to_string()), | |
| 747 | + ])), | |
| 748 | + } | |
| 662 | 749 | } |
| 663 | 750 | } |
| 664 | 751 |
@@ -899,7 +986,7 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 899 | 986 | .bg(Color::Blue), |
| 900 | 987 | ); |
| 901 | 988 | |
| 902 | − for u in as_upcoming { | |
| 989 | + for u in as_upcoming.into_iter().filter(|d| d.date.do_remind == true) { | |
| 903 | 990 | event_list.add( |
| 904 | 991 | // Date::from_calendar_date(start.year(), Month::try_from(4 as u8).expect("oops"), 15 as u8).expect("doubleoops"), |
| 905 | 992 | Date::from_calendar_date( |
@@ -907,7 +994,7 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 907 | 994 | Month::try_from(u.date.date.month() as u8).expect("oops"), |
| 908 | 995 | u.date.date.day() as u8, |
| 909 | 996 | ) |
| 910 | − .expect("doubleoops"), | |
| 997 | + .expect("doubleoops"), | |
| 911 | 998 | Style::default() |
| 912 | 999 | .add_modifier(Modifier::BOLD) |
| 913 | 1000 | .fg(GREEN.c300) |
@@ -953,6 +1040,21 @@ fn render(f: &mut Frame, app: &mut Tui) {
| 953 | 1040 | // .margin(0) |
| 954 | 1041 | // .constraints([Constraint::Percentage(25), Constraint::Percentage(75)]) |
| 955 | 1042 | // .split(chunks[1]); |
| 1043 | + | |
| 1044 | + let msgw = vec![ | |
| 1045 | + Span::styled( | |
| 1046 | + "Tab", | |
| 1047 | + Style::default().add_modifier(Modifier::BOLD).fg(WHITE), | |
| 1048 | + ), | |
| 1049 | + Span::raw(" to switch views. "), | |
| 1050 | + Span::styled("E", Style::default().add_modifier(Modifier::BOLD).fg(WHITE)), | |
| 1051 | + Span::raw(" to edit the enabled tiers. "), | |
| 1052 | + Span::styled("C", Style::default().add_modifier(Modifier::BOLD).fg(WHITE)), | |
| 1053 | + Span::raw(" to enable/disable the various builtin calendars. "), | |
| 1054 | + ]; | |
| 1055 | + let textw = Text::from(Line::from(msgw)).style(Style::default()); | |
| 1056 | + let welcome = Paragraph::new(textw); | |
| 1057 | + f.render_widget(welcome, chunks[2]); | |
| 956 | 1058 | } |
| 957 | 1059 | Tabs::TierSettings => { |
| 958 | 1060 | let ppl = List::new(&app.def_tier_list) |
Parents: 8c36f5c