X-Git-Url: https://harishankar.org/repos/?p=resumebuilder.git;a=blobdiff_plain;f=resumebuilder.go;h=79d821f1b8b8b1e49ed25059456ba37a3299b946;hp=cc78373f9cc52c9abc480e8400612cfcff1ced72;hb=HEAD;hpb=b820ddf1e8f0f8ef9e3b6c00972c45e128290051 diff --git a/resumebuilder.go b/resumebuilder.go index cc78373..79d821f 100644 --- a/resumebuilder.go +++ b/resumebuilder.go @@ -3,26 +3,41 @@ package main import ( "fmt" "os" + "strconv" "github.com/gotk3/gotk3/gtk" ) type Applicant struct { - FirstName string - LastName string - Age int - Sex Sex - Education []Education + FirstName string + LastName string + DateOfBirth Date + Sex Sex + Address string + ContactNo string + Email string + Education []Education +} + +type Date struct { + Year uint + Month uint + Day uint } type Education struct { - SchoolName string - YearOfPassing int - PassPercentage float32 + Qualification string + Institution string + YearOfPassing uint + GradeOrPercentage string } type Sex int +var ui *gtk.Builder +var selectedsex Sex +var selecteddate Date + const ( Male Sex = 1 Female = 2 @@ -43,7 +58,96 @@ const ( } } */ -func getWindow(ui gtk.Builder) (*gtk.Window, error) { +func setLineText(fieldname string, buf string) { + obj, err := ui.GetObject(fieldname) + if err != nil { + return + } + field, ok := obj.(*gtk.Entry) + if !ok { + return + } + field.SetText(buf) +} + +func getLineText(fieldname string) (string, error) { + obj, err := ui.GetObject(fieldname) + if err != nil { + return "", err + } + field, ok := obj.(*gtk.Entry) + if !ok { + return "", err + } + fieldstr, err := field.GetText() + if err != nil { + return "", err + } + return fieldstr, nil +} + +func getMultilineText(fieldname string) (string, error) { + obj, err := ui.GetObject(fieldname) + if err != nil { + return "", err + } + fieldctl, ok := obj.(*gtk.TextView) + if !ok { + return "", err + } + textbuf, err := fieldctl.GetBuffer() + if err != nil { + return "", err + } + start, end := textbuf.GetBounds() + textstr, err := textbuf.GetText(start, end, true) + if err != nil { + return "", err + } + return textstr, nil +} + +func getBasicDetails() (*Applicant, error) { + // Retrieve all the fields. + + firstname, err := getLineText("FirstName") + if err != nil { + return nil, err + } + lastname, err := getLineText("LastName") + if err != nil { + return nil, err + } + + address, err := getMultilineText("Address") + if err != nil { + return nil, err + } + + contact, err := getLineText("ContactNumber") + if err != nil { + return nil, err + } + email, err := getLineText("Email") + if err != nil { + return nil, err + } + + // Store the contents in Applicant object + var applicant = new(Applicant) + + applicant.FirstName = firstname + applicant.LastName = lastname + applicant.DateOfBirth = selecteddate + applicant.Sex = selectedsex + applicant.Address = address + applicant.ContactNo = contact + applicant.Email = email + + return applicant, nil +} + +func getWindow() (*gtk.Window, error) { obj, err := ui.GetObject("MainWindow") if err != nil { fmt.Println(err.Error()) @@ -56,31 +160,33 @@ func getWindow(ui gtk.Builder) (*gtk.Window, error) { return wnd, nil } -func LoadMain() { +func loadMain() { gtk.Init(nil) - ui, err := gtk.BuilderNewFromFile("resumebuilder.glade") + var err error + ui, err = gtk.BuilderNew() if err != nil { fmt.Println(err.Error()) os.Exit(1) } - - wnd, err := getWindow(*ui) + asset, err := Asset("resources/resumebuilder.glade") if err != nil { + fmt.Println(err.Error()) os.Exit(1) } + ui.AddFromString(string(asset)) + ui.ConnectSignals(map[string]interface{}{"SexMaleSelected": sexMaleSelected, + "SexFemaleSelected": sexFemaleSelected, "SexOtherSelected": sexOtherSelected, + "SaveButtonClicked": saveButtonClicked, "DoBSelected": doBSelected, + "AddEducationClicked": addEducationClicked}) - btnobj, err := ui.GetObject("SaveButton") + wnd, err := getWindow() if err != nil { - fmt.Println(err.Error()) - os.Exit(1) - } - btn, ok := btnobj.(*gtk.Button) - if !ok { os.Exit(1) } - btn.Connect("clicked", SaveButtonClicked) + wnd.SetTitle("Resume Builder") wnd.ShowAll() + selectedsex = Male wnd.Connect("destroy", func() { gtk.MainQuit() @@ -88,10 +194,92 @@ func LoadMain() { gtk.Main() } -func SaveButtonClicked() { +func sexMaleSelected(male *gtk.RadioButton) { + if male.GetActive() { + selectedsex = Male + } +} + +func sexFemaleSelected(female *gtk.RadioButton) { + if female.GetActive() { + selectedsex = Female + } +} +func sexOtherSelected(other *gtk.RadioButton) { + if other.GetActive() { + selectedsex = Other + } +} + +func doBSelected(dob *gtk.Calendar) { + selecteddate.Year, selecteddate.Month, selecteddate.Day = dob.GetDate() +} + +func getEducationFields() (*Education, error) { + ed := new(Education) + qual, err := getLineText("QualificationTitle") + if err != nil { + return nil, err + } + inst, err := getLineText("InstitutionName") + if err != nil { + return nil, err + } + yearp, err := getLineText("YearPassing") + if err != nil { + return nil, err + } + year, err := strconv.Atoi(yearp) + if err != nil { + return nil, err + } + gradep, err := getLineText("GradeOrPercentag") + if err != nil { + return nil, err + } + ed.Qualification = qual + ed.Institution = inst + ed.YearOfPassing = uint(year) + ed.GradeOrPercentage = gradep + + return ed, nil +} + +func addEducationClicked() { + ed, err := getEducationFields() + if err != nil { + return + } + lstore, err := ui.GetObject("EducationStore") + if err != nil { + return + } + edustore, ok := lstore.(*gtk.ListStore) + if !ok { + return + } + iter := edustore.Append() + edustore.SetValue(iter, 0, ed.Qualification) + edustore.SetValue(iter, 1, ed.Institution) + edustore.SetValue(iter, 2, ed.YearOfPassing) + edustore.SetValue(iter, 3, ed.GradeOrPercentage) + + setLineText("QualificationTitle", "") + setLineText("InstitutionName", "") + setLineText("YearPassing", "") + setLineText("GradeOrPercentag", "") +} + +func saveButtonClicked() { + a, err := getBasicDetails() + if err != nil { + fmt.Println(err.Error()) + os.Exit(1) + } + fmt.Println(*a) } func main() { - LoadMain() + loadMain() }