# # patch "ui.cc" # from [bf5397526968d5189f12fef56ecd4990f622beef] # to [0c88eff67377902b972de5a9bf1f8df56e3a56b1] # # patch "ui.hh" # from [7cdd4335a8fa4b4828470eb69b363792bd0a5ce8] # to [511da8ccba3cebdb6a09f2cd56f5ce2c4d200a46] # --- ui.cc +++ ui.cc @@ -38,10 +38,11 @@ I(ui.tickers.find(name) != ui.tickers.end()); if (ui.some_tick_is_dirty) { - ui.write_ticks(); + ui.t_writer->write_ticks(); } ui.tickers.erase(name); - ui.finish_ticking(); + if(ui.tickers.size() == 0) + ui.t_writer->clear_line(); } void @@ -51,7 +52,7 @@ ticks++; ui.some_tick_is_dirty = true; if (ticks % mod == 0) - ui.write_ticks(); + ui.t_writer->write_ticks(); } void @@ -65,7 +66,7 @@ { ui.some_tick_is_dirty = true; if (ticks % mod == 0 || (ticks / mod) > (old / mod)) - ui.write_ticks(); + ui.t_writer->write_ticks(); } } @@ -127,9 +128,18 @@ clog << tickline; clog.flush(); + ui.some_tick_is_dirty = false; + ui.last_write_was_a_tick = true; } +void tick_write_count::clear_line() +{ + if(ui.last_write_was_a_tick) + clog << endl; + ui.last_write_was_a_tick = false; +} + tick_write_dot::tick_write_dot() { } @@ -185,9 +195,29 @@ clog << tickline1 << tickline2; clog.flush(); + ui.some_tick_is_dirty = false; + ui.last_write_was_a_tick = true; } +void tick_write_dot::clear_line() +{ + if(ui.last_write_was_a_tick) + clog << endl; + ui.last_write_was_a_tick = false; +} + +void tick_write_nothing::write_ticks() +{ + ui.some_tick_is_dirty = false; +} + +void tick_write_nothing::clear_line() +{ + ui.last_write_was_a_tick = false; +} + + user_interface::user_interface() : last_write_was_a_tick(false), t_writer(0) @@ -206,18 +236,6 @@ } void -user_interface::finish_ticking() -{ - if (tickers.size() == 0 && - last_write_was_a_tick) - { - tick_trailer = ""; - clog << endl; - last_write_was_a_tick = false; - } -} - -void user_interface::set_tick_trailer(string const & t) { tick_trailer = t; @@ -232,14 +250,6 @@ } void -user_interface::write_ticks() -{ - t_writer->write_ticks(); - last_write_was_a_tick = true; - some_tick_is_dirty = false; -} - -void user_interface::warn(string const & warning) { if (issued_warnings.find(warning) == issued_warnings.end()) @@ -282,10 +292,9 @@ { if (last_write_was_a_tick) { - write_ticks(); - clog << endl; + t_writer->write_ticks(); + t_writer->clear_line(); } - last_write_was_a_tick = false; } void --- ui.hh +++ ui.hh @@ -37,6 +37,7 @@ tick_writer() {} virtual ~tick_writer() {} virtual void write_ticks() = 0; + virtual void clear_line() = 0; }; struct tick_write_count : virtual public tick_writer @@ -45,6 +46,7 @@ tick_write_count(); ~tick_write_count(); void write_ticks(); + void clear_line(); private: size_t last_tick_len; }; @@ -55,6 +57,7 @@ tick_write_dot(); ~tick_write_dot(); void write_ticks(); + void clear_line(); private: std::map last_ticks; }; @@ -62,7 +65,8 @@ struct tick_write_nothing : virtual public tick_writer { public: - void write_ticks() {} + void write_ticks(); + void clear_line(); }; struct user_interface @@ -87,12 +91,11 @@ bool last_write_was_a_tick; std::map tickers; tick_writer * t_writer; - void finish_ticking(); - void write_ticks(); std::string tick_trailer; friend struct tick_write_dot; friend struct tick_write_count; + friend struct tick_write_nothing; friend struct ticker; };