* Fixed the log redraw which didn't happen as the display's scheduler

didn't get re-added to the task scheduler until a new event happened.

* Added redraw delay interval of 100ms, consider 50ms.

* Removed exceptions from core::DownloadStore::save.

* Added load, load_run, tied_stop and tied_remove to man-page.

* Cleaned up the command/option instances, move them to Control.

* PCB::load_up_chunk grabbed the errno from m_downChunk, not m_upChunk.

* Various string operations were moved to rak/string_manip.h.


git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@617 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
rakshasa
2006-01-06 21:14:49 +00:00
parent 4431fd1652
commit f32c15878a
33 changed files with 471 additions and 482 deletions
+54 -17
View File
@@ -47,6 +47,28 @@
namespace display {
Manager::Manager() {
m_taskUpdate.set_slot(rak::mem_fn(this, &Manager::receive_update));
}
Manager::~Manager() {
priority_queue_erase(&taskScheduler, &m_taskUpdate);
}
Manager::iterator
Manager::insert(iterator pos, Window* w) {
return Base::insert(pos, w);
}
// Swap with the function below.
Manager::iterator
Manager::erase(iterator pos) {
if (pos != end())
return erase(*pos);
else
return end();
}
Manager::iterator
Manager::erase(Window* w) {
iterator itr = std::find(begin(), end(), w);
@@ -62,6 +84,19 @@ Manager::find(Window* w) {
return std::find(begin(), end(), w);
}
void
Manager::schedule(Window* w, rak::timer t) {
rak::priority_queue_erase(&m_scheduler, w->task_update());
rak::priority_queue_insert(&m_scheduler, w->task_update(), t);
schedule_update();
}
void
Manager::unschedule(Window* w) {
rak::priority_queue_erase(&m_scheduler, w->task_update());
schedule_update();
}
void
Manager::adjust_layout() {
int staticHeight = std::for_each(begin(), end(),
@@ -95,28 +130,30 @@ Manager::adjust_layout() {
}
void
Manager::do_update() {
Manager::receive_update() {
Canvas::refresh_std();
// std::list<rak::priority_item*> workQueue;
// std::copy(rak::queue_popper(displayScheduler, rak::bind2nd(std::mem_fun(&rak::priority_item::compare), cachedTime)),
// rak::queue_popper(displayScheduler, rak::bind2nd(std::mem_fun(&rak::priority_item::compare), rak::timer())),
// std::back_inserter(workQueue));
// std::for_each(workQueue.begin(), workQueue.end(), std::mem_fun(&rak::priority_item::clear_time));
// std::for_each(workQueue.begin(), workQueue.end(), std::mem_fun(&rak::priority_item::call));
while (!displayScheduler.empty() && displayScheduler.top()->time() <= cachedTime) {
rak::priority_item* v = displayScheduler.top();
displayScheduler.pop();
v->clear_time();
v->call();
}
rak::priority_queue_perform(&m_scheduler, cachedTime);
std::for_each(begin(), end(), rak::if_then(std::mem_fun(&Window::is_active), std::mem_fun(&Window::refresh)));
Canvas::do_update();
m_timeLastUpdate = cachedTime;
schedule_update();
}
void
Manager::schedule_update() {
if (m_scheduler.empty()) {
rak::priority_queue_erase(&taskScheduler, &m_taskUpdate);
return;
}
if (!m_taskUpdate.is_queued() || m_taskUpdate.time() > m_scheduler.top()->time()) {
rak::priority_queue_erase(&taskScheduler, &m_taskUpdate);
rak::priority_queue_insert(&taskScheduler, &m_taskUpdate,
std::max(m_scheduler.top()->time(), m_timeLastUpdate + 100000));
}
}
}