X-Git-Url: https://harishankar.org/repos/?p=biacv.git;a=blobdiff_plain;f=biacv_mainwindow.py;h=ec74b822d540923ec1c166ea89652a835cd82cca;hp=cdb1305e4ca6419f1aec5addff973f11f9eecb97;hb=HEAD;hpb=81bc09aa468845dfc26265a59bbd512c0d2eaa07 diff --git a/biacv_mainwindow.py b/biacv_mainwindow.py index cdb1305..ec74b82 100644 --- a/biacv_mainwindow.py +++ b/biacv_mainwindow.py @@ -2,16 +2,136 @@ # class for main window import PyQt4 +import sys + import biacv_mainwindow_ui as bui import biacv_lang as lang import biacv_data as data +import biacv_exporter as exporter class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): def __init__ (self): PyQt4.QtGui.QMainWindow.__init__ (self) + self.show () self.setupUi (self) self.currentfile = None self.ismodified = False + self.setWindowTitle ("BiaCV - untitled") + + # on window closing + def closeEvent (self, event): + if self.ismodified is True: + ans = PyQt4.QtGui.QMessageBox.question (self, lang.CONFIRM, lang.CONFIRM_DISCARD_SAVE, + PyQt4.QtGui.QMessageBox.Yes, PyQt4.QtGui.QMessageBox.No) + # ignore event if not confirmed + if ans <> PyQt4.QtGui.QMessageBox.Yes: + event.ignore () + + # on help about dialog box + def on_help_about (self): + PyQt4.QtGui.QMessageBox.about (self, lang.ABOUT_TITLE, lang.ABOUT_TEXT) + + # on file exit + def on_exit (self): + # call the close event + self.close() + + # on file export - export current document to any external format based on + # a template + def on_file_export (self): + # get the template directory + templatedir = PyQt4.QtGui.QFileDialog.getExistingDirectory (self, + lang.OPEN_TEMPLATE_TITLE) + if templatedir == "": + return + + # create a new exporter object + exp = exporter.BiaCVExporter () + + # set the document data + exp.set_data (self.get_document_data ().data) + + # set the template directory + exp.set_template_directory (unicode (templatedir.toUtf8(), "utf-8")) + + # get the output file path + outputfile = PyQt4.QtGui.QFileDialog.getSaveFileName (self, + exp.exporter_name, filter=exp.export_filter) + + if outputfile == "": + return + + + # set the output file + exp.set_output (unicode (outputfile.toUtf8(), "utf-8")) + + # carry out the export function + exp.export () + + # function to open a file + def on_file_open (self): + # if modified, confirm + if self.ismodified is True: + ans = PyQt4.QtGui.QMessageBox.question (self, lang.CONFIRM, lang.CONFIRM_DISCARD_SAVE, + PyQt4.QtGui.QMessageBox.Yes, PyQt4.QtGui.QMessageBox.No) + # if no, then don't open the file + if ans <> PyQt4.QtGui.QMessageBox.Yes: + return + + # open file dialog + openfilename = PyQt4.QtGui.QFileDialog.getOpenFileName (self, lang.OPEN_TITLE, + filter = lang.BIACV_FILE_FILTER) + # if no open file name then return + if openfilename == "": + return + + # load the document data from open file name + docdata = data.BiaCVData () + docdata.load_data (openfilename) + + # set the title + self.title.setText (docdata.data["title"]) + + # set the personal information fields from document data + self.set_personal_info (docdata) + + # set the profile highlights + self.set_profile_highlights (docdata) + + # set the educational qualifications + self.set_educational_qualifications (docdata) + + # set the professional history + self.set_professional_history (docdata) + + # set the career objectives + self.set_career_objectives (docdata) + + # set the skills list + self.set_skillsets_info (docdata) + + # set the additional information + self.set_additional_info (docdata) + + # set the current document + self.currentfile = openfilename + self.ismodified = False + + # set the window title + self.setWindowTitle ("BiaCV - " + self.currentfile) + + # function to save a file as a new document + def on_file_save_as (self): + savefilename = PyQt4.QtGui.QFileDialog.getSaveFileName (self, + lang.SAVE_TITLE, filter=lang.BIACV_FILE_FILTER) + + # if save file name is not none + if savefilename <> "": + mydata = self.get_document_data () + mydata.save_data (savefilename) + self.ismodified = False + self.currentfile = savefilename + self.setWindowTitle ("BiaCV - " + self.currentfile) # function to save a file def on_file_save (self): @@ -21,15 +141,15 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): # if no current file get file name from file save dialog if self.currentfile is None: - self.currentfile = PyQt4.QtGui.QFileDialog.getSaveFileName (self, - lang.SAVE_TITLE) + savefilename = PyQt4.QtGui.QFileDialog.getSaveFileName (self, + lang.SAVE_TITLE, filter=lang.BIACV_FILE_FILTER) - if self.currentfile <> "": + if savefilename <> "": mydata = self.get_document_data () - mydata.save_data (self.currentfile) + mydata.save_data (savefilename) self.ismodified = False - else: - self.currentfile = None + self.currentfile = savefilename + self.setWindowTitle ("BiaCV - " + self.currentfile) else: mydata = self.get_document_data () mydata.save_data (self.currentfile) @@ -59,6 +179,7 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): unicode (self.area.text ().toUtf8 (), "utf-8"), unicode (self.city.text ().toUtf8 (), "utf-8"), unicode (self.areacode.text ().toUtf8 (), "utf-8"), + unicode (self.country.text ().toUtf8 (), "utf-8"), unicode (self.countrycode_landline.text ().toUtf8 (), "utf-8"), unicode (self.telephone.text ().toUtf8 (), "utf-8"), unicode (self.countrycode_mobile.text ().toUtf8 (), "utf-8"), @@ -66,6 +187,11 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): unicode (self.email.text ().toUtf8 (), "utf-8"), maritalstatus ) + + # set the profile highlights + profile_highlights = unicode (self.profile.toPlainText ().toUtf8 (), "utf-8").splitlines () + docdata.set_profile (profile_highlights) + # get the list of educational qualifications from the treewidget education = [] i = 0 @@ -155,33 +281,142 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): self.email.setText ("") self.areacode.setText ("") self.unspecified.setChecked (True) + self.country.setText ("") + + # function to set the profile highlights in the GUI from document data + def set_profile_highlights (self, docdata): + self.profile.setPlainText (u'\n'.join (docdata.data["profile"])) + + # function to reset profile highlights data in GUI + def reset_profile_highlights (self): + self.profile.setPlainText ("") + + # function to set personal information data in the GUI from document data + def set_personal_info (self, docdata): + self.nametitle.setEditText (docdata.data["nametitle"]) + self.firstname.setText (docdata.data["firstname"]) + self.lastname.setText (docdata.data["lastname"]) + self.dateofbirth.setDate (PyQt4.QtCore.QDate.fromString (docdata.data["dateofbirth"], "dd MMM, yyyy")) + self.street.setText (docdata.data["street"]) + self.area.setText (docdata.data["area"]) + self.city.setText (docdata.data["city"]) + self.countrycode_landline.setText (docdata.data["countrycode_landline"]) + self.telephone.setText (docdata.data["landline"]) + self.countrycode_mobile.setText (docdata.data["countrycode_mobile"]) + self.mobilenumber.setText (docdata.data["mobile"]) + self.email.setText (docdata.data["email"]) + self.areacode.setText (docdata.data["areacode"]) + self.country.setText (docdata.data["country"]) + + if docdata.data["maritalstatus"] is True: + self.married.setChecked (True) + elif docdata.data["maritalstatus"] is False: + self.single.setChecked (True) + else: + self.unspecified.setChecked (True) # function to clear professional history in the GUI def reset_professional_history (self): self.reset_profession_fields () self.professionlist.clear () + # function to set the professional history in the GUI from the document data + def set_professional_history (self, docdata): + # reset the professional history + self.reset_professional_history () + + # add the professional history items to list + for item in docdata.data["professionalhistory"]: + professionitem = PyQt4.QtGui.QTreeWidgetItem ( + [ + item["jobtitle"], + item["joindate"], + item["leavedate"], + item["organization"], + item["additionalinfo"] + ] + ) + self.professionlist.addTopLevelItem (professionitem) + # function to clear educational qualifications in the GUI def reset_educational_qualifications (self): self.reset_education_fields () self.educationlist.clear () + # function to set education qualifications in the GUI from document data + def set_educational_qualifications (self, docdata): + # reset the educational qualifications + self.reset_educational_qualifications () + + # add education items to list + for item in docdata.data["educationalqualifications"]: + educationitem = PyQt4.QtGui.QTreeWidgetItem ( + [ + item["degree"], + item["graduation"], + item["institution"], + item["university"], + item["grade"], + str (item["percentage"]) + ] + ) + self.educationlist.addTopLevelItem (educationitem) + # function to clear career objectives data in the GUI def reset_career_objectives (self): self.shorttermcareer.setPlainText ("") self.longtermgoals.setPlainText ("") + # function to set career objectives data in the GUI from document data + def set_career_objectives (self, docdata): + self.shorttermcareer.setPlainText (u'\n'.join (docdata.data["shorttermobjectives"])) + self.longtermgoals.setPlainText (u'\n'.join (docdata.data["longtermgoals"])) + # function to clear skill sets data in the GUI def reset_skillsets_info (self): self.reset_skillset_fields () self.skillslist.clear () + # function to set the skill sets data in the GUI from document data + def set_skillsets_info (self, docdata): + # clear the skill sets information + self.reset_skillsets_info () + + for item in docdata.data["skillsets"]: + skillitem = PyQt4.QtGui.QTreeWidgetItem ( + [ + item["skilltitle"], + item["skilldesc"] + ] + ) + self.skillslist.addTopLevelItem (skillitem) + + # function to clear additional information data in the GUI def reset_additional_info (self): self.reset_language_fields () self.languageslist.clear () self.additionalinformation.setPlainText ("") + # function to set additional information data in the GUI from the document data + def set_additional_info (self, docdata): + # clear the additional information + self.reset_additional_info () + + # set the languages list + for item in docdata.data["languagesknown"]: + langitem = PyQt4.QtGui.QTreeWidgetItem ( + [ + item["language"], + str (item["canspeak"]), + str (item["canreadwrite"]), + str (item["isproficient"]) + ] + ) + self.languageslist.addTopLevelItem (langitem) + + self.additionalinformation.setPlainText (docdata.data["additionalinformation"]) + # function to clear all the fields and reset them to defaults def new_document (self): # first clear the individual record fields in the tabs @@ -192,6 +427,7 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): self.title.setText ("") self.reset_personal_info () + self.reset_profile_highlights () self.reset_professional_history () self.reset_educational_qualifications () self.reset_career_objectives () @@ -205,6 +441,9 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): self.currentfile = None self.ismodified = False + # set the window title + self.setWindowTitle ("BiaCV - untitled") + # file new action is triggered def on_file_new (self): # if the previous document is modified @@ -390,9 +629,9 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): PyQt4.QtGui.QMessageBox.critical (self, lang.ERROR_UPDATE, lang.ERROR_REQ_MISSING) return # if currently employed in that position, leaving date is to be disabled - # and set to "current" + # and set to empty if self.currentemployment.isChecked (): - leavedatestr = "current" + leavedatestr = "" else: # if the leaving date is < join date if self.leavedate.date () < self.joindate.date (): @@ -432,9 +671,9 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): PyQt4.QtGui.QMessageBox.critical (self, lang.ERROR_ADD, lang.ERROR_REQ_MISSING) return # if currently employed in that position, leaving date is to be disabled - # and set to "current" + # and set to "" if self.currentemployment.isChecked (): - leavedatestr = "current" + leavedatestr = "" else: # if the leaving date is < join date if self.leavedate.date () < self.joindate.date (): @@ -470,7 +709,7 @@ class Biacv_mainwindow (PyQt4.QtGui.QMainWindow, bui.Ui_biacv_mainwindow): selitem = selitems[0] self.designation.setText (selitem.text (0)) self.joindate.setDate (PyQt4.QtCore.QDate.fromString (selitem.text(1), "dd MMM, yyyy")) - if selitem.text (2) == "current": + if selitem.text (2) == "": self.leavedate.setEnabled (False) self.currentemployment.setChecked (True) else: