INCLUDE "GW.bas" demover$ = "v5.7" ShowCodePanels = 1 GOSUB DemoInit %========================================================================================================== MainPage: IF !main THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("MainPage:") GW_DEFAULT_TRANSITIONS ("page=pop, panel=push, dialog=pop") % by default is: none/push/pop ARRAY.LOAD barmenu$[], "#Jump to", "Basic", "Input", "Advanced", "Themes", "Third-party", "Exit demo" barmenu$ = GW_ADD_BAR_RMENU$ (barmenu$[]) % will also be used in all following pages main = GW_NEW_PAGE() cartman = GW_ADD_ICON (main, "cartman.png", 24, 24) % 24 x 24 pixels mainttb = GW_ADD_TITLEBAR (main, GW_ADD_BAR_LBUTTON$ (GW_ICON$(cartman) + ">WHEE") + GW_ADD_BAR_TITLE$ ("GW demo " + demover$) + barmenu$) GW_ADD_LISTENER (main, mainttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN GW_USE_THEME_CUSTO_ONCE ("position=right") maincode = GW_ADD_PANEL (main, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_SET_TRANSITION (maincode, "overlay") END IF GW_ADD_TEXT (main, "Choose a category:") GW_ADD_BUTTON (main, "GW basic controls", "BAS") GW_ADD_BUTTON (main, "GW user input controls", "INP") GW_ADD_BUTTON (main, "GW advanced controls", "ADV") GW_ADD_BUTTON (main, "GW themes", "THM") GW_ADD_BUTTON (main, "Third party GW libs", "LIB") GW_ADD_TEXT (main, "") IF ShowCodePanels THEN GW_ADD_LINK (main, "See the code of this page", GW_SHOW_PANEL$ (maincode)) GW_ADD_TEXT (main, "© Nicolas MOUGIN, 2014-2021") GW_ADD_BUTTON (main, "Exit demo", "BYE") GW_PREVENT_LANDSCAPE (main, "This page only works in portrait.\nPlease turn your screen") END IF GW_RENDER (main) DO r$ = GW_WAIT_ACTION$() IF r$ = "WHEE" THEN AUDIO.STOP : AUDIO.PLAY whee : r$ = "" UNTIL r$ <> "" IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye END IF IF r$ = "BAS" THEN GOTO BasicPage IF r$ = "INP" THEN GOTO InputPage IF r$ = "ADV" THEN GOTO AdvancedPage IF r$ = "THM" THEN GOTO ThemePage IF r$ = "LIB" THEN GOTO LibsPage GOTO Bye % r$="BACK" | r$="BYE" Bye: IF IS_APK THEN EXIT ELSE END "Bye!" %========================================================================================================== BasicPage: IF !basic THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("BasicPage:") basic = GW_NEW_PAGE() GW_SET_TRANSITION (basic, "slide") GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") basicttb = GW_ADD_TITLEBAR (basic, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW basic controls") + barmenu$) GW_ADD_LISTENER (basic, basicttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN GW_USE_THEME_CUSTO_ONCE ("position=right") basiccode = GW_ADD_PANEL (basic, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_TEXT (basic, "Choose one of the following demos:") GW_ADD_BUTTON (basic, "Button", "BUTTON") GW_ADD_BUTTON (basic, "Collapsible / Shelf", "COLLAPS") GW_ADD_BUTTON (basic, "Slider", "SLIDER") GW_ADD_BUTTON (basic, "Checkbox / Radio", "CHECK") GW_ADD_BUTTON (basic, "Flip switch", "FLIP") GW_ADD_BUTTON (basic, "Listview", "LISTVIEW") GW_ADD_BUTTON (basic, "Table / Image", "TABLE") GW_ADD_TEXT (basic, "") IF ShowCodePanels THEN GW_ADD_LINK (basic, "See the code of this page", GW_SHOW_PANEL$ (basiccode)) GW_ADD_BUTTON (basic, "Back", "BACK") END IF GW_RENDER (basic) r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye END IF IF r$ = "BUTTON" THEN GOTO BtnPage IF r$ = "COLLAPS" THEN GOTO CollapsPage IF r$ = "SLIDER" THEN GOTO SliderPage IF r$ = "CHECK" THEN GOTO CheckPage IF r$ = "FLIP" THEN GOTO FlipPage IF r$ = "LISTVIEW" THEN GOTO LvPage IF r$ = "TABLE" THEN GOTO TablePage GOTO MainPage %========================================================================================================== AdvancedPage: IF !advanced THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("AdvancedPage:") advanced = GW_NEW_PAGE() GW_SET_TRANSITION (advanced, "flip") GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") advancedttb = GW_ADD_TITLEBAR (advanced, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW advanced controls") + barmenu$) GW_ADD_LISTENER (advanced, advancedttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN GW_USE_THEME_CUSTO_ONCE ("position=right") advancedcode = GW_ADD_PANEL (advanced, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_TEXT (advanced, "Choose one of the following demos:") GW_ADD_BUTTON (advanced, "Colorpicker + Class", "CPCLASS") GW_ADD_BUTTON (advanced, "Listeners", "LISTEN") GW_ADD_BUTTON (advanced, "Progressbar / Spinner", "PGBAR") GW_ADD_BUTTON (advanced, "Dialog Message", "DLGMSG") GW_ADD_BUTTON (advanced, "Dialog Input", "DLGINP") GW_ADD_BUTTON (advanced, "Lock Pattern", "LOCK") GW_ADD_BUTTON (advanced, "Audio / Video", "VIDEO") GW_ADD_TEXT (advanced, "") IF ShowCodePanels THEN GW_ADD_LINK (advanced, "See the code of this page", GW_SHOW_PANEL$ (advancedcode)) GW_ADD_BUTTON (advanced, "Back", "BACK") btnclass = GW_NEW_CLASS ("ui-btn") GW_ADD_LISTENER (advanced, 0, "longpress", "COLORS") END IF GW_RENDER (advanced) DO r$ = GW_WAIT_ACTION$() IF r$ = "COLORS" THEN GW_MODIFY (btnclass, "style:color", RandCol$()) END IF UNTIL r$ <> "COLORS" IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye END IF IF r$ = "CPCLASS" THEN GOTO ColpikPage IF r$ = "PGBAR" THEN GOTO PgPage IF r$ = "DLGMSG" THEN GOTO DlgMsgPage IF r$ = "DLGINP" THEN GOTO DlgInpPage IF r$ = "LOCK" THEN GOTO LockPage IF r$ = "LISTEN" THEN GOTO ListenPage IF r$ = "VIDEO" THEN GOTO VideoPage GOTO MainPage %========================================================================================================== LibsPage: IF !libs THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("LibsPage:") libs = GW_NEW_PAGE() GW_SET_TRANSITION (libs, "flow") GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") libsttb = GW_ADD_TITLEBAR (libs, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("3rd party GW libs") + barmenu$) GW_ADD_LISTENER (libs, libsttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN libscode = GW_ADD_PANEL (libs, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (libs, "Third party libs rely on GW.bas but are more complex (they need several other user functions to work) or very specific. Users can contribute on laughton.com FTP > html > GW (GUI-Web lib) > third-party-libs\n\nHere is a list of third party libs:") ARRAY.LOAD lib$[], "GW_GALLERY.bas", "GW_PICK_FILE.bas", "GW_ALIASES_SHORTCUTS.bas", "GW_UTILS.bas" ARRAY.LENGTH nlib, lib$[] DIM lib[nlib], libbtn[nlib] FOR i=1 TO nlib BYTE.OPEN r, lib[i], "../source/" + lib$[i] IF lib[i]<0 THEN missinglib = 1 GW_USE_THEME_CUSTO_ONCE ("style='background:red; color:white'") IF IS_APK() libbtn[i] = GW_ADD_BUTTON (libs, "Missing " + lib$[i] + " *", "") ELSE libbtn[i] = GW_ADD_BUTTON (libs, "Download " + lib$[i] + " *", "DL_LIB" + INT$(i)) END IF ELSE BYTE.CLOSE lib[i] GW_USE_THEME_CUSTO_ONCE ("style='background:green; color:white'") GW_ADD_BUTTON (libs, "Test " + lib$[i], "RUN_LIB" + INT$(i)) END IF NEXT IF missinglib THEN GW_USE_THEME_CUSTO_ONCE ("style='color:red'") IF IS_APK() GW_ADD_TEXT (libs, "* Demo was compiled without them. Make sure to include them in the Compiler next time.") ELSE GW_ADD_TEXT (libs, "* After download you will have to restart GW demo for it to include the lib.") END IF END IF GW_ADD_TEXT (libs, "") IF ShowCodePanels THEN GW_ADD_LINK (libs, "See the code of this page", GW_SHOW_PANEL$ (libscode)) GW_ADD_BUTTON (libs, "Back", "BACK") END IF GW_RENDER (libs) IF IS_APK() FOR i=1 TO nlib IF lib[i]<0 THEN GW_DISABLE (libbtn[i]) NEXT END IF DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "SPL" THEN % Share Program Link BROWSE "http://rfobasic.freeforums.org/shared-program-instructions-8-3-12-t125.html" ELSEIF IS_IN ("DL_LIB", r$) = 1 THEN i = VAL (MID$ (r$, 7)) GW_DISABLE (libbtn[i]) GW_DOWNLOAD_THIRD_PARTY (lib$[i]) POPUP "Download successful\nYou can restart GW demo" ELSEIF IS_IN ("RUN_LIB", r$) = 1 THEN i = VAL (MID$ (r$, 8)) GOTO i, GalPage, GW_PICK_FILE, GW_ALIASES_SHORTCUTS, GW_UTILS END IF UNTIL r$ = "BACK" GOTO MainPage %========================================================================================================== GW_PICK_FILE: IF !gwpf THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("GW_PICK_FILE:") INCLUDE "GW_PICK_FILE.bas" gwpf = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") gwpfttb = GW_ADD_TITLEBAR (gwpf, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Pick File/Folder") + barmenu$) GW_ADD_LISTENER (gwpf, gwpfttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN gwpfcode = GW_ADD_PANEL (gwpf, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) gwpfit = GW_ADD_TEXTBOX (gwpf, "File:") gwpfil = GW_ADD_INPUTLINE (gwpf, "Filter on file extensions:", "*.bas, *.txt") GW_ADD_BUTTON (gwpf, "PICK A FILE", "PFI") GW_ADD_TEXT (gwpf, "") gwpfot = GW_ADD_TEXTBOX (gwpf, "Folder:") GW_ADD_BUTTON (gwpf, "PICK A FOLDER", "PFO") IF ShowCodePanels THEN GW_ADD_LINK (gwpf, "See the code of this page", GW_SHOW_PANEL$ (gwpfcode)) GW_ADD_BUTTON (gwpf, "Back", "BACK") END IF GW_RENDER (gwpf) DO r$ = GW_WAIT_ACTION$ () IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "PFI" THEN filter$ = GW_GET_VALUE$ (gwpfil) e$ = GW_PICK_FILE$ (filter$) GW_RENDER (gwpf) IF e$ = "" THEN e$ = "[cancelled by user]" ELSE WHILE LEFT$ (e$, 3) = "../" : e$ = MID$ (e$, 4) : REPEAT e$ = CHR$ (34, 47) + e$ + CHR$ (34) END IF GW_MODIFY (gwpfit, "text", "File: " + e$) ELSEIF r$ = "PFO" THEN e$ = GW_PICK_FOLDER$ () GW_RENDER (gwpf) IF e$ = "" THEN e$ = "[cancelled by user]" ELSE WHILE LEFT$ (e$, 3) = "../" : e$ = MID$ (e$, 4) : REPEAT e$ = CHR$ (34, 47) + e$ + CHR$ (34) END IF GW_MODIFY (gwpfot, "text", "Folder: " + e$) END IF UNTIL r$ = "BACK" GOTO LibsPage %========================================================================================================== GW_ALIASES_SHORTCUTS: IF !gwasp THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("GW_ALIASES_SHORTCUTS:") INCLUDE "GW_ALIASES_SHORTCUTS.bas" gwasp = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") gwaspttb = GW_ADD_TITLEBAR (gwasp, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Aliases & Shortcuts") + barmenu$) GW_ADD_LISTENER (gwasp, gwaspttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN gwaspcode = GW_ADD_PANEL (gwasp, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GwAddText (gwasp, "These are GW controls written with their alias form:") GwAddLink (gwasp, "GW_ADD_LINK → GwAddLink", "") GwAddButton (gwasp, "GW_ADD_BUTTON → GwAddButton", "") GwAddSlider (gwasp, "GW_ADD_SLIDER → GwAddSlider", 0, 10, 1, 5) GwAddFlipSwitch (gwasp, "GW_ADD_FLIPSWITCH → GwAddFlipSwitch", "on", "off") gwate (gwasp, "And these are the same written with their shortcut form:") gwalnk (gwasp, "GW_ADD_LINK → gwalnk", "") gwab (gwasp, "GW_ADD_BUTTON → gwab", "") gwasl (gwasp, "GW_ADD_SLIDER → gwasl", 0, 10, 1, 5) gwafs (gwasp, "GW_ADD_FLIPSWITCH → gwafs", "on", "off") GW_ADD_TEXT (gwasp, "") GW_ADD_LINK (gwasp, "Click this line to see the differences in the code.", GW_SHOW_PANEL$ (gwaspcode)) GW_ADD_BUTTON (gwasp, "Back", "BACK") END IF GW_RENDER (gwasp) DO r$ = GW_WAIT_ACTION$ () IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye END IF UNTIL r$ = "BACK" GOTO LibsPage %========================================================================================================== GW_UTILS: IF !utils THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("GW_UTILS:") INCLUDE "GW_UTILS.bas" utils = GW_NEW_PAGE() GW_PAGE_SCALE (utils, 0.7) GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") utilsttb = GW_ADD_TITLEBAR (utils, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Utils") + barmenu$) GW_ADD_LISTENER (utils, utilsttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN GW_USE_THEME_CUSTO_ONCE ("position=right") utilscode = GW_ADD_PANEL (utils, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_TEXT (utils, "GW_UTILS.bas includes utility functions for the GW library.") GW_USE_THEME_CUSTO_ONCE ("style='text-align:center'") GW_ADD_TITLE (utils, "This page has been scaled with GW_PAGE_SCALE(page, 0.7)") GW_USE_THEME_CUSTO_ONCE ("style='background:#eebfff'") GW_ADD_BUTTON (utils, "[Native] Show screen 'real' dimensions in pixels", "SCR") GW_USE_THEME_CUSTO_ONCE ("style='background:#bfffc4'") GW_ADD_BUTTON (utils, "[Gw_Utils] Show HTML window 'usable' dimensions", "WND") GW_ADD_TEXT (utils, "You can also use GW_MODIFY_VIEWPORT() to allow pinching the page to zoom it in/out, but it is incompatible with GW_PAGE_SCALE().") GW_ADD_INPUTLINE (utils, "", "Input Line") GW_ADD_SLIDER (utils, "Slider:", 0, 100, 1, 50) GW_ADD_CHECKBOX (utils, ">Check box") GW_ADD_RADIO (utils, 0, ">Radio button") GW_USE_THEME_CUSTO_ONCE ("color=a icon=arrow-l iconpos=left") GW_ADD_BUTTON (utils, "color=a icon=arrow-l iconpos=left", "") GW_USE_THEME_CUSTO_ONCE ("color=b icon=arrow-r iconpos=right") GW_ADD_BUTTON (utils, "color=b icon=arrow-r iconpos=right", "") GW_ADD_FLIPSWITCH (utils, "Flipswitch initially 'on'", "Off", ">On") GW_ADD_TEXT (utils, "") IF ShowCodePanels THEN GW_ADD_LINK (utils, "See the code of this page", GW_SHOW_PANEL$ (utilscode)) GW_ADD_BUTTON (utils, "Back", "BACK") END IF GW_RENDER (utils) DO r$ = GW_WAIT_ACTION$ () IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "SCR" THEN SCREEN.SIZE wh[] POPUP INT$(wh[1]) + "x" + INT$(wh[2]) + "\nby Screen.Size" ELSEIF r$ = "WND" THEN w = GW_GET_WINDOW_WIDTH() h = GW_GET_WINDOW_HEIGHT() POPUP INT$(w) + "x" + INT$(h) + "\nby Gw_Get_Window_Width\n& Gw_Get_Window_Height" END IF UNTIL r$ = "BACK" GOTO LibsPage %========================================================================================================== BtnPage: IF !btn THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("BtnPage:") btn = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") btnttb = GW_ADD_TITLEBAR (btn, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Button") + barmenu$) GW_ADD_LISTENER (btn, btnttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN btncode = GW_ADD_PANEL (btn, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (btn, "Click this button to change its label:") btnBtn = GW_ADD_BUTTON (btn, "I count to " + INT$(i), "COUNT") GW_ADD_TEXT (btn, "And click this other button to show or hide the 'title' control next to it:") GW_ADD_BUTTON (btn, "Click me!", "TITLE") btnTitle = GW_ADD_TITLE (btn, "I'm alive!") GW_ADD_TEXT (btn, "") IF ShowCodePanels THEN GW_ADD_LINK (btn, "See the code of this page", GW_SHOW_PANEL$ (btncode)) GW_ADD_BUTTON (btn, "Back", "BACK") GW_USE_THEME_CUSTO_ONCE ("big hover=N notext alpha=50% icon=arrow-u style='background:#b342ff'") GW_ADD_BUTTON (btn, "", "N") GW_USE_THEME_CUSTO_ONCE ("big hover=S notext alpha=50% icon=arrow-d style='background:#4fff9e'") GW_ADD_BUTTON (btn, "", "S") GW_USE_THEME_CUSTO_ONCE ("big hover=W notext alpha=50% icon=arrow-l style='background:#f4ff68'") GW_ADD_BUTTON (btn, "", "W") GW_USE_THEME_CUSTO_ONCE ("big hover=E notext alpha=50% icon=arrow-r style='background:#77f1ff'") GW_ADD_BUTTON (btn, "", "E") GW_USE_THEME_CUSTO_ONCE ("hover=NW notext alpha=50% icon=arrow-u-l style='background:#ffc277'") GW_ADD_BUTTON (btn, "", "NW") GW_USE_THEME_CUSTO_ONCE ("hover=NE notext alpha=50% icon=arrow-u-r style='background:#ff7777'") GW_ADD_BUTTON (btn, "", "NE") GW_USE_THEME_CUSTO_ONCE ("hover=SW notext alpha=50% icon=arrow-d-l style='background:#8377ff'") GW_ADD_BUTTON (btn, "", "SW") GW_USE_THEME_CUSTO_ONCE ("hover=SE notext alpha=50% icon=arrow-d-r style='background:#ff77d8'") GW_ADD_BUTTON (btn, "", "SE") END IF i = 0 t = 0 GW_RENDER (btn) GW_HIDE (btnTitle) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), j : j-- % ignore first array index (menu title) GOTO j, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage ELSEIF r$ = "COUNT" THEN i++ GW_MODIFY (btnBtn, "text", "I count to " + INT$(i)) ELSEIF r$ = "TITLE" THEN t=1-t IF t THEN GW_SHOW (btnTitle) ELSE GW_HIDE (btnTitle) ELSEIF r$ = "N" THEN POPUP "Button with custo\n'hover=N alpha=50% notext big'" ELSEIF r$ = "S" THEN POPUP "Button with custo\n'hover=S alpha=50% notext big'" ELSEIF r$ = "W" THEN POPUP "Button with custo\n'hover=W alpha=50% notext big'" ELSEIF r$ = "E" THEN POPUP "Button with custo\n'hover=E alpha=50% notext big'" ELSEIF r$ = "NW" THEN POPUP "Button with custo\n'hover=NW alpha=50% notext'" ELSEIF r$ = "NE" THEN POPUP "Button with custo\n'hover=NE alpha=50% notext'" ELSEIF r$ = "SW" THEN POPUP "Button with custo\n'hover=SW alpha=50% notext'" ELSEIF r$ = "SE" THEN POPUP "Button with custo\n'hover=SE alpha=50% notext'" END IF UNTIL r$ = "BACK" GOTO BasicPage %========================================================================================================== CollapsPage: IF !clps THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("CollapsPage:") clps = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") clpsttb = GW_ADD_TITLEBAR (clps, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Collapsible / Shelf") + barmenu$) GW_ADD_LISTENER (clps, clpsttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN clpscode = GW_ADD_PANEL (clps, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (clps, "Collapsibles are used to expand / collapse a group of controls:") GW_OPEN_COLLAPSIBLE (clps, "Tap this line to show or hide the controls") GW_ADD_BUTTON (clps, "I'm a simple button", "") GW_ADD_TEXTBOX (clps, "I'm a textbox") GW_ADD_SLIDER (clps, "I'm a slider", 0, 10, 1, 5) GW_CLOSE_COLLAPSIBLE (clps) GW_ADD_TEXT (clps, "A shelf is an invisible structure that allows to place different controls on the same line:") GW_SHELF_OPEN (clps) GW_ADD_BUTTON (clps, "Button #1", "") GW_SHELF_NEWCELL (clps) GW_ADD_BUTTON (clps, "Button #2", "") GW_SHELF_NEWCELL (clps) GW_ADD_BUTTON (clps, "Button #3", "") GW_SHELF_CLOSE (clps) GW_ADD_TEXT (clps, "By default a shelf fits all the controls equally on the screen width, but you can change that with a simple CUSTO:") GW_USE_THEME_CUSTO_ONCE ("style='width:200px'") GW_SHELF_OPEN (clps) GW_ADD_BUTTON (clps, "#1", "") GW_SHELF_NEWCELL (clps) GW_ADD_BUTTON (clps, "#2", "") GW_SHELF_NEWCELL (clps) GW_ADD_BUTTON (clps, "#3", "") GW_SHELF_CLOSE (clps) GW_SHELF_OPEN (clps) GW_ADD_BUTTON (clps, "#4", "") GW_USE_THEME_CUSTO_ONCE ("style='width:200px'") GW_SHELF_NEWCELL (clps) GW_ADD_BUTTON (clps, "#5", "") GW_SHELF_NEWCELL (clps) GW_ADD_BUTTON (clps, "#6", "") GW_SHELF_CLOSE (clps) GW_ADD_TEXT (clps, "") IF ShowCodePanels THEN GW_ADD_LINK (clps, "See the code of this page", GW_SHOW_PANEL$ (clpscode)) GW_ADD_BUTTON (clps, "Back", "BACK") END IF GW_RENDER (clps) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye END IF UNTIL r$ = "BACK" GOTO BasicPage %========================================================================================================== SliderPage: IF !sli THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("SliderPage:") sli = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") slittb = GW_ADD_TITLEBAR (sli, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Slider") + barmenu$) GW_ADD_LISTENER (sli, slittb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN slicode = GW_ADD_PANEL (sli, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (sli, "Sliders are used to enter numeric values along a numeric continuum by dragging a handle or entering in a value.") ctl_slider1 = GW_ADD_SLIDER (sli, "Simple integer slider:", 0, 100, 1, 50) GW_USE_THEME_CUSTO_ONCE ("color=d") ctl_slider2 = GW_ADD_SLIDER (sli, "Integer slider with a step of 20:", 0, 100, 20, 40) GW_USE_THEME_CUSTO_ONCE ("color=e") ctl_slider3 = GW_ADD_SLIDER (sli, "Decimal slider:", 0.2, 0.5, 0.01, 0.2) GW_ADD_BUTTON (sli, "Copy values below:", "COPY") sliTxt = GW_ADD_TEXTBOX (sli, "") GW_USE_THEME_CUSTO_ONCE ("style='background:red; color:white'") GW_ADD_BUTTON (sli, "Reset the sliders", "RESET") GW_ADD_TEXT (sli, "") IF ShowCodePanels THEN GW_ADD_LINK (sli, "See the code of this page", GW_SHOW_PANEL$ (slicode)) GW_ADD_BUTTON (sli, "Back", "BACK") END IF GW_RENDER (sli) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "COPY" THEN e$ = "First slider value is " + GW_GET_VALUE$ (ctl_slider1) + "\n" e$ += "Second slider value is " + GW_GET_VALUE$ (ctl_slider2) + "\n" e$ += "Third slider value is " + GW_GET_VALUE$ (ctl_slider3) GW_MODIFY (sliTxt, "text", e$) ELSEIF r$ = "RESET" THEN GW_MODIFY (ctl_slider1, "val", "0") GW_MODIFY (ctl_slider2, "val", "0") GW_MODIFY (ctl_slider3, "val", "0.2") END IF UNTIL r$ = "BACK" GOTO BasicPage %========================================================================================================== InputPage: IF !inp THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("InputPage:") inp = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") inpttb = GW_ADD_TITLEBAR (inp, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Input controls") + barmenu$) GW_ADD_LISTENER (inp, inpttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN inpcode = GW_ADD_PANEL (inp, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (inp, "Text input lines and boxes are two of the most common user input controls.") inpl = GW_ADD_INPUTLINE (inp, "This is an input line:", "Change me!") inpaxn1 = GW_ADD_BUTTON (inp, "Make a BASIC! popup from input line", "POPUP") GW_ADD_TEXT (inp, "") e$ = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pretium, purus vitae fermentum " e$ += "pharetra, nulla nisi pretium nisi, vitae laoreet arcu nisi elementum turpis. Fusce ac facilisis " e$ += "est. Praesent sodales sagittis odio, et maximus tortor elementum at. Duis ullamcorper est justo, " e$ += "et viverra justo dictum id. Morbi aliquam turpis vel lorem sollicitudin, nec porta lacus aliquam. " e$ += "Nunc quis vehicula odio. Praesent a vehicula magna, non rhoncus risus. Fusce at eros id quam " e$ += "rhoncus sagittis et vel tortor. In et nulla congue ligula auctor posuere non sit amet ante. " e$ += "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae." inpb = GW_ADD_INPUTBOX (inp, "And this is an input box:", e$) inpaxn2 = GW_ADD_BUTTON (inp, "Shuffle the text in the box", "SHUFFLE") GW_ADD_TEXT (inp, "Here is an input list = an autocomplete input line with pre-defined values and actions:") ARRAY.LOAD os$[], "Android>IL_1", "iOS>IL_2", "Linux>IL_3", "Mac OS>IL_4", "Windows>IL_5" oses = GW_ADD_INPUTLIST (inp, "Type an OS name...", os$[]) GW_ADD_LISTENER (inp, oses, "clear", "IL_RESET") GW_ADD_TEXT (inp, "Here are input mini controls = small inline number input fields:") GW_INJECT_HTML (inp, "Coordinates: ") GW_ADD_INPUTMINI (inp, "10") GW_INJECT_HTML (inp, " , ") GW_ADD_INPUTMINI (inp, "20") GW_INJECT_HTML (inp, " & value: ") GW_USE_THEME_CUSTO_ONCE ("color=b") GW_ADD_INPUTMINI (inp, "33") GW_ADD_TEXT (inp, "And here is a select box to pick a value from a list:") ARRAY.LOAD fruit$[], "Apple", "Banana", "Cherry", "Cranberry", ">Grape", "Orange" fruitbox = GW_ADD_SELECTBOX (inp, "Pick a fruit:", fruit$[]) GW_ADD_LISTENER (inp, fruitbox, "change", "SB_CHANGED") inpaxn3 = GW_ADD_BUTTON (inp, "What fruit did you pick?", "FRUITS") GW_ADD_TEXT (inp, "And finally here are miscellaneous input controls:") GW_ADD_INPUTDATE (inp, "Input Date", "") GW_ADD_INPUTTIME (inp, "Input Time", "") GW_ADD_INPUTMONTH (inp, "Input Month", "") GW_ADD_INPUTWEEK (inp, "Input Week", "") GW_ADD_INPUTURL (inp, "Input URL", "") GW_ADD_INPUTEMAIL (inp, "Input eMail", "") GW_ADD_INPUTCOLOR (inp, "Input Color", "") GW_ADD_INPUTNUMBER (inp, "Input Number", "") GW_ADD_INPUTTEL (inp, "Input Tel", "") GW_ADD_INPUTPASSWORD (inp, "Input Password", "") GW_ADD_TEXT (inp, "") IF ShowCodePanels THEN GW_ADD_LINK (inp, "See the code of this page", GW_SHOW_PANEL$ (inpcode)) GW_ADD_BUTTON (inp, "Back", "BACK") END IF GW_RENDER (inp) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF LEFT$ (r$, 3) = "IL_" THEN % INPUTLIST events GW_CLOSE_INPUTLIST(oses) r$ = MID$ (r$, 4) IF r$ = "RESET" THEN POPUP "Listener triggered:\ninput list was reset" ELSEIF LEN (r$) = 1 THEN os$ = os$ [VAL (r$)] os$ = LEFT$ (os$, IS_IN (">", os$) - 1) GW_MODIFY (oses, "text", os$) POPUP "You chose " + os$ END IF END IF IF r$ = "SB_CHANGED" THEN POPUP "Listener triggered:\nselect box was changed" ELSEIF r$ = "POPUP" THEN POPUP GW_GET_VALUE$ (inpl),0,0,0 ELSEIF r$ = "SHUFFLE" THEN e$ = GW_GET_VALUE$ (inpb) SPLIT r$[], e$, " " ARRAY.SHUFFLE r$[] ARRAY.LENGTH al, r$[] e$ = "" FOR i=1 TO al e$ += r$[i] + " " NEXT ARRAY.DELETE r$[] GW_MODIFY (inpb, "input", e$) ELSEIF r$ = "FRUITS" THEN f = GW_GET_VALUE (fruitbox) e$ = "You picked a" r$ = LEFT$ (fruit$[f], 1) IF r$ = "A" | r$ = "O" THEN e$ += "n" e$ += " " + LOWER$(fruit$[f]) POPUP e$,0,0,0 END IF UNTIL r$ = "BACK" GOTO MainPage %========================================================================================================== FlipPage: IF !flip THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("FlipPage:") flip = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") flipttb = GW_ADD_TITLEBAR (flip, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Flip switch") + barmenu$) GW_ADD_LISTENER (flip, flipttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN flipcode = GW_ADD_PANEL (flip, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (flip, "Flip switches are used for boolean style inputs like true/false or on/off in a compact UI element.") ctl_flip1 = GW_ADD_FLIPSWITCH (flip, "BASIC! vibrate", "off", "on") ctl_flip2 = GW_ADD_FLIPSWITCH (flip, "BASIC! beep", "0", "1") GW_ADD_BUTTON (flip, "Change 1st flip switch", "CHFLIP") GW_ADD_TEXT (flip, "") IF ShowCodePanels THEN GW_ADD_LINK (flip, "See the code of this page", GW_SHOW_PANEL$ (flipcode)) GW_ADD_BUTTON (flip, "Back", "BACK") END IF GW_RENDER (flip) TIMER.SET 1000 DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "CHFLIP" THEN vibr=1-vibr IF vibr THEN GW_MODIFY (ctl_flip1, "selected", "on") IF !vibr THEN GW_MODIFY (ctl_flip1, "selected", "off") END IF IF GW_FLIPSWITCH_CHANGED (ctl_flip1, "on") THEN vibr=1 IF GW_FLIPSWITCH_CHANGED (ctl_flip1, "off") THEN vibr=0 IF GW_FLIPSWITCH_CHANGED (ctl_flip2, "1") THEN beep=1 IF GW_FLIPSWITCH_CHANGED (ctl_flip2, "0") THEN beep=0 UNTIL r$ = "BACK" TIMER.CLEAR vibr=0 beep=0 GOTO BasicPage ONTIMER: IF vibr THEN VIBRATE buzz[], -1 IF beep THEN TONE 300, 300 TIMER.RESUME %========================================================================================================== CheckPage: IF !check THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("CheckPage:") check = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") checkttb = GW_ADD_TITLEBAR (check, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Checkbox + Radio") + barmenu$) GW_ADD_LISTENER (check, checkttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN checkcode = GW_ADD_PANEL (check, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (check, "Checkboxes are used to provide a list of options where more than one can be selected.") GW_OPEN_GROUP (check) ctl_check1 = GW_ADD_CHECKBOX (check, "I like red") ctl_check2 = GW_ADD_CHECKBOX (check, ">I like green") ctl_check3 = GW_ADD_CHECKBOX (check, "I like black") ctl_check4 = GW_ADD_CHECKBOX (check, ">I like blue") ctl_check5 = GW_ADD_CHECKBOX (check, "I like yellow") GW_CLOSE_GROUP (check) checkaxn1 = GW_ADD_BUTTON (check, "Show the world what you like", "COLORS") GW_ADD_TEXT (check, "Or reset checkboxes with gw_modify:") GW_USE_THEME_CUSTO_ONCE ("style='background:red; color:white'") GW_ADD_BUTTON (check, "Reset all checkboxes", "RAZCB") GW_ADD_TEXT (check, "You can group checkboxes horizontally by using a GROUP with a CUSTO 'inline':") GW_USE_THEME_CUSTO_ONCE ("inline") GW_OPEN_GROUP (check) GW_ADD_CHECKBOX (check, "b") GW_ADD_CHECKBOX (check, "i") GW_ADD_CHECKBOX (check, "u") GW_CLOSE_GROUP (check) GW_ADD_TEXT (check, "") GW_ADD_TEXT (check, "Radio buttons are used to provide a list of options where only a single option can be selected.") GW_OPEN_GROUP (check) ctl_parent = GW_ADD_RADIO (check, 0, "I am a toddler") ctl_child1 = GW_ADD_RADIO (check, ctl_parent, "I am a boy") ctl_child2 = GW_ADD_RADIO (check, ctl_parent, ">I am a man") ctl_child3 = GW_ADD_RADIO (check, ctl_parent, "I am your father") GW_CLOSE_GROUP (check) checkaxn2 = GW_ADD_BUTTON (check, "What are you?", "PERSO") GW_ADD_TEXT (check, "Or unselect a group of radio buttons with gw_modify:") GW_USE_THEME_CUSTO_ONCE ("style='background:red; color:white'") GW_ADD_BUTTON (check, "Reset radio group", "RAZRB") GW_ADD_TEXT (check, "You can group radio buttons horizontally by using a GROUP with a CUSTO 'inline':") GW_USE_THEME_CUSTO_ONCE ("inline") GW_OPEN_GROUP (check) r = GW_ADD_RADIO (check, 0, ">red") GW_ADD_RADIO (check, r, "green") GW_ADD_RADIO (check, r, "blue") GW_ADD_RADIO (check, r, "yellow") GW_ADD_RADIO (check, r, "orange") GW_ADD_RADIO (check, r, "purple") GW_ADD_RADIO (check, r, "black") GW_ADD_RADIO (check, r, "white") GW_CLOSE_GROUP (check) GW_ADD_TEXT (check, "") IF ShowCodePanels THEN GW_ADD_LINK (check, "See the code of this page", GW_SHOW_PANEL$ (checkcode)) GW_ADD_BUTTON (check, "Back", "BACK") END IF GW_RENDER (check) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "RAZRB" THEN GW_MODIFY (ctl_parent, "selected", "0") ELSEIF r$ = "RAZCB" THEN GW_MODIFY (ctl_check1, "checked", "0") GW_MODIFY (ctl_check2, "checked", "0") GW_MODIFY (ctl_check3, "checked", "0") GW_MODIFY (ctl_check4, "checked", "0") GW_MODIFY (ctl_check5, "checked", "0") ELSEIF r$ = "COLORS" THEN e$ = "" IF GW_CHECKBOX_CHECKED (ctl_check1) THEN e$ += "You like red like strawberries\n" IF GW_CHECKBOX_CHECKED (ctl_check2) THEN e$ += "You like green like the grass\n" IF GW_CHECKBOX_CHECKED (ctl_check3) THEN e$ += "You like black like the sky at night\n" IF GW_CHECKBOX_CHECKED (ctl_check4) THEN e$ += "You like blue like a calm sea\n" IF GW_CHECKBOX_CHECKED (ctl_check5) THEN e$ += "You like yellow like the sun\n" IF LEN (e$) THEN e$ = LEFT$ (e$, LEN (e$)-1) ELSE e$ = "You like nothing!" POPUP e$,0,0,0 ELSEIF r$ = "PERSO" THEN IF GW_RADIO_SELECTED (ctl_parent) THEN POPUP "A baby" IF GW_RADIO_SELECTED (ctl_child1) THEN POPUP "A preteen" IF GW_RADIO_SELECTED (ctl_child2) THEN POPUP "A grown up" IF GW_RADIO_SELECTED (ctl_child3) THEN POPUP "Darth Vader" END IF UNTIL r$ = "BACK" GOTO BasicPage %========================================================================================================== ThemePage: IF !thm THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage:") thm = GW_NEW_PAGE() ARRAY.LOAD thmbna$[], "Yes>DLT", "Cancel>NO" thmdm = GW_ADD_DIALOG_MESSAGE (thm, "Download theme", "This theme is not on your device. Do you want to download it now?", thmbna$[]) GW_CUSTO_DLGBTN (thm, thmdm, thmbna$[1], "style='background:green;color:white'") GW_CUSTO_DLGBTN (thm, thmdm, thmbna$[2], "style='background:red;color:white'") ARRAY.DELETE thmbna$[] ARRAY.LOAD thmbna$[], "OK" thmpb = GW_ADD_DIALOG_MESSAGE (thm, "Error", "There was a problem during download!\nTry again later.", thmbna$[]) GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") thmttb = GW_ADD_TITLEBAR (thm, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Themes") + barmenu$) GW_ADD_LISTENER (thm, thmttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN thmcode = GW_ADD_PANEL (thm, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (thm, "You can totally change the look and feel of your GW pages thanks to themes.\nChoose a theme below (*ls means limited support):") GW_ADD_BUTTON (thm, "native-droid-*", "8") GW_ADD_BUTTON (thm, "flat-ui", "1") GW_ADD_BUTTON (thm, "bootstrap", "4") GW_ADD_BUTTON (thm, "square-ui", "6") GW_ADD_BUTTON (thm, "android-holo\t(ls*)", "5") GW_ADD_BUTTON (thm, "iOS\t(ls*)", "3") GW_ADD_BUTTON (thm, "classic\t(ls*)", "2") GW_ADD_BUTTON (thm, "metro\t(ls*)", "7") GW_ADD_TEXT (thm, "") IF ShowCodePanels THEN GW_ADD_LINK (thm, "See the code of this page", GW_SHOW_PANEL$ (thmcode)) GW_ADD_BUTTON (thm, "Back", "BACK") END IF GW_RENDER (thm) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "DLT" THEN % "DownLoad Theme" tapped in Dialog Message POPUP "Starting download..." GW_DOWNLOAD_THEME (GW_THEME$[n+1]) IF GW_THEME_EXISTS (GW_THEME$[n+1]) THEN % Theme downloaded successfully POPUP "Download complete!" GOTO n, ThemePage1, ThemePage2, ThemePage3, ThemePage4, ThemePage5, ThemePage6, ThemePage7, ThemePage8 ELSE GW_SHOW_DIALOG (thmpb) % Theme download problem PRINT GETERROR$() END IF ELSEIF LEN(r$) = 1 n = ASCII(r$) - ASCII("1") + 1 IF n >= 1 & n <= 8 THEN IF GW_THEME_EXISTS (GW_THEME$[n+1]) THEN GOTO n, ThemePage1, ThemePage2, ThemePage3, ThemePage4, ThemePage5, ThemePage6, ThemePage7, ThemePage8 ELSE GW_SHOW_DIALOG (thmdm) % DownLoad Theme ? Y/N END IF END IF END IF UNTIL r$ = "BACK" GOTO MainPage %========================================================================================================== ThemePage1: IF !thm1 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage1:") GW_LOAD_THEME ("flat-ui") thm1 = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (thm1, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'flat-ui'")) IF ShowCodePanels THEN thm1code = GW_ADD_PANEL (thm1, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (thm1, "Some customized buttons:") GW_USE_THEME_CUSTO_ONCE ("color=a icon=flat-settings") GW_ADD_BUTTON (thm1, "color=a\t icon=flat-settings", "") GW_USE_THEME_CUSTO_ONCE ("color=b icon=flat-new") GW_ADD_BUTTON (thm1, "color=b\t icon=flat-new", "") GW_USE_THEME_CUSTO_ONCE ("color=c icon=flat-man") GW_ADD_BUTTON (thm1, "color=c\t icon=flat-man", "") GW_USE_THEME_CUSTO_ONCE ("color=d icon=flat-mail") GW_ADD_BUTTON (thm1, "color=d\t icon=flat-mail", "") GW_USE_THEME_CUSTO_ONCE ("color=e icon=flat-lock") GW_ADD_BUTTON (thm1, "color=e\t icon=flat-lock", "") GW_USE_THEME_CUSTO_ONCE ("color=f icon=flat-menu") GW_ADD_BUTTON (thm1, "color=f\t icon=flat-menu", "") GW_USE_THEME_CUSTO_ONCE ("color=g icon=flat-heart") GW_ADD_BUTTON (thm1, "color=g\t icon=flat-heart", "") GW_ADD_TEXT (thm1, "Buttons with 'inline notext' custo:") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=home") GW_ADD_BUTTON (thm1, "", "1") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-video") GW_ADD_BUTTON (thm1, "", "2") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-time") GW_ADD_BUTTON (thm1, "", "3") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-eye") GW_ADD_BUTTON (thm1, "", "4") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-plus") GW_ADD_BUTTON (thm1, "", "5") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-location") GW_ADD_BUTTON (thm1, "", "6") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-cmd") GW_ADD_BUTTON (thm1, "", "7") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-cross") GW_ADD_BUTTON (thm1, "", "8") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-checkround") GW_ADD_BUTTON (thm1, "", "9") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-calendar") GW_ADD_BUTTON (thm1, "", "10") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-bubble") GW_ADD_BUTTON (thm1, "", "11") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-volume") GW_ADD_BUTTON (thm1, "", "12") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=flat-camera") GW_ADD_BUTTON (thm1, "", "13") GW_USE_THEME_CUSTO_ONCE ("color=g") GW_ADD_CHECKBOX (thm1, ">Check box 1") GW_USE_THEME_CUSTO_ONCE ("color=g") GW_ADD_CHECKBOX (thm1, "Check box 2") GW_ADD_INPUTLINE (thm1, "", "Input Line") GW_USE_THEME_CUSTO_ONCE ("color=d") r = GW_ADD_RADIO (thm1, 0, ">Radio button 1") GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_RADIO (thm1, r, "Radio button 2") GW_USE_THEME_CUSTO_ONCE ("color=b") thm1flip1 = GW_ADD_FLIPSWITCH (thm1, "", "Off", ">On") thm1flip2 = GW_ADD_FLIPSWITCH (thm1, "", "Off", "On") GW_USE_THEME_CUSTO_ONCE ("color=e") GW_ADD_SLIDER (thm1, "", 0, 100, 1, 50) GW_ADD_TEXT (thm1, "") IF ShowCodePanels THEN GW_ADD_LINK (thm1, "See the code of this page", GW_SHOW_PANEL$ (thm1code)) GW_ADD_BUTTON (thm1, "Back", "BACK") END IF GW_RENDER (thm1) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF r$ = "1" THEN POPUP "color=f inline notext icon=home" IF r$ = "2" THEN POPUP "color=f inline notext icon=flat-video" IF r$ = "3" THEN POPUP "color=f inline notext icon=flat-time" IF r$ = "4" THEN POPUP "color=f inline notext icon=flat-eye" IF r$ = "5" THEN POPUP "color=f inline notext icon=flat-plus" IF r$ = "6" THEN POPUP "color=f inline notext icon=flat-location" IF r$ = "7" THEN POPUP "color=f inline notext icon=flat-cmd" IF r$ = "8" THEN POPUP "color=f inline notext icon=flat-cross" IF r$ = "9" THEN POPUP "color=f inline notext icon=flat-checkround" IF r$ = "10" THEN POPUP "color=f inline notext icon=flat-calendar" IF r$ = "11" THEN POPUP "color=f inline notext icon=flat-bubble" IF r$ = "12" THEN POPUP "color=f inline notext icon=flat-volume" IF r$ = "13" THEN POPUP "color=f inline notext icon=flat-camera" IF GW_FLIPSWITCH_CHANGED (thm1flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm1flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage2: IF !thm2 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage2:") GW_LOAD_THEME ("classic") thm2 = GW_NEW_PAGE() thm2cust = GW_NEW_THEME_CUSTO ("color=b") GW_USE_THEME_CUSTO(thm2cust) GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (thm2, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'classic'")) GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_TEXT (thm2, "The jQM 'classic' is an old theme: panels are not supported...") GW_USE_THEME_CUSTO_ONCE ("color=a") GW_ADD_BUTTON (thm2, "I am a 'color=a' button", "") GW_USE_THEME_CUSTO_ONCE ("color=c") GW_ADD_BUTTON (thm2, "I am a 'color=c' button", "") GW_USE_THEME_CUSTO_ONCE ("color=b") GW_ADD_BUTTON (thm2, "I am a 'color=b' button", "") GW_USE_THEME_CUSTO_ONCE ("color=e") GW_ADD_BUTTON (thm2, "I am a 'color=e' button", "") GW_ADD_CHECKBOX (thm2, ">Check box 1") GW_ADD_CHECKBOX (thm2, "Check box 2") GW_ADD_INPUTLINE (thm2, "", "Input Line") r = GW_ADD_RADIO (thm2, 0, ">Radio button 1") GW_ADD_RADIO (thm2, r, "Radio button 2") GW_USE_THEME_CUSTO_ONCE ("color=e") thm2flip1 = GW_ADD_FLIPSWITCH (thm2, "", "Off", ">On") thm2flip2 = GW_ADD_FLIPSWITCH (thm2, "", "Off", "On") GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_SLIDER (thm2, "", 0, 100, 1, 50) IF ShowCodePanels THEN GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_TEXT (thm2, "The code of this page:") GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_TEXT (thm2, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_BUTTON (thm2, "Back", "BACK") END IF GW_RENDER (thm2) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF GW_FLIPSWITCH_CHANGED (thm2flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm2flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage3: IF !thm3 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage3:") GW_LOAD_THEME ("iOS") thm3 = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("data-rel='back'") GW_ADD_TITLEBAR (thm3, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'iOS'")) ARRAY.LOAD bna_thm3$[], "Button style E", "Button style D", "Button style C", "Button style B", "Button style A" dm_thm3 = GW_ADD_DIALOG_MESSAGE (thm3, "Hello, world!", "This is a dialog message in old themes.", bna_thm3$[]) FOR i=1 TO 5 GW_CUSTO_DLGBTN (thm3, dm_thm3, bna_thm3$[i], "color=" + LOWER$ (RIGHT$ (bna_thm3$[i], 1))) NEXT GW_ADD_TEXT (thm3, "The 'iOS' theme is an old theme: panels are not supported...") GW_ADD_LINK (thm3, "Show a Dialog Message", GW_SHOW_DIALOG$ (dm_thm3)) GW_USE_THEME_CUSTO_ONCE ("color=a icon=arrow-l iconpos=left") GW_ADD_BUTTON (thm3, "color=a icon=arrow-l iconpos=left", "") GW_USE_THEME_CUSTO_ONCE ("color=b icon=arrow-r iconpos=right") GW_ADD_BUTTON (thm3, "color=b icon=arrow-r iconpos=right", "") GW_USE_THEME_CUSTO_ONCE ("color=c icon=arrow-u iconpos=left") GW_ADD_BUTTON (thm3, "color=c icon=arrow-u iconpos=left", "") GW_USE_THEME_CUSTO_ONCE ("color=e icon=arrow-d iconpos=right") GW_ADD_BUTTON (thm3, "color=e icon=arrow-d iconpos=right", "") GW_ADD_SLIDER (thm3, "Slider:", 0, 100, 1, 50) GW_ADD_CHECKBOX (thm3, ">Check box") GW_ADD_RADIO (thm3, 0, ">Radio button") GW_ADD_FLIPSWITCH (thm3, "Flipswitch initially 'on'", "Off", ">On") GW_ADD_INPUTLINE (thm3, "", "Input Line") IF ShowCodePanels THEN GW_ADD_TEXT (thm3, "The code of this page:") GW_ADD_TEXT (thm3, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_BUTTON (thm3, "Back", "BACK") GW_ADD_LISTENER (thm3, 0, "longpress", "DUMP") END IF GW_RENDER (thm3) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF r$ = "DUMP" THEN POPUP "Page dumped" : GW_DUMP_TO_FILE (thm3, "ios.html") UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage4: IF !thm4 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage4:") GW_LOAD_THEME ("bootstrap") thm4 = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("color=f icon=back iconpos=left") GW_ADD_TITLEBAR (thm4, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'bootstrap'")) IF ShowCodePanels THEN thm4code = GW_ADD_PANEL (thm4, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (thm4, "Some customized buttons:") GW_USE_THEME_CUSTO_ONCE ("color=a iconpos=right icon=alert") GW_ADD_BUTTON (thm4, "color=a\t icon=alert", "") GW_USE_THEME_CUSTO_ONCE ("color=b iconpos=right icon=audio") GW_ADD_BUTTON (thm4, "color=b\t icon=audio", "") GW_USE_THEME_CUSTO_ONCE ("color=c iconpos=right icon=camera") GW_ADD_BUTTON (thm4, "color=c\t icon=camera", "") GW_USE_THEME_CUSTO_ONCE ("color=d iconpos=right icon=cloud") GW_ADD_BUTTON (thm4, "color=d\t icon=cloud", "") GW_USE_THEME_CUSTO_ONCE ("color=e iconpos=right icon=forbidden") GW_ADD_BUTTON (thm4, "color=e\t icon=forbidden", "") GW_USE_THEME_CUSTO_ONCE ("color=f iconpos=right icon=info") GW_ADD_BUTTON (thm4, "color=f\t icon=info", "") GW_ADD_TEXT (thm4, "Buttons with 'inline notext' custo:") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=video") GW_ADD_BUTTON (thm4, "", "1") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=recycle") GW_ADD_BUTTON (thm4, "", "2") GW_USE_THEME_CUSTO_ONCE ("color=e inline notext icon=navigation") GW_ADD_BUTTON (thm4, "", "3") GW_USE_THEME_CUSTO_ONCE ("color=a inline notext icon=search") GW_ADD_BUTTON (thm4, "", "4") GW_USE_THEME_CUSTO_ONCE ("color=c inline notext icon=shop") GW_ADD_BUTTON (thm4, "", "5") GW_USE_THEME_CUSTO_ONCE ("color=d inline notext icon=tag") GW_ADD_BUTTON (thm4, "", "6") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=user") GW_ADD_BUTTON (thm4, "", "7") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=phone") GW_ADD_BUTTON (thm4, "", "8") GW_ADD_CHECKBOX (thm4, ">Check box 1") GW_ADD_CHECKBOX (thm4, "Check box 2") GW_ADD_INPUTLINE (thm4, "", "Input Line") r = GW_ADD_RADIO (thm4, 0, ">Radio button 1") GW_ADD_RADIO (thm4, r, "Radio button 2") GW_USE_THEME_CUSTO_ONCE ("color=c") thm4flip1 = GW_ADD_FLIPSWITCH (thm4, "", "Off", ">On") GW_USE_THEME_CUSTO_ONCE ("color=d") thm4flip2 = GW_ADD_FLIPSWITCH (thm4, "", "Off", "On") GW_USE_THEME_CUSTO_ONCE ("color=f") GW_ADD_SLIDER (thm4, "", 0, 100, 1, 50) GW_ADD_TEXT (thm4, "") IF ShowCodePanels THEN GW_ADD_LINK (thm4, "See the code of this page", GW_SHOW_PANEL$ (thm4code)) GW_ADD_BUTTON (thm4, "Back", "BACK") END IF GW_RENDER (thm4) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF r$ = "1" THEN POPUP "color=b inline notext icon=video" IF r$ = "2" THEN POPUP "color=f inline notext icon=recycle" IF r$ = "3" THEN POPUP "color=e inline notext icon=navigation" IF r$ = "4" THEN POPUP "color=a inline notext icon=search" IF r$ = "5" THEN POPUP "color=c inline notext icon=shop" IF r$ = "6" THEN POPUP "color=d inline notext icon=tag" IF r$ = "7" THEN POPUP "color=b inline notext icon=user" IF r$ = "8" THEN POPUP "color=f inline notext icon=phone" IF GW_FLIPSWITCH_CHANGED (thm4flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm4flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage5: IF !thm5 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage5:") GW_LOAD_THEME ("android-holo") thm5 = GW_NEW_PAGE() GW_ADD_TITLEBAR (thm5, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'android-holo'")) GW_ADD_TEXT (thm5, "The 'android-holo' theme is an old theme: panels are not supported...") GW_ADD_TEXT (thm5, "Some customized buttons:") GW_USE_THEME_CUSTO_ONCE ("color=a icon=back") GW_ADD_BUTTON (thm5, "color=a icon=back", "") GW_USE_THEME_CUSTO_ONCE ("color=b icon=menu") GW_ADD_BUTTON (thm5, "color=b icon=menu", "") GW_USE_THEME_CUSTO_ONCE ("color=c icon=home") GW_ADD_BUTTON (thm5, "color=c icon=home", "") GW_ADD_CHECKBOX (thm5, ">Check box 1") GW_ADD_CHECKBOX (thm5, "Check box 2") GW_ADD_INPUTLINE (thm5, "", "Input Line") r = GW_ADD_RADIO (thm5, 0, ">Radio button 1") GW_ADD_RADIO (thm5, r, "Radio button 2") thm5flip1 = GW_ADD_FLIPSWITCH (thm5, "Flipswitch initially 'on'", "Off", ">On") GW_USE_THEME_CUSTO_ONCE ("color=b") thm5flip2 = GW_ADD_FLIPSWITCH (thm5, "Flipswitch color=b initially 'off'", "Off", "On") GW_ADD_SLIDER (thm5, "Slider:", 0, 100, 1, 50) IF ShowCodePanels THEN GW_ADD_TEXT (thm5, "The code of this page:") GW_ADD_TEXT (thm5, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_BUTTON (thm5, "Back", "BACK") END IF GW_RENDER (thm5) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF GW_FLIPSWITCH_CHANGED (thm5flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm5flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage6: IF !thm6 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage6:") GW_LOAD_THEME ("square-ui") thm6 = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (thm6, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'square-ui'")) IF ShowCodePanels THEN thm6code = GW_ADD_PANEL (thm6, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (thm6, "Some customized buttons:") GW_USE_THEME_CUSTO_ONCE ("color=a icon=action") GW_ADD_BUTTON (thm6, "color=a\t icon=action", "") GW_USE_THEME_CUSTO_ONCE ("color=b icon=arrow-d-l") GW_ADD_BUTTON (thm6, "color=b\t icon=arrow-d-l", "") GW_USE_THEME_CUSTO_ONCE ("color=c icon=audio") GW_ADD_BUTTON (thm6, "color=c\t icon=audio", "") GW_USE_THEME_CUSTO_ONCE ("color=d icon=camera") GW_ADD_BUTTON (thm6, "color=d\t icon=camera", "") GW_USE_THEME_CUSTO_ONCE ("color=e icon=check") GW_ADD_BUTTON (thm6, "color=e\t icon=check", "") GW_USE_THEME_CUSTO_ONCE ("color=f icon=clock") GW_ADD_BUTTON (thm6, "color=f\t icon=clock", "") GW_USE_THEME_CUSTO_ONCE ("color=g icon=comment") GW_ADD_BUTTON (thm6, "color=g\t icon=comment", "") GW_ADD_TEXT (thm6, "Buttons with 'inline notext' custo:") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=video") GW_ADD_BUTTON (thm6, "", "1") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=recycle") GW_ADD_BUTTON (thm6, "", "2") GW_USE_THEME_CUSTO_ONCE ("color=e inline notext icon=navigation") GW_ADD_BUTTON (thm6, "", "3") GW_USE_THEME_CUSTO_ONCE ("color=a inline notext icon=search") GW_ADD_BUTTON (thm6, "", "4") GW_USE_THEME_CUSTO_ONCE ("color=c inline notext icon=shop") GW_ADD_BUTTON (thm6, "", "5") GW_USE_THEME_CUSTO_ONCE ("color=d inline notext icon=tag") GW_ADD_BUTTON (thm6, "", "6") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=user") GW_ADD_BUTTON (thm6, "", "7") GW_USE_THEME_CUSTO_ONCE ("color=f inline notext icon=phone") GW_ADD_BUTTON (thm6, "", "8") GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_CHECKBOX (thm6, ">Check box 1") GW_USE_THEME_CUSTO_ONCE ("color=d") GW_ADD_CHECKBOX (thm6, "Check box 2") GW_ADD_INPUTLINE (thm6, "", "Input Line") GW_USE_THEME_CUSTO_ONCE ("color=e") r = GW_ADD_RADIO (thm6, 0, ">Radio button 1") GW_USE_THEME_CUSTO_ONCE ("color=e") GW_ADD_RADIO (thm6, r, "Radio button 2") GW_USE_THEME_CUSTO_ONCE ("color=b") thm6flip1 = GW_ADD_FLIPSWITCH (thm6, "", "Off", ">On") thm6flip2 = GW_ADD_FLIPSWITCH (thm6, "", "Off", "On") GW_USE_THEME_CUSTO_ONCE ("color=b") GW_ADD_SLIDER (thm6, "", 0, 100, 1, 50) GW_ADD_TEXT (thm6, "") IF ShowCodePanels THEN GW_ADD_LINK (thm6, "See the code of this page", GW_SHOW_PANEL$ (thm6code)) GW_ADD_BUTTON (thm6, "Back", "BACK") END IF GW_RENDER (thm6) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF r$ = "1" THEN POPUP "color=b inline notext icon=video" IF r$ = "2" THEN POPUP "color=f inline notext icon=recycle" IF r$ = "3" THEN POPUP "color=e inline notext icon=navigation" IF r$ = "4" THEN POPUP "color=a inline notext icon=search" IF r$ = "5" THEN POPUP "color=c inline notext icon=shop" IF r$ = "6" THEN POPUP "color=d inline notext icon=tag" IF r$ = "7" THEN POPUP "color=b inline notext icon=user" IF r$ = "8" THEN POPUP "color=f inline notext icon=phone" IF GW_FLIPSWITCH_CHANGED (thm6flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm6flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage7: IF !thm7 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage7:") GW_LOAD_THEME ("metro") thm7 = GW_NEW_PAGE() GW_ADD_TITLEBAR (thm7, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'metro'")) GW_ADD_TEXT (thm7, "The 'metro' theme is an old theme: panels are not supported...") GW_ADD_TEXT (thm7, "Some customized buttons:") GW_USE_THEME_CUSTO_ONCE ("color=a icon=back") GW_ADD_BUTTON (thm7, "color=a icon=back", "") GW_USE_THEME_CUSTO_ONCE ("color=b icon=menu") GW_ADD_BUTTON (thm7, "color=b icon=menu", "") GW_ADD_CHECKBOX (thm7, ">Check box 1") GW_ADD_CHECKBOX (thm7, "Check box 2") GW_ADD_INPUTLINE (thm7, "", "Input Line") r = GW_ADD_RADIO (thm7, 0, ">Radio button 1") GW_ADD_RADIO (thm7, r, "Radio button 2") thm7flip1 = GW_ADD_FLIPSWITCH (thm7, "Flipswitch initially 'on'", "Off", ">On") GW_USE_THEME_CUSTO_ONCE ("color=b") thm7flip2 = GW_ADD_FLIPSWITCH (thm7, "Flipswitch color=b initially 'off'", "Off", "On") GW_ADD_SLIDER (thm7, "Slider:", 0, 100, 1, 50) IF ShowCodePanels THEN GW_ADD_TEXT (thm7, "The code of this page:") GW_ADD_TEXT (thm7, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) END IF GW_ADD_BUTTON (thm7, "Back", "BACK") END IF GW_RENDER (thm7) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF GW_FLIPSWITCH_CHANGED (thm7flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm7flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage %========================================================================================================== ThemePage8: IF !tp8 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage8:") tp8 = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (tp8, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Theme 'native-droid-*'")) IF ShowCodePanels THEN tp8code = GW_ADD_PANEL (tp8, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (tp8, "The 'native-droid' theme family is recommended to give your app a nice Android look.\nYou can decline the theme in light/dark and several colors: blue/green/purple/red/yellow") GW_ADD_BUTTON (tp8, "native-droid-light-blue", "1") GW_ADD_BUTTON (tp8, "native-droid-light-green", "2") GW_ADD_BUTTON (tp8, "native-droid-light-purple", "3") GW_ADD_BUTTON (tp8, "native-droid-light-red", "4") GW_ADD_BUTTON (tp8, "native-droid-light-yellow", "5") GW_ADD_BUTTON (tp8, "native-droid-dark-blue", "6") GW_ADD_BUTTON (tp8, "native-droid-dark-green", "7") GW_ADD_BUTTON (tp8, "native-droid-dark-purple", "8") GW_ADD_BUTTON (tp8, "native-droid-dark-red", "9") GW_ADD_BUTTON (tp8, "native-droid-dark-yellow", "10") GW_ADD_TEXT (tp8, "") IF ShowCodePanels THEN GW_ADD_LINK (tp8, "See the code of this page", GW_SHOW_PANEL$ (tp8code)) GW_ADD_BUTTON (tp8, "Back", "BACK") END IF GW_RENDER (tp8) r$ = GW_WAIT_ACTION$() IF r$ = "BACK" THEN GOTO ThemePage IF r$ = "1" THEN nativeandro$ = "native-droid-light-blue" IF r$ = "2" THEN nativeandro$ = "native-droid-light-green" IF r$ = "3" THEN nativeandro$ = "native-droid-light-purple" IF r$ = "4" THEN nativeandro$ = "native-droid-light-red" IF r$ = "5" THEN nativeandro$ = "native-droid-light-yellow" IF r$ = "6" THEN nativeandro$ = "native-droid-dark-blue" IF r$ = "7" THEN nativeandro$ = "native-droid-dark-green" IF r$ = "8" THEN nativeandro$ = "native-droid-dark-purple" IF r$ = "9" THEN nativeandro$ = "native-droid-dark-red" IF r$ = "10" THEN nativeandro$ = "native-droid-dark-yellow" GOTO ThemePage8bis %========================================================================================================== ThemePage8bis: IF !thm8 THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ThemePage8bis:") GW_LOAD_THEME (nativeandro$) thm8 = GW_NEW_PAGE() IF ShowCodePanels THEN thm8code = GW_ADD_PANEL (thm8, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (thm8, GW_ADD_BAR_LBUTTON$ (" >BACK") + GW_ADD_BAR_TITLE$ (nativeandro$)) GW_ADD_BUTTON (thm8, "First button", "") GW_ADD_BUTTON (thm8, "Second button", "") GW_ADD_TEXT (thm8, "Buttons with 'inline notext' custo:") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=video") GW_ADD_BUTTON (thm8, "", "1") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=recycle") GW_ADD_BUTTON (thm8, "", "2") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=navigation") GW_ADD_BUTTON (thm8, "", "3") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=search") GW_ADD_BUTTON (thm8, "", "4") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=shop") GW_ADD_BUTTON (thm8, "", "5") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=tag") GW_ADD_BUTTON (thm8, "", "6") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=user") GW_ADD_BUTTON (thm8, "", "7") GW_USE_THEME_CUSTO_ONCE ("color=b inline notext icon=phone") GW_ADD_BUTTON (thm8, "", "8") GW_OPEN_GROUP (thm8) GW_ADD_CHECKBOX (thm8, ">Check box 1") GW_ADD_CHECKBOX (thm8, "Check box 2") GW_CLOSE_GROUP (thm8) GW_ADD_SLIDER (thm8, "", 0, 100, 1, 50) GW_ADD_INPUTLINE (thm8, "", "Input Line") GW_OPEN_GROUP (thm8) r = GW_ADD_RADIO (thm8, 0, ">Radio button 1") GW_ADD_RADIO (thm8, r, "Radio button 2") GW_CLOSE_GROUP (thm8) thm8flip1 = GW_ADD_FLIPSWITCH (thm8, "", "Off", ">On") thm8flip2 = GW_ADD_FLIPSWITCH (thm8, "", "Off", "On") GW_ADD_TEXT (thm8, "") IF ShowCodePanels THEN GW_ADD_LINK (thm8, "See the code of this page", GW_SHOW_PANEL$ (thm8code)) GW_ADD_BUTTON (thm8, "Back", "BACK") oldnativeandro$ = nativeandro$ ELSE % page already made: we do a guru trick to replace the theme e$ = GW_GET_SKEY$("page", thm8) % content of page 'thm8' e$ = REPLACE$ (e$, oldnativeandro$, nativeandro$) IF IS_IN ("-dark-", nativeandro$) & !IS_IN ("-dark-", oldnativeandro$) THEN e$ = REPLACE$ (e$, "jquerymobile.nativedroid.light.css", "jquerymobile.nativedroid.dark.css") ELSEIF IS_IN ("-light-", nativeandro$) & !IS_IN ("-light-", oldnativeandro$) THEN e$ = REPLACE$ (e$, "jquerymobile.nativedroid.dark.css", "jquerymobile.nativedroid.light.css") END IF IF RIGHT$ (nativeandro$, 3) <> RIGHT$ (oldnativeandro$, 3) THEN i = IS_IN ("-", oldnativeandro$, 16) ona_col$ = MID$ (oldnativeandro$, i+1) i = IS_IN ("-", nativeandro$, 16) na_col$ = MID$ (nativeandro$, i+1) e$ = REPLACE$ (e$, "jquerymobile.nativedroid.color."+ona_col$, "jquerymobile.nativedroid.color."+na_col$) END IF GW_SET_SKEY("page", thm8, e$) oldnativeandro$ = nativeandro$ END IF GW_RENDER (thm8) GW_UNLOAD_THEME() % to avoid future pages to inherit this theme DO r$ = GW_WAIT_ACTION$() IF r$ = "1" THEN POPUP "color=b inline notext icon=video" IF r$ = "2" THEN POPUP "color=b inline notext icon=recycle" IF r$ = "3" THEN POPUP "color=b inline notext icon=navigation" IF r$ = "4" THEN POPUP "color=b inline notext icon=search" IF r$ = "5" THEN POPUP "color=b inline notext icon=shop" IF r$ = "6" THEN POPUP "color=b inline notext icon=tag" IF r$ = "7" THEN POPUP "color=b inline notext icon=user" IF r$ = "8" THEN POPUP "color=b inline notext icon=phone" IF GW_FLIPSWITCH_CHANGED (thm8flip1, "Off") THEN POPUP "Switched off" IF GW_FLIPSWITCH_CHANGED (thm8flip2, "On") THEN POPUP "Switched on" UNTIL r$ = "BACK" GOTO ThemePage8 %========================================================================================================== DlgMsgPage: IF !dlm THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("DlgMsgPage:") dlm = GW_NEW_PAGE() ARRAY.LOAD bna1$[], "OK" GW_USE_THEME_CUSTO_ONCE ("inline") % horizontal buttons dmt = GW_ADD_DIALOG_MESSAGE (dlm, "I'm a timer Dialog Message", "I will close in 5 seconds", bna1$[]) GW_USE_THEME_CUSTO_ONCE ("inline") % horizontal buttons dm0 = GW_ADD_DIALOG_MESSAGE (dlm, "", "You can trigger a dialog message manually, for example after rendering a page...", bna1$[]) ARRAY.LOAD bna1b$[], "OK>CLOSED" GW_USE_THEME_CUSTO_ONCE ("inline") % horizontal buttons dc0 = GW_ADD_DIALOG_CHECKBOX (dlm, "DIALOG CHECKBOX", "I am a dialog checkbox = a normal dialog message with an additional checkbox.", "Do not show again", bna1b$[]) GW_USE_THEME_CUSTO_ONCE ("inline") % horizontal buttons dm1 = GW_ADD_DIALOG_MESSAGE (dlm, "", "This is a dialog message without title with a single button with the default transition 'pop'", bna1$[]) GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") dlmttb = GW_ADD_TITLEBAR (dlm, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Dialog Message") + barmenu$) GW_ADD_LISTENER (dlm, dlmttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN dlmcode = GW_ADD_PANEL (dlm, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (dlm, "Dialog Messages are used to display a popup window and get the user feedback via 1 or more buttons.\nDialog Messages can be opened (triggered) via links or via buttons:") GW_ADD_LINK (dlm, "Click here for a simple dialog message

", GW_SHOW_DIALOG$ (dm1)) GW_ADD_LINK (dlm, "Click here for a dialog checkbox

", GW_SHOW_DIALOG$ (dc0)) GW_ADD_BUTTON (dlm, "Show a dialog message with a timer", "DMT") GW_ADD_TEXT (dlm, "Or specify following features for more complex dialog messages:") ARRAY.LOAD bna2$[], "Nice>Y", "Ugly>N" dm2 = GW_ADD_DIALOG_MESSAGE (dlm, "Now I have a title...", "...and 2 buttons.\nNice?", bna2$[]) GW_CUSTO_DLGBTN (dlm, dm2, bna2$[1], "icon=check") GW_CUSTO_DLGBTN (dlm, dm2, bna2$[2], "icon=delete") ARRAY.LOAD bna3$[], "Vibrate>VIBR", "Other popup>" + GW_SHOW_DIALOG$ (dm1), "Cancel>0" dm3 = GW_ADD_DIALOG_MESSAGE (dlm, "Vibrate or Beep", "What do you want to do?", bna3$[]) GW_CUSTO_DLGBTN (dlm, dm3, bna3$[1], "icon=audio") GW_CUSTO_DLGBTN (dlm, dm3, bna3$[2], "icon=comment") GW_CUSTO_DLGBTN (dlm, dm3, bna3$[3], "style='color:blue'") dmti = GW_ADD_CHECKBOX (dlm, ">Have a title") GW_ADD_LISTENER (dlm, dmti, "change", "TITLE_CHANGE") dmte = GW_ADD_CHECKBOX (dlm, ">Have some text") GW_ADD_LISTENER (dlm, dmte, "change", "TEXT_CHANGE") dmib = GW_ADD_CHECKBOX (dlm, "Inline buttons") GW_ADD_LISTENER (dlm, dmib, "change", "ALIGNMENT_CHANGE") ARRAY.LOAD transition$[], ">Pop", "Fade", "Flip", "Turn", "Flow" ~ "Slidefade", "Slide", "Slideup", "Slidedown", "None" GW_USE_THEME_CUSTO_ONCE ("inline") dmtr = GW_ADD_SELECTBOX (dlm, "Transition type:", transition$[]) GW_ADD_LISTENER (dlm, dmtr, "change", "TRANSITION_CHANGE") GW_START_CENTER (dlm) GW_USE_THEME_CUSTO_ONCE ("inline icon=info") GW_ADD_BUTTON (dlm, "Question", GW_SHOW_DIALOG$ (dm2)) GW_USE_THEME_CUSTO_ONCE ("inline icon=grid") GW_ADD_BUTTON (dlm, "3 buttons", GW_SHOW_DIALOG$ (dm3)) GW_STOP_CENTER (dlm) GW_ADD_TEXT (dlm, "") IF ShowCodePanels THEN GW_ADD_LINK (dlm, "See the code of this page", GW_SHOW_PANEL$ (dlmcode)) GW_ADD_BUTTON (dlm, "Back", "BACK") GW_ADD_LISTENER (dlm, 0, "longpress", "DUMP") END IF GW_RENDER (dlm) PAUSE 1000 GW_SET_TRANSITION (dm0, "none") GW_SHOW_DIALOG (dm0) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "DUMP" THEN POPUP "Page dumped" : GW_DUMP_TO_FILE (dlm, "dlgmsg.html") ELSEIF r$ = "DMT" THEN % Dialog Message with a Timer GW_SHOW_DIALOG (dmt) FOR i = 5 TO 1 STEP -1 GW_MODIFY (dmt, "text", "I will close in " + INT$(i) + " seconds") IF GW_ACTION$() <> "" THEN F_N.BREAK PAUSE 1000 NEXT GW_CLOSE_DIALOG (dmt) ELSEIF r$ = "CLOSED" THEN IF GW_CHECKBOX_CHECKED(dc0) THEN POPUP "Checked" ELSE POPUP "Unchecked" ELSEIF r$ = "TITLE_CHANGE" | r$ = "TEXT_CHANGE" THEN IF GW_GET_VALUE (dmti) % have title GW_MODIFY (dm2, "title", "Now I have a title...") GW_MODIFY (dm3, "title", "Vibrate or beep?") IF GW_GET_VALUE (dmte) THEN % title and text GW_MODIFY (dm2, "text", "...and 2 buttons.\nNice?") GW_MODIFY (dm3, "text", "What do you want to do?") ELSE % title and no text GW_MODIFY (dm2, "text", "") GW_MODIFY (dm3, "text", "") END IF ELSE % no title GW_MODIFY (dm2, "title", "") GW_MODIFY (dm3, "title", "") IF GW_GET_VALUE (dmte) THEN % no title but text GW_MODIFY (dm2, "text", "I have 2 buttons.\nNice?") GW_MODIFY (dm3, "text", "What do you want to do?") ELSE % no title nor text GW_MODIFY (dm2, "text", "") GW_MODIFY (dm3, "text", "") END IF END IF ELSEIF r$ = "ALIGNMENT_CHANGE" horizontal = GW_GET_VALUE (dmib) IF horizontal THEN GW_USE_THEME_CUSTO_ONCE("inline") GW_AMODIFY (dm2, "buttons", bna2$[]) IF horizontal THEN GW_USE_THEME_CUSTO_ONCE("inline") GW_AMODIFY (dm3, "buttons", bna3$[]) ELSEIF r$="TRANSITION_CHANGE" i = GW_GET_VALUE (dmtr) e$ = LOWER$ (transition$[i]) GW_SET_TRANSITION (dm2, e$) GW_SET_TRANSITION (dm3, e$) END IF IF r$ = "Y" THEN POPUP "You clicked 'Nice'" IF r$ = "N" THEN POPUP "You clicked 'Ugly'" IF r$ = "VIBR" THEN VIBRATE buzz[], -1 UNTIL r$ = "BACK" GOTO AdvancedPage %========================================================================================================== DlgInpPage: IF !dli THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("DlgInpPage:") dli = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") dlittb = GW_ADD_TITLEBAR (dli, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Dialog Input") + barmenu$) GW_ADD_LISTENER (dli, dlittb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN dlicode = GW_ADD_PANEL (dli, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (dli, "Dialog Inputs are used to display a popup and get the user feedback via an input field, and 1 or more buttons.\nThey are heavily customizable:") ARRAY.LOAD dlib$[], "Btn1>1" LIST.CREATE s, dlib % dialog input buttons LIST.ADD.ARRAY dlib, dlib$[] di1 = GW_ADD_DIALOG_INPUT (dli, "This is a title", "This is a message.\nAnd this is an input field:", "Azerty", dlib$[]) diti = GW_ADD_CHECKBOX (dli, ">Have a title") GW_ADD_LISTENER (dli, diti, "change", "TITLE_CHANGE") dite = GW_ADD_CHECKBOX (dli, ">Have some text") GW_ADD_LISTENER (dli, dite, "change", "TEXT_CHANGE") diib = GW_ADD_CHECKBOX (dli, "Inline buttons") GW_ADD_LISTENER (dli, diib, "change", "ALIGNMENT_CHANGE") dlisli = GW_ADD_SLIDER (dli, "Number of buttons:", 1, 5, 1, 1) GW_ADD_LISTENER (dli, dlisli, "change", "NBOFBTN_CHANGE") ARRAY.LOAD typofinput$[], ">Text", "Number", "Password", "Email", "URL" ARRAY.LOAD txtofinput$[], "Azerty", "0>123.456", "*>password", "@>mougino@free.fr", "<>http://mougino.free.fr" GW_SHELF_OPEN (dli) % align 2 SELECTBOX diit = GW_ADD_SELECTBOX (dli, "Type of input:", typofinput$[]) GW_ADD_LISTENER (dli, diit, "change", "TYPOFINPUT_CHANGE") ARRAY.LOAD transition$[], ">Pop", "Fade", "Flip", "Turn", "Flow" ~ "Slidefade", "Slide", "Slideup", "Slidedown", "None" GW_USE_THEME_CUSTO_ONCE ("style='width:20px'") GW_SHELF_NEWCELL (dli) % empty cell of 20 pixel GW_SHELF_NEWCELL (dli) % to contain 2nd SELECTBOX ditr = GW_ADD_SELECTBOX (dli, "Transition type:", transition$[]) GW_ADD_LISTENER (dli, ditr, "change", "TRANSITION_CHANGE") GW_SHELF_CLOSE (dli) GW_ADD_BUTTON (dli, "TEST ME!", GW_SHOW_DIALOG$ (di1)) GW_ADD_TEXT (dli, "") IF ShowCodePanels THEN GW_ADD_LINK (dli, "See the code of this page", GW_SHOW_PANEL$ (dlicode)) GW_ADD_BUTTON (dli, "Back", "BACK") END IF GW_RENDER (dli) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "TITLE_CHANGE" IF GW_GET_VALUE (diti) % have title GW_MODIFY (di1, "title", "This is a title") ELSE GW_MODIFY (di1, "title", "") END IF ELSEIF r$ = "TEXT_CHANGE" IF GW_GET_VALUE (dite) % have text GW_MODIFY (di1, "text", "This is a message.\nAnd this is an input field:") ELSE GW_MODIFY (di1, "text", "") END IF ELSEIF r$ = "NBOFBTN_CHANGE" nbtn = GW_GET_VALUE(dlisli) IF nbtn LIST.CLEAR dlib FOR i=1 TO nbtn LIST.ADD dlib, "Btn" + INT$(i) + ">" + INT$(i) NEXT ARRAY.DELETE dlib$[] LIST.TOARRAY dlib, dlib$[] horizontal = GW_GET_VALUE (diib) IF horizontal THEN GW_USE_THEME_CUSTO_ONCE("inline") GW_AMODIFY (di1, "buttons", dlib$[]) END IF ELSEIF r$ = "TYPOFINPUT_CHANGE" i = GW_GET_VALUE (diit) GW_MODIFY (di1, "input", txtofinput$[i]) ELSEIF r$ = "ALIGNMENT_CHANGE" horizontal = GW_GET_VALUE (diib) IF horizontal THEN GW_USE_THEME_CUSTO_ONCE("inline") GW_AMODIFY (di1, "buttons", dlib$[]) ELSEIF r$="TRANSITION_CHANGE" i = GW_GET_VALUE (ditr) e$ = LOWER$ (transition$[i]) GW_SET_TRANSITION (di1, e$) ELSEIF LEN(r$)=1 e$ = "User clicked Btn" + r$ e$ += "\nContent of input field is:\n" e$ += CHR$(34) + GW_GET_VALUE$ (di1) + CHR$(34) POPUP e$ END IF UNTIL r$ = "BACK" GOTO AdvancedPage %========================================================================================================== VideoPage: IF !vid THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("VideoPage:") vid = GW_NEW_PAGE() ARRAY.LOAD bna$[], "OK>NEWAUDIO", "Cancel" GW_USE_THEME_CUSTO_ONCE ("inline") audiodlg = GW_ADD_DIALOG_INPUT (vid, "AUDIO PLAYER SOURCE", "Url of new webradio:", "<>http://amp1.cesnet.cz:8000/cro1.ogg", bna$[]) GW_CUSTO_DLGBTN (vid, audiodlg, bna$[1], "style='background:green;color:white'") GW_CUSTO_DLGBTN (vid, audiodlg, bna$[2], "style='background:red;color:white'") GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") vidttb = GW_ADD_TITLEBAR (vid, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Audio/Video") + barmenu$) GW_ADD_LISTENER (vid, vidttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN vidcode = GW_ADD_PANEL (vid, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_SHELF_OPEN (vid) GW_ADD_TEXT (vid, "This is an audio player:") GW_SHELF_NEWCELL (vid) GW_ADD_BUTTON (vid, "Change webradio", GW_SHOW_DIALOG$ (audiodlg)) GW_SHELF_CLOSE (vid) webradio = GW_ADD_AUDIO (vid, "http://amp1.cesnet.cz:8000/cro1.ogg") GW_ADD_TEXT (vid, "This is a local 3gp video:") GW_USE_THEME_CUSTO_ONCE ("style='background:red; color:white'") viddl = GW_ADD_BUTTON (vid, "Download 100kB 3gp video to SD", "DL3GP") localvid = GW_ADD_VIDEO (vid, "small.3gp" + ">http://mougino.free.fr/tmp/small.3gp.png") GW_ADD_TEXT (vid, "And this is an online mp4 video:") GW_ADD_VIDEO (vid, "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" ~ + ">http://camendesign.com/code/video_for_everybody/poster.jpg") GW_ADD_TEXT (vid, "") IF ShowCodePanels THEN GW_ADD_LINK (vid, "See the code of this page", GW_SHOW_PANEL$ (vidcode)) GW_ADD_BUTTON (vid, "Back", "BACK") END IF GW_RENDER (vid) FILE.EXISTS fe, "small.3gp" IF fe THEN GW_HIDE (viddl) ELSE GW_MODIFY (localvid, "content", ">http://mougino.free.fr/tmp/missing-video.jpg") DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "NEWAUDIO" THEN newradio$ = GW_GET_VALUE$ (audiodlg) GW_MODIFY (webradio, "content", newradio$) POPUP "Webradio changed to\n" + newradio$ + "\nYou can now play it!" ELSEIF r$ = "DL3GP" THEN POPUP "Downloading video..." BYTE.OPEN r, fid, "http://mougino.free.fr/tmp/GW/small.3gp" IF fid < 0 THEN BYTE.OPEN r, fid, "http://laughton.com/basic/programs/html/GW (GUI-Web lib)/small.3gp" % fallback IF fid < 0 THEN POPUP "Download error. Check your connection." ELSE BYTE.COPY fid, "small.3gp" POPUP "Video downloaded locally !" GW_RENDER (vid) GW_HIDE (viddl) END IF END IF UNTIL r$ = "BACK" GOTO AdvancedPage %========================================================================================================== TablePage: IF !tbl THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("TablePage:") tbl = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") tblttb = GW_ADD_TITLEBAR (tbl, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Table") + barmenu$) GW_ADD_LISTENER (tbl, tblttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN tblcode = GW_ADD_PANEL (tbl, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) tbim1$ = GW_ADD_IMAGE$ ("cartman.png>IMG1") tbimg1 = GW_LAST_ID() tbim2$ = GW_ADD_IMAGE$ ("cartman.png>IMG2") tbimg2 = GW_LAST_ID() ARRAY.LOAD myTbl0$[], tbim1$, "< click image", "click image > ", tbim2$ GW_ADD_TEXT (tbl, "This is a table containing local, clickable images:") GW_ADD_TABLE (tbl, 2, myTbl0$[]) % n_cols = 2 ARRAY.LOAD myTbl1$[], ~ ">Animal", "Food", "Nemesis" ~ "Dog", "Bone", "Cat" ~ "Cat", "Mouse", "Dog" ~ "Mouse", "Cheese", "Cat" ~ "Fish", "Worm", "Cat" ~ "Worm", "Dirt", "Fishing rod" GW_ADD_TEXT (tbl, "This is a 1-dimension BASIC! array, statically loaded, with a title line, rendered as a table:") GW_ADD_TABLE (tbl, 3, myTbl1$[]) % n_cols = 3 LIST.CREATE s, RndList FOR col=1 TO 6 FOR row=1 TO 8 LIST.ADD RndList, INT$(col * 100 * RND() + 0.5) NEXT NEXT LIST.TOARRAY RndList, myTbl2$[] GW_ADD_TEXT (tbl, "Now this is a 1-dimension BASIC! array of 6x8 dynamic elements (without title line) created from a LIST.TOARRAY, rendered as a table:") tbl_ctl2 = GW_ADD_TABLE (tbl, 6, myTbl2$[]) % n_cols = 6 GW_START_CENTER (tbl) GW_USE_THEME_CUSTO_ONCE ("inline color=b icon=plus") GW_ADD_BUTTON (tbl, "Add row", "ADD") GW_USE_THEME_CUSTO_ONCE ("inline color=b icon=minus") GW_ADD_BUTTON (tbl, "Remove row", "DEL") GW_STOP_CENTER (tbl) GW_ADD_TEXT (tbl, "") IF ShowCodePanels THEN GW_ADD_LINK (tbl, "See the code of this page", GW_SHOW_PANEL$ (tblcode)) GW_ADD_BUTTON (tbl, "Back", "BACK") END IF tbimsel1=0 tbimsel2=0 GW_RENDER (tbl) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "IMG1" THEN tbimsel1=1-tbimsel1 IF tbimsel1 THEN GW_MODIFY (tbimg1, "content", "fly.gif") ELSE GW_MODIFY (tbimg1, "content", "cartman.png") END IF ELSEIF r$ = "IMG2" THEN tbimsel2=1-tbimsel2 IF tbimsel2 THEN GW_MODIFY (tbimg2, "content", "fly.gif") ELSE GW_MODIFY (tbimg2, "content", "cartman.png") END IF ELSEIF r$ = "ADD" THEN FOR col=1 TO 6 LIST.ADD RndList, INT$(col * 100 * RND() + 0.5) NEXT ARRAY.DELETE myTbl2$[] LIST.TOARRAY RndList, myTbl2$[] GW_AMODIFY (tbl_ctl2, "content", myTbl2$[]) ELSEIF r$ = "DEL" THEN LIST.SIZE RndList, ls IF !ls THEN % already empty table POPUP "Empty table!" ELSEIF ls=6 THEN % remove the last line => empty table LIST.CLEAR RndList GW_MODIFY (tbl_ctl2, "content", "") ELSE FOR col=1 TO 6 LIST.REMOVE RndList, ls LIST.SIZE RndList, ls NEXT ARRAY.DELETE myTbl2$[] LIST.TOARRAY RndList, myTbl2$[] GW_AMODIFY (tbl_ctl2, "content", myTbl2$[]) END IF END IF UNTIL r$ = "BACK" GOTO BasicPage %========================================================================================================== LvPage: IF !lvp THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("LvPage:") ARRAY.LOAD lv_typ$[], ">Cars", "Fruits", "Languages" act=1 % 1st array is selected ARRAY.LOAD lv_car$[], "Acura {$36 945}", "Audi {$73 532}", "BMW {$58 300}", "Cadillac {$70 533}", "Ferrari {$243 090}" ARRAY.LOAD lv_fruit$[], "Apple", "Banana", "Cherry", "Cranberry", "Grape", "Orange" ARRAY.LOAD lv_lang$[], "Hungarian", "English", "Spanish", "French", "Dutch", "Deutsch", "Russian", "Turkish", "Latin" lvp = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") lvpttb = GW_ADD_TITLEBAR (lvp, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Listview") + barmenu$) GW_ADD_LISTENER (lvp, lvpttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN lvcode = GW_ADD_PANEL (lvp, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_USE_THEME_CUSTO_ONCE ("inline") lv_typ_chosen = GW_ADD_SELECTBOX (lvp, "1. Choose a type of listview:", lv_typ$[]) GW_ADD_LISTENER (lvp, lv_typ_chosen, "change", "SELECTBOX_CHANGED") GW_ADD_TEXT (lvp, "2. Then select the listview settings:") GW_USE_THEME_CUSTO_ONCE ("inline") GW_OPEN_GROUP (lvp) ordered_chk = GW_ADD_CHECKBOX (lvp, "Ordered") title_chk = GW_ADD_CHECKBOX (lvp, "Title") linked_chk = GW_ADD_CHECKBOX (lvp, "Link") thumb_chk = GW_ADD_CHECKBOX (lvp, "Thumbs") twoline_chk = GW_ADD_CHECKBOX (lvp, "2-line") GW_CLOSE_GROUP (lvp) GW_ADD_LISTENER (lvp, ordered_chk, "change", "ORDERED_CHANGED") GW_ADD_LISTENER (lvp, title_chk, "change", "TITLE_CHANGED") GW_ADD_LISTENER (lvp, linked_chk, "change", "LINKED_CHANGED") GW_ADD_LISTENER (lvp, thumb_chk, "change", "THUMB_CHANGED") GW_ADD_LISTENER (lvp, twoline_chk, "change", "TWOLINE_CHANGED") lv = GW_ADD_LISTVIEW (lvp, lv_car$[]) FN.DEF DumpArray$(a$[]) ARRAY.LENGTH n, a$[] FOR i=1 TO n r$ += "\"" + a$[i] + "\", " NEXT FN.RTN LEFT$(r$, -2) FN.END GW_ADD_TEXT (lvp, "This is a sortable listview, sort it by drag & drop, then click on the Update button to get user changes:") ARRAY.LOAD veggies$[], "~Salad", "Broccoli", "Tomatoes", "Carrots", "Beans", "Eggplant" lv2 = GW_ADD_LISTVIEW (lvp, veggies$[]) vg$ = "Last sortable state: " vg_tx = GW_ADD_TEXTBOX (lvp, vg$ + DumpArray$(veggies$[])) GW_ADD_BUTTON (lvp, "UPDATE SORTABLE STATE", "SORT_UPDATE") GW_ADD_TEXT (lvp, "This is a swipeable listview, swipe any element left and/or right to show options:") ARRAY.LOAD files$[], "Edit|File #1|Delete", "Edit|File #2|Delete", "Folder #1|Delete", "View|Total Size" lv3 = GW_ADD_LISTVIEW (lvp, files$[]) GW_ADD_TEXT (lvp, "") IF ShowCodePanels THEN GW_ADD_LINK (lvp, "See the code of this page", GW_SHOW_PANEL$ (lvcode)) GW_ADD_BUTTON (lvp, "Back", "BACK") FN.DEF MakeTwoLine (arr$[]) ARRAY.LENGTH al, arr$[] FOR i=1 to al linked = IS_IN (">", arr$[i], 3) : IF 0 = linked THEN linked = LEN (arr$[i]) + 1 thumbd = IS_IN ("@", arr$[i], 3) : IF 0 = thumbd THEN thumbd = LEN (arr$[i]) + 1 eot = MIN (linked, thumbd) arr$[i] = LEFT$ (arr$[i], eot - 1) +"\nSecond line" + MID$ (arr$[i], eot) NEXT FN.END END IF GW_RENDER (lvp) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "SORT_UPDATE" IF !GW_LISTVIEW_CHANGED(lv2) POPUP "No change!" ELSE order$ = GW_GET_LISTVIEW_ORDER$ (lv2) GW_REORDER_ARRAY (veggies$[], order$) GW_MODIFY (vg_tx, "text", vg$ + DumpArray$(veggies$[])) ENDIF ELSEIF r$ = "SELECTBOX_CHANGED" act = GW_GET_VALUE (lv_typ_chosen) IF act <> sb THEN GOSUB RefreshListview ELSEIF r$ = "ORDERED_CHANGED" ordered = GW_GET_VALUE (ordered_chk) IF ordered % Switch to ordered listview lv_car$[1] = "#" + lv_car$[1] % '#' = marker for ordered list lv_fruit$[1] = "#" + lv_fruit$[1] lv_lang$[1] = "#" + lv_lang$[1] ELSE % Switch to unordered listview lv_car$[1] = MID$ (lv_car$[1], 2) lv_fruit$[1] = MID$ (lv_fruit$[1], 2) lv_lang$[1] = MID$ (lv_lang$[1], 2) END IF GOSUB RefreshListview ELSEIF r$ = "THUMB_CHANGED" thumbnail = GW_GET_VALUE (thumb_chk) IF thumbnail % Switch to thumbnailed listview ARRAY.LENGTH al, lv_car$[] FOR i=1 to al : lv_car$[i] += "@galaxy.png" : NEXT ARRAY.LENGTH al, lv_fruit$[] FOR i=1 to al : lv_fruit$[i] += "@galaxy.png" : NEXT ARRAY.LENGTH al, lv_lang$[] FOR i=1 to al : lv_lang$[i] += "@galaxy.png" : NEXT ELSE % Switch to unthumbnailed listview ARRAY.LENGTH al, lv_car$[] FOR i=1 to al : lv_car$[i] = REPLACE$(lv_car$[i], "@galaxy.png", "") : NEXT ARRAY.LENGTH al, lv_fruit$[] FOR i=1 to al : lv_fruit$[i] = REPLACE$(lv_fruit$[i], "@galaxy.png", "") : NEXT ARRAY.LENGTH al, lv_lang$[] FOR i=1 to al : lv_lang$[i] = REPLACE$(lv_lang$[i], "@galaxy.png", "") : NEXT END IF GOSUB RefreshListview ELSEIF r$ = "TWOLINE_CHANGED" twoline = GW_GET_VALUE (twoline_chk) IF twoline % Switch to 2-line listview cells MakeTwoLine (lv_car$[]) MakeTwoLine (lv_fruit$[]) MakeTwoLine (lv_lang$[]) ELSE % Switch to 1-line listview cells ARRAY.LENGTH al, lv_car$[] FOR i=1 to al : lv_car$[i] = REPLACE$(lv_car$[i], "\nSecond line", "") : NEXT ARRAY.LENGTH al, lv_fruit$[] FOR i=1 to al : lv_fruit$[i] = REPLACE$(lv_fruit$[i], "\nSecond line", "") : NEXT ARRAY.LENGTH al, lv_lang$[] FOR i=1 to al : lv_lang$[i] = REPLACE$(lv_lang$[i], "\nSecond line", "") : NEXT END IF GOSUB RefreshListview ELSEIF r$ = "TITLE_CHANGED" titled = GW_GET_VALUE (title_chk) IF titled % Turn 1st and 3rd elements to titles lv_car$[1] = ">Title" % leading '>' = marker for title lv_car$[3] = ">Separator" lv_fruit$[1] = ">Title" lv_fruit$[3] = ">Separator" lv_lang$[1] = ">Title" lv_lang$[3] = ">Separator" ELSE % Remove title marks lv_car$[1] = "Acura {$36 945}" lv_car$[3] = "BMW {$58 300}" lv_fruit$[1] = "Apple" lv_fruit$[3] = "Cherry" lv_lang$[1] = "Hungarian" lv_lang$[3] = "Spanish" END IF IF ordered lv_car$[1] = "#" + lv_car$[1] lv_fruit$[1] = "#" + lv_fruit$[1] lv_lang$[1] = "#" + lv_lang$[1] END IF IF linked lv_car$[1] += ">LV1" lv_car$[3] += ">LV3" lv_fruit$[1] += ">LV1" lv_fruit$[3] += ">LV3" lv_lang$[1] += ">LV1" lv_lang$[3] += ">LV3" END IF GOSUB RefreshListview ELSEIF r$ = "LINKED_CHANGED" linked = GW_GET_VALUE (linked_chk) IF linked % Add a link to all elements ARRAY.LENGTH al, lv_car$[] FOR i=1 to al : lv_car$[i] += ">LV" + INT$(i) : NEXT ARRAY.LENGTH al, lv_fruit$[] FOR i=1 to al : lv_fruit$[i] += ">LV" + INT$(i) : NEXT ARRAY.LENGTH al, lv_lang$[] FOR i=1 to al : lv_lang$[i] += ">LV" + INT$(i) : NEXT ELSE % Remove links ARRAY.LENGTH al, lv_car$[] FOR i=1 to al : lv_car$[i] = LEFT$ (lv_car$[i], LEN (lv_car$[i]) - 4) : NEXT ARRAY.LENGTH al, lv_fruit$[] FOR i=1 to al : lv_fruit$[i] = LEFT$ (lv_fruit$[i], LEN (lv_fruit$[i]) - 4) : NEXT ARRAY.LENGTH al, lv_lang$[] FOR i=1 to al : lv_lang$[i] = LEFT$ (lv_lang$[i], LEN (lv_lang$[i]) - 4) : NEXT END IF GOSUB RefreshListview ELSEIF IS_IN (GW_ID$ (lv3), r$) = 1 % swipe LV -> r$ = 'Listview3>OPTION#row' opt$ = MID$ (r$, LEN (GW_ID$ (lv3)) + 2) % Remove listview identifier + '>' IF IS_IN ("Delete", opt$) = 1 row = VAL (MID$ (opt$, LEN ("Delete") + 2)) % Remove option + '#' GW_HIDE_LISTVIEW_ROW(lv3, row) ELSE POPUP opt$ END IF ELSEIF LEFT$ (r$, 2) = "LV" IF act=1 e$ = lv_car$[ VAL (MID$ (r$,3)) ] ELSEIF act=2 e$ = lv_fruit$[ VAL (MID$ (r$,3)) ] ELSE e$ = lv_lang$[ VAL (MID$ (r$,3)) ] END IF e$ = LEFT$ (e$, IS_IN (">", e$) - 1) IF IS_IN ("#", e$) = 1 THEN e$ = MID$ (e$, 2) e$ = "You picked " + e$ POPUP e$ ELSEIF r$ = "BACK" % reset the arrays for next time act = 1 : sb = act : ordered = 0 : titled = 0 : linked = 0 : thumbnail = 0 : twoline = 0 ARRAY.DELETE lv_car$[] ARRAY.LOAD lv_car$[], "Acura {$36 945}", "Audi {$73 532}", "BMW {$58 300}", "Cadillac {$70 533}", "Ferrari {$243 090}" ARRAY.DELETE lv_fruit$[] ARRAY.LOAD lv_fruit$[], "Apple", "Banana", "Cherry", "Cranberry", "Grape", "Orange" ARRAY.DELETE lv_lang$[] ARRAY.LOAD lv_lang$[], "Hungarian", "English", "Spanish", "French", "Dutch", "Deutsch", "Russian", "Turkish", "Latin" END IF UNTIL r$ = "BACK" GOTO BasicPage RefreshListview: sb = act IF sb=1 GW_AMODIFY (lv, "content", lv_car$[]) ELSEIF sb=2 GW_AMODIFY (lv, "content", lv_fruit$[]) ELSEIF sb=3 GW_AMODIFY (lv, "content", lv_lang$[]) END IF RETURN %========================================================================================================== PgPage: IF !pgb THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("PgPage:") pgb = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") pgbttb = GW_ADD_TITLEBAR (pgb, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Progress") + barmenu$) GW_ADD_LISTENER (pgb, pgbttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN pgbcode = GW_ADD_PANEL (pgb, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) pbar = GW_ADD_PROGRESSBAR (pgb, "Progress bars are used to show a progress in a known definite scope (typically 0-100):") pbstart = GW_ADD_BUTTON (pgb, "Fill progressbar", "START") GW_ADD_TEXT (pgb, "Progress bars background color can be changed with a CUSTO "color=a..f":") GW_USE_THEME_CUSTO_ONCE ("style='width:50%'") GW_SHELF_OPEN (pgb) pgblue = GW_ADD_PROGRESSBAR (pgb, "a = blue") GW_SHELF_NEWCELL (pgb) GW_USE_THEME_CUSTO_ONCE ("color=b") pggreen = GW_ADD_PROGRESSBAR (pgb, "b = green") GW_SHELF_NEWROW (pgb) GW_USE_THEME_CUSTO_ONCE ("color=c") pgred = GW_ADD_PROGRESSBAR (pgb, "c = red") GW_SHELF_NEWCELL (pgb) GW_USE_THEME_CUSTO_ONCE ("color=d") pgorange = GW_ADD_PROGRESSBAR (pgb, "d = orange") GW_SHELF_NEWROW (pgb) GW_USE_THEME_CUSTO_ONCE ("color=e") pgpink = GW_ADD_PROGRESSBAR (pgb, "e = pink") GW_SHELF_NEWCELL (pgb) GW_USE_THEME_CUSTO_ONCE ("color=f") pgdarkblue = GW_ADD_PROGRESSBAR (pgb, "f = dark blue") GW_SHELF_CLOSE (pgb) GW_ADD_TEXT (pgb, "Spinners are used to show a work in progress during an unknown amount of time:") spin1 = GW_ADD_SPINNER (pgb, "") GW_USE_THEME_CUSTO_ONCE ("color=a") spin2 = GW_ADD_SPINNER (pgb, "Loading...") GW_USE_THEME_CUSTO_ONCE ("color=b") spin3 = GW_ADD_SPINNER (pgb, "Building database") GW_ADD_BUTTON (pgb, "Default empty spinner", "SPIN1") GW_ADD_BUTTON (pgb, "Spinner, some text, color 'A'", "SPIN2") GW_ADD_BUTTON (pgb, "Spinner, other text, color 'B'", "SPIN3") GW_USE_THEME_CUSTO_ONCE ("style='background:blue; color:white'") GW_ADD_BUTTON (pgb, "Change spinner text", "RND") GW_USE_THEME_CUSTO_ONCE ("style='background:red; color:white'") GW_ADD_BUTTON (pgb, "Hide spinner", "HIDE") GW_ADD_TEXT (pgb, "") IF ShowCodePanels THEN GW_ADD_LINK (pgb, "See the code of this page", GW_SHOW_PANEL$ (pgbcode)) GW_ADD_BUTTON (pgb, "Back", "BACK") END IF GW_RENDER (pgb) GW_SET_PROGRESSBAR (pgblue, 70) GW_SET_PROGRESSBAR (pggreen, 90) GW_SET_PROGRESSBAR (pgred, 90) GW_SET_PROGRESSBAR (pgorange, 70) GW_SET_PROGRESSBAR (pgpink, 80) GW_SET_PROGRESSBAR (pgdarkblue, 100) spindisplayed = 0 DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "START" THEN GW_DISABLE (pbstart) FOR i = 1 TO 100 GW_SET_PROGRESSBAR (pbar, i) PAUSE 5 NEXT GW_ENABLE (pbstart) ELSEIF r$ = "SPIN1" THEN spindisplayed = 1 GW_SHOW_SPINNER (spin1) ELSEIF r$ = "SPIN2" THEN spindisplayed = 2 GW_SHOW_SPINNER (spin2) ELSEIF r$ = "SPIN3" THEN spindisplayed = 3 GW_SHOW_SPINNER (spin3) ELSEIF r$ = "HIDE" THEN spindisplayed = 0 GW_HIDE_SPINNER () ELSEIF r$ = "RND" THEN IF spindisplayed = 2 THEN FOR i=1 TO 5 GW_MODIFY (spin2, "text", "Loading file #" + INT$ (i)) PAUSE 500 NEXT GW_MODIFY (spin2, "text", "Loading...") ELSEIF spindisplayed = 3 THEN FOR i=1 TO 5 GW_MODIFY (spin3, "text", "Checking DB record #" + INT$ (1 + RND() * 256)) PAUSE 500 NEXT GW_MODIFY (spin3, "text", "Building database") END IF END IF UNTIL r$ = "BACK" GOTO AdvancedPage %========================================================================================================== LockPage: IF !locktest THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("LockPage:") locktest = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (locktest, ~ GW_ADD_BAR_LBUTTON$ ("Back>BACK") + ~ GW_ADD_BAR_TITLE$ ("GW Lock Pattern") + ~ GW_ADD_BAR_RBUTTON$ ("Options>OPT")) IF ShowCodePanels THEN lockcode = GW_ADD_PANEL (locktest, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) locktxt1 = GW_ADD_TEXT (locktest, "Set your reference pattern:") mylock = GW_ADD_LOCK_PATTERN (locktest, "") locktxt2 = GW_ADD_TEXT (locktest, "Pattern value: ") GW_ADD_TEXT (locktest, "") IF ShowCodePanels THEN GW_ADD_LINK (locktest, "See the code of this page", GW_SHOW_PANEL$ (lockcode)) GW_ADD_BUTTON (locktest, "Back", "BACK") END IF IF !lockopt THEN lockopt = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") GW_ADD_TITLEBAR (lockopt, ~ GW_ADD_BAR_LBUTTON$ ("Cancel>BACK") + ~ GW_ADD_BAR_TITLE$ ("GW Lock Pattern")) GW_ADD_TEXTBOX (lockopt, "Lock Patterns simulate Android-like pattern lock mechanism.\n\nSpecify the lock options below (matrix size, show or hide pattern) then hit TEST") GW_ADD_TEXT (lockopt, "") lockslideW = GW_ADD_SLIDER (lockopt, "Pattern width:", 3, 9, 1, 3) lockslideH = GW_ADD_SLIDER (lockopt, "Pattern height:", 3, 9, 1, 3) lockcheck = GW_ADD_CHECKBOX (lockopt, "Keep pattern hidden while drawing") GW_ADD_TEXT (lockopt, "") GW_ADD_BUTTON (lockopt, "TEST", "OPTOK") END IF GW_RENDER (locktest) locktesting = 1 lockHide = 0 lockW = 3 lockH = 3 DO r$ = GW_WAIT_ACTION$() IF r$ = "OPT" THEN locktesting = 0 GW_RENDER (lockopt) GW_MODIFY (lockcheck, "checked", INT$(lockHide)) GW_MODIFY (lockslideW, "val", INT$(lockW)) GW_MODIFY (lockslideH, "val", INT$(lockH)) ELSEIF r$ = "OPTOK" THEN % Validate options and back to Lock testing lockHide = GW_GET_VALUE (lockcheck) lockW = GW_GET_VALUE (lockslideW) lockH = GW_GET_VALUE (lockslideH) GOSUB LockUpdate ELSEIF r$ = "BACK" THEN IF locktesting = 0 THEN % Cancel options and back to Lock testing GOSUB LockUpdate ELSE GOTO AdvancedPage END IF ELSEIF IS_IN ("pattern:", r$) = 1 THEN % User drew a pattern IF lockpattern$ = "" THEN % First pattern: define reference lockpattern$ = r$ r$ = "" GW_MODIFY (locktxt1, "text", "Now draw either a different pattern or your reference pattern again:") e$ = "Reference value: " + MID$(lockpattern$, 9) GW_MODIFY (locktxt2, "text", e$) ELSE % Second pattern and after: compare to reference e$ = "Reference value: " + MID$(lockpattern$, 9) + "\n" e$ += "Pattern value: " + MID$(r$, 9) + "\n" IF r$ = lockpattern$ THEN % Matching pattern e$ += "Pattern matches reference" ELSE % Pattern mismatch e$ += "Patterns mismatch!" GW_SHOW_WRONG_PATTERN (mylock) END IF GW_MODIFY (locktxt2, "text", e$) END IF PAUSE 1500 GW_CLEAR_LOCK_PATTERN (mylock) END IF UNTIL 0 LockUpdate: locktesting = 1 lockpattern$ = "" GW_RENDER (locktest) IF lockHide THEN JS(GW_ID$(mylock) + ".option('patternVisible',false)") JS(GW_ID$(mylock) + ".option('matrix',[" + INT$(lockH) + "," + INT$(lockW) + "])") JS("resizeLock(" + GW_ID$(mylock) + ")") RETURN %========================================================================================================== GalPage: IF !galp THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("GalPage:") INCLUDE "GW_GALLERY.bas" galp = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") galpttb = GW_ADD_TITLEBAR (galp, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Gallery") + barmenu$) GW_ADD_LISTENER (galp, galpttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN galcode = GW_ADD_PANEL (galp, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_TEXT (galp, "GW Gallery is composed of a fully responsive + adaptive image grid, associated with a powerful built-in viewer.") GOSUB GalListFiles IF canceled THEN GOTO AdvancedPage GW_ADD_TEXTBOX (galp, "Source: " + RTRIM$ (galpath$, "/")) galslide = GW_ADD_SLIDER (galp, "Thumbnails height: (pixel)", 60, 140, 20, 80) GW_ADD_LISTENER (galp, galslide, "change", "RESIZE") galctl = GW_ADD_GALLERY (galp, 80, cgal$[]) GW_START_CENTER (galp) GW_OPEN_GROUP (galp) GW_USE_THEME_CUSTO_ONCE ("inline icon=arrow-l mini") galpv = GW_ADD_BUTTON (galp, "Prev", "PREV") GW_USE_THEME_CUSTO_ONCE ("inline mini") galtx = GW_ADD_BUTTON (galp, "Images " + INT$ (cgalidx) + "-" + INT$ (MIN (cgalidx+7, cgalmax)) + "/" + INT$ (cgalmax), "") GW_USE_THEME_CUSTO_ONCE ("inline icon=arrow-r iconpos=right mini") galnx = GW_ADD_BUTTON (galp, "Next", "NEXT") GW_CLOSE_GROUP (galp) GW_STOP_CENTER (galp) GW_ADD_TEXT (galp, "") IF ShowCodePanels THEN GW_ADD_LINK (galp, "See the code of this page", GW_SHOW_PANEL$ (galcode)) GW_ADD_BUTTON (galp, "Back", "BACK") END IF cgalidx = 1 GW_RENDER (galp) GOSUB GalUpdate IF cgalidx = 1 THEN GW_DISABLE (galpv) GW_DISABLE (galtx) IF cgalidx + 7 >= cgalmax THEN GW_DISABLE (galnx) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "RESIZE" THEN GOSUB GalRefresh ELSEIF r$ = "NEXT" THEN cgalidx += 8 IF cgalidx = 9 THEN GW_ENABLE (galpv) IF cgalidx + 7 >= cgalmax THEN GW_DISABLE (galnx) GOSUB GalUpdate ELSEIF r$ = "PREV" THEN IF cgalidx + 7 >= cgalmax THEN GW_ENABLE (galnx) cgalidx -= 8 IF cgalidx = 1 THEN GW_DISABLE (galpv) GOSUB GalUpdate ELSEIF r$ = "BACK" & GW_GALLERY_IS_OPEN (galctl) THEN GW_CLOSE_GALLERY (galctl) r$ = "" END IF UNTIL r$ = "BACK" GOTO LibsPage GalListFiles: cgalmax = 1 DIM gal$[1] % full list of files DIM cgal$[1] % sub-list of files IF galpath$ = "" THEN galpath$ = "/DCIM/Camera" galpath$ = "/" + TRIM$ (galpath$, "/") + "/" % Check existence of image folder FILE.EXISTS fe, "../.." + galpath$ canceled = 0 WHILE !fe & !canceled POPUP "Folder " + galpath$ + " does not exist!" PAUSE 2000 INPUT "Select image folder", galpath$, galpath$, canceled galpath$ = "/" + TRIM$ (galpath$, "/") + "/" FILE.EXISTS fe, "../.." + galpath$ REPEAT IF canceled THEN RETURN % Build original list of files FILE.DIR "../.." + galpath$, ogal$[], "/" LIST.CREATE s, ogal LIST.ADD.ARRAY ogal, ogal$[] ARRAY.LENGTH al, ogal$[] % Only keep JPG and PNG images FOR i = al TO 1 STEP -1 e$ = RIGHT$ (LOWER$ (ogal$[i]), 4) IF e$ <> ".jpg" & e$ <> ".png" THEN LIST.REMOVE ogal, i al-- ELSE LIST.REPLACE ogal, i, "../.." + galpath$ + ogal$[i] END IF NEXT UNDIM ogal$[] % Create smaller array of 8 images for the gallery IF al = 0 THEN LIST.CLEAR ogal POPUP galpath$ + " does not contain any jpg nor png image" PAUSE 2000 galpath$ = "" GOTO GalListFiles ELSE LIST.TOARRAY ogal, gal$[] LIST.CLEAR ogal ARRAY.LENGTH cgalmax, gal$[] DIM cgal$[MIN (cgalmax, 8)] END IF RETURN GalUpdate: GW_MODIFY (galtx, "text", "Images " + INT$ (cgalidx) + "-" + INT$ (MIN (cgalidx+7, cgalmax)) + "/" + INT$ (cgalmax)) ARRAY.COPY gal$[ cgalidx, MIN (cgalidx+7, cgalmax) ], cgal$[] cgal$[MIN (cgalmax - cgalidx + 1, 8)] += ">BACK" GW_AMODIFY (galctl, "content", cgal$[]) GalRefresh: GW_GALLERY_UPDATE (galctl, GW_GET_VALUE (galslide)) RETURN %========================================================================================================== ColpikPage: IF !cpp THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ColpikPage:") cpp = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") cppttb = GW_ADD_TITLEBAR (cpp, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Colorpicker + Class") + barmenu$) GW_ADD_LISTENER (cpp, cppttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN cppcode = GW_ADD_PANEL (cpp, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) class$ = GW_CODE_HIGHLIGHT$ ("myclass = GW_NEW_CLASS (\"myclass\")", BLA$[], BLU$[], RED$[]) GW_ADD_TEXT (cpp, "First let's create a class: " + class$) myclass = GW_NEW_CLASS ("myclass") GW_INJECT_HTML(cpp, "") col0$ = RandCol$() colpik = GW_ADD_COLORPICKER (cpp, "Then add a Colorpicker control:", MID$(col0$, 2)) GW_ADD_TEXT (cpp, "Finally add 20 buttons sharing the same custo class='myclass'") btncusto = GW_NEW_THEME_CUSTO ("inline color=a class='myclass'") GW_USE_THEME_CUSTO (btncusto) READ.DATA "🐭", "🐮", "🐰", "🐊", "🐋" % unicode characters for animal emojis READ.DATA "🐌", "🐍", "🐎", "🐑", "🐒" READ.DATA "🐓", "🐖", "🐗", "🐙", "🐝" READ.DATA "🐞", "🐟", "🐢", "🐥", "🐧" FOR i=1 TO 20 READ.NEXT char$ GW_ADD_BUTTON(cpp, char$, "") NEXT GW_RESET_THEME_CUSTO () GW_ADD_TEXT (cpp, "Every time the user changes the color, the Colorpicker will send a notification, we'll get the color from it and change the background color of the class 'myclass' which will have an impact on the 20 buttons at once!") GW_ADD_TEXT (cpp, "") IF ShowCodePanels THEN GW_ADD_LINK (cpp, "See the code of this page", GW_SHOW_PANEL$ (cppcode)) GW_ADD_BUTTON (cpp, "Back", "BACK") END IF GW_RENDER (cpp) GW_MODIFY (myclass, "style:background", col0$) DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF IS_IN (GW_ID$(colpik), r$) = 1 THEN % color picker change ncol$ = MID$ (r$, IS_IN(":", r$)+1) % extract '#rrggbb' out of 'CtlId:#rrggbb' GW_MODIFY (myclass, "style:background", ncol$) END IF UNTIL r$ = "BACK" GOTO AdvancedPage %========================================================================================================== ListenPage: IF !lsp THEN IF ShowCodePanels THEN code$ = SelfExtract$ ("ListenPage:") lsp = GW_NEW_PAGE() GW_USE_THEME_CUSTO_ONCE ("icon=back iconpos=left") lspttb = GW_ADD_TITLEBAR (lsp, GW_ADD_BAR_LBUTTON$ ("Back>BACK") + GW_ADD_BAR_TITLE$ ("GW Listeners") + barmenu$) GW_ADD_LISTENER (lsp, lspttb, "rmenuchange", "JUMP") % event will be of the form "JUMP:value_selected$" IF ShowCodePanels THEN lspcode = GW_ADD_PANEL (lsp, GW_CODE_HIGHLIGHT$ (code$, BLA$[], BLU$[], RED$[])) GW_ADD_LISTENER (lsp, lspcode, "close", "PANEL") href$ = GW_SHOW_PANEL$ (lspcode) ELSE href$ = "#" END IF GW_ADD_TEXTBOX (lsp, "A LISTENER allows to send a message when a certain event is triggered on a control:") e$ = GW_CODE_HIGHLIGHT$ ("GW_ADD_LISTENER (page, panel_ctl, \"close\", action$)", BLA$[], BLU$[], RED$[]) e$ += "↳ Touch here to open " e$ += "the left panel, then touch anywhere on the right to close it." GW_ADD_TEXT (lsp, e$) e$ = GW_CODE_HIGHLIGHT$ ("GW_ADD_LISTENER (page, input_ctl, \"keydown|clear\", action$)", BLA$[], BLU$[], RED$[]) linp = GW_ADD_INPUTLINE (lsp, e$, "Change me!") GW_ADD_LISTENER (lsp, linp, "keydown", "INPCHG") GW_ADD_LISTENER (lsp, linp, "clear", "INPCLR") linpt = GW_ADD_TEXT (lsp, "") e$ = GW_CODE_HIGHLIGHT$ ("GW_ADD_LISTENER (page, radio_ctl|checkbox|flipswitch |slider|selectbox|colorpicker, \"change\", action$)", BLA$[], BLU$[], RED$[]) lflip = GW_ADD_FLIPSWITCH (lsp, e$, "on", "off") GW_ADD_LISTENER (lsp, lflip, "change", "FLIP") e$ = GW_CODE_HIGHLIGHT$ ("GW_ADD_LISTENER (page, any_ctl, \"swipeleft|swiperight\", action$)", BLA$[], BLU$[], RED$[]) GW_ADD_TEXT (lsp, e$) lspbtn1 = GW_ADD_BUTTON (lsp, "I count to 5. Swipe me left or right", "COUNT") ARRAY.LOAD lspnul$[], "OK" lspdm1 = GW_ADD_DIALOG_MESSAGE (lsp, "", "No, you need to SWIPE me left or right...", lspnul$[]) e$ = GW_CODE_HIGHLIGHT$ ("GW_ADD_LISTENER (page, any_ctl, \"longpress\", action$)", BLA$[], BLU$[], RED$[]) GW_ADD_TEXT (lsp, e$) lspbtn2 = GW_ADD_BUTTON (lsp, "Long press me!", "PRESS") lspdm2 = GW_ADD_DIALOG_MESSAGE (lsp, "", "No, you need to LONG press me!", lspnul$[]) e$ = "You can detect swipe or long press anywhere in a page by passing a control id of '0' to the listener.\n" e$ += "Now try to go back to the previous page and do a long press anywhere in it for a surprise 😉" GW_ADD_TEXT (lsp, e$) e$ = GW_CODE_HIGHLIGHT$ ("GW_ADD_LISTENER (page, 0, \"idle30\", action$)", BLA$[], BLU$[], RED$[]) e$ += "↳ Finally stay idle in the page for 30 seconds to disable this button:" GW_ADD_TEXT (lsp, e$) lspbtn3 = GW_ADD_BUTTON (lsp, "I'm enabled", "") GW_ADD_TEXT (lsp, "") IF ShowCodePanels THEN GW_ADD_LINK (lsp, "See the code of this page", GW_SHOW_PANEL$ (lspcode)) GW_ADD_BUTTON (lsp, "Back", "BACK") GW_ADD_LISTENER(lsp, lspbtn1, "swiperight", "SWIPR") GW_ADD_LISTENER(lsp, lspbtn1, "swipeleft", "SWIPL") GW_ADD_LISTENER(lsp, lspbtn2, "longpress", "HOLD") GW_ADD_LISTENER(lsp, 0, "idle30", "SLEEP") % idle for 30 seconds END IF GW_RENDER (lsp) i = 5 IF ShowCodePanels & once = 0 THEN once = 1 PAUSE 1000 GW_SHOW_PANEL (lspcode) PAUSE 1000 GW_CLOSE_PANEL (lspcode) END IF DO r$ = GW_WAIT_ACTION$() IF IS_IN ("JUMP:", r$) = 1 THEN ARRAY.SEARCH barmenu$[], MID$ (r$, 6), i : i-- % ignore first array index (menu title) TIMER.CLEAR : GOTO i, BasicPage, InputPage, AdvancedPage, ThemePage, LibsPage, Bye ELSEIF r$ = "PANEL" THEN POPUP "Event \"close\" was triggered on the panel" ELSEIF r$ = "FLIP" THEN POPUP "Event \"change\" was triggered on the flipswitch" ELSEIF r$ = "INPCHG" THEN GW_MODIFY (linpt, "text", "Event \"keydown\" was triggered") ELSEIF r$ = "INPCLR" THEN GW_MODIFY (linpt, "text", "Event \"clear\" was triggered") ELSEIF r$ = "COUNT" THEN GW_SHOW_DIALOG (lspdm1) ELSEIF r$ = "SWIPR" THEN i = MIN(10, i+1) GW_MODIFY (lspbtn1, "text", "I count to " + INT$(i) + ". Swipe me left or right") ELSEIF r$ = "SWIPL" THEN i = MAX(0, i-1) GW_MODIFY (lspbtn1, "text", "I count to " + INT$(i) + ". Swipe me left or right") ELSEIF r$ = "PRESS" THEN GW_MODIFY (lspbtn2, "text", "Long press me!") GW_SHOW_DIALOG (lspdm2) ELSEIF r$ = "HOLD" THEN GW_MODIFY (lspbtn2, "text", "Yes! You got it 😉") ELSEIF r$ = "SLEEP" THEN GW_MODIFY (lspbtn3, "text", "I'm disabled") GW_DISABLE (lspbtn3) END IF UNTIL r$ = "BACK" GOTO AdvancedPage %========================================================================================================== DemoInit: IF demover$<>GW_VER$ THEN END "Mismatched versions: GW demo "+demover$+" Vs GW lib "+GW_VER$+"\nPlease update your files..." ARRAY.LOAD buzz[], 1, 100 AUDIO.LOAD whee, "whee.mp3" % Used for code syntax highlighting, see GW_CODE_HIGHLIGHT$ () ARRAY.LOAD BLA$[], "~", "INCLUDE", "END IF", "IF", "THEN", "ELSE", "GOTO", "GOSUB", "INT$" ~ "LEFT$", "IS_IN", "POPUP", "ARRAY.LOAD", "ARRAY.DELETE", "ARRAY.SHUFFLE", "ARRAY.LENGTH" ~ "PAUSE", "PRINT", "END", "DO", "UNTIL", "WHILE", "REPEAT", "RETURN", "SPLIT", "FOR", "NEXT" ~ "LOWER$", "CHR$", "TIMER.SET", "TIMER.CLEAR", "TIMER.RESUME", "ONTIMER:", "VIBRATE", "TONE" ~ "BYTE.OPEN", "BYTE.COPY", "LIST.CREATE", "LIST.ADD", "LIST.TOARRAY", "LIST.SIZE", "LIST.REMOVE" ARRAY.LOAD RED$[], "+", ",", "(", ")", "!", "& ", "|", "%", "[", "]" DIM BLU$[GW_KEYWORD_NB()] GW_POPULATE_KEYWORD_ARRAY(BLU$[]) FN.DEF SelfExtract$ (label$) LF$ = CHR$(10) % Line Feed DQ$ = CHR$(34) % Double Quote BS$ = CHR$(92) % Back Slash GRABFILE buf$, "../source/GW_demo.bas" IF buf$="" POPUP "Warning: misplaced demo\nCannot find \"source/GW_demo.bas\"\nCode panels will be empty" FN.RTN "" END IF i = IS_IN (LF$ + label$ + LF$, buf$) IF !i THEN FN.RTN "" i += LEN (LF$ + label$ + LF$) buf$ = MID$ (buf$, i) i = IS_IN (LF$ + "%========", buf$) IF !i THEN FN.RTN "" buf$ = LEFT$ (buf$, i-1) SPLIT line$[], buf$, LF$ ARRAY.LENGTH n, line$[] r$ = "INCLUDE " + DQ$ + "GW.bas" + DQ$ + "\n" i=3 % Start after "IF !page THEN" and the call to SelfExtract$ () WHILE line$[i] <> "END IF" & IS_IN ("ELSE % ", line$[i]) <> 1 line$[i] = REPLACE$ (line$[i], "<", "<") % do not interpret html line$[i] = REPLACE$ (line$[i], "&#", "&#") line$[i] = REPLACE$ (line$[i], BS$ + "n", " ") % do not display \n line$[i] = REPLACE$ (line$[i], "

", "") line$[i] = REPLACE$ (line$[i], "

", "") IF REPLACE$(line$[i], " ", "") <> "" THEN r$ += line$[i] + "\n" i++ REPEAT IF IS_IN ("ELSE % ", line$[i]) = 1 THEN DO i++ UNTIL line$[i] = "END IF" END IF FOR i=i+1 TO n line$[i] = REPLACE$ (line$[i], BS$ + "n", " ") % do not display \n IF REPLACE$(line$[i], " ", "") <> "" THEN r$ += line$[i] + "\n" NEXT FN.RTN ""+r$+"" FN.END FN.DEF RandCol$() e$="#" FOR i=1 TO 3 e$+=RIGHT$("0"+HEX$(256*RND()), 2) NEXT FN.RTN e$ FN.END RETURN %-- END OF GW DEMO --%