From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,e8f2e7be91b49aa8,start X-Google-Attributes: gid103376,public From: Simon Johnston Subject: Getting started with AppletMagic Date: 1996/05/01 Message-ID: <199605011329.OAA08057@jerry.rb.icl.co.uk> X-Deja-AN: 152417879 sender: Ada programming language priority: normal comments: cc: stt@dsd.camb.inmet.com organization: ICL Retail Systems reply-to: skj@acm.org newsgroups: comp.lang.ada x-mailer: Pegasus Mail for Windows (v2.30) Date: 1996-05-01T00:00:00+00:00 List-Id: I am interested in using the AppletMagic compiler and have had a look through the demos etc. but now need to get going on something real. I have taken a simple but complete applet, a ticker text, and removed some of its more obscure features to get a small simple example. I now need to start on the Ada version. I started by running java2ada ticker.class which provided me a useful package spec, but how do I return the array of from getParameterInfo? and how come java2ada creates subprogram specs for init_ticker and new_ticker? I know there are example applets in the distribution but I still don't see answers to all the questions. Can we have an Ada Applet page somewhere, either Intermetrics, HBAP or the SigAda web-ada homepage where people can either add or link to applets written in Ada (preferably in source). import java.awt.*; import java.lang.*; import java.net.*; import java.util.*; public class ticker extends java.applet.Applet implements Runnable { private String message; private Font messageF; private int messageX; private int messageY; private int messageW = 0; private int speed; private Thread t = null; private boolean active = false; private Color txtCo; private Color bgCo; private Dimension lastS = new Dimension(1,1); private Image im = null; private Graphics gr = null; public void init () { message = getStringParameter("msg", "No Message?"); speed = getIntegerParameter("speed", 10); txtCo = getColorParameter("txtco", Color.black); bgCo = getColorParameter("bgco", getBackground()); } /** Parameter Info. */ public String[][] getParameterInfo() { String[][] info = { {"msg", "String", "Message to display"}, {"speed", "int", "animation speed in pixels (10)"}, {"txtco", "int[3]", "RGB-Color of Message (black)"}, {"bgco", "int[3]", "RGB-Color of background (getBackground)"}, }; return info; } /** Applet Info. */ public String getAppletInfo() { return "SimpleTicker.java - skj@acm.org"; } /** Show the stuff, call update */ public void paint(Graphics g) { update(g); } /** Show the stuff */ public synchronized void update(Graphics g) { // Recalc params, if something has changed if ((size().height != lastS.height) || (size().width != lastS.width)) { createParams(); } // fill area with bgcolor gr.setColor(bgCo); gr.fillRect(0,0,lastS.width,lastS.height); // draw the text gr.setColor(txtCo); gr.setFont(messageF); gr.drawString(message, messageX, messageY); // finally show all together on the screen g.drawImage(im,0,0,this); } /** calc next position of message and call repaint */ public synchronized void nextPos() { // decrement position messageX -= speed; // and stay in the bounds if ((messageX + messageW) < 0) { messageX = lastS.width; } // indirectly call update repaint(); } /** Run the loop. This method is called by class Thread. */ public void run() { // others might be more important Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while (active) { // do the job nextPos(); // pause try {Thread.sleep(100);} catch (InterruptedException e){ } } } /** Start the applet by forking an animation thread. */ public void start() { if (!active) { t = new Thread(this); active = true; t.start(); } } /** Stop the applet. The thread will exit because run() exits. */ public void stop() { active = false; t = null; // give GC a chance. } /** * retrieve a parameter from the .html file, with * a default value if the parameter does not exist. */ private String getStringParameter(String ParamName, String aDefault) { String ParamString = getParameter(ParamName); if (ParamString == null) { return aDefault; } return ParamString; } /** * retrieve a parameter from the .html file, with * a default value if the parameter does not exist. */ private int getIntegerParameter(String ParamName, int aDefault) { String ParamString = getParameter(ParamName); int anInt; if (ParamString == null) { return aDefault; } try { anInt = Integer.valueOf(ParamString).intValue(); } catch (Exception e) { return aDefault; } return anInt; } /** * Convert a ","-delimited String with RGB-Values to Color * Uses aDefault, if no or not enough RGB-Values */ private Color getColorParameter(String ParamName, Color aDefault) { String ParamString = getParameter(ParamName); if (ParamString == null) { return aDefault; } int r, g, b; StringTokenizer st = new StringTokenizer(ParamString, ","); try { r = Integer.valueOf(st.nextToken()).intValue(); g = Integer.valueOf(st.nextToken()).intValue(); b = Integer.valueOf(st.nextToken()).intValue(); } catch (Exception e) { return aDefault; } return new Color(r,g,b); } /** * Create the image Parameters. * Called, if just created or size has changed */ private void createParams() { // Init some constants int w = size().width; int h = size().height; lastS.width = w; lastS.height = h; // dispose old buffer etc. if (gr != null) { gr.finalize(); } if (im != null) { im = null; } // Calc the font and positions. Message must fit applets area. int refH = 14; Font tf = new Font("TimesRoman", Font.BOLD, refH); setFont(tf); FontMetrics tfm = getFontMetrics(tf); int fh = tfm.getHeight(); fh = refH*(h-10)/fh; messageF = new Font("TimesRoman", Font.BOLD, fh); FontMetrics fm = getFontMetrics(messageF); fh = fm.getHeight(); messageX = w; messageY = ((h-fh) >> 1)+fm.getAscent(); messageW = fm.stringWidth(message); im = createImage(w, h); gr = im.getGraphics(); } } with StandardDisclaimer; use StandardDisclaimer; package Sig is --,-------------------------------------------------------------------------. --|Simon K. Johnston - Development Engineer (C++/Ada95) |ICL Retail Systems | --|-----------------------------------------------------|3/4 Willoughby Road| --|Unix Mail: skj@acm.org |Bracknell | --|Telephone: +44 (0)1344 476320 Fax: +44 (0)1344 476302|Berkshire | --|Internal : 7261 6320 OP Mail: S.K.Johnston@BRA0801 |RG12 8TJ | --|WWW URL : http://www.acm.org/~skj/ |United Kingdom | --`-------------------------------------------------------------------------' end Sig;