]> git.zarvox.org Git - wp3.git/blob - editperson.py
53808e5d11cfebf4fe43e5feb1afae1b78ed814e
[wp3.git] / editperson.py
1 from PyQt4.QtCore import *
2 from PyQt4.QtGui import *
3
4 class EditPerson(QDialog):
5         def __init__(self, parent=None, db=None):
6                 QDialog.__init__(self,parent)
7                 self.db = db
8                 self.setWindowTitle("Edit records")
9                 self.toplayout = QHBoxLayout() # Master layout
10                 
11                 self.leftpanel = QVBoxLayout() # Contains user search and select
12                 self.search_label = QLabel("F&ilter:")
13                 self.search_bar = QLineEdit()
14                 self.search_label.setBuddy(self.search_bar)
15                 self.searchpair = QHBoxLayout()
16                 self.searchpair.addWidget(self.search_label)
17                 self.searchpair.addWidget(self.search_bar)
18                 self.persontable = QLabel("<center>Table of people goes here</center>")
19                 self.leftpanel.addLayout(self.searchpair)
20                 self.leftpanel.addWidget(self.persontable)
21                 
22                 self.rightpanel = QVBoxLayout() # Contains fields and buttons
23                 self.setupForm()
24
25
26                 self.rightpanel.addLayout(self.formlayout)
27                 self.rightpanel.addLayout(self.buttonlayout)
28
29                 self.toplayout.addLayout(self.leftpanel)
30                 self.toplayout.addSpacing(10)
31                 self.toplayout.addLayout(self.rightpanel)
32
33                 self.setLayout(self.toplayout)
34                 self.setupActions()
35                 self.resize(800,600)
36                 self.show()
37                 
38
39         def setupForm(self):
40                 # Text labels
41                 self.netid_lab = QLabel("NetID:")
42                 self.year_lab = QLabel("Year:")
43                 self.month_lab = QLabel("Month:")
44                 self.day_lab = QLabel("Day:")
45                 self.firstname_lab = QLabel("Preferred name:")
46                 self.surname_lab = QLabel("Last name:")
47                 self.email_lab = QLabel("Email:")
48                 self.phone_lab = QLabel("Phone:")
49                 self.major_lab = QLabel("Major:")
50                 self.hometown_lab = QLabel("Hometown:")
51                 self.room_lab = QLabel("Room number:")
52                 self.bday_lab = QLabel("Birthday:")
53                 self.dorm_lab = QLabel("Dorm:")
54                 self.photo = QLabel("Photo goes here")
55                 self.photo.setScaledContents(True)
56                 self.currentimage = QImage()
57                 self.displayimage = QImage()
58                 self.displaypixmap = QPixmap()
59                 self.photo.setAlignment(Qt.AlignCenter)
60                 self.pb_changephoto = QPushButton("Select &photo")
61                 self.pb_changephoto.setEnabled(True)
62                 # Personal info
63                 self.surname = QLineEdit()
64                 self.firstname = QLineEdit()
65                 self.phone = QLineEdit()
66                 self.email = QLineEdit()
67                 self.major = QLineEdit()
68                 self.netid = QLineEdit()
69                 # Birthday
70                 self.year = QComboBox()
71                 self.month = QComboBox()
72                 self.day = QComboBox()
73                 # Residence locations
74                 self.dorm = QComboBox()
75                 self.room = QLineEdit()
76                 # Fill the comboboxes with values, set valid field types
77                 years = QStringList(["1987","1988","1989","1990","1991","1992","1993","1994"])
78                 months = QStringList(["January","February","March","April","May","June","July","August","September","October","November","December"])
79                 days = QStringList(["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"])
80                 dorms = QStringList(["Clements","Lechner","McFadden"])
81                 self.year.addItems(years)
82                 self.month.addItems(months)
83                 self.day.addItems(days)
84                 self.dorm.addItems(dorms)
85                 self.phone.setInputMask("(999)-999-9999")
86                 self.major.setMaxLength(4)
87                 self.room.setMaxLength(3)
88                 # Create and fill the UI
89                 self.formlayout = QGridLayout()
90                 self.bday_layout = QHBoxLayout()
91                 self.bday_layout.addWidget(self.year)
92                 self.bday_layout.addWidget(self.month)
93                 self.bday_layout.addWidget(self.day)
94                 self.formlayout.addWidget(self.netid_lab, 0, 0)
95                 self.formlayout.addWidget(self.netid, 0, 1)
96                 self.formlayout.addWidget(self.firstname_lab, 1, 0)
97                 self.formlayout.addWidget(self.firstname, 1, 1)
98                 self.formlayout.addWidget(self.surname_lab, 2, 0)
99                 self.formlayout.addWidget(self.surname, 2, 1)
100                 self.formlayout.addWidget(self.email_lab, 3, 0)
101                 self.formlayout.addWidget(self.email, 3, 1)
102                 self.formlayout.addWidget(self.phone_lab, 4, 0)
103                 self.formlayout.addWidget(self.phone, 4, 1)
104                 self.formlayout.addWidget(self.bday_lab,5,0)
105                 self.formlayout.addLayout(self.bday_layout,5,1)
106                 self.formlayout.addWidget(self.major_lab, 6, 0)
107                 self.formlayout.addWidget(self.major, 6, 1)
108                 self.formlayout.addWidget(self.dorm_lab, 7, 0)
109                 self.formlayout.addWidget(self.dorm, 7, 1)
110                 self.formlayout.addWidget(self.room_lab, 8, 0)
111                 self.formlayout.addWidget(self.room, 8, 1)
112                 self.formlayout.addWidget(self.photo,9,0,1,2)
113                 self.formlayout.addWidget(self.pb_changephoto,10,0,1,2)
114                 self.buttonlayout = QHBoxLayout()
115                 self.pb_cancel = QPushButton("&Cancel")
116                 self.pb_save = QPushButton("&Save")
117                 self.pb_saveclose = QPushButton("Save && Clos&e")
118                 self.pb_reset = QPushButton("&Reset")
119                 self.pb_save.setEnabled(False)
120                 self.pb_saveclose.setEnabled(False)
121                 self.pb_reset.setEnabled(False)
122                 self.buttonlayout.addWidget(self.pb_reset)
123                 self.buttonlayout.addWidget(self.pb_cancel)
124                 self.buttonlayout.addWidget(self.pb_save)
125                 self.buttonlayout.addWidget(self.pb_saveclose)
126         def setupActions(self):
127                 # Update filtered table
128                 QObject.connect(self.search_bar, SIGNAL("textChanged(QString)"), self.updateTable )
129                 # Map buttons to actions
130                 QObject.connect(self.pb_reset, SIGNAL("clicked()"), self.resetPressed )
131                 QObject.connect(self.pb_cancel, SIGNAL("clicked()"), self.closePressed )
132                 QObject.connect(self.pb_saveclose, SIGNAL("clicked()"), self.saveClosePressed )
133                 QObject.connect(self.pb_save, SIGNAL("clicked()"), self.savePressed )
134                 QObject.connect(self.pb_changephoto, SIGNAL("clicked()"), self.changePhoto )
135                 # Changes to the record enable buttons
136                 QObject.connect(self.netid, SIGNAL("textChanged(QString)"), self.formChanged )
137                 QObject.connect(self.firstname, SIGNAL("textChanged(QString)"), self.formChanged )
138                 QObject.connect(self.surname, SIGNAL("textChanged(QString)"), self.formChanged )
139                 QObject.connect(self.email, SIGNAL("textChanged(QString)"), self.formChanged )
140                 QObject.connect(self.phone, SIGNAL("textChanged(QString)"), self.formChanged )
141                 QObject.connect(self.major, SIGNAL("textChanged(QString)"), self.formChanged )
142                 QObject.connect(self.room, SIGNAL("textChanged(QString)"), self.formChanged )
143                 QObject.connect(self.year, SIGNAL("currentIndexChanged(int)"), self.formChanged )
144                 QObject.connect(self.month, SIGNAL("currentIndexChanged(int)"), self.formChanged )
145                 QObject.connect(self.day, SIGNAL("currentIndexChanged(int)"), self.formChanged )
146                 QObject.connect(self.dorm, SIGNAL("currentIndexChanged(int)"), self.formChanged )
147
148         def formChanged(self):
149                 # Do this only if a record has been selected
150                 self.pb_reset.setEnabled(True)
151                 self.pb_save.setEnabled(True)
152                 self.pb_saveclose.setEnabled(True)
153         def updateTable(self):
154                 print "Text changed"
155         def resetPressed(self):
156                 self.fillForm([])
157                 self.pb_reset.setEnabled(False)
158                 self.pb_save.setEnabled(False)
159                 self.pb_saveclose.setEnabled(False)
160                 print "Resetting form"
161         def closePressed(self):
162                 print "Closing"
163                 self.reject()
164         def savePressed(self):
165                 print "Saving"
166                 self.pb_reset.setEnabled(False)
167                 self.pb_save.setEnabled(False)
168                 self.pb_saveclose.setEnabled(False)
169         def saveClosePressed(self):
170                 self.savePressed()
171                 self.accept()
172         def changePhoto(self):
173                 fileName = QFileDialog.getOpenFileName(self, "Select Photo", ".", "Images (*.jpg *.png)" )
174                 if not fileName.isEmpty():
175                         print "opening", fileName
176                         self.currentimage = QImage()
177                         self.currentimage.load(fileName)
178                         self.displayimage = self.currentimage.scaled(self.photo.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
179                         self.displaypixmap = QPixmap.fromImage(self.displayimage)
180                         self.photo.setPixmap(self.displaypixmap)
181
182         def fillForm(self, args):
183                 print "Filling form"
184
185         def recordSelected(self):
186                 print "New record selected"
187                 self.fillForm([])
188                 self.pb_changephoto.setEnabled(True)
189
190
191 if __name__ == "__main__":
192         a = QApplication([""])
193         w = EditPerson()
194         a.exec_()