]>
Softwares of Agnibho - ddstorm.git/blob - panes.py
2 This module provides the application panes containing essential
6 Copyright (c) 2015 Agnibho Mondal
9 This file is part of DDStorm.
11 DDStorm is free software: you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
16 DDStorm is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with DDStorm. If not, see <http://www.gnu.org/licenses/>.
25 from PyQt4
import QtGui
, QtCore
27 class Symptoms(QtGui
.QFrame
):
28 ''' Provides the widget for symptoms input '''
30 # List to hold the symptoms
33 # Signal to notify any change in input
34 changed
=QtCore
.pyqtSignal(list)
36 def __init__(self
, auto
):
38 Initiate the symptom input pane. Takes a list of string as
39 argument. The list is used as the auto-complete list during
43 auto - A list of string containing all available symptoms for
46 super(Symptoms
, self
).__init
__()
51 ''' Initiate the user interface '''
52 self
.label
=QtGui
.QLabel("Symptoms")
53 self
.label
.setStyleSheet("font-size:18px")
55 self
.listWidget
=QtGui
.QListWidget(self
)
56 self
.listWidget
.setStyleSheet("font-size:14px")
57 self
.listWidget
.setSelectionMode(4)
59 self
.rm
=QtGui
.QPushButton("Remove")
60 self
.rm
.clicked
.connect(self
.remove
)
62 self
.cl
=QtGui
.QPushButton("Clear All")
63 self
.cl
.clicked
.connect(self
.removeAll
)
65 self
.browse
=QtGui
.QPushButton("Browse Symptoms")
66 self
.browse
.clicked
.connect(self
.browseSymptoms
)
68 self
.add
=QtGui
.QPushButton("Add")
69 self
.add
.clicked
.connect(self
.addItem
)
71 self
.new
=QtGui
.QLineEdit(self
)
72 self
.new
.returnPressed
.connect(self
.addItem
)
73 self
.completer
=QtGui
.QCompleter(self
.auto
)
74 self
.completer
.setCaseSensitivity(0)
75 self
.completer
.setCompletionMode(2)
76 self
.new
.setCompleter(self
.completer
)
78 self
.browser
=SymptomBrowser(self
.auto
)
79 self
.browser
.added
.connect(self
.addItem
)
81 hboxt
=QtGui
.QHBoxLayout()
82 hboxt
.addWidget(self
.new
)
83 hboxt
.addWidget(self
.add
)
84 hboxb
=QtGui
.QHBoxLayout()
85 hboxb
.addWidget(self
.rm
)
86 hboxb
.addWidget(self
.cl
)
87 hboxb
.addWidget(self
.browse
)
88 vbox
=QtGui
.QVBoxLayout()
89 vbox
.addWidget(self
.label
)
91 vbox
.addWidget(self
.listWidget
)
95 def addItem(self
, text
=""):
96 ''' Add a new symptom '''
100 if(text
in self
.sympList
):
101 QtGui
.QMessageBox
.information(self
, "Duplicate Symptom", "'"+text
+"' has already been added to the symptom list.")
102 elif(text
in self
.auto
):
103 QtGui
.QListWidgetItem(text
, self
.listWidget
)
104 self
.sympList
.append(text
)
106 self
.changed
.emit(list(self
.sympList
))
108 QtGui
.QMessageBox
.warning(self
, "Symptom Unvailable", "'"+text
+"' is not available in the current Library.")
110 def remove(self
, all
=False):
111 ''' Remove selected symptoms '''
112 if(len(self
.listWidget
.selectedItems())>0):
113 for item
in self
.listWidget
.selectedItems():
114 self
.sympList
.remove(item
.text())
115 self
.listWidget
.takeItem(self
.listWidget
.row(item
))
116 self
.changed
.emit(list(self
.sympList
))
119 ''' Clear all symptoms '''
120 self
.listWidget
.clear()
122 self
.changed
.emit(list(self
.sympList
))
124 def browseSymptoms(self
):
125 ''' Open the symptom browser '''
129 ''' Return a list of all symptoms '''
133 class SymptomBrowser(QtGui
.QDialog
):
135 Provides a dialog with a list of symptoms for alternative user
138 added
=QtCore
.pyqtSignal(str)
140 def __init__(self
, items
):
141 ''' Initiate the input dialog '''
142 super(SymptomBrowser
, self
).__init
__()
143 self
.setWindowTitle("Choose Symptom")
148 ''' Initiate the dialog interface '''
149 self
.search
=QtGui
.QLineEdit()
150 self
.search
.textChanged
.connect(self
.refresh
)
151 self
.listItems
=QtGui
.QListWidget()
152 self
.listItems
.activated
.connect(self
.sendUp
)
154 layout
=QtGui
.QVBoxLayout(self
)
155 layout
.addWidget(self
.search
)
156 layout
.addWidget(self
.listItems
)
158 self
.listItems
.addItems(self
.items
)
159 self
.search
.setFocus()
162 ''' Refresh the symptom list based on search term '''
163 term
=self
.search
.text()
166 if(term
.lower() in i
.lower()):
168 self
.listItems
.clear()
169 self
.listItems
.addItems(buff
)
172 ''' Emit signal and close when a symptom is selected '''
173 self
.added
.emit(self
.listItems
.currentItem().text())
177 class Differentials(QtGui
.QFrame
):
178 ''' Provides the widget for differential diagnosis output '''
182 ''' Initiate the diagnosis output pane '''
183 super(Differentials
, self
).__init
__()
187 ''' Initiate the user interface '''
188 self
.label
=QtGui
.QLabel("Differential Diagnosis")
189 self
.label
.setStyleSheet("font-size:18px")
190 self
.listWidget
=QtGui
.QListWidget(self
)
191 self
.listWidget
.setStyleSheet("font-size:14px")
192 self
.listWidget
.setSelectionMode(0)
193 box
=QtGui
.QVBoxLayout()
194 box
.addWidget(self
.label
)
195 box
.addWidget(self
.listWidget
)
198 def update(self
, data
):
200 Update the outut pane with updated diagnosis list.
203 data - List of strings containing new list of differential
207 self
.listWidget
.clear()
210 QtGui
.QListWidgetItem(d
, self
.listWidget
)
213 ''' Return a list of current differential diagnosis '''