From 71b113cbbbf882ed7308349c46ee266f4ac6f8df Mon Sep 17 00:00:00 2001 From: Stephan Dilly Date: Sun, 12 Apr 2020 14:12:10 +0200 Subject: [PATCH] show version in help popup --- src/components/help.rs | 49 ++++++++++++++++++++++++++++++------------ src/main.rs | 1 + src/version.rs | 35 ++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 src/version.rs diff --git a/src/components/help.rs b/src/components/help.rs index cf81975f..ca8f4e0f 100644 --- a/src/components/help.rs +++ b/src/components/help.rs @@ -2,7 +2,7 @@ use super::{ visibility_blocking, CommandBlocking, CommandInfo, Component, DrawableComponent, EventUpdate, }; -use crate::{keys, strings, ui}; +use crate::{keys, strings, ui, version::Version}; use asyncgit::hash; use crossterm::event::Event; use itertools::Itertools; @@ -10,12 +10,13 @@ use std::{borrow::Cow, cmp, convert::TryFrom}; use strings::commands; use tui::{ backend::Backend, - layout::{Alignment, Rect}, + layout::{Alignment, Constraint, Direction, Layout, Rect}, style::{Color, Style}, widgets::{Block, Borders, Paragraph, Text, Widget}, Frame, }; +/// #[derive(Default)] pub struct HelpComponent { cmds: Vec, @@ -37,20 +38,40 @@ impl DrawableComponent for HelpComponent { 0 }; + let area = + ui::centered_rect_absolute(65, height, f.size()); + ui::Clear::new( - Paragraph::new(txt.iter()) - .block( - Block::default() - .title(strings::HELP_TITLE) - .borders(Borders::ALL), - ) - .scroll(scroll) - .alignment(Alignment::Left), + Block::default() + .title(strings::HELP_TITLE) + .borders(Borders::ALL), ) - .render( - f, - ui::centered_rect_absolute(65, height, f.size()), - ); + .render(f, area); + + let chunks = Layout::default() + .vertical_margin(1) + .horizontal_margin(1) + .direction(Direction::Vertical) + .constraints( + [Constraint::Min(1), Constraint::Length(1)] + .as_ref(), + ) + .split(area); + + Paragraph::new(txt.iter()) + .scroll(scroll) + .alignment(Alignment::Left) + .render(f, chunks[0]); + + Paragraph::new( + vec![Text::Raw(Cow::from(format!( + "gitui {}", + Version::new(), + )))] + .iter(), + ) + .alignment(Alignment::Right) + .render(f, chunks[1]); } } } diff --git a/src/main.rs b/src/main.rs index d1a2e9db..a28fbc8b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ mod poll; mod queue; mod strings; mod ui; +mod version; use crate::{app::App, poll::QueueEvent}; use asyncgit::AsyncNotification; diff --git a/src/version.rs b/src/version.rs new file mode 100644 index 00000000..b696f2ab --- /dev/null +++ b/src/version.rs @@ -0,0 +1,35 @@ +use std::{env, fmt}; + +/// +#[derive(Default)] +pub struct Version { + major: u32, + minor: u32, + patch: u32, +} + +impl Version { + /// read version at compile time from env variables + pub fn new() -> Self { + let mut res = Self::default(); + let major_str = env!("CARGO_PKG_VERSION_MAJOR"); + if let Ok(major) = major_str.parse::() { + res.major = major; + } + let minor_str = env!("CARGO_PKG_VERSION_MINOR"); + if let Ok(minor) = minor_str.parse::() { + res.minor = minor; + } + let patch_str = env!("CARGO_PKG_VERSION_PATCH"); + if let Ok(patch) = patch_str.parse::() { + res.patch = patch; + } + res + } +} + +impl fmt::Display for Version { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "v{}.{}.{}", self.major, self.minor, self.patch) + } +}