use java.nio.file.Files
use java.nio.file.Paths
if (info(3, 6) = "5") then
bui! = BBjAPI().getBuiManager()
url! = bui!.getUrl().replaceAll("apps", "webapp")
action! = bui!.urlAction(url!)
bui!.setEndAction(action!)
release
endif
web! = BBjAPI().getWebManager()
mySysGui! = BBjAPI().openSysGui("X0")
myWindow! = mySysGui!.addWindow("CSS Custom Properties", $00100093$)
myWindow!.setCallback(BBjAPI.ON_CLOSE, "onClose")
gosub ApplyStylesAndLayout
currentTheme$ = "light"
lightTheme$ = "<html><dwc-icon name='sun'></dwc-icon> Light"
darkTheme$ = "<html><dwc-icon name='moon'></dwc-icon> Dark"
myThemeToggle! = myWindow!.addButton(lightTheme$)
myThemeToggle!.setCallback(BBjButton.ON_BUTTON_PUSH, "onThemeToggle")
myChildWindow! = myWindow!.addChildWindow("Sample Controls", $00109000$, BBjAPI().getSysGui().getAvailableContext())
myEdit! = myChildWindow!.addEditBox("Edit Box")
myCheck! = myChildWindow!.addCheckBox("Check Box")
myCheck!.setSelected(1)
myRadio! = myChildWindow!.addRadioButton("Radio Button")
myRadio!.setSelected(1)
myNav! = myChildWindow!.addNavigator("Navigator")
myChildWindow! = myWindow!.addChildWindow("Set New Values for CSS Custom Properties", $00109000$, BBjAPI().getSysGui().getAvailableContext())
myListEditCSSProps! = myChildWindow!.addListEdit(String.join($0a$, cast(Iterable, myVectCssProps!)))
myListEditCSSProps!.setAttribute("label", "CSS Property")
myListEditCSSProps!.setAttribute("expanse", "l")
myListEditCSSProps!.selectIndex(0)
currentProperty$ = myListEditCSSProps!.getText()
myListEditCSSProps!.setCallback(BBjListEdit.ON_EDIT_MODIFY, "OnChangeProperty")
myListEditCSSVals! = myChildWindow!.addListEdit(String.join($0a$, cast(Iterable, myVectCssVals!)))
myListEditCSSVals!.setAttribute("label", "CSS Value")
myListEditCSSVals!.setAttribute("expanse", "l")
myListEditCSSVals!.selectIndex(0)
currentValue$ = myListEditCSSVals!.getText()
myListEditCSSVals!.setCallback(BBjListEdit.ON_EDIT_MODIFY, "OnChangeValue")
myButtonSetCSS! = myChildWindow!.addButton("Set CSS Property to Value")
myButtonSetCSS!.setAttribute("expanse", "l")
myButtonSetCSS!.setCallback(BBjButton.ON_BUTTON_PUSH, "OnButtonPush")
myWindow!.setVisible(1)
process_events
onClose:
release
ApplyStylesAndLayout:
fs! = BBjAPI().getFileSystem()
layoutCss! = new String(Files.readAllBytes(Paths.get(fs!.resolvePath("./Exercise-ThemingSupportComplete-Layout.css"))))
themeCss! = new String(Files.readAllBytes(Paths.get(fs!.resolvePath("./Exercise-ThemingSupportComplete-Theme.css"))))
web!.injectStyle(layoutCss!)
web!.injectStyle(themeCss!)
myVectCssProps! = BBjAPI().makeVector()
myVectCssProps!.addItem("--dwc-font-size")
myVectCssProps!.addItem("--dwc-font-weight")
myVectCssProps!.addItem("--dwc-color-body-text")
myVectCssProps!.addItem("--dwc-color-primary-text")
myVectCssProps!.addItem("--dwc-color-primary")
myVectCssProps!.addItem("--dwc-border-radius")
myVectCssVals! = BBjAPI().makeVector()
myVectCssVals!.addItem("20px")
myVectCssVals!.addItem("12px")
myVectCssVals!.addItem("bold")
myVectCssVals!.addItem("normal")
myVectCssVals!.addItem("light")
myVectCssVals!.addItem("orange")
myVectCssVals!.addItem("red")
myVectCssVals!.addItem("green")
myVectCssVals!.addItem("purple")
myVectCssVals!.addItem("unset")
return
OnChangeProperty:
event! = mySysGui!.getLastEvent()
currentProperty$ = event!.getText()
return
OnChangeValue:
event! = mySysGui!.getLastEvent()
currentValue$ = event!.getText()
return
OnButtonPush:
css! = ":root { " + currentProperty$ + ": " + currentValue$ + "; }"
web!.injectStyle(css!)
return
onThemeToggle:
if (currentTheme$ = "light") then
currentTheme$ = "dark"
myThemeToggle!.setText(darkTheme$)
else
currentTheme$ = "light"
myThemeToggle!.setText(lightTheme$)
endif
web!.setTheme(currentTheme$)
return
declare auto BBjWebManager web!
declare auto BBjSysGui mySysGui!
declare auto BBjTopLevelWindow myWindow!
declare auto BBjChildWindow myChildWindow!
declare auto BBjButton myThemeToggle!
declare auto BBjListEdit myListEditCSSProps!
declare auto BBjListEdit myListEditCSSVals!
declare auto BBjButton myButtonSetCSS!
declare auto BBjEditModifyEvent event!