Use new logging buffer for complete log view.

This commit is contained in:
rakshasa
2012-03-12 20:41:19 +09:00
parent a186932c03
commit 7e0d5956b5
9 changed files with 58 additions and 50 deletions
+5 -3
View File
@@ -71,13 +71,15 @@ void
WindowLog::redraw() {
m_canvas->erase();
int pos = 0;
int pos = m_canvas->height();
for (iterator itr = m_log->end(), last = find_older(); itr != last && pos > 0; --pos) {
itr--;
for (iterator itr = find_older(), last = m_log->end(); itr != last && pos < m_canvas->height(); ++itr, ++pos) {
char buffer[16];
print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->timestamp));
m_canvas->print(0, pos, "(%s) %s", buffer, itr->message.c_str());
m_canvas->print(0, pos - 1, "(%s) %s", buffer, itr->message.c_str());
}
}
+9 -16
View File
@@ -44,21 +44,17 @@
namespace display {
WindowLogComplete::WindowLogComplete(core::Log* l) :
WindowLogComplete::WindowLogComplete(torrent::log_buffer* l) :
Window(new Canvas, 0, 30, 1, extent_full, extent_full),
m_log(l) {
// We're trying out scheduled tasks instead.
m_connUpdate = l->signal_update().connect(sigc::mem_fun(*this, &WindowLogComplete::receive_update));
}
WindowLogComplete::~WindowLogComplete() {
m_connUpdate.disconnect();
}
WindowLogComplete::iterator
WindowLogComplete::find_older() {
return m_log->find_older(cachedTime - rak::timer::from_seconds(60));
return m_log->find_older(cachedTime.seconds() - 60);
}
void
@@ -70,28 +66,25 @@ WindowLogComplete::redraw() {
int pos = m_canvas->height();
for (core::Log::iterator itr = m_log->begin(), last = m_log->end(); itr != last && pos > 0; ++itr) {
for (iterator itr = m_log->end(), last = m_log->begin(); itr != last && pos > 0; ) {
itr--;
char buffer[16];
// Use an arbitrary min width of 60 for allowing multiple
// lines. This should ensure we don't mess up the display when the
// screen is shrunk too much.
unsigned int timeWidth = 3 + print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->first.seconds())) - buffer;
unsigned int timeWidth = 3 + print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->timestamp)) - buffer;
unsigned int logWidth = m_canvas->width() > 60 ? (m_canvas->width() - timeWidth) : (60 - timeWidth);
unsigned int logHeight = (itr->second.size() + logWidth - 1) / logWidth;
unsigned int logHeight = (itr->message.size() + logWidth - 1) / logWidth;
for (unsigned int j = logHeight; j > 0 && pos > 0; --j, --pos)
if (j == 1)
m_canvas->print(0, pos - 1, "(%s) %s", buffer, itr->second.substr(0, m_canvas->width() - timeWidth).c_str());
m_canvas->print(0, pos - 1, "(%s) %s", buffer, itr->message.substr(0, m_canvas->width() - timeWidth).c_str());
else
m_canvas->print(timeWidth, pos - 1, "%s", itr->second.substr(logWidth * (j - 1), m_canvas->width() - timeWidth).c_str());
m_canvas->print(timeWidth, pos - 1, "%s", itr->message.substr(logWidth * (j - 1), m_canvas->width() - timeWidth).c_str());
}
}
void
WindowLogComplete::receive_update() {
mark_dirty();
}
}
+4 -9
View File
@@ -37,9 +37,7 @@
#ifndef RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
#define RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
#include <sigc++/connection.h>
#include "core/log.h"
#include <torrent/utils/log_buffer.h>
#include "window.h"
@@ -47,20 +45,17 @@ namespace display {
class WindowLogComplete : public Window {
public:
typedef core::Log::iterator iterator;
typedef torrent::log_buffer::const_iterator iterator;
WindowLogComplete(core::Log* l);
WindowLogComplete(torrent::log_buffer* l);
~WindowLogComplete();
virtual void redraw();
void receive_update();
private:
inline iterator find_older();
core::Log* m_log;
sigc::connection m_connUpdate;
torrent::log_buffer* m_log;
};
}