// gcc webbrowser.c -liup -liupweb -o webbrowser
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iup.h>
#include <iupweb.h>
#include "cbasic.h"
LOCAL FUNCTION int navigate_cb(Ihandle* self, char* url)
BEGIN_FUNCTION
PRINT("NAVIGATE_CB: %s\n", url);
(void)self;
IF
(strstr(url
, "download")!=NULL
) THEN
RETURN_FUNCTION(IUP_IGNORE);
END_IF
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int error_cb(Ihandle* self, char* url)
BEGIN_FUNCTION
PRINT("ERROR_CB: %s\n", url);
(void)self;
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int completed_cb(Ihandle* self, char* url)
BEGIN_FUNCTION
PRINT("COMPLETED_CB: %s\n", url);
(void)self;
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int newwindow_cb(Ihandle* self, char* url)
BEGIN_FUNCTION
PRINT("NEWWINDOW_CB: %s\n", url);
IupSetAttribute(self, "VALUE", url);
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int back_cb(Ihandle* self)
BEGIN_FUNCTION
DIM Ihandle* AS web = (Ihandle*)IupGetAttribute(self, "MY_WEB");
IupSetAttribute(web, "BACKFORWARD", "-1");
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int forward_cb(Ihandle* self)
BEGIN_FUNCTION
DIM Ihandle* AS web = (Ihandle*)IupGetAttribute(self, "MY_WEB");
IupSetAttribute(web, "BACKFORWARD", "1");
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int stop_cb(Ihandle* self)
BEGIN_FUNCTION
DIM Ihandle* AS web = (Ihandle*)IupGetAttribute(self, "MY_WEB");
IupSetAttribute(web, "STOP", NULL);
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int reload_cb(Ihandle* self)
BEGIN_FUNCTION
DIM Ihandle* AS web = (Ihandle*)IupGetAttribute(self, "MY_WEB");
IupSetAttribute(web, "RELOAD", NULL);
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
LOCAL FUNCTION int load_cb(Ihandle* self)
BEGIN_FUNCTION
DIM Ihandle* AS txt = (Ihandle*)IupGetAttribute(self, "MY_TEXT");
DIM Ihandle* AS web = (Ihandle*)IupGetAttribute(self, "MY_WEB");
IupSetAttribute(web, "VALUE", IupGetAttribute(txt, "VALUE"));
RETURN_FUNCTION(IUP_DEFAULT);
END_FUNCTION
SUB WebBrowserTest(void)
BEGIN_SUB
DIM Ihandle AS *txt, *dlg, *web;
DIM Ihandle AS *btLoad, *btReload, *btBack, *btForward, *btStop;
IupWebBrowserOpen();
web = IupWebBrowser();
dlg = IupDialog(IupVbox(IupHbox(btBack = IupButton("Back", NULL),
btForward = IupButton("Forward", NULL),
txt = IupText(""),
btLoad = IupButton("Load", NULL),
btReload = IupButton("Reload", NULL),
btStop = IupButton("Stop", NULL),
NULL),
web, NULL));
IupSetAttribute(dlg, "TITLE", "IupWebBrowser");
IupSetAttribute(dlg, "MY_TEXT", (char*)txt);
IupSetAttribute(dlg, "MY_WEB", (char*)web);
IupSetAttribute(dlg, "RASTERSIZE", "800x600");
IupSetAttribute(dlg, "MARGIN", "10x10");
IupSetAttribute(dlg, "GAP", "10");
IupSetAttribute(txt, "VALUE", "https://allbasic.info/forum");
IupSetAttribute(web, "VALUE", IupGetAttribute(txt, "VALUE"));
IupSetAttributeHandle(dlg, "DEFAULTENTER", btLoad);
IupSetAttribute(txt, "EXPAND", "HORIZONTAL");
IupSetCallback(btLoad, "ACTION", (Icallback)load_cb);
IupSetCallback(btReload, "ACTION", (Icallback)reload_cb);
IupSetCallback(btBack, "ACTION", (Icallback)back_cb);
IupSetCallback(btForward, "ACTION", (Icallback)forward_cb);
IupSetCallback(btStop, "ACTION", (Icallback)stop_cb);
IupSetCallback(web, "NEWWINDOW_CB", (Icallback)newwindow_cb);
IupSetCallback(web, "NAVIGATE_CB", (Icallback)navigate_cb);
IupSetCallback(web, "ERROR_CB", (Icallback)error_cb);
IupSetCallback(web, "COMPLETED_CB", (Icallback)completed_cb);
IupShow(dlg);
END_SUB
MAIN
BEGIN_FUNCTION
IupOpen(0, 0);
WebBrowserTest();
IupMainLoop();
IupClose();
RETURN_FUNCTION(EXIT_SUCCESS);
END_FUNCTION