feat: consolidate theme progress bar fields into single transfer_progress_bar

This commit is contained in:
Christian Visintin
2026-04-19 01:54:46 +05:30
parent 0ddbf3b104
commit 9b19240925
21 changed files with 56 additions and 137 deletions
@@ -142,18 +142,17 @@ impl TransferProgress {
self.files_total <= 1
}
#[cfg(test)]
pub fn bytes_written(&self) -> usize {
self.bytes_written
}
#[cfg(test)]
pub fn files_completed(&self) -> usize {
self.files_completed
}
pub fn files_total(&self) -> usize {
self.files_total
}
#[cfg(test)]
pub fn files_started(&self) -> usize {
self.files_started
}
@@ -381,7 +380,7 @@ mod test {
progress.add_bytes(256);
let display = progress.to_string();
assert!(display.contains("/ 1.0 KB"));
assert!(display.contains("/ 1.0 KiB"));
assert!(!display.contains('~'));
}
@@ -426,7 +426,7 @@ impl FileTransferActivity {
&mut self,
root_name: String,
) {
let prog_color = self.theme().transfer_progress_bar_full;
let prog_color = self.theme().transfer_progress_bar;
ui_result(self.app.remount(
Id::TransferProgressBar,
Box::new(components::TransferProgressBar::new(
+3 -6
View File
@@ -103,8 +103,7 @@ pub enum IdTheme {
MiscSave,
MiscTitle,
MiscWarn,
ProgBarFull,
ProgBarPartial,
ProgBar,
StatusHidden,
StatusSorting,
StatusSync,
@@ -225,10 +224,8 @@ pub enum ThemeMsg {
MiscSaveBlurUp,
MiscWarnBlurDown,
MiscWarnBlurUp,
ProgBarFullBlurDown,
ProgBarFullBlurUp,
ProgBarPartialBlurDown,
ProgBarPartialBlurUp,
ProgBarBlurDown,
ProgBarBlurUp,
StatusHiddenBlurDown,
StatusHiddenBlurUp,
StatusSortingBlurDown,
+6 -13
View File
@@ -248,11 +248,8 @@ impl SetupActivity {
IdTheme::LogWindow => {
theme.transfer_log_window = color;
}
IdTheme::ProgBarFull => {
theme.transfer_progress_bar_full = color;
}
IdTheme::ProgBarPartial => {
theme.transfer_progress_bar_partial = color;
IdTheme::ProgBar => {
theme.transfer_progress_bar = color;
}
IdTheme::StatusHidden => {
theme.transfer_status_hidden = color;
@@ -339,12 +336,9 @@ impl SetupActivity {
let transfer_log_window = self
.get_color(&Id::Theme(IdTheme::LogWindow))
.map_err(|_| Id::Theme(IdTheme::LogWindow))?;
let transfer_progress_bar_full = self
.get_color(&Id::Theme(IdTheme::ProgBarFull))
.map_err(|_| Id::Theme(IdTheme::ProgBarFull))?;
let transfer_progress_bar_partial = self
.get_color(&Id::Theme(IdTheme::ProgBarPartial))
.map_err(|_| Id::Theme(IdTheme::ProgBarPartial))?;
let transfer_progress_bar = self
.get_color(&Id::Theme(IdTheme::ProgBar))
.map_err(|_| Id::Theme(IdTheme::ProgBar))?;
let transfer_status_hidden = self
.get_color(&Id::Theme(IdTheme::StatusHidden))
.map_err(|_| Id::Theme(IdTheme::StatusHidden))?;
@@ -378,8 +372,7 @@ impl SetupActivity {
theme.transfer_remote_explorer_highlighted = transfer_remote_explorer_highlighted;
theme.transfer_log_background = transfer_log_background;
theme.transfer_log_window = transfer_log_window;
theme.transfer_progress_bar_full = transfer_progress_bar_full;
theme.transfer_progress_bar_partial = transfer_progress_bar_partial;
theme.transfer_progress_bar = transfer_progress_bar;
theme.transfer_status_hidden = transfer_status_hidden;
theme.transfer_status_sorting = transfer_status_sorting;
theme.transfer_status_sync_browsing = transfer_status_sync_browsing;
+9 -34
View File
@@ -649,50 +649,25 @@ impl Component<Msg, NoUserEvent> for MiscWarn {
}
#[derive(MockComponent)]
pub struct ProgBarFull {
pub struct ProgBar {
component: InputColor,
}
impl ProgBarFull {
pub fn new(value: Color) -> Self {
impl ProgBar {
pub fn new(color: Color) -> Self {
Self {
component: InputColor::new(
"'Full transfer' Progress bar",
IdTheme::ProgBarFull,
value,
Msg::Theme(ThemeMsg::ProgBarFullBlurDown),
Msg::Theme(ThemeMsg::ProgBarFullBlurUp),
"Progress bar",
IdTheme::ProgBar,
color,
Msg::Theme(ThemeMsg::ProgBarBlurDown),
Msg::Theme(ThemeMsg::ProgBarBlurUp),
),
}
}
}
impl Component<Msg, NoUserEvent> for ProgBarFull {
fn on(&mut self, ev: Event<NoUserEvent>) -> Option<Msg> {
self.component.on(ev)
}
}
#[derive(MockComponent)]
pub struct ProgBarPartial {
component: InputColor,
}
impl ProgBarPartial {
pub fn new(value: Color) -> Self {
Self {
component: InputColor::new(
"'Partial transfer' Progress bar",
IdTheme::ProgBarPartial,
value,
Msg::Theme(ThemeMsg::ProgBarPartialBlurDown),
Msg::Theme(ThemeMsg::ProgBarPartialBlurUp),
),
}
}
}
impl Component<Msg, NoUserEvent> for ProgBarPartial {
impl Component<Msg, NoUserEvent> for ProgBar {
fn on(&mut self, ev: Event<NoUserEvent>) -> Option<Msg> {
self.component.on(ev)
}
+5 -15
View File
@@ -467,7 +467,7 @@ impl SetupActivity {
}
}
ThemeMsg::ExplorerRemoteHgBlurDown => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ProgBarFull)) {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ProgBar)) {
error!("Failed to activate component: {err}");
}
}
@@ -476,23 +476,13 @@ impl SetupActivity {
error!("Failed to activate component: {err}");
}
}
ThemeMsg::ProgBarFullBlurDown => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ProgBarPartial)) {
error!("Failed to activate component: {err}");
}
}
ThemeMsg::ProgBarFullBlurUp => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ExplorerRemoteHg)) {
error!("Failed to activate component: {err}");
}
}
ThemeMsg::ProgBarPartialBlurDown => {
ThemeMsg::ProgBarBlurDown => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::LogBg)) {
error!("Failed to activate component: {err}");
}
}
ThemeMsg::ProgBarPartialBlurUp => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ProgBarFull)) {
ThemeMsg::ProgBarBlurUp => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ExplorerRemoteHg)) {
error!("Failed to activate component: {err}");
}
}
@@ -502,7 +492,7 @@ impl SetupActivity {
}
}
ThemeMsg::LogBgBlurUp => {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ProgBarPartial)) {
if let Err(err) = self.app.active(&Id::Theme(IdTheme::ProgBar)) {
error!("Failed to activate component: {err}");
}
}
+9 -26
View File
@@ -184,8 +184,7 @@ impl SetupActivity {
.constraints(
[
Constraint::Length(1), // Title
Constraint::Length(3), // Full prog bar
Constraint::Length(3), // Partial prog bar
Constraint::Length(3), // prog bar
Constraint::Length(3), // log bg
Constraint::Length(3), // log window
Constraint::Length(3), // status sorting
@@ -202,39 +201,34 @@ impl SetupActivity {
transfer_colors_layout_col2[0],
);
self.app.view(
&Id::Theme(IdTheme::ProgBarFull),
&Id::Theme(IdTheme::ProgBar),
f,
transfer_colors_layout_col2[1],
);
self.app.view(
&Id::Theme(IdTheme::ProgBarPartial),
&Id::Theme(IdTheme::LogBg),
f,
transfer_colors_layout_col2[2],
);
self.app.view(
&Id::Theme(IdTheme::LogBg),
&Id::Theme(IdTheme::LogWindow),
f,
transfer_colors_layout_col2[3],
);
self.app.view(
&Id::Theme(IdTheme::LogWindow),
&Id::Theme(IdTheme::StatusSorting),
f,
transfer_colors_layout_col2[4],
);
self.app.view(
&Id::Theme(IdTheme::StatusSorting),
&Id::Theme(IdTheme::StatusHidden),
f,
transfer_colors_layout_col2[5],
);
self.app.view(
&Id::Theme(IdTheme::StatusHidden),
f,
transfer_colors_layout_col2[6],
);
self.app.view(
&Id::Theme(IdTheme::StatusSync),
f,
transfer_colors_layout_col2[7],
transfer_colors_layout_col2[6],
);
// Popups
self.view_popups(f);
@@ -430,19 +424,8 @@ impl SetupActivity {
error!("Failed to remount component: {err}");
}
if let Err(err) = self.app.remount(
Id::Theme(IdTheme::ProgBarFull),
Box::new(components::ProgBarFull::new(
theme.transfer_progress_bar_full,
)),
vec![],
) {
error!("Failed to remount component: {err}");
}
if let Err(err) = self.app.remount(
Id::Theme(IdTheme::ProgBarPartial),
Box::new(components::ProgBarPartial::new(
theme.transfer_progress_bar_partial,
)),
Id::Theme(IdTheme::ProgBar),
Box::new(components::ProgBar::new(theme.transfer_progress_bar)),
vec![],
) {
error!("Failed to remount component: {err}");