Popup with fixed sizes or percentage

This commit is contained in:
veeso
2023-02-09 17:19:27 +01:00
parent 4d5f3a6b63
commit 1db2ff7ec5
5 changed files with 102 additions and 80 deletions

View File

@@ -6,7 +6,7 @@
use super::{components, AuthActivity, Context, FileTransferProtocol, Id, InputMask};
use crate::filetransfer::params::{AwsS3Params, GenericProtocolParams, ProtocolParams};
use crate::filetransfer::FileTransferParams;
use crate::utils::ui::draw_area_in;
use crate::utils::ui::{Popup, Size};
use std::path::PathBuf;
use std::str::FromStr;
@@ -193,43 +193,43 @@ impl AuthActivity {
self.app.view(&Id::RecentsList, f, bookmark_chunks[1]);
// Popups
if self.app.mounted(&Id::ErrorPopup) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ErrorPopup, f, popup);
} else if self.app.mounted(&Id::InfoPopup) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::InfoPopup, f, popup);
} else if self.app.mounted(&Id::WaitPopup) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WaitPopup, f, popup);
} else if self.app.mounted(&Id::WindowSizeError) {
let popup = draw_area_in(f.size(), 80, 20);
let popup = Popup(Size::Percentage(80), Size::Percentage(20)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WindowSizeError, f, popup);
} else if self.app.mounted(&Id::QuitPopup) {
// make popup
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::QuitPopup, f, popup);
} else if self.app.mounted(&Id::DeleteBookmarkPopup) {
// make popup
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::DeleteBookmarkPopup, f, popup);
} else if self.app.mounted(&Id::DeleteRecentPopup) {
// make popup
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::DeleteRecentPopup, f, popup);
} else if self.app.mounted(&Id::NewVersionChangelog) {
// make popup
let popup = draw_area_in(f.size(), 90, 85);
let popup = Popup(Size::Percentage(90), Size::Percentage(85)).draw_in(f.size());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)
@@ -245,12 +245,12 @@ impl AuthActivity {
self.app.view(&Id::InstallUpdatePopup, f, popup_chunks[1]);
} else if self.app.mounted(&Id::Keybindings) {
// make popup
let popup = draw_area_in(f.size(), 50, 70);
let popup = Popup(Size::Percentage(50), Size::Percentage(70)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::Keybindings, f, popup);
} else if self.app.mounted(&Id::BookmarkSavePassword) {
// make popup
let popup = draw_area_in(f.size(), 20, 20);
let popup = Popup(Size::Percentage(20), Size::Percentage(20)).draw_in(f.size());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)

View File

@@ -8,7 +8,7 @@ use super::{
components, Context, FileTransferActivity, Id,
};
use crate::explorer::FileSorting;
use crate::utils::ui::draw_area_in;
use crate::utils::ui::{Popup, Size};
// Ext
use remotefs::fs::File;
use tuirealm::event::{Key, KeyEvent, KeyModifiers};
@@ -155,62 +155,62 @@ impl FileTransferActivity {
self.app.view(&Id::StatusBarRemote, f, status_bar_chunks[1]);
// @! Draw popups
if self.app.mounted(&Id::CopyPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::CopyPopup, f, popup);
} else if self.app.mounted(&Id::FindPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::FindPopup, f, popup);
} else if self.app.mounted(&Id::GotoPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::GotoPopup, f, popup);
} else if self.app.mounted(&Id::MkdirPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::MkdirPopup, f, popup);
} else if self.app.mounted(&Id::NewfilePopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::NewfilePopup, f, popup);
} else if self.app.mounted(&Id::OpenWithPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::OpenWithPopup, f, popup);
} else if self.app.mounted(&Id::RenamePopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::RenamePopup, f, popup);
} else if self.app.mounted(&Id::SaveAsPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SaveAsPopup, f, popup);
} else if self.app.mounted(&Id::SymlinkPopup) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SymlinkPopup, f, popup);
} else if self.app.mounted(&Id::ExecPopup) {
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ExecPopup, f, popup);
} else if self.app.mounted(&Id::FileInfoPopup) {
let popup = draw_area_in(f.size(), 50, 50);
let popup = Popup(Size::Percentage(50), Size::Percentage(50)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::FileInfoPopup, f, popup);
} else if self.app.mounted(&Id::ProgressBarPartial) {
let popup = draw_area_in(f.size(), 50, 20);
let popup = Popup(Size::Percentage(50), Size::Percentage(20)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
let popup_chunks = Layout::default()
@@ -226,14 +226,14 @@ impl FileTransferActivity {
self.app.view(&Id::ProgressBarFull, f, popup_chunks[0]);
self.app.view(&Id::ProgressBarPartial, f, popup_chunks[1]);
} else if self.app.mounted(&Id::DeletePopup) {
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::DeletePopup, f, popup);
} else if self.app.mounted(&Id::ReplacePopup) {
// NOTE: handle extended / normal modes
if self.is_radio_replace_extended() {
let popup = draw_area_in(f.size(), 50, 50);
let popup = Popup(Size::Percentage(50), Size::Percentage(50)).draw_in(f.size());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)
@@ -249,66 +249,66 @@ impl FileTransferActivity {
.view(&Id::ReplacingFilesListPopup, f, popup_chunks[0]);
self.app.view(&Id::ReplacePopup, f, popup_chunks[1]);
} else {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ReplacePopup, f, popup);
}
} else if self.app.mounted(&Id::DisconnectPopup) {
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::DisconnectPopup, f, popup);
} else if self.app.mounted(&Id::QuitPopup) {
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::QuitPopup, f, popup);
} else if self.app.mounted(&Id::WatchedPathsList) {
let popup = draw_area_in(f.size(), 60, 50);
let popup = Popup(Size::Percentage(60), Size::Percentage(50)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WatchedPathsList, f, popup);
} else if self.app.mounted(&Id::WatcherPopup) {
let popup = draw_area_in(f.size(), 60, 10);
let popup = Popup(Size::Percentage(60), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WatcherPopup, f, popup);
} else if self.app.mounted(&Id::SortingPopup) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SortingPopup, f, popup);
} else if self.app.mounted(&Id::ErrorPopup) {
let popup = draw_area_in(
f.size(),
50,
let popup = Popup(
Size::Percentage(50),
self.calc_popup_height(Id::ErrorPopup, f.size().width, f.size().height),
);
)
.draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ErrorPopup, f, popup);
} else if self.app.mounted(&Id::FatalPopup) {
let popup = draw_area_in(
f.size(),
50,
let popup = Popup(
Size::Percentage(50),
self.calc_popup_height(Id::FatalPopup, f.size().width, f.size().height),
);
)
.draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::FatalPopup, f, popup);
} else if self.app.mounted(&Id::WaitPopup) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WaitPopup, f, popup);
} else if self.app.mounted(&Id::SyncBrowsingMkdirPopup) {
let popup = draw_area_in(f.size(), 60, 10);
let popup = Popup(Size::Percentage(60), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SyncBrowsingMkdirPopup, f, popup);
} else if self.app.mounted(&Id::KeybindingsPopup) {
let popup = draw_area_in(f.size(), 50, 80);
let popup = Popup(Size::Percentage(50), Size::Percentage(80)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::KeybindingsPopup, f, popup);
@@ -890,7 +890,7 @@ impl FileTransferActivity {
/// Given the id of the component to display and the width and height of the total area,
/// returns the height in percentage to the entire area height, that the popup should have
fn calc_popup_height(&self, id: Id, width: u16, height: u16) -> u16 {
fn calc_popup_height(&self, id: Id, width: u16, height: u16) -> Size {
// Get current text width
let text_width = self
.app
@@ -914,7 +914,7 @@ impl FileTransferActivity {
// Get amount of required rows NOTE: + 2 because of margins
let display_rows = ((text_width as f64) / (row_width as f64)).ceil() as u16 + 2;
// Return height (row_height_p * display_rows)
display_rows * row_height_p
Size::Percentage(display_rows * row_height_p)
}
// -- global listener

View File

@@ -8,7 +8,7 @@ pub mod ssh_keys;
pub mod theme;
use super::*;
use crate::utils::ui::draw_area_in;
use crate::utils::ui::{Popup, Size};
pub use setup::*;
pub use ssh_keys::*;
pub use theme::*;
@@ -117,23 +117,23 @@ impl SetupActivity {
pub(super) fn view_popups(&mut self, f: &mut Frame) {
if self.app.mounted(&Id::Common(IdCommon::ErrorPopup)) {
let popup = draw_area_in(f.size(), 50, 10);
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::Common(IdCommon::ErrorPopup), f, popup);
} else if self.app.mounted(&Id::Common(IdCommon::QuitPopup)) {
// make popup
let popup = draw_area_in(f.size(), 40, 10);
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::Common(IdCommon::QuitPopup), f, popup);
} else if self.app.mounted(&Id::Common(IdCommon::Keybindings)) {
// make popup
let popup = draw_area_in(f.size(), 50, 70);
let popup = Popup(Size::Percentage(50), Size::Percentage(70)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::Common(IdCommon::Keybindings), f, popup);
} else if self.app.mounted(&Id::Common(IdCommon::SavePopup)) {
// make popup
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::Common(IdCommon::SavePopup), f, popup);
}

View File

@@ -5,7 +5,7 @@
// Locals
use super::{components, Context, Id, IdCommon, IdSsh, SetupActivity, ViewLayout};
use crate::utils::ui::draw_area_in;
use crate::utils::ui::{Popup, Size};
// Ext
use tuirealm::tui::layout::{Constraint, Direction, Layout};
@@ -45,11 +45,11 @@ impl SetupActivity {
// Popups
self.view_popups(f);
if self.app.mounted(&Id::Ssh(IdSsh::DelSshKeyPopup)) {
let popup = draw_area_in(f.size(), 30, 10);
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
f.render_widget(Clear, popup);
self.app.view(&Id::Ssh(IdSsh::DelSshKeyPopup), f, popup);
} else if self.app.mounted(&Id::Ssh(IdSsh::SshHost)) {
let popup = draw_area_in(f.size(), 50, 20);
let popup = Popup(Size::Percentage(50), Size::Percentage(20)).draw_in(f.size());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)