2020-01-09 12:05:43 -05:00
|
|
|
package zenity
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
)
|
|
|
|
|
2020-01-23 06:44:28 -05:00
|
|
|
// SelectFile displays the file selection dialog.
|
|
|
|
//
|
|
|
|
// Returns an empty string on cancel.
|
|
|
|
//
|
|
|
|
// Valid options: Title, Directory, Filename, ShowHidden, FileFilter(s).
|
|
|
|
func SelectFile(options ...Option) (string, error) {
|
|
|
|
return selectFile(options...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// SelectFileMutiple displays the multiple file selection dialog.
|
|
|
|
//
|
|
|
|
// Returns a nil slice on cancel.
|
|
|
|
//
|
|
|
|
// Valid options: Title, Directory, Filename, ShowHidden, FileFilter(s).
|
|
|
|
func SelectFileMutiple(options ...Option) ([]string, error) {
|
|
|
|
return selectFileMutiple(options...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// SelectFileSave displays the save file selection dialog.
|
|
|
|
//
|
|
|
|
// Returns an empty string on cancel.
|
|
|
|
//
|
|
|
|
// Valid options: Title, Filename, ConfirmOverwrite, ConfirmCreate, ShowHidden,
|
|
|
|
// FileFilter(s).
|
|
|
|
func SelectFileSave(options ...Option) (string, error) {
|
|
|
|
return selectFileSave(options...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Filename returns an Option to set the filename.
|
|
|
|
//
|
|
|
|
// You can specify a file name, a directory path, or both.
|
|
|
|
// Specifying a file name, makes it the default selected file.
|
|
|
|
// Specifying a directory path, makes it the default dialog location.
|
|
|
|
func Filename(filename string) Option {
|
|
|
|
return func(o *options) { o.filename = filename }
|
|
|
|
}
|
|
|
|
|
|
|
|
// Directory returns an Option to activate directory-only selection.
|
|
|
|
func Directory() Option {
|
|
|
|
return func(o *options) { o.directory = true }
|
|
|
|
}
|
|
|
|
|
|
|
|
// ConfirmOverwrite returns an Option to confirm file selection if filename
|
|
|
|
// already exists.
|
|
|
|
func ConfirmOverwrite() Option {
|
|
|
|
return func(o *options) { o.overwrite = true }
|
|
|
|
}
|
|
|
|
|
|
|
|
// ConfirmCreate returns an Option to confirm file selection if filename does
|
|
|
|
// not yet exist (Windows only).
|
|
|
|
func ConfirmCreate() Option {
|
|
|
|
return func(o *options) { o.create = true }
|
|
|
|
}
|
|
|
|
|
|
|
|
// ShowHidden returns an Option to show hidden files (Windows and macOS only).
|
|
|
|
func ShowHidden() Option {
|
|
|
|
return func(o *options) { o.hidden = true }
|
|
|
|
}
|
|
|
|
|
|
|
|
// FileFilter encapsulates a filename filter.
|
|
|
|
//
|
|
|
|
// macOS hides filename filters from the user,
|
|
|
|
// and only supports filtering by extension (or "type").
|
|
|
|
type FileFilter struct {
|
|
|
|
Name string // display string that describes the filter (optional)
|
|
|
|
Patterns []string // filter patterns for the display string
|
|
|
|
}
|
|
|
|
|
|
|
|
// Build returns an Option to set a filename filter.
|
|
|
|
func (f FileFilter) Build() Option {
|
|
|
|
return func(o *options) { o.filters = append(o.filters, f) }
|
|
|
|
}
|
|
|
|
|
|
|
|
// FileFilters is a list of filename filters.
|
|
|
|
type FileFilters []FileFilter
|
|
|
|
|
|
|
|
// Build returns an Option to set filename filters.
|
|
|
|
func (f FileFilters) Build() Option {
|
|
|
|
return func(o *options) { o.filters = append(o.filters, f...) }
|
|
|
|
}
|
|
|
|
|
2020-01-09 12:05:43 -05:00
|
|
|
func splitDirAndName(path string) (dir, name string) {
|
|
|
|
path = filepath.Clean(path)
|
|
|
|
fi, err := os.Stat(path)
|
|
|
|
if err == nil && fi.IsDir() {
|
|
|
|
return path, ""
|
|
|
|
}
|
|
|
|
return filepath.Split(path)
|
|
|
|
}
|