cdb1305e4ca6419f1aec5addff973f11f9eecb97
2 # class for main window
5 import biacv_mainwindow_ui
as bui
6 import biacv_lang
as lang
7 import biacv_data
as data
9 class Biacv_mainwindow (PyQt4
.QtGui
.QMainWindow
, bui
.Ui_biacv_mainwindow
):
11 PyQt4
.QtGui
.QMainWindow
.__init
__ (self
)
13 self
.currentfile
= None
14 self
.ismodified
= False
16 # function to save a file
17 def on_file_save (self
):
18 # only save modified file
19 if self
.ismodified
is False:
22 # if no current file get file name from file save dialog
23 if self
.currentfile
is None:
24 self
.currentfile
= PyQt4
.QtGui
.QFileDialog
.getSaveFileName (self
,
27 if self
.currentfile
<> "":
28 mydata
= self
.get_document_data ()
29 mydata
.save_data (self
.currentfile
)
30 self
.ismodified
= False
32 self
.currentfile
= None
34 mydata
= self
.get_document_data ()
35 mydata
.save_data (self
.currentfile
)
36 self
.ismodified
= False
38 # function to set document data from the GUI
39 def get_document_data (self
):
40 docdata
= data
.BiaCVData ()
42 # set the document title
43 docdata
.set_document_title (unicode (self
.title
.text ().toUtf8 (), "utf-8"))
45 # get the marital status string from check box
46 if self
.married
.isChecked ():
48 elif self
.single
.isChecked ():
53 docdata
.set_personal_info (
54 unicode (self
.nametitle
.lineEdit ().text ().toUtf8 (), "utf-8"),
55 unicode (self
.firstname
.text ().toUtf8 (), "utf-8"),
56 unicode (self
.lastname
.text ().toUtf8 (), "utf-8"),
57 unicode (self
.dateofbirth
.date().toString ("dd MMM, yyyy"), "utf-8"),
58 unicode (self
.street
.text ().toUtf8 (), "utf-8"),
59 unicode (self
.area
.text ().toUtf8 (), "utf-8"),
60 unicode (self
.city
.text ().toUtf8 (), "utf-8"),
61 unicode (self
.areacode
.text ().toUtf8 (), "utf-8"),
62 unicode (self
.countrycode_landline
.text ().toUtf8 (), "utf-8"),
63 unicode (self
.telephone
.text ().toUtf8 (), "utf-8"),
64 unicode (self
.countrycode_mobile
.text ().toUtf8 (), "utf-8"),
65 unicode (self
.mobilenumber
.text ().toUtf8 (), "utf-8"),
66 unicode (self
.email
.text ().toUtf8 (), "utf-8"),
69 # get the list of educational qualifications from the treewidget
72 while i
< self
.educationlist
.topLevelItemCount ():
73 curitem
= self
.educationlist
.topLevelItem (i
)
75 curdict
["degree"] = unicode (curitem
.text (0).toUtf8 (), "utf-8")
76 curdict
["graduation"] = unicode (curitem
.text (1).toUtf8 (), "utf-8")
77 curdict
["institution"] = unicode (curitem
.text (2).toUtf8 (), "utf-8")
78 curdict
["university"] = unicode (curitem
.text (3).toUtf8 (), "utf-8")
79 curdict
["grade"] = unicode (curitem
.text (4).toUtf8 (), "utf-8")
80 curdict
["percentage"] = float (curitem
.text (5))
81 education
.append (curdict
)
84 # set the educational qualifications
85 docdata
.set_educational_qualifications (education
)
87 # get the list of professional history from the treewidget
90 while i
< self
.professionlist
.topLevelItemCount ():
91 curitem
= self
.professionlist
.topLevelItem (i
)
93 curdict
["jobtitle"] = unicode (curitem
.text (0).toUtf8 (), "utf-8")
94 curdict
["joindate"] = unicode (curitem
.text (1), "utf-8")
95 curdict
["leavedate"] = unicode (curitem
.text (2), "utf-8")
96 curdict
["organization"] = unicode (curitem
.text (3).toUtf8 (), "utf-8")
97 curdict
["additionalinfo"] = unicode (curitem
.text (4).toUtf8 (), "utf-8")
98 professional
.append (curdict
)
101 # set the professional qualifications
102 docdata
.set_professional_history (professional
)
104 # set the career objectives
105 shorttermobjectives
= unicode (self
.shorttermcareer
.toPlainText ().toUtf8 (), "utf-8").splitlines ()
106 longtermgoals
= unicode (self
.longtermgoals
.toPlainText ().toUtf8 (), "utf-8").splitlines ()
108 docdata
.set_career_objectives (shorttermobjectives
, longtermgoals
)
113 while i
< self
.skillslist
.topLevelItemCount ():
114 curitem
= self
.skillslist
.topLevelItem (i
)
116 curdict
["skilltitle"] = unicode (curitem
.text (0).toUtf8 (), "utf-8")
117 curdict
["skilldesc"] = unicode (curitem
.text (1).toUtf8 (), "utf-8")
118 skills
.append (curdict
)
120 # set the list of skills
121 docdata
.set_skillsets (skills
)
123 # get the list of languages
126 while i
< self
.languageslist
.topLevelItemCount ():
127 curitem
= self
.languageslist
.topLevelItem (i
)
129 curdict
["language"] = unicode (curitem
.text (0).toUtf8 (), "utf-8")
130 curdict
["canspeak" ] = (curitem
.text (1) == "True")
131 curdict
["canreadwrite"] = (curitem
.text (2) == "True")
132 curdict
["isproficient"] = (curitem
.text (3) == "True")
133 langsknown
.append (curdict
)
136 additionalinformation
= unicode (self
.additionalinformation
.toPlainText ().toUtf8 (), "utf-8")
138 docdata
.set_additional_information (langsknown
, additionalinformation
)
142 # function to reset personal information data in the GUI
143 def reset_personal_info (self
):
144 self
.nametitle
.setEditText ("")
145 self
.firstname
.setText ("")
146 self
.lastname
.setText ("")
147 self
.dateofbirth
.setDate (PyQt4
.QtCore
.QDate (1970, 1, 1))
148 self
.street
.setText ("")
149 self
.area
.setText ("")
150 self
.city
.setText ("")
151 self
.countrycode_landline
.setText ("")
152 self
.telephone
.setText ("")
153 self
.countrycode_mobile
.setText ("")
154 self
.mobilenumber
.setText ("")
155 self
.email
.setText ("")
156 self
.areacode
.setText ("")
157 self
.unspecified
.setChecked (True)
159 # function to clear professional history in the GUI
160 def reset_professional_history (self
):
161 self
.reset_profession_fields ()
162 self
.professionlist
.clear ()
164 # function to clear educational qualifications in the GUI
165 def reset_educational_qualifications (self
):
166 self
.reset_education_fields ()
167 self
.educationlist
.clear ()
169 # function to clear career objectives data in the GUI
170 def reset_career_objectives (self
):
171 self
.shorttermcareer
.setPlainText ("")
172 self
.longtermgoals
.setPlainText ("")
174 # function to clear skill sets data in the GUI
175 def reset_skillsets_info (self
):
176 self
.reset_skillset_fields ()
177 self
.skillslist
.clear ()
179 # function to clear additional information data in the GUI
180 def reset_additional_info (self
):
181 self
.reset_language_fields ()
182 self
.languageslist
.clear ()
183 self
.additionalinformation
.setPlainText ("")
185 # function to clear all the fields and reset them to defaults
186 def new_document (self
):
187 # first clear the individual record fields in the tabs
188 self
.reset_language_fields ()
189 self
.reset_skillset_fields ()
191 # clear document data
192 self
.title
.setText ("")
194 self
.reset_personal_info ()
195 self
.reset_professional_history ()
196 self
.reset_educational_qualifications ()
197 self
.reset_career_objectives ()
198 self
.reset_skillsets_info ()
199 self
.reset_additional_info ()
201 # set the page to first page
202 self
.pages
.setCurrentIndex (0)
204 # set current file to none and modified to false
205 self
.currentfile
= None
206 self
.ismodified
= False
208 # file new action is triggered
209 def on_file_new (self
):
210 # if the previous document is modified
211 # as if it should be discarded
212 if self
.ismodified
is True:
213 ans
= PyQt4
.QtGui
.QMessageBox
.question (self
, lang
.CONFIRM
,
214 lang
.CONFIRM_DISCARD_SAVE
,
215 PyQt4
.QtGui
.QMessageBox
.Yes
, PyQt4
.QtGui
.QMessageBox
.No
)
216 if ans
== PyQt4
.QtGui
.QMessageBox
.Yes
:
218 # if not modified then simply create a new document
222 # when the document is modified
223 def on_document_modified (self
):
224 # set the document modified flag
225 self
.ismodified
= True
227 # update a language in the list of languages
228 def on_update_lang (self
):
229 # get the selected language
230 selitems
= self
.languageslist
.selectedItems ()
232 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_NO_SELECTION
)
234 # check if the language string is not empty
235 if self
.language
.text () == "":
236 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_REQ_MISSING
)
238 selitem
= selitems
[0]
239 selitem
.setText (0, self
.language
.text ())
240 selitem
.setText (1, str (self
.canspeak
.isChecked ()))
241 selitem
.setText (2, str (self
.canreadwrite
.isChecked ()))
242 selitem
.setText (3, str (self
.isproficient
.isChecked ()))
244 # modified the document
245 self
.ismodified
= True
247 # selecting a language from the list of languages
248 def on_select_lang (self
):
249 # set the language fields from the selected item
250 self
.set_language_fields ()
252 # delete a language from the list of languages known
253 def on_delete_lang (self
):
254 # get selected language
255 selitems
= self
.languageslist
.selectedItems ()
257 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_DELETE
, lang
.ERROR_REQ_MISSING
)
260 ans
= PyQt4
.QtGui
.QMessageBox
.question (self
, lang
.CONFIRM
, lang
.CONFIRM_DELETE
,
261 PyQt4
.QtGui
.QMessageBox
.Yes
, PyQt4
.QtGui
.QMessageBox
.No
)
262 if ans
== PyQt4
.QtGui
.QMessageBox
.Yes
:
263 for item
in selitems
:
264 self
.languageslist
.takeTopLevelItem (self
.languageslist
.indexOfTopLevelItem (item
))
266 self
.reset_language_fields ()
267 # set the modified flag
268 self
.ismodified
= True
270 # add a language to the list of languages known
271 def on_add_lang (self
):
272 # check if the language is set
273 if self
.language
.text () == "":
274 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_ADD
, lang
.ERROR_REQ_MISSING
)
276 langitem
= PyQt4
.QtGui
.QTreeWidgetItem (
278 self
.language
.text (),
279 str (self
.canspeak
.isChecked ()),
280 str (self
.canreadwrite
.isChecked ()),
281 str (self
.isproficient
.isChecked ())
284 self
.languageslist
.addTopLevelItem (langitem
)
285 self
.reset_language_fields ()
287 # set the modified flag
288 self
.ismodified
= True
290 # set the language fields from the selected item
291 def set_language_fields (self
):
292 selitems
= self
.languageslist
.selectedItems ()
295 selitem
= selitems
[0]
296 self
.language
.setText (selitem
.text (0))
297 self
.canspeak
.setChecked (selitem
.text (1) == "True")
298 self
.canreadwrite
.setChecked (selitem
.text(2) == "True")
299 self
.isproficient
.setChecked (selitem
.text(3) == "True")
301 # reset the language fields
302 def reset_language_fields (self
):
303 self
.language
.setText ("")
304 self
.canspeak
.setChecked (True)
305 self
.canreadwrite
.setChecked (False)
306 self
.isproficient
.setChecked (False)
308 # update the skill set button event
309 def on_update_skill (self
):
310 # get the selected item
311 selitems
= self
.skillslist
.selectedItems ()
313 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_NO_SELECTION
)
315 if self
.skillsettitle
.text () == "":
316 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_REQ_MISSING
)
318 selitem
= selitems
[0]
320 selitem
.setText (0, self
.skillsettitle
.text ())
321 selitem
.setText (1, self
.skilldescription
.toPlainText ())
322 # set the modified flag
323 self
.ismodified
= True
325 # selecting a skill from the list event
326 def on_select_skill (self
):
327 self
.set_skill_fields ()
329 # set the skill fields from the selected skill from the list
330 def set_skill_fields (self
):
331 # get the selected items
332 selitems
= self
.skillslist
.selectedItems ()
335 selitem
= selitems
[0]
336 self
.skillsettitle
.setText (selitem
.text (0))
337 self
.skilldescription
.setPlainText (selitem
.text (1))
339 # delete skill set button is clicked
340 def on_delete_skill (self
):
341 # get the selected items
342 selitems
= self
.skillslist
.selectedItems ()
344 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_DELETE
, lang
.ERROR_NO_SELECTION
)
347 ans
= PyQt4
.QtGui
.QMessageBox
.question (self
, lang
.CONFIRM
, lang
.CONFIRM_DELETE
,
348 PyQt4
.QtGui
.QMessageBox
.Yes
, PyQt4
.QtGui
.QMessageBox
.No
)
350 if ans
== PyQt4
.QtGui
.QMessageBox
.Yes
:
351 for item
in selitems
:
352 self
.skillslist
.takeTopLevelItem (self
.skillslist
.indexOfTopLevelItem (item
))
354 self
.reset_skillset_fields ()
355 # set the modified flag
356 self
.ismodified
= True
358 # add skill set button is clicked
359 def on_add_skill (self
):
360 # if the skill title is blank
361 if self
.skillsettitle
.text () == "":
362 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_ADD
, lang
.ERROR_REQ_MISSING
)
364 skillitem
= PyQt4
.QtGui
.QTreeWidgetItem (
366 self
.skillsettitle
.text (),
367 self
.skilldescription
.toPlainText ()
370 self
.skillslist
.addTopLevelItem (skillitem
)
371 self
.reset_skillset_fields ()
372 # set the modified flag
373 self
.ismodified
= True
375 # clear the skill set fields
376 def reset_skillset_fields (self
):
377 self
.skillsettitle
.setText ("")
378 self
.skilldescription
.setPlainText ("")
380 # update professional history button is clicked
381 def on_update_profession (self
):
382 # get the selected item
383 selitems
= self
.professionlist
.selectedItems ()
385 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_NO_SELECTION
)
387 selitem
= selitems
[0]
388 # if designation is not set
389 if self
.designation
.text () == "":
390 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_REQ_MISSING
)
392 # if currently employed in that position, leaving date is to be disabled
393 # and set to "current"
394 if self
.currentemployment
.isChecked ():
395 leavedatestr
= "current"
397 # if the leaving date is < join date
398 if self
.leavedate
.date () < self
.joindate
.date ():
399 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_ADD
, lang
.ERROR_DATE
)
401 leavedatestr
= self
.leavedate
.date ().toString ("dd MMM, yyyy")
403 selitem
.setText (0, self
.designation
.text ())
404 selitem
.setText (1, self
.joindate
.date ().toString ("dd MMM, yyyy"))
405 selitem
.setText (2, leavedatestr
)
406 selitem
.setText (3, self
.organization
.text ())
407 selitem
.setText (4, self
.additionalinfo
.text ())
408 # set the modified flag
409 self
.ismodified
= True
411 # delete professional history button is clicked
412 def on_delete_profession (self
):
413 # get the selected items
414 selitems
= self
.professionlist
.selectedItems ()
416 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_DELETE
, lang
.ERROR_NO_SELECTION
)
419 ans
= PyQt4
.QtGui
.QMessageBox
.question (self
, lang
.CONFIRM
, lang
.CONFIRM_DELETE
,
420 PyQt4
.QtGui
.QMessageBox
.Yes
, PyQt4
.QtGui
.QMessageBox
.No
)
422 if ans
== PyQt4
.QtGui
.QMessageBox
.Yes
:
423 for item
in selitems
:
424 self
.professionlist
.takeTopLevelItem (self
.professionlist
.indexOfTopLevelItem (item
))
425 self
.reset_profession_fields ()
426 # set the modified flag
427 self
.ismodified
= True
429 # add professional history button is clicked
430 def on_add_profession (self
):
431 if self
.designation
.text () == "":
432 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_ADD
, lang
.ERROR_REQ_MISSING
)
434 # if currently employed in that position, leaving date is to be disabled
435 # and set to "current"
436 if self
.currentemployment
.isChecked ():
437 leavedatestr
= "current"
439 # if the leaving date is < join date
440 if self
.leavedate
.date () < self
.joindate
.date ():
441 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_ADD
, lang
.ERROR_DATE
)
443 leavedatestr
= self
.leavedate
.date ().toString ("dd MMM, yyyy")
445 professionitem
= PyQt4
.QtGui
.QTreeWidgetItem (
447 self
.designation
.text (),
448 self
.joindate
.date ().toString ("dd MMM, yyyy"),
450 self
.organization
.text (),
451 self
.additionalinfo
.text ()
455 self
.professionlist
.addTopLevelItem (professionitem
)
457 self
.reset_profession_fields ()
458 # set the modified flag
459 self
.ismodified
= True
461 # when selection of profession list is changed
462 def on_select_profession (self
):
463 self
.set_profession_fields ()
465 # set the profession fields from the selected item in profession list
466 def set_profession_fields (self
):
467 selitems
= self
.professionlist
.selectedItems ()
470 selitem
= selitems
[0]
471 self
.designation
.setText (selitem
.text (0))
472 self
.joindate
.setDate (PyQt4
.QtCore
.QDate
.fromString (selitem
.text(1), "dd MMM, yyyy"))
473 if selitem
.text (2) == "current":
474 self
.leavedate
.setEnabled (False)
475 self
.currentemployment
.setChecked (True)
477 self
.leavedate
.setDate (PyQt4
.QtCore
.QDate
.fromString (selitem
.text (2), "dd MMM, yyyy"))
478 self
.leavedate
.setEnabled (True)
479 self
.currentemployment
.setChecked (False)
481 self
.organization
.setText (selitem
.text (3))
482 self
.additionalinfo
.setText (selitem
.text (4))
484 def reset_profession_fields (self
):
485 self
.designation
.setText ("")
486 self
.joindate
.setDate (PyQt4
.QtCore
.QDate (2000, 1, 1))
487 self
.leavedate
.setDate (PyQt4
.QtCore
.QDate (2003, 1, 1))
488 self
.currentemployment
.setChecked (False)
489 self
.organization
.setText ("")
490 self
.additionalinfo
.setText ("")
492 # current employment check box is changed
493 def on_change_currentemployment (self
, val
):
495 self
.leavedate
.setEnabled (False)
497 self
.leavedate
.setEnabled (True)
499 # delete educational qualification
500 def on_delete_education (self
):
501 # get the selected items in the education list
502 selitems
= self
.educationlist
.selectedItems ()
503 # if no items are selected
505 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_DELETE
, lang
.ERROR_NO_SELECTION
)
506 # delete the items after confirmation
508 ans
= PyQt4
.QtGui
.QMessageBox
.question (self
, lang
.CONFIRM
, lang
.CONFIRM_DELETE
,
509 PyQt4
.QtGui
.QMessageBox
.Yes
, PyQt4
.QtGui
.QMessageBox
.No
)
510 if ans
== PyQt4
.QtGui
.QMessageBox
.Yes
:
511 # remove the item selected
512 for item
in selitems
:
513 self
.educationlist
.takeTopLevelItem (self
.educationlist
.indexOfTopLevelItem (item
))
514 self
.reset_education_fields ()
515 # set the modified flag
516 self
.ismodified
= True
518 # selection is changed
519 def on_select_education (self
):
520 self
.set_education_fields ()
522 # update educational qualification button
523 def on_update_education (self
):
524 selitems
= self
.educationlist
.selectedItems ()
525 # if no item is selected
527 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_NO_SELECTION
)
529 # if the qualification title is not set
530 if self
.degree_name
.text () == "":
531 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_UPDATE
, lang
.ERROR_REQ_MISSING
)
533 selitem
= selitems
[0]
535 selitem
.setText (0, self
.degree_name
.text ())
536 selitem
.setText (1, self
.yearofpassing
.date ().toString ("MMM, yyyy"))
537 selitem
.setText (2, self
.institution
.text ())
538 selitem
.setText (3, self
.university
.text ())
539 selitem
.setText (4, self
.grade
.text ())
540 selitem
.setText (5, str (self
.percentage
.value ()))
541 # set the modified flag
542 self
.ismodified
= True
544 # add educational qualification button
545 def on_add_education (self
):
546 # check if the qualification title is set
547 if self
.degree_name
.text () == "":
548 PyQt4
.QtGui
.QMessageBox
.critical (self
, lang
.ERROR_ADD
, lang
.ERROR_REQ_MISSING
)
550 educationitem
= PyQt4
.QtGui
.QTreeWidgetItem ([
551 self
.degree_name
.text (),
552 self
.yearofpassing
.date ().toString ("MMM, yyyy"),
553 self
.institution
.text (),
554 self
.university
.text (),
556 str (self
.percentage
.value ())
558 self
.educationlist
.addTopLevelItem (educationitem
)
560 self
.reset_education_fields ()
561 # set the modified flag
562 self
.ismodified
= True
564 # set fields in the education tab from current selected item
565 def set_education_fields (self
):
566 selitems
= self
.educationlist
.selectedItems ()
569 selitem
= selitems
[0]
570 # set the fields to the data in the selected item in the list
571 self
.degree_name
.setText (selitem
.text (0))
572 self
.yearofpassing
.setDate (PyQt4
.QtCore
.QDate
.fromString (selitem
.text(1), "MMM, yyyy"))
573 self
.institution
.setText (selitem
.text (2))
574 self
.university
.setText (selitem
.text (3))
575 self
.grade
.setText (selitem
.text(4))
576 self
.percentage
.setValue (self
.percentage
.valueFromText (selitem
.text(5)))
578 # reset fields in the education tab
579 def reset_education_fields (self
):
580 self
.degree_name
.setText ("")
581 self
.yearofpassing
.setDate (PyQt4
.QtCore
.QDate (1988, 1, 1))
582 self
.institution
.setText ("")
583 self
.university
.setText ("")
584 self
.grade
.setText ("")
585 self
.percentage
.setValue (50.0)