]> Softwares of Agnibho - ddstorm.git/blob - _symptoms.py
First commit
[ddstorm.git] / _symptoms.py
1 # DDStorm
2 # -------
3 # Copyright (c) 2015 Agnibho Mondal
4 # All rights reserved
5
6 # This file is part of DDStorm.
7
8 # DDStorm is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12
13 # DDStorm is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17
18 # You should have received a copy of the GNU General Public License
19 # along with DDStorm. If not, see <http://www.gnu.org/licenses/>.
20
21 from PyQt4 import QtGui, QtCore
22
23 class Symptoms(QtGui.QFrame):
24 sympList=[]
25 changed=QtCore.pyqtSignal(list)
26 def __init__(self, auto):
27 super(Symptoms, self).__init__()
28 self.auto=auto
29 self.initUI()
30
31 def initUI(self):
32 self.label=QtGui.QLabel("Symptoms")
33 self.label.setStyleSheet("font-size:18px")
34
35 self.listWidget=QtGui.QListWidget(self)
36 self.listWidget.setStyleSheet("font-size:14px")
37 self.listWidget.setSelectionMode(4)
38
39 self.rm=QtGui.QPushButton("Remove")
40 self.rm.clicked.connect(self.remove)
41
42 self.cl=QtGui.QPushButton("Clear All")
43 self.cl.clicked.connect(self.removeAll)
44
45 self.browse=QtGui.QPushButton("Browse Symptoms")
46 self.browse.clicked.connect(self.browseSymptoms)
47
48 self.add=QtGui.QPushButton("Add")
49 self.add.clicked.connect(self.addItem)
50
51 self.new=QtGui.QLineEdit(self)
52 self.new.returnPressed.connect(self.addItem)
53 self.completer=QtGui.QCompleter(self.auto)
54 self.completer.setCaseSensitivity(0)
55 self.completer.setCompletionMode(2)
56 self.new.setCompleter(self.completer)
57
58 self.browser=SymptomBrowser(self.auto)
59 self.browser.added.connect(self.addItem)
60
61 hboxt=QtGui.QHBoxLayout()
62 hboxt.addWidget(self.new)
63 hboxt.addWidget(self.add)
64 hboxb=QtGui.QHBoxLayout()
65 hboxb.addWidget(self.rm)
66 hboxb.addWidget(self.cl)
67 hboxb.addWidget(self.browse)
68 vbox=QtGui.QVBoxLayout()
69 vbox.addWidget(self.label)
70 vbox.addLayout(hboxt)
71 vbox.addWidget(self.listWidget)
72 vbox.addLayout(hboxb)
73 self.setLayout(vbox)
74
75 def addItem(self, text=""):
76 if(not text):
77 text=self.new.text()
78 if(len(text)>0):
79 if(text in self.sympList):
80 QtGui.QMessageBox.information(self, "Duplicate Symptom", "'"+text+"' has already been added to the symptom list.")
81 elif(text in self.auto):
82 QtGui.QListWidgetItem(text, self.listWidget)
83 self.sympList.append(text)
84 self.new.clear()
85 self.changed.emit(list(self.sympList))
86 else:
87 QtGui.QMessageBox.warning(self, "Symptom Unvailable", "'"+text+"' is not available in the current Library.")
88
89 def remove(self, all=False):
90 if(len(self.listWidget.selectedItems())>0):
91 for item in self.listWidget.selectedItems():
92 self.sympList.remove(item.text())
93 self.listWidget.takeItem(self.listWidget.row(item))
94 self.changed.emit(list(self.sympList))
95
96 def removeAll(self):
97 self.listWidget.clear()
98 del self.sympList[:]
99 self.changed.emit(list(self.sympList))
100
101 def browseSymptoms(self):
102 self.browser.exec_()
103
104 def getList(self):
105 return self.sympList
106
107 class SymptomBrowser(QtGui.QDialog):
108 added=QtCore.pyqtSignal(str)
109 def __init__(self, items):
110 super(SymptomBrowser, self).__init__()
111 self.setWindowTitle("Choose Symptom")
112 self.items=items
113 self.initUI()
114
115 def initUI(self):
116 self.search=QtGui.QLineEdit()
117 self.search.textChanged.connect(self.refresh)
118 self.listItems=QtGui.QListWidget()
119 self.listItems.activated.connect(self.sendUp)
120
121 layout=QtGui.QVBoxLayout(self)
122 layout.addWidget(self.search)
123 layout.addWidget(self.listItems)
124
125 self.listItems.addItems(self.items)
126 self.search.setFocus()
127
128 def refresh(self):
129 term=self.search.text()
130 buff=[]
131 for i in self.items:
132 if(term.lower() in i.lower()):
133 buff.append(i)
134 self.listItems.clear()
135 self.listItems.addItems(buff)
136
137 def sendUp(self):
138 self.added.emit(self.listItems.currentItem().text())
139 self.close()