Discussion Topics > Script BASIC

IUP GUI

(1/1)

John Spikowski:
A way to expand on your Sage 100 application is using the cross platform, open source IUP (Portable User Interface) library with ScriptBasic. This is an example of an online dictionary UI.


--- Code: Script BASIC ---' IUP Online Dictionary IMPORT iup.sbi servers[0]="dict.org"servers[1]="dict1.us.dict.org"servers[2]="all.dict.org" about="""This is a Demoof the IUP GUI Bindingfor Scriptbasic""" ' Initialize IUPIup::Open() ' Create main window win = Iup::Create("dialog")  Iup::SetAttributes(win, "TITLE=\"ScriptBasic IUP Online Dictionary\", SIZE=500x300")  Iup::SetCallback(win,"CLOSE_CB",ADDRESS(Win_exit())) ' Create container to house ALL GUI objects vbox = Iup::Create("vbox")  Iup::SetAttributes(vbox, "MARGIN=10x10") ' Create server panel topBox = Iup::Create("hbox")  Iup::SetAttributes(topBox, "GAP=10")  Iup::Append(vbox, topBox)serverFrame = Iup::Create("frame")  Iup::SetAttributes(serverFrame, "TITLE=Servers, EXPAND=YES")  Iup::Append(topBox, serverFrame)serverBox = Iup::Create("hbox")  Iup::SetAttributes(serverBox, "GAP=5")  Iup::Append(serverFrame, serverBox)serverCombo = Iup::Create("list")  Iup::SetAttributes(serverCombo, "DROPDOWN=YES, SIZE=120x, EXPAND=HORIZONTAL, VALUE=1")  Iup::Append(serverBox, serverCombo)  Iup::SetCallback(serverCombo, "ACTION", ADDRESS(serverCombo_selected()))btnFetch = Iup::Create("button")  Iup::SetAttributes(btnFetch, "TITLE=Fetch, SIZE = 50x")  Iup::Append(serverBox, btnFetch)  Iup::SetCallback(btnFetch, "ACTION", ADDRESS(btnFetch_clicked())) ' Create control panel controlFrame = Iup::Create("frame")  Iup::SetAttributes(controlFrame, "TITLE=Controls")  Iup::Append(topBox, controlFrame)controlBox = Iup::Create("hbox")  Iup::SetAttributes(controlBox, "GAP=5")  Iup::Append(controlFrame, controlBox)btnAbout = Iup::Create("button")  Iup::SetAttributes(btnAbout, "TITLE=About, SIZE = 50x")  Iup::Append(controlBox, btnAbout)  Iup::SetCallback(btnAbout, "ACTION", ADDRESS(btnAbout_clicked()))btnClear = Iup::Create("button")  Iup::SetAttributes(btnClear, "TITLE=Clear, SIZE = 50x")  Iup::Append(controlBox, btnClear)  Iup::SetCallback(btnClear, "ACTION", ADDRESS(btnClear_clicked()))btnExit = Iup::Create("button")  Iup::SetAttributes(btnExit, "TITLE=Exit, SIZE = 50x")  Iup::Append(controlBox, btnExit)  Iup::SetCallback(btnExit,"ACTION",ADDRESS(Win_exit())) ' Create dictionary panel dictFrame = Iup::Create("frame")  Iup::SetAttributes(dictFrame, "TITLE=Dictionaries")  Iup::Append(vbox, dictFrame)serverList = Iup::Create("list")  Iup::SetAttributes(serverList, "EXPAND=YES, VISIBLELINES=1")  Iup::Append(dictFrame, serverList)  Iup::SetCallback(serverList, "ACTION", ADDRESS(serverList_selected())) ' Create text part transFrame = IUP::Create("frame")  Iup::SetAttributes(transFrame, "TITLE=Translation")  Iup::Append(vbox, transFrame)text = Iup::Create("text")  Iup::SetAttributes(text, "MULTILINE=YES, EXPAND=YES")  Iup::Append(transFrame, text) ' Create entry and search button bottomBox = Iup::Create("hbox")  Iup::SetAttributes(bottomBox, "GAP=10")  Iup::Append(vbox, bottomBox)label = Iup::Create("label")  Iup::SetAttributes(label, "TITLE=\"Enter Word to Search For:\", SIZE=x12")  Iup::Append(bottomBox, label)entry = Iup::Create("text")  Iup::SetAttributes(entry, "EXPAND=HORIZONTAL")  Iup::Append(bottomBox, entry)btnSearch = Iup::Create("button")  Iup::SetAttributes(btnSearch,"TITLE=Search, SIZE=50x")  Iup::Append(bottomBox, btnSearch)  Iup::SetCallback(btnSearch, "ACTION", ADDRESS(btnSearch_clicked()))chkAll = Iup::Create("toggle")  Iup::SetAttributes(chkAll, "TITLE=ALL, SIZE=x12")  Iup::Append(bottomBox, chkAll)chkUTF = Iup::Create("toggle")  Iup::SetAttributes(chkUTF, "TITLE=UTF-8, SIZE=x12")  Iup::Append(bottomBox, chkUTF) ' Add the main GUI container to the Window Iup::Append(win, vbox) ' Setup dialog defaults Iup::Show(win)Iup::SetFocus(btnFetch)FOR i = 0 TO UBOUND(servers)  Iup::SetAttribute(serverCombo, "APPENDITEM", servers[i])NEXTIup::SetAttribute(serverCombo, "VALUE", "1")Iup::Update(serverCombo)server_selection = servers[0] ' Main processing loop Iup::MainLoop()Iup::Close()END ' Callback routines SUB Win_exit  Iup::ExitLoop = TRUEEND SUB SUB btnAbout_clicked  Iup::Message("ABOUT", about)END SUB SUB serverCombo_selected  server_selection = Iup::GetListText()END SUB SUB serverList_selected  whichDictionary = Iup::GetListText()END SUB SUB btnFetch_clicked  LOCAL dat, total, count  ON ERROR GOTO G_NetError  OPEN server_selection & ":2628" FOR SOCKET AS #1  PRINT#1,"SHOW DB\n"  LINE INPUT#1, dat  LINE INPUT#1, dat  count = 0  WHILE LEFT(dat, 1) <> "."    LINE INPUT#1, dat    IF LEFT(dat, 1) <> "." THEN total[count] = TRIM(dat)    count+=1  WEND  PRINT#1,"QUIT\n"  CLOSE(#1)  FOR cnt = 0 TO count - 2    Iup::SetAttribute(serverList, "APPENDITEM", total[cnt])  NEXT  Iup::SetAttribute(serverList, "VALUE", "1")  Iup::Update(serverCombo)  whichDictionary = total[0]  EXIT SUB   G_NetError:  PRINT "Server ",server_selection," not available. (",ERROR,")\n"END SUB SUB btnClear_clicked  Iup::ClearList(serverList)  Iup::SetAttribute(text, "VALUE", "")  Iup::SetAttribute(entry, "VALUE", "")END SUB SUB btnSearch_clicked  LOCAL dict, dat, total, info  IUP::SetAttribute(text, "VALUE","Fetching....")  ON ERROR GOTO L_NetError  dict = LEFT(whichDictionary, INSTR(whichDictionary, " "))  OPEN server_selection & ":2628" FOR SOCKET AS 1  IF Iup::GetAttribute(chkAll, "VALUE") THEN    PRINT#1,"DEFINE * " & Iup::GetAttribute(entry,"VALUE") & "\n"  ELSE    PRINT#1,"DEFINE " & dict & " " & Iup::GetAttribute(entry,"VALUE") & "\n"  END IF  REPEAT    LINE INPUT#1, dat    IF LEFT(dat, 3) = "151" THEN      total$ &= "------------------------------\r\n"      total$ &= RIGHT(dat, LEN(dat) - LEN(Iup::GetAttribute(entry, "VALUE")) - LEN(dict))      total$ &= "------------------------------\r\n"      REPEAT        LINE INPUT#1, info        info = REPLACE(info, CHR(34), CHR(92) & CHR(34))        IF LEFT(info, 1) <> "." THEN total &= TRIM(info) & "\n"      UNTIL LEFT(info, 1) = "."      total &= "\n"    END IF  UNTIL LEFT(dat, 3) = "250" OR VAL(LEFT(dat, 3)) > 499  PRINT#1,"QUIT\n"  CLOSE(#1)  IF LEFT(dat, 3) = "552" THEN    total = "No match found."  ELSE IF LEFT(dat, 3) = "501" THEN    total = "Select a dictionary first!"  ELSE IF LEFT(dat, 3) = "550" THEN    total = "Invalid database!"  END IF  Iup::SetAttribute(text, "VALUE", total)EXIT SUB L_NetError:  dat[0] = "Could not lookup word! (" & ERROR & ")"  Iup::SetAttribute(text, "VALUE", dat)END SUB 

Navigation

[0] Message Index

Go to full version