Skip to content

Commit 594a1a9

Browse files
WizardOhio24Stephan Dilly
andauthored
Turn popup functions into macros (#383)
* Make popup functions into macros * update to master * simplify Co-authored-by: Stephan Dilly <[email protected]>
1 parent ce5a1a7 commit 594a1a9

File tree

2 files changed

+67
-57
lines changed

2 files changed

+67
-57
lines changed

src/app.rs

Lines changed: 24 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use crate::{
1414
input::{Input, InputEvent, InputState},
1515
keys::{KeyConfig, SharedKeyConfig},
1616
queue::{Action, InternalEvent, NeedsUpdate, Queue},
17+
setup_popups,
1718
strings::{self, order},
1819
tabs::{Revlog, StashList, Stashing, Status},
1920
ui::style::{SharedTheme, Theme},
@@ -412,6 +413,29 @@ impl App {
412413
]
413414
);
414415

416+
setup_popups!(
417+
self,
418+
[
419+
commit,
420+
help,
421+
reset,
422+
msg,
423+
stashmsg_popup,
424+
inspect_commit_popup,
425+
blame_file_popup,
426+
external_editor_popup,
427+
tag_commit_popup,
428+
create_branch_popup,
429+
push_popup,
430+
push_tags_popup,
431+
pull_popup,
432+
select_branch_popup,
433+
tags_popup,
434+
rename_branch_popup,
435+
revision_files_popup
436+
]
437+
);
438+
415439
fn check_quit_key(&mut self, ev: Event) -> bool {
416440
if let Event::Key(e) = ev {
417441
if e == self.key_config.exit {
@@ -714,63 +738,6 @@ impl App {
714738
res
715739
}
716740

717-
//TODO: make this automatic, i keep forgetting to add popups here
718-
fn any_popup_visible(&self) -> bool {
719-
self.commit.is_visible()
720-
|| self.help.is_visible()
721-
|| self.reset.is_visible()
722-
|| self.msg.is_visible()
723-
|| self.stashmsg_popup.is_visible()
724-
|| self.inspect_commit_popup.is_visible()
725-
|| self.blame_file_popup.is_visible()
726-
|| self.external_editor_popup.is_visible()
727-
|| self.tag_commit_popup.is_visible()
728-
|| self.create_branch_popup.is_visible()
729-
|| self.push_popup.is_visible()
730-
|| self.push_tags_popup.is_visible()
731-
|| self.pull_popup.is_visible()
732-
|| self.select_branch_popup.is_visible()
733-
|| self.tags_popup.is_visible()
734-
|| self.rename_branch_popup.is_visible()
735-
|| self.revision_files_popup.is_visible()
736-
}
737-
738-
fn draw_popups<B: Backend>(
739-
&self,
740-
f: &mut Frame<B>,
741-
) -> Result<()> {
742-
let size = Layout::default()
743-
.direction(Direction::Vertical)
744-
.constraints(
745-
[
746-
Constraint::Min(1),
747-
Constraint::Length(self.cmdbar.borrow().height()),
748-
]
749-
.as_ref(),
750-
)
751-
.split(f.size())[0];
752-
753-
self.commit.draw(f, size)?;
754-
self.stashmsg_popup.draw(f, size)?;
755-
self.help.draw(f, size)?;
756-
self.inspect_commit_popup.draw(f, size)?;
757-
self.blame_file_popup.draw(f, size)?;
758-
self.external_editor_popup.draw(f, size)?;
759-
self.tag_commit_popup.draw(f, size)?;
760-
self.select_branch_popup.draw(f, size)?;
761-
self.tags_popup.draw(f, size)?;
762-
self.create_branch_popup.draw(f, size)?;
763-
self.rename_branch_popup.draw(f, size)?;
764-
self.revision_files_popup.draw(f, size)?;
765-
self.push_popup.draw(f, size)?;
766-
self.push_tags_popup.draw(f, size)?;
767-
self.pull_popup.draw(f, size)?;
768-
self.reset.draw(f, size)?;
769-
self.msg.draw(f, size)?;
770-
771-
Ok(())
772-
}
773-
774741
//TODO: make this dynamic
775742
fn draw_tabs<B: Backend>(&self, f: &mut Frame<B>, r: Rect) {
776743
let r = r.inner(&Margin {

src/components/mod.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,49 @@ macro_rules! accessors {
8686
};
8787
}
8888

89+
/// creates a function to determine if any popup is visible
90+
#[macro_export]
91+
macro_rules! any_popup_visible {
92+
($self:ident, [$($element:ident),+]) => {
93+
fn any_popup_visible(& $self) -> bool{
94+
($($self.$element.is_visible()) || +)
95+
}
96+
};
97+
}
98+
99+
/// creates the draw popup function
100+
#[macro_export]
101+
macro_rules! draw_popups {
102+
($self:ident, [$($element:ident),+]) => {
103+
fn draw_popups<B: Backend>(& $self, mut f: &mut Frame<B>) -> Result<()>{
104+
let size = Layout::default()
105+
.direction(Direction::Vertical)
106+
.constraints(
107+
[
108+
Constraint::Min(1),
109+
Constraint::Length($self.cmdbar.borrow().height()),
110+
]
111+
.as_ref(),
112+
)
113+
.split(f.size())[0];
114+
115+
($($self.$element.draw(&mut f, size)?) , +);
116+
117+
return Ok(());
118+
}
119+
};
120+
}
121+
122+
/// simply calls
123+
/// any_popup_visible!() and draw_popups!() macros
124+
#[macro_export]
125+
macro_rules! setup_popups {
126+
($self:ident, [$($element:ident),+]) => {
127+
crate::any_popup_visible!($self, [$($element),+]);
128+
crate::draw_popups!($self, [ $($element),+ ]);
129+
};
130+
}
131+
89132
/// returns `true` if event was consumed
90133
pub fn event_pump(
91134
ev: Event,

0 commit comments

Comments
 (0)