clui/demos/fileselect/fselect.go
Vladimir Markelov bca28ea40c closes #98
2018-08-04 21:18:33 -07:00

100 lines
2.3 KiB
Go

package main
import (
ui "github.com/VladimirMarkelov/clui"
)
func createView() {
view := ui.AddWindow(0, 0, 30, 7, "File select")
view.SetPack(ui.Vertical)
view.SetGaps(0, 1)
view.SetPaddings(2, 2)
frmPath := ui.CreateFrame(view, 1, 1, ui.BorderNone, ui.Fixed)
frmPath.SetPack(ui.Horizontal)
ui.CreateLabel(frmPath, ui.AutoSize, ui.AutoSize, "Initial path", ui.Fixed)
edPath := ui.CreateEditField(frmPath, 16, "", 1)
frmMask := ui.CreateFrame(view, 1, 1, ui.BorderNone, ui.Fixed)
frmMask.SetPack(ui.Horizontal)
ui.CreateLabel(frmMask, ui.AutoSize, ui.AutoSize, "File masks", ui.Fixed)
edMasks := ui.CreateEditField(frmMask, 16, "*", 1)
frmOpts := ui.CreateFrame(view, 1, 1, ui.BorderNone, ui.Fixed)
frmOpts.SetPack(ui.Horizontal)
cbDir := ui.CreateCheckBox(frmOpts, ui.AutoSize, "Select directory", ui.Fixed)
cbMust := ui.CreateCheckBox(frmOpts, ui.AutoSize, "Must exists", ui.Fixed)
ui.CreateFrame(frmOpts, 1, 1, ui.BorderNone, 1)
lblSelected := ui.CreateLabel(view, 30, 5, "Selected:", ui.Fixed)
lblSelected.SetMultiline(true)
frmBtns := ui.CreateFrame(view, 1, 1, ui.BorderNone, ui.Fixed)
frmBtns.SetPack(ui.Horizontal)
btnSet := ui.CreateButton(frmBtns, ui.AutoSize, 4, "Select", ui.Fixed)
btnQuit := ui.CreateButton(frmBtns, ui.AutoSize, 4, "Quit", ui.Fixed)
ui.CreateFrame(frmBtns, 1, 1, ui.BorderNone, 1)
ui.ActivateControl(view, edMasks)
btnSet.OnClick(func(ev ui.Event) {
s := "Select "
if cbDir.State() == 1 {
s += "directory"
} else {
s += "file"
}
if cbMust.State() == 1 {
s += "[X]"
}
dlg := ui.CreateFileSelectDialog(
s,
edMasks.Title(),
edPath.Title(),
cbDir.State() == 1,
cbMust.State() == 1)
dlg.OnClose(func() {
if !dlg.Selected {
lblSelected.SetTitle("Selected:\nNothing")
return
}
var lb string
if dlg.Exists {
lb = "Selected existing"
} else {
lb = "Create new"
}
if cbDir.State() == 0 {
lb += " file:\n"
} else {
lb += " directory:\n"
}
lb += dlg.FilePath
lblSelected.SetTitle(lb)
})
})
btnQuit.OnClick(func(ev ui.Event) {
go ui.Stop()
})
}
func mainLoop() {
// Every application must create a single Composer and
// call its intialize method
ui.InitLibrary()
defer ui.DeinitLibrary()
createView()
// start event processing loop - the main core of the library
ui.MainLoop()
}
func main() {
mainLoop()
}