3 #include "SessionManager.h"
4 #include "SessionManager.moc"
5 #include "SessionEditor.h"
6 #include "ActiveSession.h"
12 SessionManager::SessionManager(QWidget
*parent
) {
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
);
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() {
61 void SessionManager::save_sessions() {
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());
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
];
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
);
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
);
122 } // namespace Aesalon