Added Contact No and Email
[resumebuilder.git] / resumebuilder.go
1 package main
2
3 import (
4 "fmt"
5 "os"
6
7 "github.com/gotk3/gotk3/gtk"
8 )
9
10 type Applicant struct {
11 FirstName string
12 LastName string
13 DateOfBirth Date
14 Sex Sex
15 Address string
16 ContactNo string
17 Email string
18 Education []Education
19 }
20
21 type Date struct {
22 Year uint
23 Month uint
24 Day uint
25 }
26
27 type Education struct {
28 SchoolName string
29 YearOfPassing int
30 PassPercentage float32
31 }
32
33 type Sex int
34
35 var ui *gtk.Builder
36 var selectedsex Sex
37 var selecteddate Date
38
39 const (
40 Male Sex = 1
41 Female = 2
42 Other = 3
43 )
44
45 /* func SaveToJson(a *Applicant) {
46 b, err := json.Marshal(a)
47
48 if err != nil {
49 fmt.Println(err.Error())
50 os.Exit(2)
51 }
52 err = ioutil.WriteFile("test.json", b, 0644)
53 if err != nil {
54 fmt.Println(err.Error())
55 os.Exit(3)
56 }
57 } */
58
59 func getLineText(fieldname string) (string, error) {
60 obj, err := ui.GetObject(fieldname)
61 if err != nil {
62 return "", err
63 }
64 field, ok := obj.(*gtk.Entry)
65 if !ok {
66 return "", err
67 }
68 fieldstr, err := field.GetText()
69 if err != nil {
70 return "", err
71 }
72 return fieldstr, nil
73 }
74
75 func getMultilineText(fieldname string) (string, error) {
76 obj, err := ui.GetObject(fieldname)
77 if err != nil {
78 return "", err
79 }
80 fieldctl, ok := obj.(*gtk.TextView)
81 if !ok {
82 return "", err
83 }
84 textbuf, err := fieldctl.GetBuffer()
85 if err != nil {
86 return "", err
87 }
88 start, end := textbuf.GetBounds()
89 textstr, err := textbuf.GetText(start, end, true)
90 if err != nil {
91 return "", err
92 }
93 return textstr, nil
94 }
95
96 func getBasicDetails() (*Applicant, error) {
97 // Retrieve all the fields.
98
99 firstname, err := getLineText("FirstName")
100 if err != nil {
101 return nil, err
102 }
103 lastname, err := getLineText("LastName")
104 if err != nil {
105 return nil, err
106 }
107
108 address, err := getMultilineText("Address")
109 if err != nil {
110 return nil, err
111 }
112
113 contact, err := getLineText("ContactNumber")
114 if err != nil {
115 return nil, err
116 }
117 email, err := getLineText("Email")
118 if err != nil {
119 return nil, err
120 }
121
122 // Store the contents in Applicant object
123 var applicant = new(Applicant)
124
125 applicant.FirstName = firstname
126 applicant.LastName = lastname
127 applicant.DateOfBirth = selecteddate
128 applicant.Sex = selectedsex
129 applicant.Address = address
130 applicant.ContactNo = contact
131 applicant.Email = email
132
133 return applicant, nil
134 }
135
136 func getWindow() (*gtk.Window, error) {
137 obj, err := ui.GetObject("MainWindow")
138 if err != nil {
139 fmt.Println(err.Error())
140 return nil, err
141 }
142 wnd, ok := obj.(*gtk.Window)
143 if !ok {
144 return nil, err
145 }
146 return wnd, nil
147 }
148
149 func LoadMain() {
150 gtk.Init(nil)
151 var err error
152 ui, err = gtk.BuilderNew()
153 if err != nil {
154 fmt.Println(err.Error())
155 os.Exit(1)
156 }
157 asset, err := Asset("resources/resumebuilder.glade")
158 if err != nil {
159 fmt.Println(err.Error())
160 os.Exit(1)
161 }
162 ui.AddFromString(string(asset))
163 ui.ConnectSignals(map[string]interface{}{"SexMaleSelected": sexMaleSelected,
164 "SexFemaleSelected": sexFemaleSelected, "SexOtherSelected": sexOtherSelected,
165 "SaveButtonClicked": SaveButtonClicked, "DoBSelected": doBSelected})
166
167 wnd, err := getWindow()
168 if err != nil {
169 os.Exit(1)
170 }
171
172 wnd.SetTitle("Resume Builder")
173 wnd.ShowAll()
174 selectedsex = Male
175
176 wnd.Connect("destroy", func() {
177 gtk.MainQuit()
178 })
179 gtk.Main()
180 }
181
182 func sexMaleSelected(male *gtk.RadioButton) {
183 if male.GetActive() {
184 selectedsex = Male
185 }
186 }
187
188 func sexFemaleSelected(female *gtk.RadioButton) {
189 if female.GetActive() {
190 selectedsex = Female
191 }
192 }
193
194 func sexOtherSelected(other *gtk.RadioButton) {
195 if other.GetActive() {
196 selectedsex = Other
197 }
198 }
199
200 func doBSelected(dob *gtk.Calendar) {
201 selecteddate.Year, selecteddate.Month, selecteddate.Day = dob.GetDate()
202 }
203
204 func SaveButtonClicked() {
205 a, err := getBasicDetails()
206 if err != nil {
207 fmt.Println(err.Error())
208 os.Exit(1)
209 }
210 fmt.Println(*a)
211 }
212
213 func main() {
214 LoadMain()
215 }