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 >
Wrap
C/C++ Source or Header
|
1992-02-27
|
8KB
|
290 lines
// This may look like C code, but it is really -*- C++ -*-
// Module : AddressView.C Version 1.6
// LastSCCS : 7/29/91 18:00:06
// LastEdit : "Wed Jul 17 11:06:15 1991"
// Description :
// Author : Andreas Baecker, F3.MMK
// Copyright : GMD Schloss Birlinghoven
#include "AddressView.h"
#include <Gina/GnText.h>
#include <Gina/GnLabelG.h>
#include "Address.h"
char *DateToString(const Date *date, Boolean free_it = False )
{
char *str = new char[30];
sprintf(str, "%2u/%2u/%4u", (unsigned)date->month(),
(unsigned)date->day(), (unsigned)date->year());
if(free_it)
delete date;
return str;
}
AddressView::AddressView(Address *an_address)
{
address = an_address ? (Address *)an_address->deepCopy() : 0;
modified = False;
value_changed_callback = 0;
call_callbacks = True;
editable = False;
}
void AddressView::
SetValues()
{
GnWidget::SetValues();
last_name.SetValues();
first_names.SetValues();
street.SetValues();
house_number.SetValues();
country_code.SetValues();
city_code.SetValues();
city.SetValues();
local_area.SetValues();
telephone.SetValues();
email.SetValues();
creation_date.SetValues();
last_modified.SetValues();
}
void AddressView::
setR_editable(Boolean edit_mode)
{
editable = edit_mode;
last_name.setR_editable(editable);
first_names.setR_editable(editable);
street.setR_editable(editable);
house_number.setR_editable(editable);
country_code.setR_editable(editable);
city_code.setR_editable(editable);
city.setR_editable(editable);
local_area.setR_editable(editable);
telephone.setR_editable(editable);
email.setR_editable(editable);
}
void AddressView::
Show(Address *an_address)
{
if(address)
delete address;
if( an_address ) {
address = (Address *)an_address->deepCopy();
} else {
address = 0;
}
//call_callbacks = False;
Update();
call_callbacks = True;
modified = False;
}
Address *AddressView::
Get()
{
return address ? (Address *)address->deepCopy() : 0;
}
void AddressView::
Update()
{
// Update only if children are created
if( address ) {
// String defines operator const char*()
last_name.setR_value(*address->LastName());
first_names.setR_value(*address->FirstNames());
street.setR_value(*address->Street());
house_number.setR_value(*address->HouseNumber());
country_code.setR_value(*address->CountryCode());
city_code.setR_value(*address->CityCode());
city.setR_value(*address->City());
local_area.setR_value(*address->LocalArea());
telephone.setR_value(*address->Telephone());
email.setR_value(*address->Email());
creation_date.setR_value(DateToString(address->CreationDate()));
last_modified.setR_value(DateToString(address->LastModified()));
} else {
last_name.setR_value("");
first_names.setR_value("");
street.setR_value("");
house_number.setR_value("");
country_code.setR_value("Germany");
city_code.setR_value("");
city.setR_value("");
local_area.setR_value("");
telephone.setR_value("");
email.setR_value("");
creation_date.setR_value(DateToString(new Date(), True));
last_modified.setR_value(DateToString(new Date(), True));
}
if( last_name.get_widget_id() ) {
SetValues();
XmProcessTraversal(first_names.get_widget_id(), XmTRAVERSE_CURRENT);
}
}
void AddressView::
add_value_changed_callback(GnCallback *callback)
{
Require(value_changed_callback == 0);
value_changed_callback = callback;
}
void AddressView::
value_changed(caddr_t)
{
Address *a;
if( call_callbacks && editable ) {
a = new Address(new String(last_name.get_string()),
new String(first_names.get_string()),
new String(street.get_string()),
new String(house_number.get_string()),
new String(country_code.get_string()),
new String(city_code.get_string()),
new String(city.get_string()),
new String(local_area.get_string()),
new String(telephone.get_string()),
new String(email.get_string()),
address ? (Date *)address->CreationDate()->deepCopy()
: new Date(),
new Date(), new Integer(0), False);
if( address )
delete address;
address = a;
address->printOn();
if(value_changed_callback)
value_changed_callback->evaluate((caddr_t)address->deepCopy());
}
}
void AddressView::
before_create()
{
setR_orientation(XmVERTICAL);
if( ! editable )
setR_editable(False);
}
void AddressView::
after_create()
{
GnRowColumn *first_name_row = new GnRowColumn;
first_name_row->setR_orientation(XmHORIZONTAL);
first_name_row->create(this, "nameRow");
first_names_text.setR_labelString("First names ");
first_names_text.create(first_name_row, "firstNamesText");
first_names.create(first_name_row, "firstNames");
first_names.add_activateCallback(CALLBACK(AddressView,value_changed,this));
GnRowColumn *last_name_row = new GnRowColumn;
last_name_row->setR_orientation(XmHORIZONTAL);
last_name_row->create(this, "nameRow");
last_name_text.setR_labelString("Name ");
last_name_text.create(last_name_row, "lastNameText");
last_name.create(last_name_row, "lastName");
last_name.add_activateCallback(CALLBACK(AddressView,value_changed,this));
GnRowColumn *street_row = new GnRowColumn;
street_row->setR_orientation(XmHORIZONTAL);
street_row->create(this, "streetRow");
street_text.setR_labelString("Street ");
street_text.create(street_row, "streetText");
street.create(street_row, "street");
street.add_activateCallback(CALLBACK(AddressView,value_changed,this));
house_number.create(street_row, "houseNumber");
house_number.add_activateCallback(CALLBACK(AddressView,value_changed,this));
GnRowColumn *city_row = new GnRowColumn;
city_row->setR_orientation(XmHORIZONTAL);
city_row->create(this, "cityRow");
city_code_text.setR_labelString("City ");
city_code_text.create(city_row, "cityText");
city_code.create(city_row, "cityCode");
city_code.add_activateCallback(CALLBACK(AddressView,value_changed,this));
city.create(city_row, "city");
city.add_activateCallback(CALLBACK(AddressView, value_changed, this));
local_area.create(city_row, "localArea");
local_area.add_activateCallback(CALLBACK(AddressView,value_changed,this));
GnRowColumn *country_code_row = new GnRowColumn;
country_code_row->setR_orientation(XmHORIZONTAL);
country_code_row->create(this, "countryCodeRow");
country_code_text.setR_labelString("Country ");
country_code_text.create(country_code_row, "countryCodeText");
country_code.create(country_code_row, "countryCode");
country_code.add_activateCallback(CALLBACK(AddressView,value_changed,this));
GnSeparator *sep = new GnSeparator;
sep->setR_orientation(XmHORIZONTAL);
sep->create(this, "seperator");
GnRowColumn *telephone_row = new GnRowColumn;
telephone_row->setR_orientation(XmHORIZONTAL);
telephone_row->create(this, "telephoneRow");
telephone_text.setR_labelString("Phone ");
telephone_text.create(telephone_row, "telephoneText");
telephone.create(telephone_row, "telephone");
telephone.add_activateCallback(CALLBACK(AddressView,value_changed,this));
GnRowColumn *email_row = new GnRowColumn;
email_row->setR_orientation(XmHORIZONTAL);
email_row->create(this, "emailRow");
email_text.setR_labelString("Email ");
email_text.create(email_row, "emailText");
email.create(email_row, "email");
email.add_activateCallback(CALLBACK(AddressView,value_changed,this));
sep = new GnSeparator;
sep->setR_orientation(XmHORIZONTAL);
sep->create(this, "seperator");
GnRowColumn *date_row = new GnRowColumn;
date_row->setR_orientation(XmHORIZONTAL);
date_row->create(this, "dateRow");
creation_date_label.setR_labelString("Created ");
creation_date_label.create(date_row, "creationDateLabel");
creation_date.create(date_row, "creationDate");
last_modified_label.setR_labelString(" Last modified");
last_modified_label.create(date_row, "lastModifiedLabel");
last_modified.create(date_row, "lastModified");
Update();
}