You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Loving this repo so far, thanks for all your hard work. Any advice would be greatly appreciated. I've got a possible enhancement, but want to make sure I'm not missing anything on how I could do this via a workaround.
In short, I'd like to have worker functions which can modify an optionally (via boost::optional) passed-in ProgressBar, which is inside a DynamicProgress in the application-level code.
Say I have a a ProgressBars that I then pass into DynamicProgress dbar, like so:
indicators::ProgressBar bar1{
indicators::option::BarWidth{40},
indicators::option::PrefixText{"progress bar 1"},
indicators::option::PostfixText{"not mutated by function yet"}
};
indicators::ProgressBar bar2{
indicators::option::BarWidth{40},
indicators::option::PrefixText{"progress bar 2"},
indicators::option::PostfixText{"not mutated by function yet"}
};
indicators::DynamicProgress<indicators::ProgressBar> dbar;
dbar.push_back(bar1);
dbar.push_back(bar2);
I would then like to be able to pass the ProgressBar at dbar[0] to a function which mutates it, e.g. changes the progress or text, without having to pass the parent DynamicProgress. Being forced to pass the parent DynamicProgress is messy: it means that worker functions can't be passed individual progress bars without unnecessary code (e.g. having to first put the single progressbar in a dynamicprogress at the application level), and forces a clunky interface to the worker function because you also have to pass in the index of the bar inside the DynamicProgress.
Minimum (not) working example of what I'd like to do:
#include <indicators/progress_bar.hpp>
#include <indicators/dynamic_progress.hpp>
#include <boost/optional.hpp>
void pbar_mutation_function(boost::optional<indicators::ProgressBar*> bar=boost::none);
int main() {
// build progressbars
indicators::ProgressBar bar1{
indicators::option::BarWidth{40},
indicators::option::PrefixText{"progress bar 1"},
indicators::option::PostfixText{"not mutated by function yet"}
};
indicators::ProgressBar bar2{
indicators::option::BarWidth{40},
indicators::option::PrefixText{"progress bar 2"},
indicators::option::PostfixText{"not mutated by function yet"}
};
// insert it into a dynamic progress container
indicators::DynamicProgress<indicators::ProgressBar> dbar;
dbar.push_back(bar1);
dbar.push_back(bar2);
// pass the child progressbar "bar1" into mutation function
pbar_mutation_function(&(dbar[0])); // this doesn't work :(
return 0;
}
void pbar_mutation_function(boost::optional<indicators::ProgressBar*> bar){
// update bar postfix text to notify you're in the mutation function
if(bar){
(*(*bar)).set_option(indicators::option::PostfixText{"inside bar mutation function"});
}
// in loop iterate up bar
for(uint i=0; i<=100; i++){
if(bar){
(*(*bar)).set_option(indicators::option::PostfixText{"inside bar mutation function: i="+std::to_string(i)});
(*(*bar)).tick();
}
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
// mark bar as complete
if(bar){
(*(*bar)).mark_as_completed();
}
}
Desired behavior of above example
Two progress bars are initialized on the console, but only bar1 gets iterated up.
Observed behavior
Neither bar gets modified.
The text was updated successfully, but these errors were encountered:
Loving this repo so far, thanks for all your hard work. Any advice would be greatly appreciated. I've got a possible enhancement, but want to make sure I'm not missing anything on how I could do this via a workaround.
In short, I'd like to have worker functions which can modify an optionally (via boost::optional) passed-in ProgressBar, which is inside a DynamicProgress in the application-level code.
Say I have a a ProgressBars that I then pass into DynamicProgress
dbar
, like so:I would then like to be able to pass the ProgressBar at
dbar[0]
to a function which mutates it, e.g. changes the progress or text, without having to pass the parent DynamicProgress. Being forced to pass the parent DynamicProgress is messy: it means that worker functions can't be passed individual progress bars without unnecessary code (e.g. having to first put the single progressbar in a dynamicprogress at the application level), and forces a clunky interface to the worker function because you also have to pass in the index of the bar inside the DynamicProgress.Minimum (not) working example of what I'd like to do:
Desired behavior of above example
Two progress bars are initialized on the console, but only bar1 gets iterated up.
Observed behavior
Neither bar gets modified.
The text was updated successfully, but these errors were encountered: