List of commands that generate history items
============================================

insert_account
  undo: account should not contain any records at this point
        detach_account (set, account);  
  redo: need to know account info that was used to create the account
	attach_account (set, account);	
  
delete_account
  undo: need to insert back the account + any records that it contained
	attach_account (set, account);
  redo: instead of deleting the account, we simply detach it (ie. unlink it)
	detach_account (set, account);

update_account_info
  undo:
  	set_account_info (account, old_info); 
	sort_accounts (set);
  redo:
  	set_account_info (account, new_info);
	sort_accounts (set);

insert_record
  undo: 
  	detach_record (account, record);
  redo:
  	attach_record (account, record);

delete_record
  undo:
  	attach_record (account, record);
  redo:
  	detach_record (account, record);

update_record_info
  undo:
  	detach_record (account, record);
  	set_record_info (record, old_info);
	attach_record (account, record);
  redo:
  	detach_record (account, record);
  	set_record_info (record, new_info);
	attach_record (account, record);

insert_type
  undo:
  	detach_type (set, type);
  redo:
  	attach_type (set, type);

delete_type
  can only delete a type if it is unreferenced
  undo:
  	attach_type (set, type);
  redo:
  	detach_type (set, type);

update_type_info
  can only change the linked field of a type if it is unreferenced
  undo:
  	set_type_info (type, old_info);
	force_compliance (set, type);
  redo:
  	set_type_info (type, new_info);
	force_compliance (set, type);
