Listing 4: Data object classes

import java.awt.*;
import Yes_no_radio_dlg;
import TextField_dlg;
     
abstract class Data_object {
    public String descr_str,display_str;
    int display_length;

    Data_object (String the_descr_str,int length) {
        descr_str = the_descr_str;
        display_length = length; 
    }
     
    public String get_value_str() {
        return (String)null; }
     
    public String get_display_str () {
        StringBuffer sb = new StringBuffer();
        sb.append(descr_str).append(": ").append(get_value_str());
        return sb.toString(); 
    }
    
    public void get_new_value(Frame parent) {}
} // end class
     
// Define specific data object types here. In addition to the ones 
// shown here, may want to define text_object, int_object, 
// color_object, etc.
class Float_object extends Data_object {
    public float value;

    Float_object (float the_value, String the_descr_str, 
      int length) {
        super(the_descr_str,length);
        value = the_value;  
    }
     
    public void get_new_value (Frame parent) {
        Float_dlg fl_dlg = 
            new Float_dlg(parent, descr_str,
                "Edit " + descr_str + ":", value, display_length);
        if (fl_dlg.execute()) // True if user hits 'OK'
            value = fl_dlg.get_value();
        fl_dlg.dispose();    
    }
     
    public float get_value() { return value; }
     
    public String get_value_str() {
        return Float.toString(value);   }
} // end class
     
class Boolean_object extends Data_object {
    public boolean value;

    Boolean_object (boolean the_value, String the_descr_str) {
        super(the_descr_str,3);
        value = the_value; 
    }
     
    public void get_new_value (Frame parent) {
        Yes_no_radio_dlg  bool_dlg = 
            new Yes_no_radio_dlg(parent, descr_str,
                "Edit " + descr_str + ":", value);
        if (bool_dlg.execute()) // True if user hits 'OK'
            value = bool_dlg.get_state();
        bool_dlg.dispose();   
    }
     
    public boolean get_value() { return value;      }
     
    public String get_value_str() {
        if (value) return "Yes";
            return "No"; }
}  // end class
     
class Filename_object extends Data_object {
  public String value, init_dir;

  Filename_object (String the_value,
    String the_descr_str, String the_init_dir) {
      super(the_descr_str,10);
      value = the_value;
      init_dir = the_init_dir; 
    }
     
    public void get_new_value (Frame parent) {
        FileDialog file_dlg = new FileDialog (parent,descr_str,0);
        file_dlg.setDirectory(init_dir);
        file_dlg.setFile(value);
        file_dlg.show();
        if (file_dlg.getFile() != null) // Cancelled
            value = file_dlg.getDirectory() + file_dlg.getFile();
        init_dir = file_dlg.getDirectory();
        file_dlg.dispose(); 
    }
     
    public String get_value() { return value; }
     
    public String get_value_str() { return value; }
}  // end class
     
class Multiple_data_object {
    public int data_type;
    public Object the_object;
    final static int FLOAT_DATA = 1;
    final static int BOOLEAN_DATA = 2;
    final static int PATH_DATA = 3;
    // Add other data types here: TEXT_DATA, INT_DATA, etc.

    Multiple_data_object (float value, String descr, int length) {
        data_type = FLOAT_DATA;
        the_object = new Float_object(value,descr,length);
    }
     
    Multiple_data_object (boolean value,String descr) {
        data_type = BOOLEAN_DATA;
        the_object = new Boolean_object(value,descr);   
    }
     
    Multiple_data_object (String value,String descr, 
      String init_dir) {
        data_type = PATH_DATA;
        the_object = new Filename_object(value, descr, init_dir);
    }
     
    public String get_value_str () {
        switch (data_type){
            case FLOAT_DATA:
                return ((Float_object)the_object).get_value_str();
            case BOOLEAN_DATA:
                return 
                    ((Boolean_object)the_object).get_value_str();
            case PATH_DATA:
                return 
                    ((Filename_object)the_object).get_value_str();
        } // end switch
        return "Data type not valid";
    }   // end method
     
    public void get_new_value (Frame parent) {
        switch (data_type){
            case FLOAT_DATA:
                ((Float_object)the_object).get_new_value(parent);
                return;
            case BOOLEAN_DATA:
                ((Boolean_object)the_object).
                    get_new_value(parent);
                return;
            case PATH_DATA:
                ((Filename_object)the_object).
                    get_new_value(parent);
                return; 
        }
        return; 
    }
     
    public String get_display_str () {
        switch (data_type){
            case FLOAT_DATA:
                return 
                    ((Float_object)the_object).get_display_str();
            case BOOLEAN_DATA:
                return ((Boolean_object)the_object).
                    get_display_str();
            case PATH_DATA:
                return ((Filename_object)the_object).
                    get_display_str();
         }
         return "Data type not valid"; 
    }  // end method
}  // end class
//EOF