Continued ripping up the source.
[aesalon.git] / gui / src / SessionManager.cpp
blob511893ceccfca95d7e55274f0e41d0ece2e57b12
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 namespace Aesalon {
10 namespace GUI {
12 SessionManager::SessionManager(QWidget *parent) {
13 QSettings settings;
15 int sessions = settings.beginReadArray("sessions");
16 for(int i = 0; i < sessions; i ++) {
17 settings.setArrayIndex(i);
18 Session *session = new Session();
19 session->set_session_name(settings.value("session-name").toString());
20 session->set_executable_path(settings.value("executable-path").toString());
21 session->set_arguments(settings.value("arguments").toString());
22 session->set_port(settings.value("port").toInt());
23 session->set_session_type(Session::session_type_e(settings.value("session-type").toInt()));
24 session_list.append(session);
26 settings.endArray();
28 layout = new QVBoxLayout();
30 session_list_view = new SessionListWidget();
31 session_list_view->update_list(session_list);
32 layout->addWidget(session_list_view);
34 if(sessions) session_list_view->setCurrentRow(0);
36 session_button_layout = new QHBoxLayout();
38 new_session_button = new QPushButton("&New session");
39 connect(new_session_button, SIGNAL(pressed()), this, SLOT(new_session()));
40 session_button_layout->addWidget(new_session_button);
42 launch_session_button = new QPushButton("&Launch session");
43 connect(launch_session_button, SIGNAL(pressed()), this, SLOT(launch_current_session()));
44 session_button_layout->addWidget(launch_session_button);
46 layout->addLayout(session_button_layout);
47 this->setLayout(layout);
49 session_list_view->setFocus(Qt::ActiveWindowFocusReason);
51 connect(session_list_view, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(edit_session(QListWidgetItem *)));
52 connect(session_list_view, SIGNAL(new_request()), this, SLOT(new_session()));
53 connect(session_list_view, SIGNAL(edit_request(QListWidgetItem*)), this, SLOT(edit_session(QListWidgetItem*)));
54 connect(session_list_view, SIGNAL(delete_request(QListWidgetItem*)), this, SLOT(delete_session(QListWidgetItem*)));
57 SessionManager::~SessionManager() {
58 save_sessions();
61 void SessionManager::save_sessions() {
62 QSettings settings;
63 settings.beginWriteArray("sessions");
64 for(int i = 0; i < session_list.size(); i ++) {
65 settings.setArrayIndex(i);
66 settings.setValue("session-name", session_list[i]->get_session_name());
67 settings.setValue("executable-path", session_list[i]->get_executable_path());
68 settings.setValue("arguments", session_list[i]->get_arguments());
69 settings.setValue("port", session_list[i]->get_port());
70 settings.setValue("session-type", session_list[i]->get_session_type());
72 settings.endArray();
75 Session *SessionManager::get_session_by_name(const QString &name) const {
76 for(int i = 0; i < session_list.size(); i ++) {
77 if(session_list[i]->get_session_name() == name) return session_list[i];
79 return NULL;
82 void SessionManager::new_session() {
83 SessionEditor *se = new SessionEditor(this, NULL);
84 if(se->exec() == QDialog::Accepted) {
85 session_list.append(se->get_session());
86 session_list_view->update_list(session_list);
90 void SessionManager::launch_session(QListWidgetItem *session_item) {
91 if(session_item == NULL) return;
92 QString session_name = session_item->data(Qt::DisplayRole).toString();
93 Session *session = get_session_by_name(session_name);
95 ActiveSession *as = new ActiveSession(session);
96 emit new_tab_request(as, session_name);
97 connect(as, SIGNAL(close_session(ActiveSession *)), this, SLOT(close_active_session(ActiveSession *)));
98 if(session->get_session_type() == Session::LAUNCH_SESSION) as->execute();
99 else as->connect_to(session->get_executable_path(), session->get_port());
102 void SessionManager::edit_session(QListWidgetItem *session_item) {
103 QString session_name = session_item->data(Qt::DisplayRole).toString();
104 Session *session = get_session_by_name(session_name);
105 SessionEditor *se = new SessionEditor(this, session);
106 se->exec();
107 session_list_view->update_list(session_list);
110 void SessionManager::delete_session(QListWidgetItem *session_item) {
111 if(session_item == NULL) return;
112 QString session_name = session_item->data(Qt::DisplayRole).toString();
113 Session *session = get_session_by_name(session_name);
114 if(session_list.removeOne(session)) session_list_view->update_list(session_list);
117 void SessionManager::close_active_session(ActiveSession *session) {
118 emit remove_tab_request(session);
121 } // namespace GUI
122 } // namespace Aesalon