mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-17 06:36:18 +00:00
Created a root ui.
git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@321 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
+12
-34
@@ -17,17 +17,18 @@
|
|||||||
#include "display/canvas.h"
|
#include "display/canvas.h"
|
||||||
#include "display/window.h"
|
#include "display/window.h"
|
||||||
#include "ui/control.h"
|
#include "ui/control.h"
|
||||||
#include "ui/download_list.h"
|
#include "ui/root.h"
|
||||||
#include "input/bindings.h"
|
#include "input/bindings.h"
|
||||||
|
|
||||||
#include "utils/timer.h"
|
#include "utils/timer.h"
|
||||||
#include "utils/directory.h"
|
#include "utils/directory.h"
|
||||||
|
#include "utils/task_schedule.h"
|
||||||
|
|
||||||
#include "signal_handler.h"
|
#include "signal_handler.h"
|
||||||
#include "option_parser.h"
|
#include "option_parser.h"
|
||||||
|
|
||||||
int64_t utils::Timer::m_cache;
|
int64_t utils::Timer::m_cache;
|
||||||
|
|
||||||
bool start_shutdown = false;
|
|
||||||
bool is_shutting_down = false;
|
bool is_shutting_down = false;
|
||||||
|
|
||||||
void do_panic(int signum);
|
void do_panic(int signum);
|
||||||
@@ -46,11 +47,6 @@ is_resized() {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
set_shutdown() {
|
|
||||||
start_shutdown = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
do_shutdown(ui::Control* c) {
|
do_shutdown(ui::Control* c) {
|
||||||
if (!is_shutting_down) {
|
if (!is_shutting_down) {
|
||||||
@@ -66,10 +62,7 @@ do_shutdown(ui::Control* c) {
|
|||||||
// a quick shutdown.
|
// a quick shutdown.
|
||||||
std::for_each(c->get_core().get_download_list().begin(), c->get_core().get_download_list().end(),
|
std::for_each(c->get_core().get_download_list().begin(), c->get_core().get_download_list().end(),
|
||||||
std::mem_fun(&core::Download::close));
|
std::mem_fun(&core::Download::close));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start_shutdown = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -99,21 +92,6 @@ load_arg_torrents(ui::Control* c, char** begin, char** end) {
|
|||||||
std::for_each(begin, end, std::bind1st(std::mem_fun(&core::Manager::insert), &c->get_core()));
|
std::for_each(begin, end, std::bind1st(std::mem_fun(&core::Manager::insert), &c->get_core()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
register_signals(ui::Control* c) {
|
|
||||||
SignalHandler::set_handler(SIGINT, sigc::ptr_fun(&set_shutdown));
|
|
||||||
SignalHandler::set_handler(SIGSEGV, sigc::bind(sigc::ptr_fun(&do_panic), SIGSEGV));
|
|
||||||
SignalHandler::set_handler(SIGBUS, sigc::bind(sigc::ptr_fun(&do_panic), SIGBUS));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
register_main_keys(ui::Control* c, input::Bindings* b) {
|
|
||||||
c->get_input().push_back(b);
|
|
||||||
|
|
||||||
(*b)[KEY_RESIZE] = sigc::mem_fun(c->get_display(), &display::Manager::adjust_layout);
|
|
||||||
(*b)['\x11'] = sigc::ptr_fun(&set_shutdown);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
initialize_core(ui::Control* c) {
|
initialize_core(ui::Control* c) {
|
||||||
c->get_core().get_poll().slot_read_stdin(sigc::mem_fun(c->get_input(), &input::Manager::pressed));
|
c->get_core().get_poll().slot_read_stdin(sigc::mem_fun(c->get_input(), &input::Manager::pressed));
|
||||||
@@ -125,25 +103,22 @@ initialize_core(ui::Control* c) {
|
|||||||
int
|
int
|
||||||
main(int argc, char** argv) {
|
main(int argc, char** argv) {
|
||||||
ui::Control uiControl;
|
ui::Control uiControl;
|
||||||
input::Bindings inputMain;
|
ui::Root uiRoot(&uiControl);
|
||||||
|
|
||||||
utils::Timer::update();
|
utils::Timer::update();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
register_signals(&uiControl);
|
SignalHandler::set_handler(SIGINT, sigc::bind(sigc::mem_fun(uiRoot, &ui::Root::set_shutdown_received), true));
|
||||||
|
SignalHandler::set_handler(SIGSEGV, sigc::bind(sigc::ptr_fun(&do_panic), SIGSEGV));
|
||||||
|
SignalHandler::set_handler(SIGBUS, sigc::bind(sigc::ptr_fun(&do_panic), SIGBUS));
|
||||||
|
|
||||||
int firstArg = parse_options(&uiControl, argc, argv);
|
int firstArg = parse_options(&uiControl, argc, argv);
|
||||||
|
|
||||||
display::Canvas::init();
|
display::Canvas::init();
|
||||||
display::Window::slot_adjust(sigc::mem_fun(uiControl.get_display(), &display::Manager::adjust_layout));
|
display::Window::slot_adjust(sigc::mem_fun(uiControl.get_display(), &display::Manager::adjust_layout));
|
||||||
|
|
||||||
ui::DownloadList uiDownloadList(&uiControl);
|
uiRoot.init();
|
||||||
|
|
||||||
uiDownloadList.activate();
|
|
||||||
uiDownloadList.slot_open_uri(sigc::mem_fun(uiControl.get_core(), &core::Manager::insert));
|
|
||||||
|
|
||||||
register_main_keys(&uiControl, &inputMain);
|
|
||||||
|
|
||||||
initialize_core(&uiControl);
|
initialize_core(&uiControl);
|
||||||
|
|
||||||
@@ -153,8 +128,10 @@ main(int argc, char** argv) {
|
|||||||
uiControl.get_display().adjust_layout();
|
uiControl.get_display().adjust_layout();
|
||||||
|
|
||||||
while (!is_shutting_down || !torrent::get(torrent::SHUTDOWN_DONE)) {
|
while (!is_shutting_down || !torrent::get(torrent::SHUTDOWN_DONE)) {
|
||||||
if (start_shutdown)
|
if (uiRoot.get_shutdown_received()) {
|
||||||
do_shutdown(&uiControl);
|
do_shutdown(&uiControl);
|
||||||
|
uiRoot.set_shutdown_received(false);
|
||||||
|
}
|
||||||
|
|
||||||
utils::Timer::update();
|
utils::Timer::update();
|
||||||
utils::TaskSchedule::perform(utils::Timer::cache());
|
utils::TaskSchedule::perform(utils::Timer::cache());
|
||||||
@@ -166,6 +143,7 @@ main(int argc, char** argv) {
|
|||||||
uiControl.get_core().get_poll().poll(utils::TaskSchedule::get_timeout());
|
uiControl.get_core().get_poll().poll(utils::TaskSchedule::get_timeout());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uiRoot.cleanup();
|
||||||
display::Canvas::cleanup();
|
display::Canvas::cleanup();
|
||||||
|
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
|
|||||||
+3
-1
@@ -5,6 +5,8 @@ libsub_ui_a_SOURCES = \
|
|||||||
download.cc \
|
download.cc \
|
||||||
download.h \
|
download.h \
|
||||||
download_list.cc \
|
download_list.cc \
|
||||||
download_list.h
|
download_list.h \
|
||||||
|
root.cc \
|
||||||
|
root.h
|
||||||
|
|
||||||
INCLUDES = -I$(srcdir) -I$(srcdir)/.. -I$(top_srcdir)
|
INCLUDES = -I$(srcdir) -I$(srcdir)/.. -I$(top_srcdir)
|
||||||
|
|||||||
@@ -3,8 +3,13 @@
|
|||||||
|
|
||||||
#include <sigc++/slot.h>
|
#include <sigc++/slot.h>
|
||||||
|
|
||||||
|
#include "core/download_list.h"
|
||||||
#include "utils/task.h"
|
#include "utils/task.h"
|
||||||
|
|
||||||
|
namespace input {
|
||||||
|
class Bindings;
|
||||||
|
}
|
||||||
|
|
||||||
namespace display {
|
namespace display {
|
||||||
class WindowDownloadList;
|
class WindowDownloadList;
|
||||||
class WindowHttpQueue;
|
class WindowHttpQueue;
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <sigc++/bind.h>
|
||||||
|
|
||||||
|
#include "control.h"
|
||||||
|
#include "download_list.h"
|
||||||
|
|
||||||
|
#include "root.h"
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
void
|
||||||
|
Root::init() {
|
||||||
|
setup_keys();
|
||||||
|
|
||||||
|
m_downloadList = new DownloadList(m_control);
|
||||||
|
|
||||||
|
m_downloadList->activate();
|
||||||
|
m_downloadList->slot_open_uri(sigc::mem_fun(m_control->get_core(), &core::Manager::insert));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Root::cleanup() {
|
||||||
|
delete m_downloadList;
|
||||||
|
|
||||||
|
m_control->get_input().erase(&m_bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Root::setup_keys() {
|
||||||
|
m_control->get_input().push_back(&m_bindings);
|
||||||
|
|
||||||
|
m_bindings[KEY_RESIZE] = sigc::mem_fun(m_control->get_display(), &display::Manager::adjust_layout);
|
||||||
|
m_bindings['\x11'] = sigc::bind(sigc::mem_fun(*this, &Root::set_shutdown_received), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#ifndef RTORRENT_UI_ROOT_H
|
||||||
|
#define RTORRENT_UI_ROOT_H
|
||||||
|
|
||||||
|
#include "input/bindings.h"
|
||||||
|
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
class DownloadList;
|
||||||
|
|
||||||
|
class Root {
|
||||||
|
public:
|
||||||
|
Root(Control* c) : m_shutdownReceived(false), m_control(c), m_downloadList(NULL) {}
|
||||||
|
|
||||||
|
void init();
|
||||||
|
void cleanup();
|
||||||
|
|
||||||
|
bool get_shutdown_received() { return m_shutdownReceived; }
|
||||||
|
void set_shutdown_received(bool v) { m_shutdownReceived = v; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setup_keys();
|
||||||
|
|
||||||
|
bool m_shutdownReceived;
|
||||||
|
|
||||||
|
Control* m_control;
|
||||||
|
DownloadList* m_downloadList;
|
||||||
|
|
||||||
|
input::Bindings m_bindings;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user