KUMOS/SDK/SpiderBasic/Template.sb
2026-05-02 15:49:06 +02:00

123 lines
4.6 KiB
Plaintext

; ════════════════════════════════════════════════════════════════════════════
; KUMOS App Template
;
; 1. Copy this file and KUMOS.sbi into a new folder.
; 2. Edit manifest.json (also in this folder) with your app's details.
; 3. Compile with SpiderBasic — output: index.html
; 4. Zip index.html + manifest.json → yourapp.zip
; 5. Install via App Manager.
;
; Checklist before shipping:
; ☐ Unique reverse-domain id in manifest.json e.g. com.yourname.yourapp
; ☐ Only request permissions you actually use
; ☐ Call KUMOS::Init() before KUMOS::Ready()
; ☐ All KUMOS calls must happen AFTER Ready() resolves
; ════════════════════════════════════════════════════════════════════════════
IncludeFile "KUMOS.sbi"
; ── State (your app's data goes here) ────────────────────────────────────────
Global Count.i = 0
; ── UI ───────────────────────────────────────────────────────────────────────
OpenWindow(0, 0, 0, 400, 300, "Loading…",
#PB_Window_BorderLess | #PB_Window_ScreenCentered)
SetWindowColor(0, RGB(22, 22, 34))
Global Label_Count.i = TextGadget(#PB_Any,
0, 100, 400, 40, "…",
#PB_Text_Center | #PB_Text_Border)
SetGadgetColor(Label_Count, #PB_Gadget_FrontColor, RGB(100, 120, 255))
SetGadgetColor(Label_Count, #PB_Gadget_BackColor, RGB(22, 22, 34))
SetGadgetFont(Label_Count, LoadFont(#PB_Any, "sans-serif", 28))
Global Btn_Click.i = ButtonGadget(#PB_Any, 150, 160, 100, 32, "Click me")
Global Btn_Toast.i = ButtonGadget(#PB_Any, 50, 210, 130, 28, "Toast")
Global Btn_Confirm.i= ButtonGadget(#PB_Any, 220, 210, 130, 28, "Confirm")
; ── Helpers ───────────────────────────────────────────────────────────────────
Procedure UpdateUI()
SetGadgetText(Label_Count, Str(Count))
EndProcedure
; ── Storage callbacks ─────────────────────────────────────────────────────────
Procedure OnSaved(Success.i, Data.s)
If Not Success
KUMOS::Notify_Toast("Save failed: " + Data, KUMOS::#Warning)
EndIf
EndProcedure
Procedure OnLoaded(Success.i, Data.s)
If Success
Protected N.i = Val(Data)
If N > 0 : Count = N : UpdateUI() : EndIf
EndIf
; File missing on first launch is normal — just start from zero.
EndProcedure
Procedure SaveCount()
KUMOS::Storage_Write("/count.txt", Str(Count), @OnSaved())
EndProcedure
; ── Button events ─────────────────────────────────────────────────────────────
Procedure OnConfirmResult(Result.i)
If Result
KUMOS::Notify_Toast("You clicked OK!", KUMOS::#Success)
Else
KUMOS::Notify_Toast("You clicked Cancel.", KUMOS::#Info)
EndIf
EndProcedure
BindGadgetEvent(Btn_Click, @Clicked())
Procedure Clicked()
Count + 1
UpdateUI()
SaveCount()
EndProcedure
BindGadgetEvent(Btn_Toast, @ToastClicked())
Procedure ToastClicked()
KUMOS::Notify_Toast("Hello from SpiderBasic!", KUMOS::#Success)
EndProcedure
BindGadgetEvent(Btn_Confirm, @ConfirmClicked())
Procedure ConfirmClicked()
KUMOS::Notify_Confirm("Are you sure?", "This is a confirm dialog.", @OnConfirmResult())
EndProcedure
; ── Boot: always KUMOS::Init() then KUMOS::Ready() ────────────────────────────
Procedure OnReady(Success.i, Data.s)
If Not Success
; Running outside KUMO.S — useful for testing in a plain browser
SetWindowTitle(0, "Template App (standalone)")
UpdateUI()
ProcedureReturn
EndIf
; Set the window title via the shell
KUMOS::Window_SetTitle("Template App")
; Load persisted state
KUMOS::Storage_Read("/count.txt", @OnLoaded())
UpdateUI()
EndProcedure
KUMOS::Init()
KUMOS::Ready(@OnReady())
; IDE Options = SpiderBasic 3.20 (Windows - x86)
; CursorPosition = 1
; Folding = --
; iOSAppOrientation = 0
; AndroidAppCode = 0
; AndroidAppOrientation = 0
; EnableXP
; DPIAware
; CompileSourceDirectory