package prep // initializes logging and command line options import ( "os" "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" "go.wit.com/lib/fhelp" "go.wit.com/log" ) var argGui ArgsGui /* This struct can be used with the go-arg package. These are the generic default command line arguments for the 'GUI' package */ type ArgsGui struct { GuiPlugin string `arg:"--gui" help:"select the plugin (andlabs,gocui,etc)"` GuiVerbose bool `arg:"--gui-verbose" help:"enable all logging"` } /* used for command line options. This allows you to control the toolkit settings from the command line --debugger # opens the debugger --gui andlabs # loads the GTK toolkit on linux or Cocoa on mac --gui gocui # runs your program in the terminal in ncurses-like mode */ /* func ArgToolkit() string { return argGui.GuiPlugin } func init() { arg.Register(&argGui) } // this should never happen because this is before go-args MustParse() if argGui.GuiPluginHack != "" { // does os.Exec() and does not return gui.TestPluginAndExit() } */ // after go-args MustParse & user configuration // the gui package can pull out the final settings and init() the GO Plugin GUI Toolkit func postMustParse(s string) string { switch s { case "PluginHack": case "VERBOSE": if argGui.GuiVerbose == true { return "true" } return "false" case "DEFAULT": if argGui.GuiPlugin != "" { return argGui.GuiPlugin } return "gocui" case "FILE": return "someplugin" default: return "" } return "unknown" } var prepGui *GuiPrep type GuiPrep struct { rootn *gui.Node hidden bool // don't update the toolkits when it's hidden Auto func([]string) } func Gui() *GuiPrep { if len(os.Args) > 1 && os.Args[1] == "--gui-check-plugin" { gui.TestPluginAndExitNew(os.Args[2]) os.Exit(0) } arg.Register(&argGui) prepGui = new(GuiPrep) prepGui.rootn = gui.PreInit(postMustParse) return prepGui } func (g *GuiPrep) Start() error { // me.myGui.InitEmbed(resources) if pname, err := g.rootn.Default(); err != nil { if !fhelp.BuildPlugin("gocui") { log.Info("You can't run the forge GUI since the plugins did not build", pname) return nil } if err := g.rootn.LoadToolkitNew("gocui"); err != nil { log.Info("The plugins built, but still failed to load", pname) return err } } else { log.Info("The plugins built and loaded!", pname) } return nil }