3 #include "SessionManager.h"
4 #include "SessionManager.moc"
5 #include "SessionEditor.h"
6 #include "ActiveSession.h"
9 SessionManager::SessionManager(QWidget
*parent
) {
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
);
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() {
60 void SessionManager::save_sessions() {
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());
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
];
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
);
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
);