mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-06 18:22:32 +00:00
84c0d516ef
No advantage over the latter, which is simpler. Signed-off-by: Rosen Penev <rosenp@gmail.com>
86 lines
2.0 KiB
C++
86 lines
2.0 KiB
C++
#include "config.h"
|
|
|
|
#include <algorithm>
|
|
|
|
#include "canvas.h"
|
|
#include "utils.h"
|
|
#include "window_text.h"
|
|
|
|
namespace display {
|
|
|
|
WindowText::WindowText(rpc::target_type target, extent_type margin) :
|
|
Window(new Canvas, 0, 0, 0, extent_static, extent_static),
|
|
m_target(target),
|
|
m_margin(margin) {
|
|
}
|
|
|
|
void
|
|
WindowText::clear() {
|
|
for (auto t : *this)
|
|
delete t;
|
|
base_type::clear();
|
|
|
|
delete m_errorHandler;
|
|
m_errorHandler = NULL;
|
|
}
|
|
|
|
void
|
|
WindowText::push_back(TextElement* element) {
|
|
base_type::push_back(element);
|
|
|
|
// m_min_height = size();
|
|
m_max_height = size();
|
|
|
|
if (element != NULL) {
|
|
extent_type width = element->max_length();
|
|
|
|
if (width == extent_full)
|
|
m_max_width = extent_full;
|
|
else
|
|
m_max_width = std::max(m_max_width, element->max_length() + m_margin);
|
|
}
|
|
|
|
// Check if active, if so do the update thingie. Or be lazy?
|
|
}
|
|
|
|
void
|
|
WindowText::redraw() {
|
|
if (m_interval != 0)
|
|
schedule_update(m_interval);
|
|
|
|
m_canvas->erase();
|
|
|
|
unsigned int position = 0;
|
|
|
|
if (m_canvas->height() == 0)
|
|
return;
|
|
|
|
if (m_errorHandler != NULL && m_target.second == NULL) {
|
|
std::string buffer(m_canvas->width() + 1, ' ');
|
|
|
|
Canvas::attributes_list attributes;
|
|
attributes.push_back(Attributes(buffer.data(), Attributes::a_normal, Attributes::color_default));
|
|
|
|
char* last = m_errorHandler->print(buffer.data(), buffer.data() + m_canvas->width(), &attributes, m_target);
|
|
|
|
m_canvas->print_attributes(0, position, buffer.data(), last, &attributes);
|
|
return;
|
|
}
|
|
|
|
for (iterator itr = begin(); itr != end() && position < m_canvas->height(); ++itr, ++position) {
|
|
if (*itr == NULL)
|
|
continue;
|
|
|
|
std::string buffer(m_canvas->width() + 1, ' ');
|
|
|
|
Canvas::attributes_list attributes;
|
|
attributes.push_back(Attributes(buffer.data(), Attributes::a_normal, Attributes::color_default));
|
|
|
|
char* last = (*itr)->print(buffer.data(), buffer.data() + m_canvas->width(), &attributes, m_target);
|
|
|
|
m_canvas->print_attributes(0, position, buffer.data(), last, &attributes);
|
|
}
|
|
}
|
|
|
|
}
|