% Tracking service tracker$ = "http://parcelsapp.com/en/tracking/" % "https://m.17track.net/en/track#nums=" % Lists and Fns creation list.create s, itm_name list.create s, itm_date list.create s, itm_image list.create s, itm_link list.create s, itm_track gosub DefFns grid=0 % Initialize GW lib gw_silent_load=1 include "GW.bas" gw_zoom_input(0) % Create GW page p=gw_new_page() gosub ReadItems % Dialog message when short-pressing on an item array.load open$[], "TRACK SHIPMENT>TRACK", "OPEN SELLER PAGE>SELLER", "Cancel" dlg_opn=gw_add_dialog_message(p, "ITEM DETAILS", "", open$[]) gw_custo_dlgbtn(p,dlg_opn,"TRACK SHIPMENT","icon=location") gw_custo_dlgbtn(p,dlg_opn,"OPEN SELLER PAGE","icon=eye") % Dialog message when long-pressing on an item array.load options$[], "EDIT ITEM>EDIT", "DELETE ITEM>DEL", "Cancel" dlg_opt=gw_add_dialog_message(p, "ITEM OPTIONS", "", options$[]) gw_custo_dlgbtn(p,dlg_opt,"EDIT ITEM","icon=edit") gw_custo_dlgbtn(p,dlg_opt,"DELETE ITEM","icon=delete") % Dialog inputs for editing an item array.load nxt$[], "NEXT>NEXT" array.load dne$[], "DONE>DONE" dlg_nam=gw_add_dialog_input(p,"ITEM DETAIL (1/5)","Enter item name, price, etc.","",nxt$[]) dlg_dat=gw_add_dialog_input(p,"ITEM DETAIL (2/5)","Enter date of purchase",curDate$(),nxt$[]) dlg_img=gw_add_dialog_input(p,"ITEM DETAIL (3/5)","Enter url of item image","@>",nxt$[]) dlg_lnk=gw_add_dialog_input(p,"ITEM DETAIL (4/5)","Enter link to seller page","@>",nxt$[]) dlg_trk=gw_add_dialog_input(p,"ITEM DETAIL (5/5)","Enter tracking number","",dne$[]) % Dialog message to save sortable list view array.load ync$[], "YES>SAVE", "NO>DISCARD", "Cancel" gw_use_theme_custo_once("inline") dlg_sav=gw_add_dialog_message(p, "ITEM LIST", "Save your changes?", ync$[]) % Button to add new item gw_use_theme_custo_once("icon=plus") btn=gw_add_button(p,"ADD INCOMING ITEM","NEW") btnid$=gw_id$(btn) % Logo gw_start_center(p) gw_add_image(p,"incoming.jpg") gw_stop_center(p) % Image view of items items=gw_add_placeholder(p) gw_inject_html(p,"") % Sortable (text-only) list mode gw_inject_html(p,"

Reorganize list with drag & drop:

") array.load itm$[], "~" % sortable listview ulist=gw_add_listview(p,itm$[]) % Thumbnail grid mode gw_use_theme_custo_once("icon=grid notext hover=SE") gw_add_button(p,"","GRID") % Refresh and render page DisplayPage: gosub RefreshItems gw_render(p) gosub RefreshGrid % Handle user input do r$=gw_wait_action$() % Grid mode if r$="GRID" if grid=2 % save context ctx$=r$ if ls then gosub SortItems_Check if chg then r$="" endif if r$="GRID" grid=mod(++grid,3) gosub RefreshGrid endif % New item elseif r$="NEW" % 1/5 enter item name itm_step=1 gw_modify(dlg_nam,"input","") gw_show_dialog(dlg_nam) elseif r$="NEXT" & itm_step<10 pause 500 if itm_step=1 nam$=gw_get_value$(dlg_nam) % 2/5 enter item date itm_step=2 gw_modify(dlg_dat,"input",curDate$()) gw_show_dialog(dlg_dat) elseif itm_step=2 dat$=gw_get_value$(dlg_dat) % 3/5 enter item image itm_step=3 gw_modify(dlg_img,"input","@>") gw_show_dialog(dlg_img) elseif itm_step=3 img$=gw_get_value$(dlg_img) % 4/5 enter item seller page itm_step=4 gw_modify(dlg_lnk,"input","@>") gw_show_dialog(dlg_lnk) elseif itm_step=4 lnk$=gw_get_value$(dlg_lnk) % 5/5 enter item tracking # itm_step=5 gw_modify(dlg_trk,"input","") gw_show_dialog(dlg_trk) endif elseif r$="DONE" & itm_step=5 trk$=gw_get_value$(dlg_trk) list.insert itm_name,1,nam$ list.insert itm_date,1,dat$ list.insert itm_image,1,img$ list.insert itm_link,1,lnk$ list.insert itm_track,1,trk$ gosub SaveItems goto DisplayPage % Short press on item > tracking or seller link elseif is_in("ITM#",r$)=1 itm=val(mid$(r$,5)) list.get itm_track,itm,trk$ list.get itm_link,itm,lnk$ if trk$<>"" & lnk$<>"" gw_show_dialog(dlg_opn) elseif trk$<>"" browse tracker$+trk$ elseif lnk$<>"" browse lnk$ endif elseif r$="SELLER" browse lnk$ elseif r$="TRACK" browse tracker$+trk$ % Long press on item > edit or remove elseif is_in("OPT#",r$)=1 itm=val(mid$(r$,5)) gw_show_dialog(dlg_opt) elseif r$="DEL" list.remove itm_name,itm list.remove itm_date,itm list.remove itm_image,itm list.remove itm_link,itm list.remove itm_track,itm gosub SaveItems goto DisplayPage elseif r$="EDIT" pause 500 % 1/5 edit item name itm_step=11 list.get itm_name,itm,nam$ gw_modify(dlg_nam,"input",nam$) gw_show_dialog(dlg_nam) elseif r$="NEXT" & itm_step>=10 pause 500 if itm_step=11 nam$=gw_get_value$(dlg_nam) % 2/5 edit item date itm_step=12 list.get itm_date,itm,dat$ if is_in("added on:",dat$) then dat$=trim$(mid$(dat$,10)) gw_modify(dlg_dat,"input",dat$) gw_show_dialog(dlg_dat) elseif itm_step=12 dat$=gw_get_value$(dlg_dat) % 3/5 edit item image itm_step=13 list.get itm_image,itm,img$ gw_modify(dlg_img,"input","@>"+img$) gw_show_dialog(dlg_img) elseif itm_step=13 img$=gw_get_value$(dlg_img) % 4/5 edit item seller page itm_step=14 list.get itm_link,itm,lnk$ gw_modify(dlg_lnk,"input","@>"+lnk$) gw_show_dialog(dlg_lnk) elseif itm_step=14 lnk$=gw_get_value$(dlg_lnk) % 5/5 edit item tracking # itm_step=15 list.get itm_track,itm,trk$ gw_modify(dlg_trk,"input",trk$) gw_show_dialog(dlg_trk) endif elseif r$="DONE" & itm_step=15 trk$=gw_get_value$(dlg_trk) list.replace itm_name,itm,nam$ list.replace itm_date,itm,dat$ list.replace itm_image,itm,img$ list.replace itm_link,itm,lnk$ list.replace itm_track,itm,trk$ gosub SaveItems goto DisplayPage % Answered yes after reorganizing item list else if r$="SAVE" gosub SortItems_Save if ctx$="GRID" grid=0 goto DisplayPage endif r$=ctx$ ctx$="" % Answered no after reorganizing item list else if r$="DISCARD" if ctx$="GRID" grid=0 gw_render(p) % force page reinit gosub RefreshGrid endif r$=ctx$ ctx$="" else if r$="BACK" if grid=2 ctx$=r$ % save context gosub SortItems_Check if chg then r$="" endif endif until r$="BACK" if is_apk() then exit gw_dump(p) end "" % Subs and Functions ReadItems: text.open r, fid, "incoming.dat" if fid>=0 do % read item name text.readln fid,e$:if e$="EOF" then d_u.break list.add itm_name, e$ % read item date text.readln fid,e$:if e$="EOF" then e$="" if is_in("added on:",e$) then e$=trim$(mid$(e$,10)) list.add itm_date, e$ % read item image text.readln fid,e$:if e$="EOF" then e$="" if is_in("img:",e$) then e$=mid$(e$,5) list.add itm_image, e$ % read item seller link text.readln fid,e$:if e$="EOF" then e$="" if is_in("lnk:",e$) then e$=mid$(e$,5) list.add itm_link, e$ % read item tracking # text.readln fid,e$:if e$="EOF" then e$="" if is_in("track:",e$) then e$=mid$(e$,7) list.add itm_track, e$ until 0 text.close fid endif return SaveItems: text.open w, fid, "incoming.dat" list.size itm_name,n for i=1 to n % write item name list.get itm_name,i,e$ text.writeln fid,e$ % write item date list.get itm_date,i,e$ text.writeln fid,"added on: "+e$ % write item image list.get itm_image,i,e$ text.writeln fid,"img:"+e$ % write item seller link list.get itm_link,i,e$ text.writeln fid,"lnk:"+e$ % write item tracking # list.get itm_track,i,e$ text.writeln fid,"track:"+e$ next text.close fid return RefreshItems: % Update image view html$="" list.size itm_name,n for i=1 to n list.get itm_name,i,nam$ list.get itm_date,i,dat$ html$+=gw_add_text$(""+nam$+" added on "+dat$+"") list.get itm_image,i,img$ if img$="" then img$="unknown.png" html$+=gw_add_image$(img$+">ITM#"+int$(i)) html$+=gw_add_listener$(gw_last_id(),"longpress","OPT#"+int$(i)) html$+=gw_add_text$("Long-press for options") html$+=gw_add_text$("

") next gw_fill_placeholder(p,items,html$) return RefreshGrid: if grid=0 % default small thumbnail grid js("$('img').css('height','90px')") js("$('img').css('display','inline-block')") js("$('img').css('margin','4px')") js("$('.ui-body').css('display','none')") js("$('h4').css('display','none')") js("$('ul').css('display','none')") js("$('#"+btnid$+"').css('display','')") elseif grid=1 % big image view js("$('img').css('height','')") js("$('img').css('display','')") js("$('img').css('margin','')") js("$('.ui-body').css('display','')") js("$('h4').css('display','none')") js("$('ul').css('display','none')") js("$('hr').css('display','')") js("$('br').css('display','')") else if grid=2 % sortable text list view js("$('img').css('display','none')") js("$('.ui-body').css('display','none')") js("$('h4').css('display','')") js("$('ul').css('display','')") js("$('hr').css('display','none')") js("$('br').css('display','none')") js("$('#"+btnid$+"').css('display','none')") % Update text-only sortable list view list.size itm_name, ls if ls array.delete itm$[] list.toarray itm_name,itm$[] itm$[1]="~"+itm$[1] % sortable listview gw_amodify(ulist,"content",itm$[]) end if endif return SortItems_Check: chg=gw_listview_changed(ulist) if chg then gw_show_dialog(dlg_sav) return SortItems_Save: nli$=gw_get_listview_order$(ulist) SortList(itm_name,nli$) SortList(itm_date,nli$) SortList(itm_image,nli$) SortList(itm_link,nli$) SortList(itm_track,nli$) gosub SaveItems return DefFns: fn.def curDate$() array.load m$[],"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEPT","OCT","NOV","DEC" time y$,m$,d$ fn.rtn trim$(format$("%%",val(d$))+"-"+m$[val(m$)]) fn.end fn.def SortList(list,order$) list.toarray list,a$[] gw_reorder_array(a$[],order$) list.clear list list.add.array list,a$[] fn.end return