Package Gnumed :: Package wxpython :: Module gmPersonContactWidgets
[frames] | no frames]

Source Code for Module Gnumed.wxpython.gmPersonContactWidgets

  1  """Widgets dealing with address/contact information.""" 
  2  #============================================================ 
  3  __author__ = "R.Terry, SJ Tan, I Haywood, Carlos Moro <cfmoro1976@yahoo.es>" 
  4  __license__ = 'GPL v2 or later (details at http://www.gnu.org)' 
  5   
  6  # standard library 
  7  import sys, logging 
  8   
  9   
 10  import wx 
 11   
 12   
 13  # GNUmed specific 
 14  if __name__ == '__main__': 
 15          sys.path.insert(0, '../../') 
 16  from Gnumed.pycommon import gmTools 
 17  from Gnumed.wxpython import gmGuiHelpers 
 18  from Gnumed.wxpython import gmListWidgets 
 19  from Gnumed.wxpython import gmEditArea 
 20  from Gnumed.wxpython import gmAddressWidgets 
 21   
 22   
 23  # constant defs 
 24  _log = logging.getLogger('gm.ui') 
 25   
 26   
 27  try: 
 28          _('dummy-no-need-to-translate-but-make-epydoc-happy') 
 29  except NameError: 
 30          _ = lambda x:x 
 31   
 32  #============================================================ 
33 -def select_address(missing=None, person=None):
34 35 #-------------------------- 36 def calculate_tooltip(adr): 37 return u'\n'.join(adr.format())
38 #-------------------------- 39 addresses = person.get_addresses() 40 if len(addresses) == 0: 41 return None 42 43 msg = _( 44 'There is no [%s] address registered with this patient.\n\n' 45 'Please select the address you would like to use instead:' 46 ) % missing 47 choices = [ 48 [ 49 a['l10n_address_type'], 50 u'%s %s%s, %s %s, %s' % ( 51 a['street'], 52 a['number'], 53 gmTools.coalesce(a['subunit'], u'', u'/%s'), 54 a['postcode'], 55 a['urb'], 56 a['l10n_country'] 57 ) 58 ] 59 for a in addresses ] 60 61 return gmListWidgets.get_choices_from_list ( 62 msg = msg, 63 caption = _('Selecting address by type'), 64 columns = [_('Type'), _('Address')], 65 choices = choices, 66 data = addresses, 67 single_selection = True, 68 list_tooltip_callback = calculate_tooltip 69 ) 70 #============================================================
71 -class cPersonAddressesManagerPnl(gmListWidgets.cGenericListManagerPnl):
72 """A list for managing a person's addresses. 73 74 Does NOT act on/listen to the current patient. 75 """
76 - def __init__(self, *args, **kwargs):
77 78 try: 79 self.__identity = kwargs['identity'] 80 del kwargs['identity'] 81 except KeyError: 82 self.__identity = None 83 84 gmListWidgets.cGenericListManagerPnl.__init__(self, *args, **kwargs) 85 86 self.new_callback = self._add_address 87 self.edit_callback = self._edit_address 88 self.delete_callback = self._del_address 89 self.refresh_callback = self.refresh 90 91 self.__init_ui() 92 self.refresh()
93 #-------------------------------------------------------- 94 # external API 95 #--------------------------------------------------------
96 - def refresh(self, *args, **kwargs):
97 if self.__identity is None: 98 self._LCTRL_items.set_string_items() 99 return 100 101 adrs = self.__identity.get_addresses() 102 self._LCTRL_items.set_string_items ( 103 items = [ [ 104 a['l10n_address_type'], 105 a['street'], 106 gmTools.coalesce(a['notes_street'], u''), 107 a['number'], 108 gmTools.coalesce(a['subunit'], u''), 109 a['postcode'], 110 a['urb'], 111 gmTools.coalesce(a['suburb'], u''), 112 a['l10n_state'], 113 a['l10n_country'], 114 gmTools.coalesce(a['notes_subunit'], u'') 115 ] for a in adrs 116 ] 117 ) 118 self._LCTRL_items.set_column_widths() 119 self._LCTRL_items.set_data(data = adrs)
120 #-------------------------------------------------------- 121 # internal helpers 122 #--------------------------------------------------------
123 - def __init_ui(self):
124 self.__static_tooltip_part = _('List of addresses related to this person.') 125 self._LCTRL_items.item_tooltip_callback = self._calculate_tooltip 126 self._LCTRL_items.set_columns(columns = [ 127 _('Type'), 128 _('Street'), 129 _('Street info'), 130 _('Number'), 131 _('Subunit'), 132 _('Postal code'), 133 _('Community'), 134 _('Suburb'), 135 _('Region'), 136 _('Country'), 137 _('Comment') 138 ])
139 #--------------------------------------------------------
140 - def _add_address(self):
141 ea = gmAddressWidgets.cAddressEAPnl(self, -1) 142 ea.address_holder = self.__identity 143 dlg = gmEditArea.cGenericEditAreaDlg2(self, -1, edit_area = ea) 144 dlg.SetTitle(_('Adding new address')) 145 if dlg.ShowModal() == wx.ID_OK: 146 return True 147 return False
148 #--------------------------------------------------------
149 - def _edit_address(self, address):
150 ea = gmAddressWidgets.cAddressEAPnl(self, -1, address = address) 151 ea.address_holder = self.__identity 152 dlg = gmEditArea.cGenericEditAreaDlg2(self, -1, edit_area = ea) 153 dlg.SetTitle(_('Editing address')) 154 if dlg.ShowModal() == wx.ID_OK: 155 # did we add an entirely new address ? 156 # if so then unlink the old one as implied by "edit" 157 if ea.address['pk_address'] != address['pk_address']: 158 self.__identity.unlink_address(address = address) 159 return True 160 return False
161 #--------------------------------------------------------
162 - def _del_address(self, address):
163 go_ahead = gmGuiHelpers.gm_show_question ( 164 _( 'Are you sure you want to remove this\n' 165 "address from the patient's addresses ?\n" 166 '\n' 167 'The address itself will not be deleted\n' 168 'but it will no longer be associated with\n' 169 'this patient.' 170 ), 171 _('Removing address') 172 ) 173 if not go_ahead: 174 return False 175 self.__identity.unlink_address(address = address) 176 return True
177 #--------------------------------------------------------
178 - def _calculate_tooltip(self, address):
179 tt = u'\n'.join(address.format()) 180 tt += u'\n' 181 tt += u'%s\n' % (gmTools.u_box_horiz_single * 40) 182 tt += self.__static_tooltip_part 183 return tt
184 #-------------------------------------------------------- 185 # properties 186 #--------------------------------------------------------
187 - def _get_identity(self):
188 return self.__identity
189
190 - def _set_identity(self, identity):
191 self.__identity = identity 192 self.refresh()
193 194 identity = property(_get_identity, _set_identity)
195 196 #------------------------------------------------------------ 197 from Gnumed.wxGladeWidgets import wxgPersonContactsManagerPnl 198
199 -class cPersonContactsManagerPnl(wxgPersonContactsManagerPnl.wxgPersonContactsManagerPnl):
200 """A panel for editing contact data for a person. 201 202 - provides access to: 203 - addresses 204 - communication paths 205 206 Does NOT act on/listen to the current patient. 207 """
208 - def __init__(self, *args, **kwargs):
209 210 wxgPersonContactsManagerPnl.wxgPersonContactsManagerPnl.__init__(self, *args, **kwargs) 211 212 self.__identity = None 213 self.refresh()
214 #-------------------------------------------------------- 215 # external API 216 #--------------------------------------------------------
217 - def refresh(self):
218 self._PNL_addresses.identity = self.__identity 219 self._PNL_comms.channel_owner = self.__identity
220 #-------------------------------------------------------- 221 # properties 222 #--------------------------------------------------------
223 - def _get_identity(self):
224 return self.__identity
225
226 - def _set_identity(self, identity):
227 self.__identity = identity 228 self.refresh()
229 230 identity = property(_get_identity, _set_identity)
231 232 #============================================================ 233 if __name__ == "__main__": 234 235 if len(sys.argv) < 2: 236 sys.exit() 237 238 if sys.argv[1] != 'test': 239 sys.exit() 240 241 from Gnumed.pycommon import gmI18N, gmPG2 242 243 gmI18N.activate_locale() 244 gmI18N.install_domain(domain='gnumed') 245 gmPG2.get_connection() 246 247 #--------------------------------------------------------
248 - def test_person_adrs_pnl():
249 app = wx.PyWidgetTester(size = (600, 400)) 250 widget = cPersonAddressesManagerPnl(app.frame, -1) 251 widget.identity = activate_patient() 252 app.frame.Show(True) 253 app.MainLoop()
254 #--------------------------------------------------------
255 - def test_pat_contacts_pnl():
256 app = wx.PyWidgetTester(size = (600, 400)) 257 widget = cPersonContactsManagerPnl(app.frame, -1) 258 widget.identity = activate_patient() 259 app.frame.Show(True) 260 app.MainLoop()
261 #-------------------------------------------------------- 262 #test_pat_contacts_pnl() 263 #test_person_adrs_pnl() 264 265 #============================================================ 266