json - How can I get data on TableView? -
all.
now develop task management application using go programming language , walk("windows application library kit" go programming language).
the application has function of following ① ②.
①read data json file, , display data on tableview(tableview component of walk).
②write data on tableview json file.
i develop function of ①. cannot develop function of ②, because cannnot data on tableview.
how can data on tableview?
【version】
go : 1.4.2
walk : commit baac4d4
【source code】
package main import ( "reflect" "fmt" "log" "os" "encoding/json" "sort" "github.com/lxn/walk" . "github.com/lxn/walk/declarative" //"strings" ) type task struct { taskid string taskno string taskname string manday string term string mandayday string startdate string enddate string progress string } type taskmodel struct { walk.tablemodelbase walk.sorterbase sortcolumn int sortorder walk.sortorder items []task } func newtaskmodel() *taskmodel { t := new(taskmodel) t.items = make([]task, 3) var tasks []task tasks = read("") := 0; < len(tasks); i++ { var task task task = tasks[i] t.items[i] = task } t.publishrowsreset() return t } func (m *taskmodel) rowcount() int { return len(m.items) } func (m *taskmodel) len() int { return len(m.items) } func (m *taskmodel) value(row, col int) interface{} { item := m.items[row] switch col { case 0: return item.taskid case 1: return item.taskno case 2: return item.taskname case 3: return item.manday case 4: return item.term case 5: return item.mandayday case 6: return item.startdate case 7: return item.enddate case 8: return item.progress } panic("unexpected col") } func (m *taskmodel) sort(col int, order walk.sortorder) error { m.sortcolumn, m.sortorder = col, order sort.sort(m) return m.sorterbase.sort(col, order) } func (m *taskmodel) less(i, j int) bool { a, b := m.items[i], m.items[j] c := func(ls bool) bool { if m.sortorder == walk.sortascending { return ls } return !ls } switch m.sortcolumn { case 0: return c(a.taskid < b.taskid) case 1: return c(a.taskno < b.taskno) case 2: return c(a.taskname < b.taskname) case 3: return c(a.manday < b.manday) case 4: return c(a.term < b.term) case 5: return c(a.mandayday < b.mandayday) case 6: return c(a.startdate < b.startdate) case 7: return c(a.enddate < b.enddate) case 8: return c(a.progress < b.progress) } panic("error") } func (m *taskmodel) swap(i, j int) { m.items[i], m.items[j] = m.items[j], m.items[i] } func read(filepath string) []task{ file, err := os.open("c:/dev/xampp/htdocs/workspace/samplegoproject/src/main/task.json") //file, err := os.open(filepath) if err != nil { log.fatal(err) } defer file.close() var tasks []task decoder := json.newdecoder(file) //json.newdecoder(file) //fmt.print(tasks) //err = decoder.decode(&tasks) decoder.decode(&tasks) if err != nil { log.fatal(err) } //fmt.print(tasks) return tasks; } func write(filepath string, mw *mymainwindow) { var children *walk.widgetlist children = mw.mainwindow.children() var child walk.widget child = children.at(0) := reflect.typeof(child) fv := reflect.valueof(child).convert(to).interface() //tableview := fv.type().in(0) //var tableview tableview //tableview := child.cursor() //fmt.print(child) //fmt.println(tableview) fmt.println(to) fmt.println(fv) //r := fv.interfacedata() //fmt.println(r) //fmt.println(reflect.valueof(child).convert(fv)) file, err := os.create("c:/dev/xampp/htdocs/workspace/samplegoproject/src/main/task2.json") if err != nil { log.fatal(err) } defer file.close() //var tasks []task encoder := json.newencoder(file) err = encoder.encode(fv) if err != nil { log.fatal(err) } } type mymainwindow struct { *walk.mainwindow prevfilepath string } func main() { model := newtaskmodel() mw := new (mymainwindow) var openaction, saveaction *walk.action if err:= (mainwindow{ assignto: &mw.mainwindow, title: "wbs", menuitems: []menuitem{ menu { text: "&file", items: []menuitem{ action{ assignto: &openaction, text: "&open", ontriggered: mw.openaction_triggered, }, action{ assignto: &saveaction, text: "&save", ontriggered: mw.saveaction_triggered, }, separator{}, action{ text: "&exit", ontriggered: func() { mw.close() }, }, }, }, }, minsize: size{800, 400}, layout: vbox{}, children: []widget{ tableview { columns: []tableviewcolumn{ {title: "task id"}, {title: "task no"}, {title: "task name"}, {title: "man day"}, {title: "term"}, {title: "man day day"}, {title: "start date"}, {title: "end date"}, {title: "progress"}, }, model: model, }, }, }.create()); err != nil { //fmt.print(err) //log.fatal(err) } mw.run() } func (mw *mymainwindow) openaction_triggered() { if err := mw.openfile(); err != nil { log.print(err) } } func (mw *mymainwindow) openfile() error { dlg := new(walk.filedialog) dlg.filepath = mw.prevfilepath dlg.filter = "json files|*.json" dlg.title = "select json file" if ok, err := dlg.showopen(mw); err != nil { return err } else if !ok { return nil } mw.prevfilepath = dlg.filepath read(mw.prevfilepath) return nil } func (mw *mymainwindow) saveaction_triggered() { if err := mw.savefile(); err != nil { log.print(err) } } func (mw *mymainwindow) savefile() error { dlg := new(walk.filedialog) dlg.filepath = mw.prevfilepath dlg.filter = "json files|*.json" dlg.title = "input json file name" if ok, err := dlg.showsave(mw); err != nil { return err } else if !ok { return nil } mw.prevfilepath = dlg.filepath write(mw.prevfilepath, mw) return nil } 
Comments
Post a Comment