home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / g / gina15.zip / demos / AddressView.C < prev    next >
C/C++ Source or Header  |  1992-02-27  |  8KB  |  290 lines

  1. // This may look like C code, but it is really -*- C++ -*-
  2.  
  3. //   Module      : AddressView.C   Version 1.6
  4. //   LastSCCS    : 7/29/91  18:00:06
  5. //   LastEdit    : "Wed Jul 17 11:06:15 1991"
  6. //   Description : 
  7. //   Author      : Andreas Baecker, F3.MMK
  8. //   Copyright   : GMD Schloss Birlinghoven
  9.  
  10. #include "AddressView.h"
  11.  
  12. #include <Gina/GnText.h>
  13. #include <Gina/GnLabelG.h>
  14.  
  15. #include "Address.h"
  16.  
  17. char *DateToString(const Date *date, Boolean free_it = False )
  18. {
  19.     char *str = new char[30];
  20.     sprintf(str, "%2u/%2u/%4u", (unsigned)date->month(),
  21.         (unsigned)date->day(), (unsigned)date->year());
  22.     if(free_it)
  23.     delete date;
  24.     return str;
  25. }
  26.  
  27. AddressView::AddressView(Address *an_address)
  28. {
  29.     address = an_address ? (Address *)an_address->deepCopy() : 0;
  30.     modified = False;
  31.     value_changed_callback = 0;
  32.     call_callbacks = True;
  33.     editable = False;
  34. }
  35.  
  36. void AddressView::
  37. SetValues()
  38. {
  39.     GnWidget::SetValues();
  40.     last_name.SetValues();
  41.     first_names.SetValues();
  42.     street.SetValues();
  43.     house_number.SetValues();
  44.     country_code.SetValues();
  45.     city_code.SetValues();
  46.     city.SetValues();
  47.     local_area.SetValues();
  48.     telephone.SetValues();
  49.     email.SetValues();
  50.     creation_date.SetValues();
  51.     last_modified.SetValues();
  52. }
  53.  
  54. void AddressView::
  55. setR_editable(Boolean edit_mode)
  56. {
  57.     editable = edit_mode;
  58.     
  59.     last_name.setR_editable(editable);
  60.     first_names.setR_editable(editable);
  61.     street.setR_editable(editable);
  62.     house_number.setR_editable(editable);
  63.     country_code.setR_editable(editable);
  64.     city_code.setR_editable(editable);
  65.     city.setR_editable(editable);
  66.     local_area.setR_editable(editable);
  67.     telephone.setR_editable(editable);
  68.     email.setR_editable(editable);
  69. }
  70.  
  71. void AddressView::
  72. Show(Address *an_address)
  73. {
  74.     if(address) 
  75.     delete address;
  76.     if( an_address ) {
  77.     address = (Address *)an_address->deepCopy();
  78.     } else {
  79.     address = 0;
  80.     }
  81.     //call_callbacks = False;
  82.     Update();
  83.     call_callbacks = True;
  84.     modified = False;
  85. }
  86.  
  87. Address *AddressView::
  88. Get()
  89. {
  90.     return address ? (Address *)address->deepCopy() : 0;
  91. }
  92.  
  93. void AddressView::
  94. Update()
  95. {
  96.     // Update only if children are created
  97.     if( address ) {
  98.     // String defines operator const char*()
  99.     last_name.setR_value(*address->LastName());
  100.     first_names.setR_value(*address->FirstNames());
  101.     street.setR_value(*address->Street());
  102.     house_number.setR_value(*address->HouseNumber());
  103.     country_code.setR_value(*address->CountryCode());
  104.     city_code.setR_value(*address->CityCode());
  105.     city.setR_value(*address->City());
  106.     local_area.setR_value(*address->LocalArea());
  107.     telephone.setR_value(*address->Telephone());
  108.     email.setR_value(*address->Email());
  109.     creation_date.setR_value(DateToString(address->CreationDate()));
  110.     last_modified.setR_value(DateToString(address->LastModified()));
  111.     } else {
  112.     last_name.setR_value("");
  113.     first_names.setR_value("");
  114.     street.setR_value("");
  115.     house_number.setR_value("");
  116.     country_code.setR_value("Germany");
  117.     city_code.setR_value("");
  118.     city.setR_value("");
  119.     local_area.setR_value("");
  120.     telephone.setR_value("");
  121.     email.setR_value("");
  122.  
  123.     creation_date.setR_value(DateToString(new Date(), True));
  124.     last_modified.setR_value(DateToString(new Date(), True));
  125.     }
  126.     if( last_name.get_widget_id() ) {
  127.     SetValues();
  128.     XmProcessTraversal(first_names.get_widget_id(), XmTRAVERSE_CURRENT);
  129.     }
  130. }
  131.  
  132. void AddressView::
  133. add_value_changed_callback(GnCallback *callback)
  134. {
  135.     Require(value_changed_callback == 0);
  136.  
  137.     value_changed_callback = callback;
  138. }
  139.  
  140. void AddressView::
  141. value_changed(caddr_t)
  142. {
  143.     Address *a;
  144.  
  145.     if( call_callbacks && editable ) {
  146.     a = new Address(new String(last_name.get_string()),
  147.             new String(first_names.get_string()),
  148.             new String(street.get_string()),
  149.             new String(house_number.get_string()),
  150.             new String(country_code.get_string()),
  151.             new String(city_code.get_string()),
  152.             new String(city.get_string()),
  153.             new String(local_area.get_string()),
  154.             new String(telephone.get_string()),
  155.             new String(email.get_string()),
  156.             address ? (Date *)address->CreationDate()->deepCopy()
  157.             : new Date(),
  158.             new Date(), new Integer(0), False);
  159.     if( address )
  160.         delete address;
  161.  
  162.     address = a;
  163.  
  164.     address->printOn();
  165.  
  166.     if(value_changed_callback)
  167.         value_changed_callback->evaluate((caddr_t)address->deepCopy());
  168.     }
  169. }
  170.  
  171. void AddressView::
  172. before_create()
  173. {
  174.     setR_orientation(XmVERTICAL);
  175.     if( ! editable )
  176.     setR_editable(False);
  177. }
  178.  
  179. void AddressView::
  180. after_create()
  181. {
  182.     GnRowColumn *first_name_row = new GnRowColumn;
  183.     first_name_row->setR_orientation(XmHORIZONTAL);
  184.     first_name_row->create(this, "nameRow");
  185.  
  186.     first_names_text.setR_labelString("First names ");
  187.     first_names_text.create(first_name_row, "firstNamesText");
  188.     
  189.     first_names.create(first_name_row, "firstNames");
  190.     first_names.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  191.  
  192.     GnRowColumn *last_name_row = new GnRowColumn;
  193.     last_name_row->setR_orientation(XmHORIZONTAL);
  194.     last_name_row->create(this, "nameRow");
  195.  
  196.     last_name_text.setR_labelString("Name        ");
  197.     last_name_text.create(last_name_row, "lastNameText");
  198.     
  199.     last_name.create(last_name_row, "lastName");
  200.     last_name.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  201.  
  202.     GnRowColumn *street_row = new GnRowColumn;
  203.     street_row->setR_orientation(XmHORIZONTAL);
  204.     street_row->create(this, "streetRow");
  205.  
  206.     street_text.setR_labelString("Street      ");
  207.     street_text.create(street_row, "streetText");
  208.  
  209.     street.create(street_row, "street");
  210.     street.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  211.  
  212.     house_number.create(street_row, "houseNumber");
  213.     house_number.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  214.  
  215.     GnRowColumn *city_row  = new GnRowColumn;
  216.     city_row->setR_orientation(XmHORIZONTAL);
  217.     city_row->create(this, "cityRow");
  218.  
  219.     city_code_text.setR_labelString("City        ");
  220.     city_code_text.create(city_row, "cityText");
  221.     
  222.     city_code.create(city_row, "cityCode");
  223.     city_code.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  224.  
  225.     city.create(city_row, "city");
  226.     city.add_activateCallback(CALLBACK(AddressView, value_changed, this));
  227.  
  228.     local_area.create(city_row, "localArea");
  229.     local_area.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  230.  
  231.     GnRowColumn *country_code_row = new GnRowColumn;
  232.     country_code_row->setR_orientation(XmHORIZONTAL);
  233.     country_code_row->create(this, "countryCodeRow");
  234.  
  235.     country_code_text.setR_labelString("Country     ");
  236.     country_code_text.create(country_code_row, "countryCodeText");
  237.     
  238.     country_code.create(country_code_row, "countryCode");
  239.     country_code.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  240.  
  241.     GnSeparator *sep = new GnSeparator;
  242.     sep->setR_orientation(XmHORIZONTAL);
  243.     sep->create(this, "seperator");
  244.     
  245.     GnRowColumn *telephone_row = new GnRowColumn;
  246.     telephone_row->setR_orientation(XmHORIZONTAL);
  247.     telephone_row->create(this, "telephoneRow");
  248.  
  249.     telephone_text.setR_labelString("Phone       ");
  250.     telephone_text.create(telephone_row, "telephoneText");
  251.     
  252.     telephone.create(telephone_row, "telephone");
  253.     telephone.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  254.  
  255.     GnRowColumn *email_row = new GnRowColumn;
  256.     email_row->setR_orientation(XmHORIZONTAL);
  257.     email_row->create(this, "emailRow");
  258.  
  259.     email_text.setR_labelString("Email       ");
  260.     email_text.create(email_row, "emailText");
  261.     
  262.     email.create(email_row, "email");
  263.     email.add_activateCallback(CALLBACK(AddressView,value_changed,this));
  264.  
  265.     sep = new GnSeparator;
  266.     sep->setR_orientation(XmHORIZONTAL);
  267.     sep->create(this, "seperator");
  268.     
  269.     GnRowColumn *date_row = new GnRowColumn;
  270.     date_row->setR_orientation(XmHORIZONTAL);
  271.     date_row->create(this, "dateRow");
  272.     
  273.     creation_date_label.setR_labelString("Created     ");
  274.     creation_date_label.create(date_row, "creationDateLabel");
  275.     
  276.     creation_date.create(date_row, "creationDate");
  277.  
  278.     last_modified_label.setR_labelString("  Last modified");
  279.     last_modified_label.create(date_row, "lastModifiedLabel");
  280.     
  281.     last_modified.create(date_row, "lastModified");
  282.  
  283.     Update();
  284. }
  285.  
  286.  
  287.  
  288.  
  289.  
  290.