import com.sun.kjava.*; import java.io.*; /** Test program which accesses Palm Address Book in a Read Only *Fashion. * * This program brings up a viewing area showing one address book entry at a * time in a scrolling text box. There are three buttons at the bottom of * the screen, a next, previous, and * exit button. */ public class AddrView extends Spotlet { // the single Graphics object Graphics g = Graphics.getGraphics(); // our buttons private static Button exitButton; private static Button nextButton; private static Button previousButton; // the database we are looking at private Database db; // a record from the database byte[] record; // we will convert the byte array into a DataInputStream, so input will // be more straightforward ByteArrayInputStream byteIn; DataInputStream dataIn; // scrolling box to hold our output BasicScrollTextBox scrollText; // the current record index int currentAddressIndex = 0; // An Address Record from the Address book AddressRecord addressRecord = new AddressRecord(); /** Start the spotlet */ public static void main(String[] args) { (new AddrView()).register(NO_EVENT_OPTIONS); } /** Create the Spotlet */ public AddrView() { // initialize the gui components scrollText = new BasicScrollTextBox("", 5, 15, 150, 125); exitButton = new Button("Exit",139,145); nextButton = new Button("Next",50,145); previousButton = new Button("Previous",2,145); previousButton.setEnabled(false); g.clearScreen(); exitButton.paint(); nextButton.paint(); previousButton.paint(); // open the database db = new Database(convertTypeToInt("DATA"), convertTypeToInt("addr"), Database.READONLY); if (!db.isOpen()) { scrollText.setText("Couldn't open Database"); } else if (db.getNumberOfRecords() > 0) { readAddressRecord(currentAddressIndex); // set the text to the scrolling output scrollText.setText(addressRecord.toCompressedFormattedString()); } else if (db.getNumberOfRecords() == 0) { scrollText.setText("Address Book is empty..."); nextButton.setEnabled(false); nextButton.paint(); } else if (db.getNumberOfRecords() == 1) { nextButton.setEnabled(false); } // paint the screen g.clearScreen(); g.drawString(" Palm Address Book Record " + (currentAddressIndex + 1) + " of " + db.getNumberOfRecords() + " ", 10, 0, Graphics.INVERT); exitButton.paint(); previousButton.paint(); scrollText.paint(); nextButton.paint(); } /** Read a single address record from the database. * @param index the index of the record to be read */ protected void readAddressRecord(int index) { // read the record record = db.getRecord(index); // convert it into a DataInputStream byteIn = new ByteArrayInputStream(record, 0, record.length); dataIn = new DataInputStream(byteIn); // now read the data into the AddressRecord try { //translates the body of the record addressRecord.readData(dataIn); dataIn.close(); } catch (IOException ioe) { scrollText.setText("ERROR: Unable to read record " + index + "..."); } } /** Convert a four character string to it's byte values */ public int convertTypeToInt(String type) { byte[] b = type.getBytes(); return ((int)b[0])*(256*256*256)+ ((int)b[1])*(256*256)+ ((int)b[2])*(256)+ ((int)b[3]); } /** * Draw the screen */ private void paint() { g.clearScreen(); // Draw GUI controls and buttons exitButton.paint(); nextButton.paint(); previousButton.paint(); scrollText.paint(); } /** * Handle a pen down event. */ public void penMove(int x, int y) { if (scrollText.contains(x,y)) { scrollText.handlePenMove(x,y); } } /** * Handle a pen down event. */ public void penDown(int x, int y) { // exit button if (exitButton.pressed(x,y)) { System.exit(0); // user wants to scroll text } else if (scrollText.contains(x,y)) { scrollText.handlePenDown(x,y); // next button pressed } else if (nextButton.pressed(x,y)) { // read the next record readAddressRecord(++currentAddressIndex); // update buttons based on where we are in the database if (currentAddressIndex == db.getNumberOfRecords() - 1) { nextButton.setEnabled(false); nextButton.paint(); } else if (!previousButton.isEnabled()) { previousButton.setEnabled(true); previousButton.paint(); } scrollText.setText(addressRecord.toCompressedFormattedString()); scrollText.paint(); g.drawString(" Palm Address Book Record " + (currentAddressIndex + 1) + " of " + db.getNumberOfRecords() + " ", 10, 0, Graphics.INVERT); // next button pressed } else if (previousButton.pressed(x,y)) { // read the previous record readAddressRecord(--currentAddressIndex); // update buttons based on where we are in the database if (currentAddressIndex == 0) { previousButton.setEnabled(false); previousButton.paint(); } else if (!nextButton.isEnabled()) { nextButton.setEnabled(true); nextButton.paint(); } scrollText.setText(addressRecord.toCompressedFormattedString()); scrollText.paint(); g.drawString(" Palm Address Book Record " + (currentAddressIndex + 1) + " of " + db.getNumberOfRecords() + " ", 10, 0, Graphics.INVERT); } } }