-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsessions.cpp
111 lines (86 loc) · 3.55 KB
/
sessions.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*===========================================================================
CLIPSEditor, editor for CLIPS (C Language Integrated Production System)
Copyright (C) 2012-2017 Novikov Artem Gennadievich
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
===========================================================================*/
#include "sessions.h"
Sessions::Sessions(Config* config, QTabWidget* tabWidget)
: config(config), tabWidget(tabWidget)
{
setupUi(this);
QMapIterator<QString, QVariant> it(config->sessions);
while (it.hasNext()) {
it.next();
QListWidgetItem* item = new QListWidgetItem(it.key(), lstSessions);
item->setData(Qt::UserRole, it.value());
item->setFlags(item->flags() | Qt::ItemIsEditable);
}
menu = new QMenu();
menu->addAction(tr("Rename"), this, SLOT(rename()));
menu->addAction(tr("Update"), this, SLOT(update()));
menu->addAction(tr("Remove"), this, SLOT(remove()));
connect(btnAdd, SIGNAL(clicked()), SLOT(add()));
connect(lstSessions, SIGNAL(itemSelectionChanged()), SLOT(select()));
connect(lstSessions, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(clicked(QListWidgetItem*)));
connect(lstSessions, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(clicked(const QPoint&)));
}
void Sessions::add()
{
if (!ledSession->text().isEmpty() && lstSessions->findItems(ledSession->text(), Qt::MatchExactly).empty()) {
QString txt;
for (int i = 0; i < tabWidget->count(); i++)
if (!tabWidget->widget(i)->windowFilePath().isEmpty()) {
if (i >= 1)
txt += "\n";
txt += tabWidget->widget(i)->windowFilePath();
}
if (!txt.isEmpty()) {
QListWidgetItem* item = new QListWidgetItem(ledSession->text(), lstSessions);
item->setData(Qt::UserRole, txt);
item->setFlags(item->flags() | Qt::ItemIsEditable);
ledSession->clear();
}
}
}
void Sessions::remove()
{
QListIterator<QListWidgetItem*> it(lstSessions->selectedItems());
while (it.hasNext())
delete it.next();
}
void Sessions::select()
{
tedSession->clear();
if (lstSessions->currentItem())
tedSession->insertPlainText(lstSessions->currentItem()->data(Qt::UserRole).toString());
}
void Sessions::update()
{
QString txt;
for (int i = 0; i < tabWidget->count(); i++)
if (!tabWidget->widget(i)->windowFilePath().isEmpty()) {
if (i >= 1)
txt += "\n";
txt += tabWidget->widget(i)->windowFilePath();
}
if (!txt.isEmpty()) {
lstSessions->currentItem()->setData(Qt::UserRole, txt);
select();
}
}
Sessions::~Sessions()
{
config->sessions.clear();
for (int i = 0; i < lstSessions->count(); i++)
config->sessions[lstSessions->item(i)->text()] = lstSessions->item(i)->data(Qt::UserRole);
config->sessionSplitter = splitter->saveState();
}