Successfully replaced the ptrace-based allocation gathering with LD_PRELOAD.
[aesalon.git] / gui / src / SessionManager.cpp
blob812819bfc3870cf254e8e820a92ab1cba587b394
1 #include <iostream>
2 #include <QSettings>
3 #include "SessionManager.h"
4 #include "SessionManager.moc"
5 #include "SessionEditor.h"
6 #include "ActiveSession.h"
7 #include "MainArea.h"
9 SessionManager::SessionManager(QWidget *parent) {
10 QSettings settings;
12 int sessions = settings.beginReadArray("sessions");
13 for(int i = 0; i < sessions; i ++) {
14 settings.setArrayIndex(i);
15 Session *session = new Session();
16 session->set_session_name(settings.value("session-name").toString());
17 session->set_executable_path(settings.value("executable-path").toString());
18 session->set_arguments(settings.value("arguments").toString());
19 session->set_port(settings.value("port").toInt());
20 session->set_snapshot_interval(settings.value("snapshot-interval").toInt());
21 session->set_full_snapshot_interval(settings.value("full-snapshot-interval").toInt());
22 session->set_session_type(Session::session_type_e(settings.value("session-type").toInt()));
23 session_list.append(session);
25 settings.endArray();
27 layout = new QVBoxLayout();
29 session_list_view = new SessionListWidget();
30 session_list_view->update_list(session_list);
31 layout->addWidget(session_list_view);
33 if(sessions) session_list_view->setCurrentRow(0);
35 session_button_layout = new QHBoxLayout();
37 new_session_button = new QPushButton("&New session");
38 connect(new_session_button, SIGNAL(pressed()), this, SLOT(new_session()));
39 session_button_layout->addWidget(new_session_button);
41 launch_session_button = new QPushButton("&Launch session");
42 connect(launch_session_button, SIGNAL(pressed()), this, SLOT(launch_current_session()));
43 session_button_layout->addWidget(launch_session_button);
45 layout->addLayout(session_button_layout);
46 this->setLayout(layout);
48 session_list_view->setFocus(Qt::ActiveWindowFocusReason);
50 connect(session_list_view, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(edit_session(QListWidgetItem *)));
51 connect(session_list_view, SIGNAL(new_request()), this, SLOT(new_session()));
52 connect(session_list_view, SIGNAL(edit_request(QListWidgetItem*)), this, SLOT(edit_session(QListWidgetItem*)));
53 connect(session_list_view, SIGNAL(delete_request(QListWidgetItem*)), this, SLOT(delete_session(QListWidgetItem*)));
56 SessionManager::~SessionManager() {
57 save_sessions();
60 void SessionManager::save_sessions() {
61 QSettings settings;
62 settings.beginWriteArray("sessions");
63 for(int i = 0; i < session_list.size(); i ++) {
64 settings.setArrayIndex(i);
65 settings.setValue("session-name", session_list[i]->get_session_name());
66 settings.setValue("executable-path", session_list[i]->get_executable_path());
67 settings.setValue("arguments", session_list[i]->get_arguments());
68 settings.setValue("port", session_list[i]->get_port());
69 settings.setValue("snapshot-interval", session_list[i]->get_snapshot_interval());
70 settings.setValue("full-snapshot-interval", session_list[i]->get_full_snapshot_interval());
71 settings.setValue("session-type", session_list[i]->get_session_type());
73 settings.endArray();
76 Session *SessionManager::get_session_by_name(const QString &name) const {
77 for(int i = 0; i < session_list.size(); i ++) {
78 if(session_list[i]->get_session_name() == name) return session_list[i];
80 return NULL;
83 void SessionManager::new_session() {
84 SessionEditor *se = new SessionEditor(this, NULL);
85 if(se->exec() == QDialog::Accepted) {
86 session_list.append(se->get_session());
87 session_list_view->update_list(session_list);
91 void SessionManager::launch_session(QListWidgetItem *session_item) {
92 if(session_item == NULL) return;
93 QString session_name = session_item->data(Qt::DisplayRole).toString();
94 Session *session = get_session_by_name(session_name);
96 ActiveSession *as = new ActiveSession(session);
97 emit new_tab_request(as, session_name);
98 connect(as, SIGNAL(close_session(ActiveSession *)), this, SLOT(close_active_session(ActiveSession *)));
99 if(session->get_session_type() == Session::LAUNCH_SESSION) as->execute();
100 else as->connect_to(session->get_executable_path(), session->get_port());
103 void SessionManager::edit_session(QListWidgetItem *session_item) {
104 QString session_name = session_item->data(Qt::DisplayRole).toString();
105 Session *session = get_session_by_name(session_name);
106 SessionEditor *se = new SessionEditor(this, session);
107 se->exec();
108 session_list_view->update_list(session_list);
111 void SessionManager::delete_session(QListWidgetItem *session_item) {
112 if(session_item == NULL) return;
113 QString session_name = session_item->data(Qt::DisplayRole).toString();
114 Session *session = get_session_by_name(session_name);
115 if(session_list.removeOne(session)) session_list_view->update_list(session_list);
118 void SessionManager::close_active_session(ActiveSession *session) {
119 emit remove_tab_request(session);