Index: rtorrent/src/display/window_download_list.h =================================================================== --- rtorrent/src/display/window_download_list.h (revision 1163) +++ rtorrent/src/display/window_download_list.h (working copy) @@ -59,6 +59,10 @@ virtual void redraw(); void set_view(core::View* l); + void set_done_fg_color(int64_t color); + void set_done_bg_color(int64_t color); + void set_active_fg_color(int64_t color); + void set_active_bg_color(int64_t color); private: core::View* m_view; Index: rtorrent/src/display/canvas.cc =================================================================== --- rtorrent/src/display/canvas.cc (revision 1163) +++ rtorrent/src/display/canvas.cc (working copy) @@ -92,6 +92,10 @@ m_isInitialized = true; initscr(); + start_color(); + use_default_colors(); + init_pair(2, -1, -1); + init_pair(1, -1, -1); raw(); noecho(); nodelay(stdscr, TRUE); Index: rtorrent/src/display/window_download_list.cc =================================================================== --- rtorrent/src/display/window_download_list.cc (revision 1163) +++ rtorrent/src/display/window_download_list.cc (working copy) @@ -37,6 +37,7 @@ #include "config.h" #include +#include #include "core/download.h" #include "core/view.h" @@ -96,12 +97,30 @@ char* position; char* last = buffer + m_canvas->width() - 2 + 1; + if( pos >= m_canvas->height() ) break; position = print_download_title(buffer, last, *range.first); - m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer); + m_canvas->print(0, pos, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer); + if( (*range.first)->is_done() ) { + if( (*range.first)->info()->up_rate()->rate() != 0 ) { + m_canvas->set_attr(0, pos, m_canvas->width()-1, A_BOLD, 2); + } else { + m_canvas->set_attr(0, pos, m_canvas->width()-1, A_NORMAL, 2); + } + } else if( (*range.first)->info()->is_active() ) { + if( (*range.first)->info()->down_rate()->rate() != 0 ) { + m_canvas->set_attr(0, pos, m_canvas->width()-1, A_BOLD, 1); + } else { + m_canvas->set_attr(0, pos, m_canvas->width()-1, A_NORMAL, 1); + } + } + pos++; + + if( pos >= m_canvas->height() ) break; position = print_download_info(buffer, last, *range.first); m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer); + if( pos >= m_canvas->height() ) break; position = print_download_status(buffer, last, *range.first); m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer); @@ -109,4 +128,41 @@ } } +void +WindowDownloadList::set_done_fg_color(int64_t color) { + short fg, bg; + pair_content(2, &fg, &bg); + if( color < 0 ) color = -1; + color = color % 8; + init_pair(2, (short)color, bg); } + +void +WindowDownloadList::set_done_bg_color(int64_t color) { + short fg, bg; + pair_content(2, &fg, &bg); + if( color < 0 ) color = -1; + color = color % 8; + init_pair(2, fg, (short)color); +} + +void +WindowDownloadList::set_active_fg_color(int64_t color) { + short fg, bg; + pair_content(1, &fg, &bg); + if( color < 0 ) color = -1; + color = color % 8; + init_pair(1, (short)color, bg); +} + +void +WindowDownloadList::set_active_bg_color(int64_t color) { + short fg, bg; + pair_content(1, &fg, &bg); + if( color < 0 ) color = -1; + color = color % 8; + init_pair(1, fg, (short)color); +} + +} + Index: rtorrent/src/command_network.cc =================================================================== --- rtorrent/src/command_network.cc (revision 1163) +++ rtorrent/src/command_network.cc (working copy) @@ -506,4 +506,15 @@ CMD2_ANY ("dht.statistics", std::tr1::bind(&core::DhtManager::dht_statistics, control->dht_manager())); CMD2_ANY ("dht.throttle.name", std::tr1::bind(&core::DhtManager::throttle_name, control->dht_manager())); CMD2_ANY_STRING_V("dht.throttle.name.set", std::tr1::bind(&core::DhtManager::set_throttle_name, control->dht_manager(), std::tr1::placeholders::_2)); + + + CMD2_ANY ("set_done_fg_color", std::tr1::bind(&ui::Root::get_done_fg_color, control->ui())); + CMD2_ANY_VALUE_V ("done_fg_color", std::tr1::bind(&ui::Root::set_done_fg_color, control->ui(), std::tr1::placeholders::_2)); + CMD2_ANY ("set_done_bg_color", std::tr1::bind(&ui::Root::get_done_bg_color, control->ui())); + CMD2_ANY_VALUE_V ("done_bg_color", std::tr1::bind(&ui::Root::set_done_bg_color, control->ui(), std::tr1::placeholders::_2)); + CMD2_ANY ("set_active_fg_color", std::tr1::bind(&ui::Root::get_active_fg_color, control->ui())); + CMD2_ANY_VALUE_V ("active_fg_color", std::tr1::bind(&ui::Root::set_active_fg_color, control->ui(), std::tr1::placeholders::_2)); + CMD2_ANY ("set_active_bg_color", std::tr1::bind(&ui::Root::get_active_bg_color, control->ui())); + CMD2_ANY_VALUE_V ("active_bg_color", std::tr1::bind(&ui::Root::set_active_bg_color, control->ui(), std::tr1::placeholders::_2)); + } Index: rtorrent/src/ui/download_list.cc =================================================================== --- rtorrent/src/ui/download_list.cc (revision 1163) +++ rtorrent/src/ui/download_list.cc (working copy) @@ -137,6 +137,11 @@ current_view()->next_focus(); } +display::WindowDownloadList* +DownloadList::current_window_list() { + return dynamic_cast(m_uiArray[DISPLAY_DOWNLOAD_LIST])->window(); +} + void DownloadList::activate_display(Display displayType) { if (!is_active()) Index: rtorrent/src/ui/download_list.h =================================================================== --- rtorrent/src/ui/download_list.h (revision 1163) +++ rtorrent/src/ui/download_list.h (working copy) @@ -101,6 +101,7 @@ void activate_display(Display d); core::View* current_view(); + display::WindowDownloadList* current_window_list(); void set_current_view(const std::string& name); void slot_open_uri(SlotOpenUri s) { m_slotOpenUri = s; } Index: rtorrent/src/ui/element_download_list.h =================================================================== --- rtorrent/src/ui/element_download_list.h (revision 1163) +++ rtorrent/src/ui/element_download_list.h (working copy) @@ -60,6 +60,7 @@ void disable(); core::View* view() { return m_view; } + WDownloadList* window() { return m_window; } void set_view(core::View* l); void receive_command(const char* cmd); Index: rtorrent/src/ui/root.cc =================================================================== --- rtorrent/src/ui/root.cc (revision 1163) +++ rtorrent/src/ui/root.cc (working copy) @@ -44,6 +44,7 @@ #include "core/manager.h" #include "display/frame.h" +#include "display/window_download_list.h" #include "display/window_http_queue.h" #include "display/window_title.h" #include "display/window_input.h" @@ -65,7 +66,11 @@ m_windowTitle(NULL), m_windowHttpQueue(NULL), m_windowInput(NULL), - m_windowStatusbar(NULL) { + m_windowStatusbar(NULL), + done_fg_color(-1), + done_bg_color(-1), + active_fg_color(-1), + active_bg_color(-1) { } void @@ -97,6 +102,10 @@ setup_keys(); m_downloadList->activate(rootFrame->frame(1)); + m_downloadList->current_window_list()->set_done_fg_color(done_fg_color); + m_downloadList->current_window_list()->set_done_bg_color(done_bg_color); + m_downloadList->current_window_list()->set_active_fg_color(active_fg_color); + m_downloadList->current_window_list()->set_active_bg_color(active_bg_color); } void @@ -219,7 +228,47 @@ torrent::set_max_unchoked(maxUnchoked); } +int +Root::get_done_fg_color() { + return done_fg_color; +} + void +Root::set_done_fg_color(int64_t color) { + done_fg_color = color; +} + +int +Root::get_done_bg_color() { + return done_bg_color; +} + +void +Root::set_done_bg_color(int64_t color) { + done_bg_color = color; +} + +int +Root::get_active_fg_color() { + return active_fg_color; +} + +void +Root::set_active_fg_color(int64_t color) { + active_fg_color = color; +} + +int +Root::get_active_bg_color() { + return active_bg_color; +} + +void +Root::set_active_bg_color(int64_t color) { + active_bg_color = color; +} + +void Root::adjust_down_throttle(int throttle) { set_down_throttle(std::max(torrent::down_throttle_global()->max_rate() / 1024 + throttle, 0)); } Index: rtorrent/src/ui/root.h =================================================================== --- rtorrent/src/ui/root.h (revision 1163) +++ rtorrent/src/ui/root.h (working copy) @@ -82,7 +82,16 @@ // Rename to raw or something, make base function. void set_down_throttle_i64(int64_t throttle) { set_down_throttle(throttle >> 10); } void set_up_throttle_i64(int64_t throttle) { set_up_throttle(throttle >> 10); } + int get_done_fg_color(); + void set_done_fg_color(int64_t color); + int get_done_bg_color(); + void set_done_bg_color(int64_t color); + int get_active_fg_color(); + void set_active_fg_color(int64_t color); + int get_active_bg_color(); + void set_active_bg_color(int64_t color); + void adjust_down_throttle(int throttle); void adjust_up_throttle(int throttle); @@ -93,6 +102,11 @@ input::TextInput* current_input(); + int64_t done_fg_color; + int64_t done_bg_color; + int64_t active_fg_color; + int64_t active_bg_color; + private: void setup_keys(); @@ -105,6 +119,7 @@ WStatusbar* m_windowStatusbar; input::Bindings m_bindings; + }; }