In this lesson we want to make a new window with an INPUT SCREEN FORM and a Google Map window to display any streets, cities, zip codes or countries.
Example:
DATABASE FORMONLY SCREEN { Street: [mx1 ] City: [mx2 ] Zipcode: [mx3 ] Country: [mx4 ] } ATTRIBUTES mx1 = FORMONLY.street; mx2 = FORMONLY.city; mx3 = FORMONLY.postalcode; mx4 = FORMONLY.country;
Save it as e.g.: “googlemaps.per”.
Create a new file “googlemaps.4gl” and create a new window for our API.
DEFINE street CHAR(255), city CHAR(255), postalcode CHAR(50), country CHAR(255) MAIN CALL ui.Interface.LoadStyles(”default”) CALL ui.Interface.loadActionDefaults(”defaultactions”) OPEN WINDOW w_1_1 WITH FORM “googlemaps” CALL ui.Interface.setText(”Google Maps”) DISPLAY BY NAME street, city, postalcode, country MENU “Navigation” COMMAND “Edit” CALL new() COMMAND “Search” CALL googlemaps(street CLIPPED, city CLIPPED, postalcode CLIPPED, country CLIPPED) COMMAND “Exit” EXIT MENU CLOSE WINDOW w_1_1 END MENU # create display forms from m_maps.per DISPLAY BY NAME street, city, postalcode, country END MAIN FUNCTION new() INPUT BY NAME street, city, postalcode, country END INPUT END FUNCTION
We have now created a window with a function that makes “Street”,”City”, “Zpcode” and “Country” editable.
If you click “Search” then the function “googlemaps()” will be called.
Your screen form should now look like this:
The next step is creating a new file named “googemaps_show.4gl” to process the input.
FUNCTION googlemaps(str, city, plz, nr_country) DEFINE url CHAR(500), cnt SMALLINT, str CHAR(100), city CHAR(50), plz CHAR(50), nr_country CHAR(50), param_street CHAR(100), param_city CHAR(50), param_cntry CHAR(50), param_postcode CHAR(10) # Define parameter for the url LET param_street = “street=” LET param_city = “city=” LET param_cntry = “country=” LET param_postcode = “postcode=” LET cnt = “0″ LET url = “http://www.ventas.de/vdc/vdcmap.php?” #Remove the Backslashes and set a & behind the word IF str IS NOT NULL THEN LET url = url CLIPPED, param_street CLIPPED, str CLIPPED LET cnt = “1″ END IF IF city IS NOT NULL THEN IF cnt = “1″ THEN LET url = url CLIPPED, “&” END IF LET url = url CLIPPED, param_city CLIPPED, city CLIPPED LET cnt = 1 END IF IF plz IS NOT NULL THEN IF cnt = “1″ THEN LET url = url CLIPPED, “&” END IF LET url = url CLIPPED, param_postcode CLIPPED, plz CLIPPED LET cnt = “1″ END IF IF nr_country IS NOT NULL THEN IF cnt = “1″ THEN LET url = url CLIPPED, “&” END IF LET url = url, param_cntry CLIPPED, nr_country CLIPPED LET cnt = “1″ END IF # Create a new Window and Display the Google Map API OPEN WINDOW w_1_2 WITH FORM “googlemaps” CALL ui.Interface.setText(”Google Maps API”) DISPLAY BY NAME url MENU “Google Maps” COMMAND “exit” EXIT MENU END MENU CLOSE WINDOW w_1_2 END FUNCTION
This example source code can be compiled with “4glpc mainwindow.4gl googlemaps.4gl -o google.4ae”.
The “Main Window” must be linked to run this source or create a new window! And now we need a new SCREEN FORM to display the Google output. Create a new file called “googlemaps_show.per”
DATABASE im_ex LAYOUT VBOX GRID { [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] [b ] } END END ATTRIBUTES Browser b = FORMONLY.url; INSTRUCTIONS DELIMITERS ” ”
You can compile this SCREEN FORM with “fcompile -xml googlemaps.per” and see the result below:
To send the input to the Google Webserver we need a new file named “googleapi.php” with javascript as its program language.
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”><html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta http-equiv=”content-type” content=”text/html; “/> <title>VENTAS DESKTOP CLIENT MAP</title> <script src=”http://maps.google.com/maps?file=api&v=2&key=” type=”text/javascript”> <script src=”http://maps.google.com/maps?file=api&v=2&key=” type=”text/javascript”> <script src=”http://www.google.com/uds/api?file=uds.js&v=1.0&key=” type=”text/javascript”> <script type=”text/javascript”> var localSearch = new GlocalSearch(); var map; var icon = new GIcon(); icon.image = “http://www.google.com/mapfiles/marker.png”; icon.shadow = “http://www.google.com/mapfiles/shadow50.png”; icon.iconSize = new GSize(20, 34); icon.shadowSize = new GSize(37, 34); icon.iconAnchor = new GPoint(10, 34); function callback() { if (localSearch.results[0]) { var resultLat = localSearch.results[0].lat; var resultLng = localSearch.results[0].lng; var point = new GLatLng(resultLat,resultLng); map.setCenter(point, 13); var marker = new GMarker(point,icon); map.addOverlay(marker); } else { var point = new GLatLng(0,0); map.setCenter(point, 20); } } function executeSearch(searchstring) { localSearch.setSearchCompleteCallback(null,callback) localSearch.execute(searchstring); } function load() { if (GBrowserIsCompatible()) { map= new GMap2(document.getElementById(”map”)); map.addControl(new GLargeMapControl()); <?php $searchstring .= $_GET["street"]; $searchstring .= ” “; $searchstring .= $_GET["city"]; $searchstring .= ” “; $searchstring .= $_GET["postcode"]; $searchstring .= ” “; $searchstring .= $_GET["country"]; echo “executeSearch(\”". $searchstring .”\”);”; ?> } } </script> </head> <body bgcolor=”#edeceb” onload=”load()” onunload=”GUnload()” style=”margin-top: 0px; margin-left: 0px;”> <div id=”map” style=”width: 800px; height: 600px; margin-left: 0px; margin-top: 0px;”>Please Wait…</div> </body> </html>
Now we have made all our needed files and you can upload the googleapi.php to your web server.
If you have uploaded this file please edit the following line in the googlemaps_show.php:
LET url = “yourdomain.com/googleapi.php?”
Congratulations, you have completed this example! Good work!