@@ -3,14 +3,10 @@ package frc238
33import ch.bailu.gtk.adw.AboutWindow
44import ch.bailu.gtk.adw.Application
55import ch.bailu.gtk.adw.ApplicationWindow
6- import ch.bailu.gtk.adw.ColorScheme
76import ch.bailu.gtk.adw.HeaderBar
8- import ch.bailu.gtk.adw.StyleManager
97import ch.bailu.gtk.adw.ToastPriority
108import ch.bailu.gtk.adw.WindowTitle
119import ch.bailu.gtk.gio.ApplicationFlags
12- import ch.bailu.gtk.gio.File
13- import ch.bailu.gtk.gio.Gio
1410import ch.bailu.gtk.gio.Menu
1511import ch.bailu.gtk.gio.MenuItem
1612import ch.bailu.gtk.gio.SimpleAction
@@ -22,7 +18,6 @@ import ch.bailu.gtk.gtk.Orientation
2218import ch.bailu.gtk.gtk.StyleContext
2319import ch.bailu.gtk.type.Str
2420import ch.bailu.gtk.type.Strs
25- import ch.bailu.gtk.type.exception.AllocationError
2621import frc238.background.RobotProject
2722import frc238.plugins.PluginManager
2823import frc238.widgets.AutoPicker
@@ -31,114 +26,44 @@ import frc238.widgets.loadFolder
3126import frc238.widgets.makeAndRunPopup
3227import java.io.FileNotFoundException
3328import java.nio.file.Paths
29+ import kotlin.system.exitProcess
3430
3531object App {
3632 // FIXME avoid global variables
37- lateinit var picker: AutoPicker
3833 lateinit var app: Application
34+ lateinit var picker: AutoPicker
3935 lateinit var window: ApplicationWindow
4036 lateinit var project: RobotProject
4137 lateinit var header: HeaderBar
4238 lateinit var title: WindowTitle
4339 lateinit var settings: Settings
4440 lateinit var plugins: PluginManager
45- private fun init () {
46- settings = Settings ()
47- plugins = PluginManager ()
48- }
4941
5042 @JvmStatic
5143 fun main (args : Array <String >) {
5244 // Adw.init() // This call should not be necessary if you use adw.Application instead of gtk.Application
53- app = Application (" org.frc238.autoBuilder" , ApplicationFlags .FLAGS_NONE )
45+ val theApp = Application (" org.frc238.autoBuilder" , ApplicationFlags .FLAGS_NONE )
5446
5547 /*
5648 FIXME This works only with compiled resources
5749 Compile with `glib-compile-resources` application that is part of the gtk distribution
5850 See Adwaita example in java-gtk
5951 there is also a helper function to load compiled resource files: GResource.loadAndRegister("path/to/compiled.gresources")
6052 */
61- val gresource = File .newForPath(Str (" icons/resources.gresource.xml" ))
62- try {
63- Gio .resourceLoad(gresource.path)
64- } catch (e: AllocationError ) {
65- throw RuntimeException (e)
66- }
53+ // val gresource = File.newForPath(Str("icons/resources.gresource.xml"))
54+ // try {
55+ // Gio.resourceLoad(gresource.path)
56+ // } catch (e: AllocationError) {
57+ // throw RuntimeException(e)
58+ // }
6759
6860 // This could cause crashes
69- StyleManager .getDefault().colorScheme = ColorScheme .FORCE_DARK
70-
71- app.onActivate {
72-
73- init () // Load widgets here (after app.run())
74-
75- header = HeaderBar ()
76- header.addCssClass(" flat" )
77-
78- project = RobotProject ()
79- picker = AutoPicker ()
80- title = WindowTitle (" Autonomous Builder" , " " )
81- header.titleWidget = title
82- val cssProvider = CssProvider ()
83- val toggleCommandFlap = Button ()
84- toggleCommandFlap.setIconName(" sidebar-show-right-symbolic" )
85- toggleCommandFlap.onClicked { picker.commandSidebar.onToggleClicked() }
86- header.packEnd(toggleCommandFlap)
87-
88- val menubutton = MenuButton ()
89- menubutton.setIconName(" open-menu-symbolic" )
90-
91- val menu = Menu ()
92- val about = MenuItem (" About" , " app.about" )
93- menu.appendItem(about)
94- val aboutAction = SimpleAction (" about" , null )
95- app.asActionMap().addAction(aboutAction.asAction())
96- aboutAction.onActivate { showAboutWindow() }
97- val properties = MenuItem (" Properties" , " app.properties" )
98- val propertiesAction = SimpleAction (" properties" , null )
99- menu.appendItem(properties)
100- propertiesAction.onActivate { settings.openPrefsWindow() }
101- app.asActionMap().addAction(propertiesAction.asAction())
102- menubutton.menuModel = menu
103- header.packEnd(menubutton)
104- val load = Button ()
105- load.setLabel(" Load" )
106- load.onClicked { loadFolder() }
107- load.setIconName(" folder-open-symbolic" )
108- header.packEnd(load)
109- val save = Button ()
110- save.onClicked { saveAmodeFile() }
111- save.setIconName(" media-floppy-symbolic" )
112- header.packEnd(save)
113- val toggleFlap = Button ()
114- toggleFlap.setIconName(" sidebar-show-symbolic" )
115- toggleFlap.onClicked { picker.onToggleClicked() }
116- header.packStart(toggleFlap)
117- val addNewMode = Button ()
118- addNewMode.setIconName(" list-add-symbolic" )
119- addNewMode.onClicked { picker.stack.addAmodeToList() }
120- header.packStart(addNewMode)
121- val removeMode = Button .newFromIconNameButton(" user-trash-symbolic" )
122- removeMode.onClicked { picker.stack.removeAmode() }
123- header.packStart(removeMode)
124- val rename = Button .newFromIconNameButton(" document-edit-symbolic" )
125- rename.onClicked { picker.stack.renameMode() }
126- header.packStart(rename)
127- window = ApplicationWindow (app)
128- window.direction = Orientation .VERTICAL
129- cssProvider.loadFromPath(Paths .get(" " ).toAbsolutePath().toString() + " /gtk.css" )
130- StyleContext .addProviderForDisplay(window.display, cssProvider.asStyleProvider(), ToastPriority .HIGH )
131- // window.addCssClass("accent");
132- val vbox = Box (Orientation .VERTICAL , 0 )
133- val hbox = Box (Orientation .HORIZONTAL , 0 )
134- hbox.append(picker.flap)
135- vbox.append(header)
136- vbox.append(hbox)
137- window.setDefaultSize(900 , 800 )
138- window.content = vbox
139- window.present()
140- }
141- app.run (args.size, Strs (args))
61+ // StyleManager.getDefault().colorScheme = ColorScheme.FORCE_DARK
62+
63+ theApp.onActivate { buildUI(theApp) }
64+ theApp.run (args.size, Strs (args))
65+ theApp.onShutdown { exitProcess(0 ) }
66+ app = theApp
14267 }
14368
14469 private fun showAboutWindow () {
@@ -150,6 +75,79 @@ object App {
15075 aboutMenu.show()
15176 }
15277
78+ private fun buildUI (app : Application ) {
79+
80+ println (" woah" )
81+
82+ settings = Settings ()
83+ plugins = PluginManager ()
84+ header = HeaderBar ()
85+ header.addCssClass(" flat" )
86+
87+ project = RobotProject ()
88+ picker = AutoPicker ()
89+ title = WindowTitle (" Autonomous Builder" , " " )
90+ header.titleWidget = title
91+ val cssProvider = CssProvider ()
92+ val toggleCommandFlap = Button ()
93+ toggleCommandFlap.setIconName(" sidebar-show-right-symbolic" )
94+ toggleCommandFlap.onClicked { picker.commandSidebar.onToggleClicked() }
95+ header.packEnd(toggleCommandFlap)
96+
97+ val menubutton = MenuButton ()
98+ menubutton.setIconName(" open-menu-symbolic" )
99+
100+ val menu = Menu ()
101+ val about = MenuItem (" About" , " app.about" )
102+ menu.appendItem(about)
103+ val aboutAction = SimpleAction (" about" , null )
104+ app.asActionMap().addAction(aboutAction.asAction())
105+ aboutAction.onActivate { showAboutWindow() }
106+ val properties = MenuItem (" Properties" , " app.properties" )
107+ val propertiesAction = SimpleAction (" properties" , null )
108+ menu.appendItem(properties)
109+ propertiesAction.onActivate { settings.openPrefsWindow() }
110+ app.asActionMap().addAction(propertiesAction.asAction())
111+ menubutton.menuModel = menu
112+ header.packEnd(menubutton)
113+ val load = Button ()
114+ load.setLabel(" Load" )
115+ load.onClicked { loadFolder() }
116+ load.setIconName(" folder-open-symbolic" )
117+ header.packEnd(load)
118+ val save = Button ()
119+ save.onClicked { saveAmodeFile() }
120+ save.setIconName(" media-floppy-symbolic" )
121+ header.packEnd(save)
122+ val toggleFlap = Button ()
123+ toggleFlap.setIconName(" sidebar-show-symbolic" )
124+ toggleFlap.onClicked { picker.onToggleClicked() }
125+ header.packStart(toggleFlap)
126+ val addNewMode = Button ()
127+ addNewMode.setIconName(" list-add-symbolic" )
128+ addNewMode.onClicked { picker.stack.addAmodeToList() }
129+ header.packStart(addNewMode)
130+ val removeMode = Button .newFromIconNameButton(" user-trash-symbolic" )
131+ removeMode.onClicked { picker.stack.removeAmode() }
132+ header.packStart(removeMode)
133+ val rename = Button .newFromIconNameButton(" document-edit-symbolic" )
134+ rename.onClicked { picker.stack.renameMode() }
135+ header.packStart(rename)
136+ window = ApplicationWindow (app)
137+ window.direction = Orientation .VERTICAL
138+ cssProvider.loadFromPath(Paths .get(" " ).toAbsolutePath().toString() + " /gtk.css" )
139+ StyleContext .addProviderForDisplay(window.display, cssProvider.asStyleProvider(), ToastPriority .HIGH )
140+ // window.addCssClass("accent");
141+ val vbox = Box (Orientation .VERTICAL , 0 )
142+ val hbox = Box (Orientation .HORIZONTAL , 0 )
143+ hbox.append(picker.flap)
144+ vbox.append(header)
145+ vbox.append(hbox)
146+ window.setDefaultSize(900 , 800 )
147+ window.content = vbox
148+ window.present()
149+ }
150+
153151 @JvmStatic
154152 fun initAutoList () {
155153 val modes = project.autoModes!! .autonomousModes
0 commit comments